当前位置

技术

技术

深入浅出 screen

这周的内部技术交流会,是一个同事介绍 screen 的使用。俺一时嘴痒,就从怀旧开始,给大家从终端开始发散:

十年前,刚接触 UNIX 主机的时候,机房里的终端已经基本不再使用了。但调试维护路由器交换机总偶尔会碰上忘带串口线或者针头不匹配,前辈就从一堆老终端里翻出台合用的代替。第一次看见别人用终端印象非常深刻——总算知道windows那个“超级终端”,或者 telnet.exe 里的 vt100 对应的实物是什么了。

从形态上,terminal 和 console 是一致的,就是输入设备和输出设备的组合。它自己没有计算能力,任务在主机上执行。

在终端键盘上敲一个字符,比如 'a',首先把 'a' 送到主机上,主机再把这个 'a' 回显(echo),然后我们才能在终端屏幕上看到这个 'a'。和在编辑器里输入并看到一个 'a' 相比,是完全不一样的概念。

最近几年入行的新人是不太可能有机会亲手摸一下终端了(可在 google 上图片搜索 vt100 或 vt220 过过眼瘾)。但如果安装过 Linux 操作系统,它的文本控制台(console)可以很好的帮助理解 screen。

A. Linux 控制台,缺省有 6 个虚拟终端,我们可用 Alt-F1/F6 来依次切换;在 screen 里就可以这么干。

B. Linux 控制台的某虚拟终端上,登录进去,然后拔掉键盘,拔掉显示器,再把它们插上,你会发现刚才登录的状态还保持在;screen 也是这样的——在不可靠的网络环境下想长时间的在终端前台执行某程序,screen 就是必须的工具了。

C. 最后,刚才拔掉键盘显示器,再插回去的动作,用英文怎么说?不就是 detach 和 attach 么

在该同事演示的过程中,screen -x 命令效果是最让人震撼的。我开玩笑说,以后大家都必须在 screen 里工作,这样我就可以做一个真正的监工了。昨晚回家骑车的路上想,这就是远程 PP 啊!如果不得不在不同地点办公,同时又想执行结对编程的团队,是可以考虑利用这个功能来结对的。 只是不知道 X Terminal或远程桌面是否也能实现这样完整共享设备的特性

UPDATE: 有人指出 Eclipse 有一个叫 DocShare 的插件;我看了看,觉得还是不像真正的 PP 那样两人共享一个终端的感觉。
想象一下,甲和乙在地球的两端,开着 screen-x,头戴耳机通过skype通话。
甲:(疯狂击键ing)
乙:停一下,你这里好像忽略了一个情况
甲:(stop typing)..好的,你来吧...(然后看着编辑器光标向上移动了两行,增加了一个判断)
乙:现在好了
甲:我想想,你为什么这样处理...(恍然大悟)...没错没错...不过最好这里再加一个注释.
乙:下面你接着来
.......
纯属 YY

Topic: 

Why Python?


去年10月份,我做了一个决定——用 python 来构建搜狐的新一代WebMail系统,替代以前的 java 代码。不得不说这相当冒险,但不管怎么样,它现在运行的还不错,从程序的角度来看,好像代码前途还挺光明。据我自己估计,论部署规模/管理的数据容量/每日登录用户数,在国内 python 开发的网站里,应该是排名第一。 :)

在进入搜狐之前,我的 python 经验十分有限。就是会做做 base64.decodestring;学习 pymsnt 的时候接触了一下 twisted;以及,也是比较搞笑的一点,我用 python 最熟的地方居然是 windows 下的开发——访问注册表,用wxPython写界面,用ctypes访问DLL...

搜狐邮件中心开发以前是分成两个小组,一拨C/C++程序员,一拨Java程序员,技术上两者间没什么共同语言。因此我力主引入 python,是想弥合双方的技术范围,让每个程序员,都可能尽多的去接触 E-Mail 的所有业务领域

一开始是 Twisted 应用,某 java 程序员用它实现了一套监控系统,实时注册IP黑名单系统;MTA 那里则是用它来做 tcptable 查找表的接口。

后来 MTA 那里更夸张的用 pymilter 粘合postfix 和过滤系统,直到我们的某供应商提供了 API 后才不得不改回 C

虽然计划增加 Python 的应用范围,但在规划 AjaxMail 的时候,一开始的确是打算沿用 Java 开发的。原因是三点:
A. 不管 Python 有多少优点,但都绝不应该抛弃以前的旧代码
B. 现有WEB开发人员的知识结构完全是基于Java的
C. 不管 Python 在语言方面有多少优点,但由于主要的业务逻辑都在 Javascript 上,后台究竟用什么语言开发反而是无所谓了。换句话说,Python带来的好处不明显,但风险是极高的

