新!发!布!

不需要过多解释,bilibili-get 就是这样一个工具。

bilibili-get 支持目前最为常见的几种 URL,还支持运用 cookie 让您享受大废员清晰度。

—— 我是开发(lao)笔记(sao)的分割线 (๑•̀ㅁ•́๑)✧

Emscripten

假期的最后两天,毛毛雨。打开 debugger 开始分析,协议逆向是个很杀时间的麻烦事,看着 Emscripten 生成的代码试图回忆编译原理的各种方法,最后还是放弃了这些非分之想。靠着土办法找到 cwrapXB.addFunction 两个入口函数再从调用栈反向追踪得到参数变量的含义。提取整个 Emscripten 模块的代码。封库。

来来去去捣鼓了两三个小时,debugger 经常在 unwind 各种奇怪的调用栈的时候卡死(比如 Vue 的调用栈)刷新一次页面马上断点了往往要等几分钟才能把调用栈展开,仔细想想也许是因为用了调试器异步栈追踪的功能。

原生 C/C++ 程序运行速度约为 Python 的 10 到 100 倍。

结果来看,混淆方面 Emscripten 已经比 uglify 不知高到哪里去了,据说对比原生 C 程序也仅仅产生 50% 的性能损耗。这样的性能足够运行 ONScripter 和一些比较简单的游戏引擎,期待满满。

function* 的怪异美学

每每写 JavaScript 的时候总是纠结——

「用 generator 还是 async function 做异步流控制」

转眼都 8012 年了,问我资慈不资慈 ES7,结论当然是吼啊。像 destructing assignment、spread operator 这些新特性用起来简直不能再爽,可是一旦提到 async / await 就让人难受。

async / await 语义虽然更加正式,写法却并不怎么漂亮。

var f = async function () {
  await f();
};

一方面 async function 表达不如 function* 紧凑,呆板的 async 关键字也比 function* 的星号少了几分精髓感。

var f = co.wrap(function* () {
  yield f();
});

VB6 的函数是用 Function 定义的,而 Subroutine 简写成了 Sub

类似的感觉还有 Kotlin 和 Go 的 fun,一个 tab 就补全的东西至于惜字如金么!就连 VB6 都没这么过分,皮这一下很开心是么!(真开心)

不过要是真写成 asynchronize function 这样非常 Java 的声明也不会有太多人喜欢,各人有各人的偏好,所以到底还是 function* 这种乍看不明所以,细品津津有味的感觉好。

axios vs. request-promise

如果有再给一次选择的机会,绝对选 request-promise

第一次写 Node.js 爬虫(是的,不过是一个爬虫)想都没想用了比较熟悉的 axios,想不到马上就被坑了。遇到第一个坑的时候是有想法做点 contribution 帮别人填上的,又是一番捣鼓,想着把车胎补好总可以安心上路了,扑通,又一坑。

踩到第二个坑是真的生气了,这还造什么自行车嘛!换了!

至于坑在哪,不重要了。

以上,bilibili-get 开发吐槽笔记。祝您工作顺利,身体健康。