Bojie Li (李博杰)
2014-02-15
网络虚拟化(Network Virtualization)就是搭建一个与物理网络拓扑结构不同的虚拟网络。例如公司在世界各地有多个办事处,但希望公司的内部网络是一个整体,就需要网络虚拟化技术。
从 NAT 说起
2014-02-10
随着计算机处理能力的提高和软件复杂程度的上升,性能往往并不是衡量软件的最重要标准。但有时我们确实需要把计算机的性能榨干。尤其是做研究的时候,为了让性能指标超过对手,不仅要优化算法(渐进复杂度),还要优化实现(复杂度中的常数)。本文试图总结一些规律,望与大家讨论:
不要使用开源软件
开源软件往往考虑的是一个通用问题,因此有很多几乎永远也用不到的配置参数和条件判断;开源软件对代码可读性、可维护性的要求往往高于对性能的要求,因此一般不使用所谓的“奇技淫巧”。
2014-02-10
比特币经历了去年4月和11月的两次暴涨暴跌,已经不仅仅是 IT 男的玩物,而成为社会各界争论的焦点。不过关于比特币技术原理的文章大多是蜻蜓点水。过年与好基友们聊天时,大家提出了这些问题,希望读完这篇文章后能弄明白:
- 如何证实一次比特币交易,使其不可抵赖?
- 如何避免一个比特币花两次?
- 如果我一个人拥有全网的 10% 算力,是否有可能改写历史?
- 比特币交易为什么要等几十分钟?
- 比特币是如何保证数量有限(2100 万个)的?
- 如何保证每 10 分钟恰好挖出一个比特币?
- 一次挖出 0.1 个比特币是怎么回事?
- 一次交易 10000 个比特币,需要生成 10000 条交易信息吗?
- 比特币这么大的交易量,交易记录如何传输、保存?
2014-02-09
智能手机、路由器等很多嵌入式设备都有“恢复出厂设置”的功能。按照PC机上大家习惯的“备份”做法,似乎需要把出厂时的整个系统备份在只读的 ROM 里。如果是这样,每次恢复出厂设置,ROM 里的内容都要拷贝到 Flash 存储里,浪费大量存储空间,而且恢复出厂设置需要比较长的时间。但事实上,恢复出厂设置只是重启一下就完成了,而且刚恢复的系统里 Flash 存储基本是空的。
(感谢 BW 的评论,Android 系统的恢复出厂设置不是使用差分技术,而是简单清空数据分区,对 /system 分区的修改没有被还原,我弄错了)
2013-11-22
有时要远程访问路由器 Web 控制面板等只能从服务器所在网络访问的网站。在服务器上用 links 显然是不靠谱的。我们可以在本机与服务器间用 ssh 打通隧道,让本地浏览器通过隧道访问受限的网站。
首先用 ssh -D 在本机与服务器间建立 socks5 隧道:(60000 是一个任意的大于 1024、小于 65536 的整数)
1 | ssh -C2qTnN -D 60000 user@remote-host |
然后就是让 Chrome 通过 socks5 隧道访问了。Chrome 插件 ProxySwitchy 由于 Chrome 不再支持 NPAPI 已经不 work,而 ProxySwitchySharp 有时也不 work。网上有些文章说 chrome –proxy-server 就行,事实上在你开着另外一个 Chrome 实例时是不 work 的,因为 Chrome 会自动寻找已经打开的实例。
比较靠谱的办法是,开 Incognito 匿名模式,并使用不存在的 Chrome 用户数据目录,断绝其寻找已打开实例的可能。用完之后,最好把新建的用户数据目录(下例中是 C:\Temp\Chrome)删除。注意,下面的 socks5 不可替换为 http,这是不同的协议。
1 | PS C:\Program Files (x86)\Google\Chrome\Application> .\chrome.exe --proxy-server="socks5://127.0.0.1:60000" -incognito -user-data-dir=C:\Temp\Chrome |
2013-10-11
乌龙指离我们很远吗?非也。前一段时间 LUG 服务器出故障,就错误地发出了 7 万条短信,把学校短信平台的余额用完了,直到网络中心老师给我打电话才发现。
祸起服务监控脚本。
为防止短信轰炸,发出的短信本来都要经过我这里的“风控”,
2013-10-07
用过 Windows Vista/7/8 的同学可能有这样的经历:用 32 位程序(比如 cygwin)修改 C 盘下的某个文件后,再从 Windows 资源管理器里看,竟然是修改前的版本!难道文件系统还对不同的程序有不同的视图?您说对了,自从 Vista 引入了 UAC 和 VirtualStore,不要相信 32 位程序在 C 盘里做的改动。
Windows Vista 引入更强的安全机制后,一些重要的系统目录就不是谁都能修改了。这些目录包括 C 盘根目录,Program Files,Program Files (x86),Windows,注册表的 HKEY_LOCAL_MACHINE 等。但一些老的应用程序仍然假定这些目录是可写的,如果系统 API 简单返回访问拒绝,则这些程序都不能运行了。
因此,Vista 提供了 VirtualStore,对非管理员权限运行的 32 位程序,只要对这些目录有写操作,就会把被修改或添加的文件复制一份到这个用户的 VirtualStore。以这个用户身份运行的 32 位程序看到的这个路径就是 VirtualStore 里的对应文件,原始路径上的文件再怎么修改,它已经全然不知了。
2013-10-03
LUG VPN 的一些用户希望仅对某些特定 IP 使用 VPN,而 OpenVPN 默认是全部走 VPN。也许是我的搜索能力太差,竟然没有 Google 到靠谱的答案。没有耐心的读者可直接看我的解决方案:
1 | $ echo "script-security 2" >>/etc/openvpn/client.conf |
2013-10-01
前些天同学聚餐,有人提了个问题:很多人同时看电视不卡,同时看网上的视频直播为什么就卡呢?电视是广播(跟收音机本质一样),而互联网视频走的是点对点的 IP 网络,多一个人看视频,服务器就要多发一份数据。
互联网视频究竟是怎样送到千家万户的呢?我从通信领域顶级学术会议 SIGCOMM 2013 里窃取了一些科普知识与大家分享。
2013-09-29
这段时间很多公司的面试都在拉开帷幕。前几天我的一位好朋友应聘一家被誉为 “工程师天堂” 的互联网公司,第一轮面试就悲剧了。原因可能是在一道关于树的算法题上耗了一个小时。我觉得凭一道算法题断定一个人的能力过于僵化了。当然,这样的公司可能应聘的人太多,没时间仔细考察每个应聘者。
今晚同学带我去清华玩,顺路逛了清华科技园,也算我进过这家令无数程序猿向往的公司大门了。回来的路上,我就在思考纯算法题面试可能的弊端。在 coolshell 上看到了跟我观点类似的文章《为什么我反对纯算法面试题》《我是怎么招聘程序员的》《再谈“我是怎么招聘程序员的”》,于是鼓足勇气把自己 simple & naive 的观点拿出来与诸君分享。欢迎各种形式的拍砖。