How VSCode Language Detection Works?
VSCode version 1.60 introduced a new feature to detect the programming language of a file based on its content. This functionality is beneficial for developers. But how is it implemented?
OverviewThe language detection feature is based on a machine learning model trained by guesslang.
To run models in the node/browser, the VSCode team uses Tensorflow.js. They load the pre-trained model and encapsulated it into the vscode-languagedetection package.
Moreover, to further enhance the precision ...
非暴力沟通 - 读书笔记
《非暴力沟通》是一本非常有用的书,它给了我很多启发。我在读完之后,决定将书中的一些重要内容记录下来方便日后查阅。我非常推荐你去读一读这本书,它会让你对人际沟通有一个全新的认识。
这是一本关于人际沟通的书,它教会我们如何用一种更加有效的方式与他人沟通,以及如何更好地理解他人的需求和情感。
译序我曾以为,我的一生将致力于对生命的痛苦作出反应。后来,我发现,这过于沉重、过于灰暗。如果我只看到痛苦,我的心难免会被乌云所笼罩,被绝望所吞没。在徘徊中,终于有一天,我发现,我的人生可以对生命的美丽作出反应。
第一章 让爱融入生活非暴力沟通的要素为了彼此能乐于互助,我们专注于四个方面——非暴力沟通模式的四个要素。
首先,留意发生的事情。我们此刻观察到什么?不管是否喜欢,只是说出人们所做的事情。要点是,清楚地表达观察结果,而不判断或评估。接着,表达感受,例如受伤、害怕、喜悦、开心、气愤等等。然后,说出哪些需要导致那样的感受。一旦用非暴力沟通诚实地表达自己,前三个要素就会得到体现。
举例来说,一位母亲可能对她处于青春期的儿子说:“费利克斯,看到咖啡桌下的两只脏袜子和电视机旁的三只,我不太高兴,因为我看 ...
使用 Cloudflare + Gmail 完成自定义域名邮箱收发
在开始之前当然需要有一个自定义域名,如果没有的话就去购买一个吧!
注意,这个方案使用了 Gmail 进行代发邮件,没有 DMIK 签名,并不是一个专业的自建邮箱方案,所以不适合用于发送重要的业务邮件。
收!使用 Cloudflare 转发自定义域名邮件
首先要把你的域名添加到 Cloudflare 中,可以在 Cloudflare dashboard 的 Website 中添加
添加完成之后进入这个网站的设置,可以看到侧栏有一个 Email。开启功能 Email Routing 功能,填上转发的目标邮箱然后确认就完成了,最重要的更新域名 DNS 的 MX 记录的部分 Cloudflare 会帮你完成。
邮件的路由规则可以自定义,大部分情况下用 catch-all 全部转发到你的常用邮箱就行了。
Gmail 有一个小技巧是你可以在你的账号后面写上「+来源」,系统会将发送到 example+source@gmail 的邮件全部递送至 example@gmail 中。利用过滤器,你可以使用这个技巧在 Gmail 中分类不同邮件。
发! 使用 Gmail 代发信需要注意,通过 SM ...
从 CRDT 到 Yjs
什么是 CRDT?CRDT(Conflict-Free Replicated Data Type,无冲突复制数据类型)是一种特殊的的数据结构,它能让多个可能没有实时网络连接的节点共享和修改的同一份数据。
每台客户端都有一份数据的复制,并且可以随时对其进行修改。当节点之间同步时,CRDT 可以自动合并这些修改并协调冲突,使每个节点上的数据保持一致。
CRDT 可以提供强最终一致性(strong eventual consistency),换句话说即使不同节点收到的更新顺序不同,只要节点都收到了相同的更新,它们的状态就能保持一致。
值得注意的是,CRDT 的协调冲突只能保证各个节点结果一致,不一定能够满足用户的需求。比如利用 CRDT 实现的编辑器的不同节点在 Y!中同时插入AT和A,最终的结果可能是YATA!或YAAT!的其中一种,但不会出现两个节点不一样的场景。
YjsYjs 是一个经典的 CRDT 的基础库,可以用于文本编辑器中自动处理多人同时编辑一处文本时遇到的冲突,保证各个客户端最终状态一致。并且它是一种基于操作(operation-based)的 CRDT,每次更新数据之后仅需 ...
【稀土掘金 2022 编程挑战赛】快速开发一个 VSCode 主题插件
偶然看到稀土掘金 2022 编程挑战赛,题目形式比较开放而且我近期刚好有空,因此决定和朋友一起开发一个 VSCode 主题插件。
本文涉及的项目源码已在 GitHub 开源,这篇文章也是在这个配色主题下完成的,插件配色效果如下:
新建项目通过简单的搜索,可以发现 VSCode 很贴心地给开发者提供了创建新主题的教程。
跟着教程创建一个新的项目
12345678910npm install -g yo generator-codeyo code# What type of extension do you want to create?# 选择创建颜色主题 `New Color Theme`# Do you want to import or convert an existing TextMate color theme?# 选择从头开始 `Start fresh`# 后续的配置选项可以根据自己的需要填写
这两行命令可以帮助我们快速创建一个新的插件项目,并且配置好开发所需的配置。其中比较重要的配置如下:
themes/xxxxx-color-theme.json 这个文件就是我们 ...
鹅罗斯方块参赛经验分享
背景介绍这是一篇 腾讯极客挑战赛第四期:鹅罗斯方块 的参赛经验分享。这个参赛的主要内容大致是玩俄罗斯方块,最后比较得分。但规则和普通俄罗斯方块有细微的差异。首先它的随机种子被固定了,方块落下的顺序是固定的(方块数量也固定了 10000 的上限),而且得分和消行时场地上存在的方块数量有关,在游戏中堆的方块越满,消除得分越高,相当于富贵险中求。
我从 SJoshua 口中得知这个挑战赛时比赛已经进行到了一半,原本由于工作日忙因此没打算参加这个比赛。但是周六的大雨打乱了我出门逛街的计划,因此我在吃完晚饭后临时起意,参加了这个挑战。而此时距离比赛结束仅剩一天。
本文涉及的完整代码可在这个 GitHub 仓库找到。代码的最后得分为 470544 分(非比赛得分)。
资料收集准备使用开发者工具查看源码后发现出题人贴心地给了注释完整的源码,尝试直接修改请求后提交成绩也可以注意到后台是有验证步骤的,因此基本可以断定这不是 CTF 题,是实打实的算法题。
所以这时的目标就变为寻找一个可用俄罗斯方块的算法了,在网上搜索之后可以注意到俄罗斯方块的算法主要有两种,一种是经典的 Pierre Dellache ...
前端的 GitHub Actions 简单实践
在 GitHub Actions 公测一年之后,我已经把它当作首选的 CI/CD 工具了,也迁移了一部分在 Travis CI 上的项目。借助 action 的扩展性和社区的力量,使用感受相当满意,不过也有不少坑和需要吐槽的地方。
这篇文档不会介绍 GitHub Actions 的基本概念和使用方法,因此并不适合没有使用过它的访客,如果你属于这类人,那么建议你先阅读 GitHub Actions 官方文档 并尝试使用。
首先最需要吐槽的一点是配置文件暂时不支持 yaml 的锚点引用。如果你没有精力将配置改为 action ,可能需要频繁复制配置片段。因此我将我常用的配置分为不同部分分别说明。
The Start这个部分会展示一个 GitHub 配置文件的基本部分。
1234567891011121314151617181920212223242526272829303132333435# 这里的名称会显示在对应 badge 上name: Buildon: # 注意:新创建的仓库主分支已经变为 `main`,需要根据情况修改 push: branches: [mast ...
Git 小贴士
说说 git 那些不常用,但是很实用的功能。
精确操作
git add -p 会逐个显示文件中的每组改动,并询问是否要加入 index
y: 放入 index
n: 不要放入 index
e: 手动编辑需要加入 index 的部分,常用来拆分一个改动块
使用这个命令可以在命令行中操作将一个文件的部分修改提交到暂存区。在想拆分 commit 的时候非常方便。
修改作者
git commit --amend --author="NAME <[email protected]>" --no-edit 修改上一次作者
修改提交时间git 可以通过环境变量更改提交时间哦
export GIT_COMMITTER_DATE=”Jan 11 17:11:18 2018 +0800”
export GIT_AUTHOR_DATE=”Jan 11 17:11:18 2018 +0800”
或者更直接一点
git commit –amend –date=`date -R`
fork 的项目与原作者同步看到 ...
Y Combinator
用 JS 从零推导 Y 组合子
前置知识Lambda Calculus如果你还不了解 Lambda 演算,可以先阅读 Good Math/Bad Math Lambda Calculus 的系列文章。
Lambda Calculus Syntax
Function definition
Identifier reference
Function application
为了降低理解门槛,我在以下使用 JS 的匿名函数语法,注意这和标准的 Lambda Calculus Syntax 有一定区别。
Lambda Calculus Evaluation Rules
Alpha Conversion
1234// 修改 lambda 表达式的参数和全部参照不会改变表达式的含义// 简单的说就是以下两个 lambda 表达式是相等的const f1 = (x) => x + x;const f2 = (y) => y + y;
Beta Reduction
123456789// 如果你有一个 function application(函数应用,在 JS 等价于 ...
Linux 备忘录
太久没碰 Linux ,上机后总是一脸懵逼,不知道该干啥,记录一下上机之后该做的几件事
环境确认上机第一件事应该确认机器的基本信息
uname -a cat /proc/version cat /etc/issue机器版本
w当前状态
cat /proc/cpuinfocpu信息
free内存信息
df磁盘信息
ifconfig网络信息
ps top进程信息
crontab -l less /etc/crontab定时任务
service --status-all systemctl服务
安全ssh关闭密码登录及端口修改
ssh-keygen -t rsa -b 4096生成密钥对
将自己公钥添加到~/.authorized_keys,并修改文件权限chmod 600 ~/.ssh/authorized_keys
12345678910111213141516# 编辑 sshd_config 文件vim /etc/ssh/sshd_config# 禁用密码验证PasswordAuthentication no# 启用密钥验证RSAAuthentication yesPubkeyA ...