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
# =>
# 查找所有user数据
SELECT "users".* FROM "users"
# 根据上面的users的所有id,再获取对应的posts缓存起来
SELECT "posts".* FROM "posts" WHER ...
Web Server & Application Server解惑
Web Server & Application Server解惑
参考文章与书籍
ruby网络编程
构建你自己的Web服务器
为什么我们需要Ruby中的应用服务器(比如Puma)?
rack探索
Puma 源代码分析
码农翻身2
如果你使用Java或Ruby开发过Web项目,你一定了解过Tomcat和Puma,他们本质上都是一种容器,具有监听端口,返回文件或动态内容的服务。但这样的表述有点儿抽象,SpringBoot 和 Rails 为什么不自己去做所有的事儿?而是需要在内部嵌入这么个玩意儿。我们从历史进程中一点点看。
Web服务器的历史版本1最初Web服务(Web Server)是一个很简单的玩意儿,在端口上监听,解析HTTP请求,把请求对应的文件返回。
实际上只要了解socket编程与HTTP网络协议,就能很简单的制作出一个玩具Web服务器。参考这篇文章:构建你自己的Web服务器。
版本2很常见的一个需求,鉴权操作。我需要通过解析请求,知道对方是谁,并从数据库中查询一下对方是否有权限,我们称为应用服务(Application Server)。
但是版本1中的服务不 ...
求上得中,换工作的小故事
求上得中,换工作的小故事转眼间在程序员这个行业已经工作一年多了,一年前我兴奋的写下:勇闯SAP失败,勇敢转行成功,现在结合这一年来发生的故事,想再写点儿有意思的事儿。
去年入职后,我在一家创业团队里负责java后端开发,工作中遇到的问题都感到新奇。每一天都过的充实开心,在业余时间也会经常看看书,比如: 《码农翻身》,《程序员的职业素养》之类的,我发现作者们都提到了一种优雅的编程语言:ruby,相信大部分人可能都不知道这个名字,而市面上主流的培训机构也没有这门语言的身影,从就业情况来看,在Boss直聘上西安使用它的公司仅有三四个。而使用java的公司已是成百上千。好吧,那看来学习它完全是在浪费时间。但能被这么多优秀的作者说起的语言,肯定不是一个无名之辈吧,我尝试着去了解它。
随着了解的越深,我越发现它的有趣性,但由于国内的资料少,便找来国外的资料教程学习,并翻译出来。发布在了RubyChina上(这是我们目前看到的国内最好的语言社区)。而随着这一路的探索,我也发现了很多意料之外的领域和知识。随着我在社区的活跃,也让很多人看到了我的文章。其中一位就是西安一家公司的大佬,邀请我去他们公司看看 ...
加密算法的演化过程
加密算法的演化过程阶段1(明文):A 和 B在网上聊天,但是双方完全使用明文的方式传输信息,那如果有一天,A问B要游戏账号和密码,B发送了过来,这时候信息一旦被第三个看到,信息直接泄露。
阶段2(对称加密):A 和 B商量一下,以后咱们说话,先通过一个工具加密一下,比如每个字母往后3位,等你收到了信息,再利用工具,把每个字母往前3位,这样就保证信息即便被人看到了,也不知道说什么这个也叫对称加密,即加密和解密来自于一个秘钥。但这里仍有个问题,这个加密解密方法(秘钥)怎么安全让对方知道,别人都知道咱们是怎么加密解密的了,那即使发送的加密信息也没用啊,除非A跑到B他们家,给出秘钥。但全球范围内的通讯,不能这么搞吧。
阶段3(非对称加密):A 和 B又发现了新方法,咱俩一人创建一个公钥和私钥,然后交换对方的公钥,这个公钥即使被人看到了也无所谓,当你要给我发消息时,你用我的公钥进行加密,然后发给我,我在我这里用自己的私钥再解密即可,这样私钥只在我一个人手上,就不担心信息泄露了。这也叫做非对称加密但是用了一段时间后,A和B都感觉和对称加密比起来,非对称加密太慢了,已经严重影响沟通了啊。
阶段4(加 ...
TDD In SpringBoot
参考资料:
文章讲解TDD
视频讲解TDD
测试驱动开发在项目中的实践
TDD的概述代码示例说明这里我根据github的代码,进行简要的说明和讲解,最后我们会自己来写一遍测试。从接口层开始编写测试,从上至下,从接口到数据访问的顺序编写测试Controller层测试@WebMvcTest(controllers = PokemonController.class)
@AutoConfigureMockMvc(addFilters = false)
@ExtendWith(MockitoExtension.class)
public class PokemonControllerTests {
@Autowired
private MockMvc mockMvc;
@MockBean
private PokemonService pokemonService;
@Autowired
private ObjectMapper objectMapper;
}
mockMvc:用来模拟HTTP请求
objectMa ...

