给 VSCode 做了个 RSS 阅读器插件一直比较喜欢使用 RSS 订阅一些新闻和技术博客, 但总觉得 Windows 上除了雷鸟外没有什么好用的阅读器. 后来突然想到既然平时 VSCode 用得这么多, 为什么不给它写个 RSS 阅读插件呢, 而且 VSCode 扩展性这么强, 又天生支持 HTML 渲染. 于是清明节这几天就搞出了这个: luyuhuang/vscode-rss. 在 VSCode 扩展商店中搜 “RSS” 就能找到它 April 6, 2020 #tools
为什么说 Lua 5.3 中没有全局变量了过去笔者一直使用 Lua 5.1, 对 Lua 5.3 中的 _ENV 一知半解. 最近新项目中使用了 Lua 5.3, 于是特意研究了下. 这篇文章总结下 Lua 5.3 中的环境和全局变量, _ENV 的含义以及与之相关的用法. Lua 变量的类型 Lua 中的变量可分为局部变量, 上值(upvalue)和全局变量. 经常使用 Lua 的同学应该都很熟悉, 举个例子: 12345local u March 20, 2020 #lua
序列化 Lua 对象在项目中由于种种需求经常需要将对象序列化成一个字符串. 由于 Lua 唯一的复合结构是 table, 所以实现起来还是比较简单的. 之前我们的做法是用 Lua 写一个递归函数遍历 table 的键值然后转换成字符串并拼接起来. 然而 Lua 在字符串拼接的过程中会不断地构造字符串对象, 因此这样的实现方式性能较差, 并且会浪费内存, 特别是数据比较大的时候. 一种优化方式是将键值转换的小字符串存到 March 18, 2020 #lua
矩阵的 n 次方和斐波那契数列通项式斐波那契数列大家应该非常熟悉, 这是一个典型的递归定义的数列. 那么这样一个递归定义的数列的通项式是怎样的, 它又是如何推导出来的呢? 这里我们从寻找矩阵的 n 次方说起. 矩阵的 n 次方 首先只有方阵才有与自己相乘, 所以我们实际讨论的是方阵的 n 次方. 为了高效地求得一个 \(m\times m\) 的矩阵 \(A\) 的 n 次方 \(A^n\), 我们的做法是找到一个矩阵 \(P\) March 16, 2020 #math
分布式哈希表 (DHT) 和 P2P 技术1. 引言 相信没有人没使用过 P2P 技术. BT 种子和磁力链接就是最常见的 P2P 技术, 使用 P2P 技术, 文件不再需要集中存储在一台服务器上, 而是分散再各个用户的节点上, 每个人都是服务的提供者, 也是服务的使用者. 这样的系统具有高可用性, 不会由于一两台机的宕机而导致整个服务不可用. 那么这样一个系统是怎样实现的, 如何做到去中心化(decentralization)和自我组织 March 6, 2020 #featured #design
Promise 和 Deferred1. 引言 这篇文章笔者想讨论一下 JavaScript 中的 Promise 和 Python Twisted 中的 Deferred(jQuery 中也有 Deferred, 它们的思路是一致的). 它们很有趣, 也有点复杂. 在协程被广泛应用之前, 它们在网络编程中起到了重要的作用. 在此之前, 我们先来看看一些基本概念. 2. 从请求说起 请求和响应 我们在进行网络编程的时候, 总是会用到 February 9, 2020 #featured #design
三个思路相通的最大面积问题笔者在 LeetCode 上看到了三个非常有意思的最大面积问题, 这里来分享一下. 1. 接雨水 题目源自Leetcode: 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 trapping-rain-water 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水 January 16, 2020 #algorithms #leetcode
2019 Annual SummaryOn September 15, 2017, the first day I joined the company, I told myself that I joined a good company which has a good treatment but I was not feeling happy at all. I had plenty of worry and confusion January 1, 2020 #essays #english
通过弹幕背单词众所周知, 对于程序员来说, 最重要的语言不是 C, 不是 C++, 不是 Java, 而是英语. 十分不幸的是, 鄙人极其不擅长英语, 尤其是背单词: 背完即忘. 我需要的是高频重复. 所以我决定采取点措施, 然后就做了这个: DWords. 它可以单词变成屏幕上的弹幕, 用起来就像这样: screenshot 这样在工作写代码的时候就会时不时地飘过来一个弹幕, 不断地强化重复记忆. 我认 January 1, 2020 #tools
如何优雅地实现一个新手引导系统笔者最近要在项目中实现一个新手引导系统. 新手引导其实上是一个比较复杂的系统, 与许多具体的功能紧密相关, 其中涉及到的特殊处理也比较多. 这篇文章我想谈谈新手引导的设计思路, 尽量不涉及具体的引擎框架和实现. 事件驱动 整个新手引导的流程应是事件驱动的. 比如说当宠物功能开启时在宠物功能按钮上显示引导提示, 当点击 A 按钮时把引导提示移动到 B 按钮上. 对于特殊的事件, 我们可以在必要的地方 December 21, 2019 #design