转折点出现在 10 月,两个主力 Java 程序员离开了团队,一个去了微软,一个去了新加坡。我的选择就变成:
1. 招Java程序员,从0开始熟悉现有的代码,学习邮件业务,然后摸索着前进
2. 依赖以前的关系,找几个邮件系统很熟悉的C程序员,用Python或者PHP(类似的事情我在04年干过一次,用PHP替换了eyou.com的CGI)或者什么什么开发,但肯定不是JAVA。

还有一点,我自认永远也不会太深入Java,不可能带着程序员在这条道路上走远。

说起来有点儿造化弄人,我心里确实想全面铺开Python,但理智上还是选择保守,可现实把我推向自己真正想去的地方。

关于这个选择我想更重要的是:万一不得已重头再来,怎样才能尽可能的降低风险呢?
1. 经验。我在这个领域8年了,技术上能做到什么样子还是有把握的。
2. 人才。如果不是因为有一个很得力的程序员,俺就要被迫亲自操刀了;虽然走了两个人,但配了一对更好的组合。
3. 信心。把自己的信心带给团队所有人,消除大家的不确定性。
4. 兼容。代码虽然有变化,但数据格式基本没有变,老的Java代码仍然还是可以使用——我想它应该至少还有半年的生命期。

To be, or not to be. 不管怎么选择,都要事先准备好面对接下来的挑战。

延伸阅读:lighttpd 2.0

Topic: 

64-bits 是王道啊

由于奥运流量大涨,搜狐原来的pv统计程序有点力不从心,这两天用 python 重写了这部分的代码。

恶心的是每日汇总,本来信心满满,但很快发现数据量太大了,内存瓶颈很难绕过去。除了尽力在3G可用内存里辗转腾挪外,还顺便看了看 Python 的 dict 实现,把它的 dictionary load radio 上限从 2/3 改成了 32/33,可还是不够用。不用那么多内存,改用磁盘对换也成,但性能这样就会很糟。

低性能版本运行了几个小时后,实在受不了,就找人要了一台16G内存,64位的服务器。
结果耗了10G内存,6分钟运算完毕(利用 marshal 保存的每小时统计结果)

Topic: 

firefox 上 <script> 要支持 defer 了...

看到最近的 trunk build 里面包括

Fixed: 28293 - Add support for the "defer" attribute on <script>.

我觉得这还算一个挺重要的特性

不过这个特性就有点变态了:Fixed: 113934 - Drag & Drop tabs between browser windows.
真有人会在两个窗口之间拖拽 Tab 吗?好比 Linux 在几个虚拟 Desktop 之间拖拽窗口那样...

Topic: 

lighttpd 2.0

某项目获得了意想不到的成功,市场份额成倍增长

用户对下一版本期待很高,雄心勃勃的项目负责人也顺势制定了下一个里程碑的若干重要新特性

可是项目进度陡然慢了下来,因为受老的架构所限,所有新加入的特性都是那么的别扭,bug 重重,难以为继

更要命的是最最核心开发人员突然接受了一份新工作,离开这个泥潭了;唯一值得安慰的是由于这个项目前不久的成功,还是聚集了一堆热情的程序员决心继续把它发扬光大

但这群新手讨论的结果是:"我们可能得重头编写代码"

==========================================================

这个故事不断在各个地方上演,读 lighttpd 的这篇声明,包括留言中几个用户激烈的言辞和开发人员的反击是还是颇让人玩味的。

一个细节是 lighttpd 计划用 libev 代替 libevent。第一次听说 libev..啧啧.. lighttpd 的这帮开发者还挺能追新啊,还是因为大家都是德国人的过?

延伸阅读:Joel 的 Things You Should Never Do, Part I (中译版)

后记:lighttpd 的原作者 Jan 现在貌似集中精力在 mysql-proxy 上(所以lighttpd 和 mysql-proxy 的脚本语言核心都一样是 lua),谁有兴趣可以考证一下 Jan 是不是先开发的 lighttpd 然后才被 MySQL 雇佣。若是为了生计放弃 lighttpd 项目,还是蛮容易理解的;希望 mysql-proxy 未来能取得更大的发展。

预告:我想什么时候我也要写一篇blog说明为什么当初冒险决定抛弃java代码改用python重写搜狐webmail

Topic: 

VMware 的 ESXi Server 可免费下载

What is the difference between ESXi and VMware Server?

VMware ESXi is an enterprise-class hypervisor that offers a bare-metal architecture for near-native performance, features like memory de-duplication to increase consolidation ratios and a cluster file system for managing VM files on shared storage. VMware ESXi and VMware ESX are the critical foundations for a dynamic and flexible virtual infrastructure.

