初次接触 WebAssembly 以及一些 tricks
这周从事一些需求分析工作,因此有机会接触到一些尚未了解的技术,看看是否能解决需求。
WebAssembly
有关 wasm 的资料现在很多了,简而言之就是将代码编译为特定的二进制代码,供浏览器去执行,MDN 上介绍了详细的概念, 包括目标以及三种编写方式。Wasm 并不是传统意义上的汇编语言,它只是充分利用了 JavaScript VM,类似于 .Net 或者 Java 编译后的中间代码。报道说,eBay 使用 WebAssembly 给 WebApp 提升了 50 倍的性能。这里有更多 use cases 可供参考,以及 FAQ。 我试用的是使用 emscripten 编译 C/C++ 代码:
安装过程不是很顺利,参见下文 Tricks 的部分。
示例代码似乎也不是完美执行,了解 wasm 的初衷是尝试调用系统 API,来突破浏览器的限制,然而我的猜想是错误的。代码依然执行在浏览器的沙盒里,比如文件系统 API,fopen
并不能直接访问本地文件,仅能编译打包后产生的一个运行时虚拟路径。其他的 API就未必可以调用了,例如 system
。
Tricks
Python 脚本里偶尔需要从一些因为众所周知的原因无法访问的网站下载文件,如果使用的 urllib2
的话,可以使用这种方式:
import urllib2
proxies = { 'https': 'http://127.0.0.1:8118', 'http': 'http://127.0.0.1:8118' }
proxy = urllib2.ProxyHandler(proxies)
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
print(urlopen('http://www.example.com').read());
其他
- 终于开始订阅 xkcd.com 了,不过这个链接你打开看可能是一堆乱码,哈哈… 挑个顺手的 RSS 阅读器吧,RIP Google Reader…
- Chrome 浏览器有个 kiosk 模式(全屏),kiosk 这个词来自波斯语,据维基百科记载它是亭子的意思。
- 本周还接触到了一些和 OpenVINO、AI 有关的信息,挖个坑以后填。
- 博客的标签页建好了。
- LC 136 - Single Number 这道题找到了一些实际意义。《编程之美》一书中介绍:分布式系统中每个机器都有一个备份并共享同一个机器 ID,当发生故障的时候需要快速的找出 ID 唯一的那个。但是这个算法未必实用,例如 ID 相同的两台机器都发生了故障,或者发生故障的两台机器 ID 不同。同时场景也会发生变化,例如每台机器都有3个备份(即同一个 ID 的机器有 3 台)该怎么处理。