Programming

Build a world better, together.

一般而言,一个定长字符串是这样设计的:开头 4 字节用于保存字符串长度,接下来是字符串本身。这样一个设计是为了可以将多个(足够长的)字符串拼接在一个包里而无需单独传输,在协议本身不能保证包到达的顺序的情况下这样做可以保...

继续阅读

发布

如果一个模块是异步的,那么不要向其暴露任何你无法包装的同步方法。 有很多时候我们希望一些独立于核心逻辑的模块,或者说插件,能够异步地运行。这样可以最大幅度地利用系统资源。但是有时插件可能会需要访问同步的资源。直...

继续阅读

发布

关于可扩展性的定义,本着不重复造轮子的心态,见 yishuiliunian 的这篇文章。 报数游戏的典型形式是:从 1 开始报数,如果报到某个数以及其倍数(比如 3 及 3 的倍数)那么你报「过」或者其他什么词。这个游戏可以继续扩展,比如...

继续阅读

发布

首先,没错,我承认这种事情很不道德,毕竟别人写一些优质博文,挂一些广告也是理所应当的——毕竟你也没花钱订阅这个博客,白嫖反倒还有理了? 但是问题是,你想让我关掉广告插件本身是没问题的,有问题的在你的做法。其他网站一般...

继续阅读

发布 1 条评论

LunarVox 工程链接: LunarVox - Coding LunarVox (Lunar - 月亮的, Vox - 声音) 是控制台演示工具包的一个组件,用于合成声音或者编曲。这个名字的灵感取自 SunVox, 也是一个编曲软件。 所谓「控制台演示工具包」,就是指在尽...

继续阅读

发布

编写这样一个模块:转发用户的 Cookie 和 POST 请求到另一个页面上。自然地想到应该使用 curl. 代码应该是直白的,从请求的 $_COOKIE 中提取 Cookie 以及 $_POST 中提取请求内容,再直接扔给 curl 转发,将响应中的 Cookie 提取并...

继续阅读

发布

考虑一个这样的函数: int f() { int foo = 10; int bar = 20; int g(int param) { foo += 2; return param + foo + bar; } return g(10); // 42 } 似乎很不寻常。这个函数在其内部声明了一个函数,在里面的函...

继续阅读

发布