VMware Server installs as an application on Windows and Linux, relying on an operating system for resource management. This limits the performance and scalability. VMware Server is popular for test and development activities.

从这一段描述来看,VMware Server 应该只是相当于 VMware Workstaion/Player 加上一个 VNC 远程桌面,ESXi 才算真正的虚拟化硬件。

除了托管商外,对于网络服务提供者,比如说 webmail 吧,虚拟化服务器有什么样的意义呢?

Topic: 

Dreaming in Code

今天大概翻了翻《梦断代码》。要不是因为这本书里面讲的是一个用 python 开发的项目,而且是一个 PIM 软件的话,我压根不会看这种 100 页以上的软件工程书籍。

读后感:除了前面的翻译还算生动外,后面的翻译并不是太好,或许原作者写的就不怎么样。

最后我看了看 Chandler 的网站,wow..虽然从书上看到的是一个悲惨且前景黯淡的软件项目,但至少现在 1.0-rc1 已经在供人下载了。安装后粗粗运行了一下,chandler 确实有不少有趣的地方,但这是一个 web 的时代,是一个"永远beta"的时代. 桌面 PIM 除了硬从 Outlook 嘴里强食外,没有什么太多的空间了。

从这个项目衍生出的著名的 Python Is Not Java (中文翻译在这里)值得一读.

Topic: 

ubuntu 下安装 IE 碰到的问题及解决

前段时间在 ubuntu 里尝试装 IE。Wine 是必不可少的。看到有个叫做 Wine-Doors 的东东,里面包含了很多 Windows 下的软件,管理界面挺好看,似乎挺专业,于是就用它来安装 IE。安装的时候,它会去微软的网站上下一些 IE 需要用的包,时间花得比较长,但是装上后,发现有问题,缺少很多 dll。尝试卸载重新装,可卸载不掉,所以也就没法重新装。

昨天试了一下 IEs4Linux,网上有很多安装教程,我就不重复了。它也是要即时去微软的网站上下一些包,也许是因为网络的原因,有些包下载失败,没关系,重新运行安装文件。有几个包怎么下也下不下来,我换了个时间再运行安装文件,ok,等所有需要的包下载齐了,安装成功。试了一下工行网银网站(没有交易)没有问题,试了一下淘宝、支付宝网站(没有交易)也没有问题。试了 一下招行网银,页面打开不了。目前还需要试一下旺旺,如果不行,网页版的也凑合能用。我怀疑用 Wine-Doors 之所以搞不定,也是因为某些包没下载完。然后它给我硬装,装上了后不能用,卸又卸不下来。

什么?为什么不装双系统?因为我硬盘装了 ubuntu 后,vista 就进不去了,重新安装 vista 或 xp 都说不能识别硬盘,可我在 ubuntu 下包括 Windows 的分区都识别得好好的,所以我就用我的 lenovo 昭阳 E42G T7250 彻底跟 Bill say Goodbye 了。

更新:
又试了一下招行,看到了让我下载安全控件的页面,点击,直接运行安装,然后就 ok 了,个人银行大众版和信用卡网上银行都可以登录。
按照 Ubuntu下淘宝旺旺的完美解决法-安装及使用做了一遍,用淘宝旺旺 1.9 绿色版以及 Wine 1.1.0,正常启动,正常登录。收到不少离线消息,点离线消息时,会报一些错。这都没有什么,不过似乎跟人说话,别人没有反应。也不知道是以前的卖家懒得理我,还是根本就没看到我发过去的消息。

再次更新:
目前已在 ubuntu 上用旺旺以及淘宝支付宝完整买过一件东东。

Topic: 

列表上有人组织团构 openmoko !!

关于这个 Linux 开放平台手机已经知道很长时间了,这次是第一次看到有开发版的硬件在卖。价格 399$, 换算成人民币不过 2800, 硬件规格很高,包括:
* 640x480 的 2.8' 屏幕
* wifi 802.11b/g
* 3维感应器!!!!!!!!
* GPS
* 其他比如 2D/3D加速芯片, 蓝牙什么的...
* 最重要的,所有源代码完全开放

可惜真的是没有时间来 hack 它, 否则就买了. 有志于山寨机事业的朋友,这可是一个好机会,基于这套硬件不说做一个 iphone,开发一个比魅8强的东西是没问题的。

未来手机市场 WM, Symbian, iphone, Linux, Android 厮杀,真是有看头啊

详细硬件规范见:http://wiki.openmoko.org/wiki/Neo_FreeRunner_GTA02_Hardware/zh_cn

Topic: 
订阅 RSS - 技术