- 博客(71)
- 资源 (6)
- 收藏
- 关注
原创 支持 Win10 的网络环境模拟(丢包,延迟,带宽)
升级 Windows 10 以后,原来各种网络模拟软件都挂掉了,目前能用的就是只有 clumsy,唯一问题是不支持模拟带宽,那么平时要模拟一些糟糕的网络情况的话,是不太方便的,而开虚拟机用 Linux tc 或者设置个远程 linux 网关又很蛋疼,于是我顺便给他加了个带宽模拟功能:
2024-11-09 23:58:57
639
原创 56 行代码用 Python 实现一个类似 Flex/Lex 的词法分析器
作为 Yacc/Bison 的好搭档 Lex/Flex 是一个很方便的工具,可以通过写几行规则就能生成一个新的词法分析器,大到给你的 parser 提供 token 流,小到解析一个配置文件,都很有帮助;而用 Python 实现一个支持自定义规则的类 Flex/Lex 词法分析器只需要短短 56 行代码,简单拷贝粘贴到你的代码里,让你的代码具备基于可定制规则的词法分析功能。2)由上往下匹配规则;你如果代码里有一些简单的词法分析需求,把上面这个 56 行的函数拷贝过去就够了,真的不必引入什么其他的复杂依赖。
2024-11-09 21:08:49
628
原创 Python 中使用组合方式构建复杂正则
用手写直接写是很难写出这么复杂的正则的,写出来也很难调试,而组合方式构建正则的话,可以将小的简单正则提前测试好,要用的时候再组装起来,就不容易出错,上面就是组装替换后的结果。是用来表示长度的,里面都是数字,如果里面是变量名的话不会和原有规则冲突,因此这个写法是安全的。可以取完整结果,也可以按照规则名字,取得里面具体某个部件得匹配结果。比如输入一个字符串规则,可以使用。这下可以方便的写复杂正则表达式了。再 Python 的正则表达式里。完事,主要逻辑 84 行代码。
2024-11-08 22:53:39
244
原创 VSCode 有哪些让人眼前一亮的插件?
VSCode 里很多插件看着很好玩,但装上看一下你就不会再用了,还有些插件所有人都推过,一堆人推来推去还是那么几个,越看越无聊,因此再说这些也没什么意思,还不如直接看下载排行榜去。我选插件就一个标准:提升工作效率!分享几个我自己用的能让生活变得更容易的插件:1)Project Manager:用 vscode 经常在项目里切换来切换去,Open Directory 效率太低,命令行 code . 用着也不方便,这个 Project Manager 是解决这个痛点存在的:左上是项目收藏面板,点击 “软盘”
2024-11-08 16:29:00
1863
原创 Vim 超轻量级代码补全系统
4024 年了,应该尝试些新东西,这里介绍一个超级轻量级(169 行代码)的代码补全系统,针对:历史输入,字典,tags 等多个源提供类似 YouCompleteMe 的操作体验,并且无需安装各种后端的补全 LSP 服务器。语义补全是很爽,但有时候,当你用某些缺乏 LSP 支持的小众语言写代码时,或者你去到一台临时的服务器上工作时,你并不想花时间编译和设置一套复杂的补全系统。
2024-11-06 15:39:37
754
原创 Vim 实时代码格式化
大部分 IDE/编辑器 都有代码格式化的功能或者插件,但都需要你主动触发格式化命令,而且每次写很多代码在保存的时候一次性格式化,总会有种不放心的感觉,需要跳过头去检查。 有没有可能让我一边写一边实时格式化呢?这样每次我都能看到最终的效果。于是我写了个小脚本 vim-rt-format,再 INSERT 下面每次按回车就能自动格式化当前行:有了这个东西以后,写代码爽多了,释放注意力,完全专注于 “编码”,再也不用为 “格式化”这个事情花费额外的精力,变量名和运算符之间无需加空格,直接回车就自动变成干净清爽的代
2024-11-06 11:16:27
316
原创 不知不觉我开发的 vim 插件居然超过 20 个了
不知不觉发现我开发的 vim 插件居然超过 20 个了,也许有一款你会有兴趣: asyncrun - 🚀 多种方式运行 Shell 命令,比如后台异步、Vim 内置终端和系统外置终端等,能将输出捕获到 quickfix 窗口(比如编译器错误输出)。asynctasks - 移植 vscode 的任务系统到 Vim/NeoVim,可以方便的处理项目的构建、测试和部署,并提供独立 Python 脚本用于启动任务。gutentags_plus - 提供一个 :GscopeFind 命令,自动处理 cscope/
2024-11-05 21:25:25
528
原创 从大公司离职去小公司当 CTO 是一种怎样的体验?
这样的老板,对 CTO 的定位就是 “魔术师”,好像招聘到一个厉害的魔术师过来,再宏伟的需求,只要 CTO 够牛,最多几天时间,他都能把想要的东西给 “变” 出来。老板无法正确评估你的价值,东西出来后,技术做的好就是不出问题,老板看不到,看得到的时候就是出问题的时候了,好像每次赢得利润都是商务和运营的努力。每次发奖金和分红的时候,老板都会心理暗自嘀咕,“我靠,技术那么高的工资,原来一直跟着我干的那帮商务兄弟们才拿那么点,利润又是他们创造的,好可怜呀。技术成天没开发啥新功能,老的也做不好,上周才出一次事故。
2024-11-04 22:47:58
226
原创 程序员的新电脑到手后应该做哪些必要设置?
吃水果要剥皮,用 Windows 也一样,如果是 Win 10 的话,刚装完系统就需要屏蔽一些功能,才能更顺畅快速;国内用 Windows 就像骑着摩托飙高速,看着很爽,稍不留神就万劫不复。所以需要时刻留心,小心驶得万年船。
2024-11-03 17:57:17
387
原创 技术岗转管理岗会面临哪些问题?
程序员从技术岗被提拔进入管理角色,时常觉得对管理团队提不起兴趣,没有成就感,又不愿意轻易离开管理岗去做一线职位,做了几年管理岗发现业绩和薪酬都很难进一步提升,这其实是一个非常普遍得现象。因为从基层进入管理层,常会走入不少不容易发觉的误区,处理得好能否让自己职业生涯更进一步,而忽略了却容易让自己掉坑里。
2024-11-03 17:53:08
935
原创 基础优化-最不坏的哈希表
最终生成 cmov 的代码是没有分支的,实测新老 gcc,新版本 gcc 生成 cmov指令性能是没有用 cmov 的一倍以上,诸如此类的代码层的优化技巧我们尽量用起来,让这个阈值降低到 2-3 的时候,也就是说传统的有序链表操作已经没有优化余地了,但是通过降低 treeify 过程中再次分配内存的消耗,树维护的消耗,以及提高树的性能,可以把阈值从 8 降低到 4,再通过代码层的优化降低到 2-3,也就是说,将原来的链表(有序或者无序)换成平衡二叉树,这是复杂度最高的做法,同时也是最可靠的做法。
2024-11-02 00:40:47
654
原创 互联网技术比游戏后端技术领先十年吗?
最近时间线上又起了一场不大不小的论战,做互联网的人觉得游戏服务端发展很慢,同时互联网技术日新月异,似乎觉得互联网技术领先了游戏后端技术十年,这个结论显然是武断的,几位朋友也已经驳斥的很充分了,游戏服务端的同学实属没必要和这个互联网的人一般见识,本来就此打住也还挺好。但最近两天事情似乎正在悄悄起变化,时间线上一直看到不停的有人跳出来,清一色的全在说互联网简单,什么做个电商不过就是 CRUD 的话也出来了,看的我也大跌眼镜,过犹不及吧。今天更是又刷到有几位不管不顾就说什么游戏服务端领先互联网十年什么的,似乎这又
2024-11-02 00:34:33
676
原创 使用 LIBLR 解析带注释的 JSON
前文《基于 LR(1) 和 LALR 的 Parser Generator》里介绍了春节期间开发的小玩具 LIBLR ,今天春节最后一天,用它跑一个小例子,解析带注释的 json 文件。由于 python 自带 json 库不支持带注释的 json 解析,而 vscode 里大量带注释的 json 没法解析,所以我们先写个文法;有了文法,程序就很短了,50 多行足够,就是这么简单,大部分是在处理 json 的语义,写起来比 yacc/bison 流畅多了。
2024-11-01 01:35:27
329
原创 基于 LR(1) 和 LALR 的 Parser Generator
最近处理文本比较多,先前想增强下正则,看来不够用了,有同学推荐了我 Pyl 和 Lark,看了两眼,初看还行,但细看有一些不太喜欢的地方,于是刚好春节几天有空,从头写了一个 LR(1) / LALR 的 Generator,只有一个 LIBLR.py 的单文件,没有其它依赖:用法很简单,给定文法,返回 Parser;默认没有加 Semantic Action 的话,会返回一颗带注释的语法分析树(annotated parse-tree)。支持语义动作(Semantic Action),可以在生成式中用
2024-11-01 01:29:09
1010
原创 我在命令行下剪辑视频
是的,你不需要格式工厂,你也不需要会声会影,更不需要爱剪辑这些莫名其妙的流氓软件,命令行下视频处理,包括剪辑,转码,提取,合成,缩放,字幕,特效等等,全部命令行搞定,这不是疯狂,而是效率: MP4 转 GIF 很多社区可以发 MP4,但对桌面录屏这种十多二十秒的小短片远远没有 GIF 来的便捷,GIF 在很多软件里支持的也比 MP4 要广泛,转换命令为参数 -i 的指明输入文件 "in.mp4" ,-an 代表禁用音频,-c:v 的意思是指定视频编码为 gif,最后是输出文件名。
2024-10-31 21:43:49
1399
原创 我在命令行下学日语
同一个动作重复 300 遍,肌肉就会有记忆,重复 600 遍,脊柱就会有记忆,学完五十音图不熟练,经常遗忘或者要好几秒才想得起来一个怎么办?没关系,我做了个命令行下的小游戏。用来告诉你哪些假名你很熟练,但是哪些你还是不够熟悉,需要多加练习,这样,在终端里工作累了,可以随时挑战一下,发现自己的不足,同时每天能看得到自己的进步。理论上看到每个假名你至少 1 秒以内要能反应出它的读音才行,当然越快越好,所以成绩报表里,一秒钟是绿色,颜色越浅代表越熟练,反之代表越生疏。随时查看你的历史成绩,了解自己的进步。
2024-10-31 21:24:32
505
原创 别被忽悠了 Lua 数组真的也可以从 0 开始索引?
先前我说 Lua 数组从 1 开始不太爽,很多人来纠正我说也可以从 0 开始,比如:local m = { [0] = 100, 101, 102, 103 } 然后访问时 m[0] 也可以正常访问到第 0 个元素,所以 “Lua 给你充分自由度,让你可以从任意下标索引数组”,貌似好像说的很有道理,但是不是这样呢?
2024-10-30 22:40:36
538
1
原创 为什么 C 语言数组是从 0 开始计数的?
C 语言等大多数编程语言的数组从 0 开始而不从 1 开始,有两个原因: 第一:地址计算更方便 C 语言从 0 开始的话,array[i] 的地址就正好是: 如果是从 1 开始的话,就是 多一次计算
2024-10-30 22:28:35
1436
1
原创 WSL 服务自动启动的正确方法
网上有很多 WSL 自动启动服务的方法,但是都有些大大小小的问题,很多又是针对最老的 ubuntu16.04 发行版(输入 bash启动哪个),你如用商店里下载的最新的 WSL 版本 Debian9/Ubuntu18.04 就会出错。,但没必要塞很多东西进去影响你的启动速度,比如 mysql/mongodb 这些重度服务,可以需要的时候再启动,用完就停了。启动我们的服务了,如果你用的是 ubuntu18.04 的发行版,那么修改上面脚本里的 debian 为。WSL 中有很多有用的服务,你可以按需删改。
2024-10-29 16:04:33
566
原创 SSH 命令的三种代理功能(-L/-R/-D)
ssh 命令除了登陆外还有三种代理功能: 正向代理(-L):相当于 iptable 的 port forwarding 反向代理(-R):相当于 frp 或者 ngrok socks5 代理(-D):相当于 ss/ssr;如要长期高效的服务,应使用对应的专用软件。如没法安装软件,比如当你处在限制环境下想要访问下某个不可达到的目标,或者某个临时需求,那么 ssh 就是你的兜底方案。
2024-10-29 15:12:37
1258
原创 如何实现和优化 SVM(支持向量机)?
学习 SVM 的最好方法是实现一个 SVM,可讲理论的很多,讲实现的太少了。假设你已经读懂了 SVM 的原理,并了解公式怎么推导出来的,比如到这里:SVM 的问题就变成:求解一系列满足约束的 alpha 值,使得上面那个函数可以取到最小值。然后记录下这些非零的 alpha 值和对应样本中的 x 值和 y 值,就完成学习了,然后预测的时候用:上面的公式计算出 f(x) ,如果返回值 > 0 那么是 +1 类别,否则是 -1 类别,先把这一步怎么来的,为什么这么来找篇文章读懂,不然你会做的一头雾水。
2024-10-29 14:36:11
1511
2
原创 kNN 的花式用法(原来还能这么玩 kNN)
kNN (k-nearest neighbors)作为一个入门级模型,因为既简单又可靠,对非线性问题支持良好,虽然需要保存所有样本,但是仍然活跃在各个领域中,并提供比较稳健的识别结果。 说到这里也许你会讲,kNN 我知道啊,不就是在特征空间中找出最靠近测试样本的 k 个训练样本,然后判断大多数属于某一个类别,那么将它识别为该类别。这就是书上/网络上大部分介绍 kNN 的说辞,如果仅仅如此,我也不用写这篇文章了。事实上,kNN 用的好,它真能用出一朵花来,越是基础的东西越值得我们好好玩玩,不是么?
2024-10-27 23:04:23
1088
原创 为什么说 zsh 是 shell 中的极品?
为什么说 zsh 是 shell 中的极品?选几个点简单介绍下: 色彩高亮 并不是传统基于正则表达式的色彩高亮,而是真的会判断你输入的是啥的色彩高亮: 白色代表普通命令或者程序,红色代表错误命令,这个很管用,你再一个个字母的敲命令,前面都是红色的,如果敲对了最后一个字母的话,你会看到整条命令连着前面的都变成了白色,代表你敲对了。以前无高亮的时候敲错了都不知道,还要往上翻着左右检查。下面青色的代表内建命令或者 alias (echo 和 ls ),这些都不是正则判断出来的,是真的去检查的。
2024-10-27 09:20:12
882
原创 有哪些命令行的软件堪称神器?
发几个好玩的玩具给大家周末玩玩:⚡ cppman:C++ 98/11/14 手册查询 for Linux/MacOS 我知道你在 Windows 下有 Zeal ,你在 Mac OS X 用 Dash,但是你想在服务器上或者任意命令行环境下查看 C/C++ 语言手册么?偶尔看别人代码里调用到一个冷僻的 libc 函数(比如 strpbrk这种),网页搜索太慢,运行 zeal/dash 麻烦,想在命令行直接查看帮助怎么办?这是个台湾小伙写的工具,使用很简单,跟 man一样,命令行输入:
2024-10-27 01:02:11
1037
原创 Emake:你见过最简单的 C/C++ 构建工具
虽然 cmake 以及是跨团对协同事实上的标准了,对于内部中小项目,非正式个人练手项目,或者非发布阶段的开发过程,是否也需要上 cmake 呢?还真不一定,一旦不用 cover 整个宇宙的构建需求,我们大可以找一个趁手的二号构建工具,满足平时使用。那么哪个二号构建工具值得推荐呢?我从 2009 年开发了一个叫做 emake 的构建工具,就是一个 emake.py 的单一脚本,持续使用并陆陆续续迭代了 15 年,今天感觉可以让他出来走两步。
2024-10-26 22:12:10
765
原创 GDB 从裸奔到穿戴整齐
无数次被问道:你在终端下怎么调试更高效?或者怎么在 Vim 里调试?好吧,今天统一回答下,我从来不在 vim 里调试,因为它还不成熟。那除了命令行 GDB 裸奔以外,终端下还有没有更高效的方法?能够让我事半功倍?当然有,选择恰当的工具和方法,让 GDB 调试效率成倍的提升并没有任何问题。当然,前提条件是你至少会在使用最原始的 GDB。
2024-10-26 12:10:49
694
原创 新版瑞士军刀:socat
我在《用好你的瑞士军刀:netcat》中介绍过 nc 和它的几个实现(bsd, gnu, nmap),netcat 还有一个最重要的变种 socat (socket cat),值得花一篇完整的文章介绍一下,它不仅语义统一,功能灵活,除了完成 nc 能完成的所有任务外,还有很多实用的用法:使用 socat 需要提供两个地址,然后 socat 做的事情就是把这两个地址的数据流串起来,把第左边地址的输出数据传给右边,同时又把右边输出的数据传到左边。就会对接标准输入和标准输出,你键盘敲什么屏幕上就显示什么。
2024-10-25 15:52:44
1160
原创 用好你的瑞士军刀/netcat
Netcat 号称 TCP/IP 的瑞士军刀并非浪得虚名,以体积小(可执行 200KB)功能灵活而著称,在各大发行版中都默认安装,你可以用它来做很多网络相关的工作,熟练使用它可以不依靠其他工具做一些很有用的事情。最初作者是叫做“霍比特人”的网友 Hobbit。
2024-10-24 09:17:44
752
原创 别让 cd 浪费你的时间
终端下工作最烦躁的就是路径切换,没有自动路径切换的帮助,就像在泥里走路,z.lua是一个会学习你使用习惯的cd命令,它会跟踪你在 shell 下访问过的路径,通过一套称为 Frecent 的机制(源自 Mozilla),经过一段简短的学习之后,z.lua会帮你跳转到所有匹配正则关键字的路径里 Frecent 值最高的那条路径去。正则将按顺序进行匹配,“z foo bar” 可以匹配到 /foo/bar ,但是不能匹配 /bar/foo。
2024-10-23 10:57:12
1188
原创 十行代码实现命令行书签
路径书签/别名,用来给目录取个名字,要用时快速跳转,它不是用来代替:z.lua / z.sh / autojump 这类第一梯队的 cd 辅助工具的,而是作为他们的一个补充。pm list我又看了好几个书签软件,都大同小异,又难用,实现又啰嗦,这玩意儿居然写出 500 行以上的代码来,真是匪夷所思。所以我打算用十行代码实现一个更优雅的书签功能。
2024-10-22 13:53:26
826
原创 视频编码原理简介
要彻底理解视频编码原理,看书都是虚的,需要实际动手,实现一个简单的视频编码器:知识准备:基本图像处理知识,信号的时域和频域问题,熟练掌握傅立叶正反变换,一维、二维傅立叶变换,以及其变种,dct变换,快速dct变换。
2024-10-21 23:22:21
1210
原创 如何写一个视频编码器演示篇
先前写过《视频编码原理简介》,有朋友问光代码和文字不太真切,能否补充几张图片,今天我们演示一下:这是第一帧画面:P1(我们的参考帧)
2024-10-21 23:21:17
960
原创 千万别混淆 Bash/Zsh 的四种运行模式
Bash/Zsh 有四种不同运行模式,你的 bash 配置写错地方的话,不但会拖慢 bash 的速度,还会发生明明写了登陆配置但是就是没生效的情况。
2024-10-21 16:42:15
884
原创 Nano 编辑器可以做些什么?
终端下如果你不喜欢 Vim/Emacs 的话,Nano 是一个不错的选择,它是一个真正意义上的跨平台编辑器,基本上在所有 Linux 发行版上都默认自带 Nano,并且有 Windows 版本。不少初学 Linux 都很喜欢用 Nano,但是我发现他们很多都是在裸用,既没配置,也一直在用一些比较低效的操作方法。
2024-10-21 16:07:41
651
原创 再谈网游同步技术
根据游戏类型,选择恰当的同步方式和传输协议是最基础的问题,很多讲述网络同步的文章一般就是只会强调上述那么多种算法的其中一种方式,好像使用该方式就可以 hold 住所有游戏一样的,其实并非如此。技术需要多和策划沟通,别策划一个需求下来,技术就来一句:无法实现,这样的游戏永远没有竞争力。就像国内当时都是慢节奏 RPG,偶尔有点 ARPG 的时候,大家觉得《DNF》这样的游戏无法实现,于是韩国实现了,在市场上取得了先机,国内才慢慢跟进,再一看,哇塞,好多坑呢。
2024-10-19 18:09:00
1087
原创 提高效率从编写 init.sh 开始
有部分人不太愿意定制自己的终端配置,因为:“服务器太多,怎么可能每台都去定制,所以都用默认配置,习惯了就好”。其实道理很简单,算笔账就清楚了,除非你是 SA 每天管理上千台服务器,程序员的话,每天接触的开发服务器也就五台以内。既然 90% 的利益都在那三五台机器上,还在纠结 10% 的事情,这就叫不明智。还有人担心这 10% 的时间偶尔到裸环境下不适应了,所以拒绝 90% 的时间使用高级配置。这是我听过最荒谬的理由,我天天自己开车上下班,偶尔骑下自行车我也不会忘记怎么骑车。
2024-10-18 22:39:08
634
原创 二十年前是怎样开发游戏的?
知乎上有人问:“贴吧都是十五六岁就用引擎写游戏的天才,大家怎么看?”,感觉现在做游戏真实一件幸福的事情呀,不尽想起当年开发游戏的各种艰辛。现在做游戏很简单,大把代码给你参考,大把框架给你使用,Windows帮你作完了大部分事情。我们那个年纪写游戏时,家里还没有Internet,什么资料都查不到,什么开源引擎都没有,95年左右你要写一个游戏,你起码面临:同显卡打交道,显卡著名的 Mo
2015-04-21 22:52:27
3871
原创 如何解决FPS/RTS/赛车类游戏的同步问题
算法简述 动作类游戏如何在高延迟下实现同步?不同的客户端网络情况,如何实现延迟补偿?十年前开始关注该问题,转眼十年已过,看到大家还在问这类问题,旧文一篇,略作补充(关于游戏同步相关问题还可以见我写于2005年的另外两篇文章,帧锁定算法 和 网游同步法则):影子跟随算法由普通DR(dead reckoning)算法发展而来,我将其称为“影子跟随”意再表示算法同步策略的主要思想
2015-04-07 17:10:14
16832
1
原创 体育竞技游戏的团队AI
很多人问游戏AI该怎么做?随着游戏类型的多元化,非 MMO或者卡牌的游戏越来越多,对AI的需求也越来越强了。而市面上关于 AI的书,网上找得到的文章,也都流于一些只言片语的认识,理论化的套路,和一些简单的 DEMO,离真正的项目差距甚远,无法前后衔接成一条线,更无法真正落地到编码。国内真正做过游戏AI的少之又少,东拉西扯的人很多,真正做过项目的人很少,因为国内主要以MMO为主,RTS比较少
2015-04-07 17:05:29
6031
《简明英汉字典增强版》 收词量 340 万 - for StarDict, GoldenDict
2017-05-24
Kindle 简明英汉增强版(133万词条,考纲词频标注)
2017-05-22
简明英汉双解词典数据库(增强版)
2017-03-21
cscope.exe 15.8b windows 最新版
2017-01-27
cscope.exe 15.8b win32 最新(清洁版)
2016-12-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人