警惕AI
警惕AI 2022年年底时,Chatgpt横空出世,让每个使用过它的人发出赞叹,大家都在提问各种问题,程序员可能是最早一匹去接触与尝试的群体了。大家都想看看这个小玩意儿能迸发出多大的力量,要是能帮我干活儿就好了。给我写代码!!!
但那时AI还像个小孩子,对于简单的问题能快速回答,但稍微复杂的问题,我们称之为一本正经的胡说八道的人工智障。但这并不影响我们非常看好它。再后来Github推出copilot以及一大堆AI提示工具,你第一句代码还没写完,AI就已经提示出你下一句话可能是什么。如果不对,你可以继续写原本的代码,它会根据新增的信息再去调整与生成。这用起来很方便,目前为止你的副驾驶有一位很棒的伙伴。
再后来的cursor,你更多的是像产品经理一样提出你的需求,它会尝试着自己去考虑所有的问题,并进行代码编写,很多简单的需求,或从零到一的小项目,几分钟后运行的结果如你想象一致,而这在过去可能会花上你半天甚至更长的时间。当然遇到大型,复杂项目它仍然会有各种问题,你知道它无法代替你,因为里面有很多内容是AI不清楚的,如架构,特定用法,DSL等等。但它已经足够棒了,如 ...
Ruby元编程实战
本文主要介绍一些元编程的使用技巧
Hash映射对象将Hash转成对象,键值对转成对象的方法,灵活的通过函数调用来获取值信息
module ActsAsField
def self.included(base_class)
base_class.instance_variable_set(:@all_fields, [])
# 一个常见的技巧,通过钩子函数,当模块引入时动态扩展
base_class.include Instance_Methods
base_class.extend Class_Methods
end
module Class_Methods
# 声明变量信息,并自动生成实例方法
def field(name, path)
instance_variable_get(:@all_fields) << name.to_sym
define_method(name.to_sym) do
case path
when String
...
RSpec 测试示例与技巧说明
RSpec 测试示例与技巧说明本文档整理了多个 RSpec 测试示例,并详细说明了每个示例中使用的技巧和代码示例。这些示例涵盖了常见的测试场景,包括基本断言、异常处理、状态变化、依赖注入、以及使用 spy 和 double 进行测试。
目录
基本断言
异常处理
状态变化
依赖注入与 double
使用 spy 进行测试
模拟日期和时间
基本断言示例代码RSpec.describe 'Assertion' do
describe 'expect equality' do
it do
foo = 1
expect(foo).to eq(1)
end
it do
foo = [1, 2, 3]
expect(foo).not_to equal([1, 2, 3])
end
end
describe 'expect Truthiness' do
it { expect(1 + 1 == 2).to be true }
end
describe 'match a ...
位运算 & (与)实际应用
疑问?
在linux系统中,我们经常使用chmod进行文件权限修改(读,写,执行)
比如我要对some.sh赋予权限: chmod u=rwx,g=rx,o=x some.sh
u=rwx:
u 表示文件所有者(user)。
rwx 表示读(r)、写(w)和执行(x)权限。
这意味着文件所有者将拥有读、写和执行权限。
g=rx:
g 表示文件所属组(group)。
rx 表示读(r)和执行(x)权限。
这意味着文件所属组将拥有读和执行权限,但没有写权限。
o=x:
o 表示其他用户(others)。
x 表示执行权限。
这意味着其他用户将只有执行权限,没有读和写权限。
可以看到我们分别对文件所属人,文件所属组,其他用户赋予了读,写,执行的权限,那这些信息实际存储是什么样子的呢?难道是一个数组?
u: [r, w, x], g: [r, x], o: [x]
这种看起来最直观,但有没有更优雅的方式,比如用一个数字就能表示所有的权限信息,u: 7, g: 5, o: 1,经常用这个命令的人知道,上述的写法可以使用chmod 751 some.sh直接表示
那为什么我通 ...
Zed动态查询
尝试过nvim的人应该都对telescope这种文件查询风格很喜欢,当在输入时能自动进行重新查询,并通过上下键进行翻阅
我目前在使用另一款编辑器Zed,它目前内置的查询并无法做到类似的操作。但通过内置的Terminal+fzf+bat+rg也能做到类似的效果
fish function
function search_and_edit
# 使用rg进行文件搜索,并使用fzf进行预览
set -l selected_file (rg --column --hidden --line-number --no-heading --color=always --smart-case --glob '!**/.git/' --glob '!**/node_modules/' . | fzf --ansi --delimiter : --preview 'bat --style=numbers,changes,header --color=always --highlight-line {2} {1}' --preview-windo ...
Electron分享
背景
我想开发一个桌面应用,可以记录任务待办,统计完成情况,计时器(番茄钟),系统通知等功能,其中前三点都可以通过Web开发完成,而系统通知功能(底层交互)无法满足。所以想在2024用最小的努力开发一个小APP。最好一次开发,跨端使用,在Windows和Mac上都能用。
最终我确定了Electron
结果分享:https://github.com/GengCen-Qin/tomato-todo
是什么?
官方文档
官方地址:https://www.electronjs.org/zh/docs/latest/tutorial/quick-start
Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。
简单来说就是:如果你会前端开发,通过Electron可以开发出跨平台应用。通过 Chromium(用于显示网页)和 Node ...
Promise异步学习
是什么?promise 是一个对象,它可能会在未来的某个时间产生一个值。并且你可以声明
未来获取到值时应该怎么做
如果出现异常怎么做
不论结果如何都要干的事情怎么来的?
回调是怎么回事儿?
article on callbacks错误使用
const getData = function() {
// go fetch data from some API...
// clean it up a bit and return it as an object:
return data
}
const myData = getData()
// 需要注意由于请求数据是异步操作,所以并不会等待获取到数据了,才执行下面这句话。
// 最终结果即使 myData 是undefine
const pieceOfData = myData['whatever']
正确使用
const myData = getData() // if this is refactored to return a Promise...
// 通过Fetch会返回一个Promise对象,我们告 ...
LSP探索
是什么官方定义:https://microsoft.github.io/language-server-protocol/overviews/lsp/overview/
为编程语言实现自动补全、定义跳转或在鼠标悬停时显示文档等功能的支持是一项重大工作。传统上,这项工作必须为每个开发工具重复进行,因为每个工具提供的实现相同功能的API都不同。
LSP的理念就是通过一种协议,与开发工具交流,实现功能。通过中间层,来做到一个语言服务器服务多个开发工具。
怎么用
意识就是开发工具会捕捉一个个事件点,与语言服务器进行交互,比如这里的:打开文档,编辑文档,用户执行定义跳转,关闭文档等。
可以具体看一下定义跳转的交互
请求:
{
"jsonrpc": "2.0",
"id" : 1,
"method": "textDocument/definition",
"params": {
"textDocument": {
"uri": "file:///p%3A/mseng/VSCode/Playgrou ...
SublimeText Web开发
SublimeText Web开发在2024随着LSP和AI发展的越来越完善,SublimeText也可通过各类插件享受到新的福利,最近尝试使用ST4(SublimeText4)作为主开发工具,体验上还是很爽的,所以想给想尝试的朋友一些推荐。
为什么不用Vscode,Jetbrains等主流IDE工具?
老实讲我感觉ST概念比较简单,很快,按钮少,但是功能上IDE肯定更全面,对新人更友善。每个人有自己在意的点,如果喜欢原先的开发工具也完全OK,目前我通过插件将ST改成了一个简略版IDE,对一些基础操作:git,sql,terminal,代码补全,定义/引用查找等功能已经集成的不错了,觉得ST是大家选择开发工具中的一个可选项。
Zed也很不错,不过还不太完善,所以感觉还等一段时间,很期待。
Plugins插件统一通过Package Control下载即可
主题视觉效果看着舒服是很重要的一个点,我目前尝试了:ayn,Material插件,感觉都不错,不过可能有些小细节,希望能自定义一下,比如注释代码的颜色,侧边栏字体大小,滚动块儿样式等等。
可以通过PackageResourceVie ...
Rails N+1
Rails N+1 问题是什么?# Get all posts
posts = Post.all
# For each post, a new author query will be triggered
posts.each do |post|
post.author.name
end
我先获取了所有的帖子,然后想知道每个帖子的作者名称,实际执行时相当于每个帖子都执行了一遍SQL查询这个帖子的作者信息。如果有1000个帖子,则会执行1000条SQL
在什么时候发生?当我们使用Rails的ORM框架操作聚合关系的操作,比如:has_many | belongs_to
这极大的影响了我的系统性能
如何解决?三种方式:Preload,includes,Eager load,joins
PreloadUser.preload(:posts).to_a
# =>
SELECT "users".* FROM "users"
SELECT "posts".* FROM "posts" WHERE "posts"."user_id" IN (1)
在默认情况下,includes也是这么 ...