<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Skywind Inside]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/skywind</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; skywind]]></copyright><item><title><![CDATA[支持 Win10 的网络环境模拟（丢包，延迟，带宽）]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143653406</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143653406</guid><author>skywind</author><pubDate>Sat, 09 Nov 2024 23:58:57 +0800</pubDate><description><![CDATA[升级 Windows 10 以后，原来各种网络模拟软件都挂掉了，目前能用的就是只有 clumsy，唯一问题是不支持模拟带宽，那么平时要模拟一些糟糕的网络情况的话，是不太方便的，而开虚拟机用 Linux tc 或者设置个远程 linux 网关又很蛋疼，于是我顺便给他加了个带宽模拟功能：]]></description><category></category></item><item><title><![CDATA[56 行代码用 Python 实现一个类似 Flex/Lex 的词法分析器]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143651199</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143651199</guid><author>skywind</author><pubDate>Sat, 09 Nov 2024 21:08:49 +0800</pubDate><description><![CDATA[作为 Yacc/Bison 的好搭档 Lex/Flex 是一个很方便的工具，可以通过写几行规则就能生成一个新的词法分析器，大到给你的 parser 提供 token 流，小到解析一个配置文件，都很有帮助；而用 Python 实现一个支持自定义规则的类 Flex/Lex 词法分析器只需要短短 56 行代码，简单拷贝粘贴到你的代码里，让你的代码具备基于可定制规则的词法分析功能。2）由上往下匹配规则；你如果代码里有一些简单的词法分析需求，把上面这个 56 行的函数拷贝过去就够了，真的不必引入什么其他的复杂依赖。]]></description><category></category></item><item><title><![CDATA[Python 中使用组合方式构建复杂正则]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143636518</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143636518</guid><author>skywind</author><pubDate>Fri, 08 Nov 2024 22:53:39 +0800</pubDate><description><![CDATA[用手写直接写是很难写出这么复杂的正则的，写出来也很难调试，而组合方式构建正则的话，可以将小的简单正则提前测试好，要用的时候再组装起来，就不容易出错，上面就是组装替换后的结果。是用来表示长度的，里面都是数字，如果里面是变量名的话不会和原有规则冲突，因此这个写法是安全的。可以取完整结果，也可以按照规则名字，取得里面具体某个部件得匹配结果。比如输入一个字符串规则，可以使用。这下可以方便的写复杂正则表达式了。再 Python 的正则表达式里。完事，主要逻辑 84 行代码。]]></description><category></category></item><item><title><![CDATA[VSCode 有哪些让人眼前一亮的插件？]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143629681</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143629681</guid><author>skywind</author><pubDate>Fri, 08 Nov 2024 16:29:00 +0800</pubDate><description><![CDATA[VSCode 里很多插件看着很好玩，但装上看一下你就不会再用了，还有些插件所有人都推过，一堆人推来推去还是那么几个，越看越无聊，因此再说这些也没什么意思，还不如直接看下载排行榜去。我选插件就一个标准：提升工作效率！分享几个我自己用的能让生活变得更容易的插件：1）Project Manager：用 vscode 经常在项目里切换来切换去，Open Directory 效率太低，命令行 code . 用着也不方便，这个 Project Manager 是解决这个痛点存在的：左上是项目收藏面板，点击 “软盘”]]></description><category></category></item><item><title><![CDATA[Vim 超轻量级代码补全系统]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143571728</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143571728</guid><author>skywind</author><pubDate>Wed, 06 Nov 2024 15:39:37 +0800</pubDate><description><![CDATA[4024 年了，应该尝试些新东西，这里介绍一个超级轻量级（169 行代码）的代码补全系统，针对：历史输入，字典，tags 等多个源提供类似 YouCompleteMe 的操作体验，并且无需安装各种后端的补全 LSP 服务器。语义补全是很爽，但有时候，当你用某些缺乏 LSP 支持的小众语言写代码时，或者你去到一台临时的服务器上工作时，你并不想花时间编译和设置一套复杂的补全系统。]]></description><category></category></item><item><title><![CDATA[Vim 实时代码格式化]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143565020</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143565020</guid><author>skywind</author><pubDate>Wed, 06 Nov 2024 11:16:27 +0800</pubDate><description><![CDATA[大部分 IDE/编辑器 都有代码格式化的功能或者插件，但都需要你主动触发格式化命令，而且每次写很多代码在保存的时候一次性格式化，总会有种不放心的感觉，需要跳过头去检查。 有没有可能让我一边写一边实时格式化呢？这样每次我都能看到最终的效果。于是我写了个小脚本 vim-rt-format，再 INSERT 下面每次按回车就能自动格式化当前行：有了这个东西以后，写代码爽多了，释放注意力，完全专注于 “编码”，再也不用为 “格式化”这个事情花费额外的精力，变量名和运算符之间无需加空格，直接回车就自动变成干净清爽的代]]></description><category></category></item><item><title><![CDATA[不知不觉我开发的 vim 插件居然超过 20 个了]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143528321</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143528321</guid><author>skywind</author><pubDate>Tue, 05 Nov 2024 21:25:25 +0800</pubDate><description><![CDATA[不知不觉发现我开发的 vim 插件居然超过 20 个了，也许有一款你会有兴趣： asyncrun - 🚀 多种方式运行 Shell 命令，比如后台异步、Vim 内置终端和系统外置终端等，能将输出捕获到 quickfix 窗口（比如编译器错误输出）。asynctasks - 移植 vscode 的任务系统到 Vim/NeoVim，可以方便的处理项目的构建、测试和部署，并提供独立 Python 脚本用于启动任务。gutentags_plus - 提供一个 :GscopeFind 命令，自动处理 cscope/]]></description><category></category></item><item><title><![CDATA[从大公司离职去小公司当 CTO 是一种怎样的体验？]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143495996</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143495996</guid><author>skywind</author><pubDate>Mon, 04 Nov 2024 22:47:58 +0800</pubDate><description><![CDATA[这样的老板，对 CTO 的定位就是 “魔术师”，好像招聘到一个厉害的魔术师过来，再宏伟的需求，只要 CTO 够牛，最多几天时间，他都能把想要的东西给 “变” 出来。老板无法正确评估你的价值，东西出来后，技术做的好就是不出问题，老板看不到，看得到的时候就是出问题的时候了，好像每次赢得利润都是商务和运营的努力。每次发奖金和分红的时候，老板都会心理暗自嘀咕，“我靠，技术那么高的工资，原来一直跟着我干的那帮商务兄弟们才拿那么点，利润又是他们创造的，好可怜呀。技术成天没开发啥新功能，老的也做不好，上周才出一次事故。]]></description><category></category></item><item><title><![CDATA[程序员的新电脑到手后应该做哪些必要设置？]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143468189</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143468189</guid><author>skywind</author><pubDate>Sun, 03 Nov 2024 17:57:17 +0800</pubDate><description><![CDATA[吃水果要剥皮，用 Windows 也一样，如果是 Win 10 的话，刚装完系统就需要屏蔽一些功能，才能更顺畅快速；国内用 Windows 就像骑着摩托飙高速，看着很爽，稍不留神就万劫不复。所以需要时刻留心，小心驶得万年船。]]></description><category></category></item><item><title><![CDATA[技术岗转管理岗会面临哪些问题？]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143468053</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143468053</guid><author>skywind</author><pubDate>Sun, 03 Nov 2024 17:53:08 +0800</pubDate><description><![CDATA[程序员从技术岗被提拔进入管理角色，时常觉得对管理团队提不起兴趣，没有成就感，又不愿意轻易离开管理岗去做一线职位，做了几年管理岗发现业绩和薪酬都很难进一步提升，这其实是一个非常普遍得现象。因为从基层进入管理层，常会走入不少不容易发觉的误区，处理得好能否让自己职业生涯更进一步，而忽略了却容易让自己掉坑里。]]></description><category></category></item><item><title><![CDATA[基础优化-最不坏的哈希表]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143443490</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143443490</guid><author>skywind</author><pubDate>Sat, 02 Nov 2024 00:40:47 +0800</pubDate><description><![CDATA[最终生成 cmov 的代码是没有分支的，实测新老 gcc，新版本 gcc 生成 cmov指令性能是没有用 cmov 的一倍以上，诸如此类的代码层的优化技巧我们尽量用起来，让这个阈值降低到 2-3 的时候，也就是说传统的有序链表操作已经没有优化余地了，但是通过降低 treeify 过程中再次分配内存的消耗，树维护的消耗，以及提高树的性能，可以把阈值从 8 降低到 4，再通过代码层的优化降低到 2-3，也就是说，将原来的链表（有序或者无序）换成平衡二叉树，这是复杂度最高的做法，同时也是最可靠的做法。]]></description><category></category></item><item><title><![CDATA[互联网技术比游戏后端技术领先十年吗？]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143443450</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143443450</guid><author>skywind</author><pubDate>Sat, 02 Nov 2024 00:34:33 +0800</pubDate><description><![CDATA[最近时间线上又起了一场不大不小的论战，做互联网的人觉得游戏服务端发展很慢，同时互联网技术日新月异，似乎觉得互联网技术领先了游戏后端技术十年，这个结论显然是武断的，几位朋友也已经驳斥的很充分了，游戏服务端的同学实属没必要和这个互联网的人一般见识，本来就此打住也还挺好。但最近两天事情似乎正在悄悄起变化，时间线上一直看到不停的有人跳出来，清一色的全在说互联网简单，什么做个电商不过就是 CRUD 的话也出来了，看的我也大跌眼镜，过犹不及吧。今天更是又刷到有几位不管不顾就说什么游戏服务端领先互联网十年什么的，似乎这又]]></description><category></category></item><item><title><![CDATA[使用 LIBLR 解析带注释的 JSON]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143421189</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143421189</guid><author>skywind</author><pubDate>Fri, 01 Nov 2024 01:35:27 +0800</pubDate><description><![CDATA[前文《基于 LR(1) 和 LALR 的 Parser Generator》里介绍了春节期间开发的小玩具 LIBLR ，今天春节最后一天，用它跑一个小例子，解析带注释的 json 文件。由于 python 自带 json 库不支持带注释的 json 解析，而 vscode 里大量带注释的 json 没法解析，所以我们先写个文法；有了文法，程序就很短了，50 多行足够，就是这么简单，大部分是在处理 json 的语义，写起来比 yacc/bison 流畅多了。]]></description><category></category></item><item><title><![CDATA[基于 LR(1) 和 LALR 的 Parser Generator]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143421094</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143421094</guid><author>skywind</author><pubDate>Fri, 01 Nov 2024 01:29:09 +0800</pubDate><description><![CDATA[最近处理文本比较多，先前想增强下正则，看来不够用了，有同学推荐了我 Pyl 和 Lark，看了两眼，初看还行，但细看有一些不太喜欢的地方，于是刚好春节几天有空，从头写了一个 LR(1) / LALR 的 Generator，只有一个 LIBLR.py 的单文件，没有其它依赖：用法很简单，给定文法，返回 Parser；默认没有加 Semantic Action 的话，会返回一颗带注释的语法分析树（annotated parse-tree）。支持语义动作（Semantic Action），可以在生成式中用 ]]></description><category></category></item><item><title><![CDATA[我在命令行下剪辑视频]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143418128</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143418128</guid><author>skywind</author><pubDate>Thu, 31 Oct 2024 21:43:49 +0800</pubDate><description><![CDATA[是的，你不需要格式工厂，你也不需要会声会影，更不需要爱剪辑这些莫名其妙的流氓软件，命令行下视频处理，包括剪辑，转码，提取，合成，缩放，字幕，特效等等，全部命令行搞定，这不是疯狂，而是效率： MP4 转 GIF 很多社区可以发 MP4，但对桌面录屏这种十多二十秒的小短片远远没有 GIF 来的便捷，GIF 在很多软件里支持的也比 MP4 要广泛，转换命令为参数 -i 的指明输入文件 "in.mp4" ，-an 代表禁用音频，-c:v 的意思是指定视频编码为 gif，最后是输出文件名。]]></description><category></category></item><item><title><![CDATA[我在命令行下学日语]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143417754</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143417754</guid><author>skywind</author><pubDate>Thu, 31 Oct 2024 21:24:32 +0800</pubDate><description><![CDATA[同一个动作重复 300 遍，肌肉就会有记忆，重复 600 遍，脊柱就会有记忆，学完五十音图不熟练，经常遗忘或者要好几秒才想得起来一个怎么办？没关系，我做了个命令行下的小游戏。用来告诉你哪些假名你很熟练，但是哪些你还是不够熟悉，需要多加练习，这样，在终端里工作累了，可以随时挑战一下，发现自己的不足，同时每天能看得到自己的进步。理论上看到每个假名你至少 1 秒以内要能反应出它的读音才行，当然越快越好，所以成绩报表里，一秒钟是绿色，颜色越浅代表越熟练，反之代表越生疏。随时查看你的历史成绩，了解自己的进步。]]></description><category></category></item><item><title><![CDATA[别被忽悠了 Lua 数组真的也可以从 0 开始索引？]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143376903</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143376903</guid><author>skywind</author><pubDate>Wed, 30 Oct 2024 22:40:36 +0800</pubDate><description><![CDATA[先前我说 Lua 数组从 1 开始不太爽，很多人来纠正我说也可以从 0 开始，比如：local m = { [0] = 100, 101, 102, 103 } 然后访问时 m[0] 也可以正常访问到第 0 个元素，所以 “Lua 给你充分自由度，让你可以从任意下标索引数组”，貌似好像说的很有道理，但是不是这样呢？]]></description><category></category></item><item><title><![CDATA[为什么 C 语言数组是从 0 开始计数的？]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143376667</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143376667</guid><author>skywind</author><pubDate>Wed, 30 Oct 2024 22:28:35 +0800</pubDate><description><![CDATA[C 语言等大多数编程语言的数组从 0 开始而不从 1 开始，有两个原因： 第一：地址计算更方便 C 语言从 0 开始的话，array[i] 的地址就正好是： 如果是从 1 开始的话，就是 多一次计算]]></description><category></category></item><item><title><![CDATA[WSL 服务自动启动的正确方法]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143331683</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143331683</guid><author>skywind</author><pubDate>Tue, 29 Oct 2024 16:04:33 +0800</pubDate><description><![CDATA[网上有很多 WSL 自动启动服务的方法，但是都有些大大小小的问题，很多又是针对最老的 ubuntu16.04 发行版（输入 bash启动哪个），你如用商店里下载的最新的 WSL 版本 Debian9/Ubuntu18.04 就会出错。，但没必要塞很多东西进去影响你的启动速度，比如 mysql/mongodb 这些重度服务，可以需要的时候再启动，用完就停了。启动我们的服务了，如果你用的是 ubuntu18.04 的发行版，那么修改上面脚本里的 debian 为。WSL 中有很多有用的服务，你可以按需删改。]]></description><category></category></item><item><title><![CDATA[如何实现和优化 SVM（支持向量机）？]]></title><link>https://blog.youkuaiyun.com/skywind/article/details/143328789</link><guid>https://blog.youkuaiyun.com/skywind/article/details/143328789</guid><author>skywind</author><pubDate>Tue, 29 Oct 2024 14:36:11 +0800</pubDate><description><![CDATA[学习 SVM 的最好方法是实现一个 SVM，可讲理论的很多，讲实现的太少了。假设你已经读懂了 SVM 的原理，并了解公式怎么推导出来的，比如到这里：SVM 的问题就变成：求解一系列满足约束的 alpha 值，使得上面那个函数可以取到最小值。然后记录下这些非零的 alpha 值和对应样本中的 x 值和 y 值，就完成学习了，然后预测的时候用：上面的公式计算出 f(x) ，如果返回值 > 0 那么是 +1 类别，否则是 -1 类别，先把这一步怎么来的，为什么这么来找篇文章读懂，不然你会做的一头雾水。]]></description><category></category></item></channel></rss>