Poderosa 项目复活了

Poderosa截图,图片来自官网
Poderosa 截图

四年之前我就开始关注 Poderosa 这个项目,因为我认为它是我能找到的最好的 Cygwin 终端客户端——没有之一。当然,如果你把它当做 ssh 客户端去跟其它软件比,你就输了。

由于它在 2006 年 11 月以后再也没有更新过新版本,两年前,我曾经因为它有了一个“同人” 2009 特别版 而激动不已。

前两天,我偶尔去逛论坛,居然发现这个项目复活了!作者在开放讨论区里面声明发布了 4.3.0b,真是太让人兴奋了!

令人奇怪的是,xjzhang1979 君虽然提供了 N 个 Poderosa 特别版升级版本,但从来没有释出过源代码,看起来也没有打算这样做。作者 kzmi这里也提到:

5.7.x has more new features, but their source code has not been disclosed.

4.3.x are developed on the Poderosa project and you can get their source code.
Some features from 5.7.x were added to 4.3.x.
...
I believe that the terminal emulation of 4.3.x would be better than 5.7.x's.

由于 5.7.x 不开放的源代码,相比 4.3.x 而言用户肯定对其安全性有一定怀疑。现在有了更好选择,恐怕特别版的拥护者会越来越少了。这真的让人很遗憾!

Linux screen窗口中文乱码问题

环境:Linux Dist: CentOS 4.3,locale: en_US.UTF-8, .vimrc: set fencs=gbk

目标:终端使用 less/more/grep 等命令正确显示 GBK 编码文件内容,vim 正确显示 GBK 编码文件汉字

症状:

1. 系统自带 gnome-terminal 在设置终端编码为 GBK 后,能达到目标。

2. 使用 xshell 在 windows 平台上设置终端编码为 default 时,ssh 登录到 CentOS,能达到目标。

3. 在 screen 命令窗口内,无论终端还是 vim, 中文均显示为乱码,无法达到目标。

解决办法:在 ~/.screenrc 中,添加下面两句:

defencoding GBK
encoding UTF-8 GBK

我的猜测是 xshell、gnome-terminal 等终端能够将自身编码传给系统,因此系统能够对输出自动进行转码。而 screen 属于终端中的终端,它自身的编码不是 GBK,导致传给系统以后没有对输出进行转码。设置 screen 的编码和转换规则后,就 OK 了。

Shell Tips: GNU Screen 的一些小技巧

由于工作环境的问题,最近越来越感觉到 screen 命令的可贵,下面总结一点使用 screen 命令的小技巧。

最常用的参数组合:

screen -ls // 列出已有的 screen
screen -D -R // 进入指定的 screen 名,如果没有,则以该名称创建 screen

由于很常用,我把这两个命令取了个 alias:

alias sl='screen -ls'
alias sr='screen -D -R'

除了命令之外,还有快捷键 Ctrl+ac 创建 screen;Ctrl+aa 在两个 screen 之间相互切换;Ctrl+ad 从 screen 中 detach;Ctrl+a数字,跳转到数字指代的 screen。

在 screen 最下方显示状态栏,状态栏包括已经打开的 screen 标签列表,当前的 screen 和时间。其中在 screen 标签处显示该 screen 所处的目录名。显示 screen 所处的目录名这一点实现起来要困难一些,首先得修改 .bashrc,加入 screen term 对应的信息

case $TERM in
    screen*)
        # This is the escape sequence ESC k \w ESC
        # Use current dir as the title
        SCREENTITLE='\[\ek\W\e\\\]'
        PS1="${SCREENTITLE}${PS1}"
        ;;
    *)
        ;;
esac

然后 . 或者 source 一下,再修改 screen 的配置文件,添加状态栏,在 .screenrc 中添加:

caption always '%{=b cw}%-w%{=rb db}%>%n %t%{-}%+w%{-b}%< %{= kG}%-=%D %c%{-}'
shelltitle '$ |bash'

最终效果为:

GNU Screen 多标签状态栏

使用 Sikuli 实现同时登录两个 Dropbox 帐户

来自 MIT 的用图片编程的 Sikuli 语言最近着实火了一把,看着对岸的程序员 Vgod 开发出如此酷的软件着实令人羡慕。但除了 Demo 之外,能不能拿 Sikuli 来 engineer a better life 呢?显然是可以的,就如 Vgod 这篇文章所说,Sikuli 有无穷的潜力,那我们就来玩儿一把,展示一下 Sikuli 的一个现实应用。

1. Dropbox

Dropbox 是一个在线文件存储系统,可以用来存储和在不同电脑间共享文件,但是一个 Dropbox 用户只有 2G 的存储空间,当我们文件多的时候,就受到限制了。而一般情况下 Dropbox 只能运行一个例程,使用多个用户貌似不可行。但是到底可能吗?

当然可能,只是我们需要多个 Windows 帐户。也就是说,每个 Windows 帐户可以运行一个 Dropbox,如果你系统里有多个帐户,就可以运行多个 Dropbox。注意,受到安全策略的限制,这些帐户必须设置密码。比如我们新建一个"dropbox"帐户,密码也是"dropbox"。

2. 笨的方法

一般情况下使用其它帐户运行程序的方式为:在程序或者快捷方式上点右键,选择“运行方式”,然后选择“下列用户”,输入你期望的用户和密码(dropbox:dropbox)来执行该程序。

3. 聪明的方法

但是这样做太麻烦了,我们可以用批处理脚本做这件事情:

start D:\Program\Dropbox\Dropbox.exe
runas /user:dropbox D:\Program\Dropbox\Dropbox.exe

但这样还要手工输入密码,有很多种方法可以避免手工输入 runas 密码,但很遗憾它们大多在 Windows XP Home Edition 上不可用。

用 Home Edition 的同志还是得交互式的输入密码。能不能不手工输呢?可以,比如 expect 就是专门处理交互的语言。不过,学起来太麻烦了吧,要不来看看 Sikuli 怎么做?

4. 使用 Sikuli

下面这个图就是完成启动两个 Dropbox 的 Sikuli 程序:

使用 Sikuli 同时启动两个 Dropbox

首先switchApp("cmd")启动 Windows 的命令行,然后wait等待那个提示符出现,然后 type() 键入一行 runas 命令,wait 等待提示输入密码,type 输入密码 dropbox 加回车 \n,bingo,出来一个 dropbox 了,最后再 type 一行启动非 runas 的 dropbox,又出来一个 dropbox。

上述程序运行结果如下图所示:

两个 Dropbox 在运行

好玩吧!Sikuli 程序就是那么简单,我从下载 Sikuli 到完成这个程序大约花了四十分钟的时间,这可比去学 expect 快多了。这下 expact 之类的交互语言在简单的场景下可以无视了。

你可以将 Sikuli 程序导出成一个 .skl 文件,据说可以双击运行,不过我尝试未成功,这是一个遗憾,希望后续版本可以解决这个问题。

5. 注册 Dropbox

您如果对 Dropbox 感兴趣的话,可以点击下面我的两个邀请链接注册,这样咱们的空间都可以增加 250M。本人将非常感谢您的支持。(如果您打算再注册一个的话,最好不要用自己的邀请链接,因为同一台电脑上激活的用户不会奖励空间。)

https://www.dropbox.com/referrals/NTE2NjMyMTU5

15 Minutes of Fame

短暂的荣光

——对 免费电子书《使用开源软件-自己动手写操作系统》 的一点点说明

我前几日发布了免费电子书《使用开源软件-自己动手写操作系统》,本以为只是在和我相关的一些圈子,主要是南京大学和南京大学毕业的 Linux 爱好者中得到传播。虽然我预计到了它会慢慢的扩散开来,但是从没有想过它在发布之初就产生了这么大的影响,我的个人主页和博客的点击量在这几日都迅速上升到日近千次访问。

从统计结果来看,JservsolidotLinuxGem 对此消息的分享功不可没。特别是对岸的 Jserv,繁体发布页的一千多次访问几乎都是他带来的(其实这也是我准备繁体发布页的原因,只可惜暂时没有精力发布繁体电子书)。在这里我对他们的无私帮助表示感谢。

再来说说这本电子书,其实我是将其当作对《自己动手写操作系统》一书的读书报告和扩展来写的。之所以将其发布出来,是想让更多人得益于我的共享,从零开始去理解一个操作系统,因为很多讲操作系统的书不会讲这些体验,了解了这些就能得到更完整的体验。

有很多人诟病本书的英文名“Write OS with Free Software”从语法上来讲有错误。我不得不承认我没有认真考虑这个名字,只是随手写了上去,所以可能下次发布的时候本书英文名会更改为“Write Your Own OS with Free and Open Source Software”,不知道各位可有更好提议?

我不敢说自己写这本书就是大公无私,回报开源社区,没有一点私心。私心是有的,不过只是为了出一点小名。现在的杨文博仅仅是无名小卒一个,有一些小小名气之后,于找工作交朋友都有益处。我花费了不少的气力在这本书上面,除了一点点名气并没有要求其它的什么,所以我欢迎中肯的批评和建议,而不是对本书毛病的横加指责。谁不想得到别人对自己工作的尊重呢?

我仍是研究生一年级学生,上个学期周五和周末都会去一间公司兼职来赚点生活费。因为作息和饮食一直不够规律引发了身体的一些零件出现问题,所以这个学期辞去了兼职工作专心学习。我有我的正常生活,网络仅仅是我生活的一小部分,这些小小名气也不能解决我的吃饭问题。我不保证电子书的更新发布速率会满足某些读者的要求,所以我只能说我尽力,非常感谢你们能喜欢这本书,很抱歉但请不要在这一点上指责我。

免费电子书《使用开源软件-自己动手写操作系统》Revision 1 发布

最后更新时间:2008年02月21日19点08分

免费电子书《使用开源软件-自己动手写操作系统》的官方主页为:http://share.solrex.org/WriteOS/ ,您可以到这里下载 pdf 格式电子书和随书源代码。

我叨叨了一个多月的这本书总算能发布第一个版本了,娘啊,费了老鼻子劲了。好多工作要花费在排版上,因为希望整得效果好点儿嘛!而且写了才知道,把自己知道的东西清楚地表述出来真不是件容易的事儿。啥也不说了,看图,还有目录。

免费电子书《使用开源软件-自己动手写操作系统》(无法看到此图,可能因为您无法连接国外网站)

写在前面的话i
序言vii
第一章计算机启动1
1.1 计算机启动过程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 磁盘抽象物理结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1 硬盘. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.2 软盘. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.3 启动扇区. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 使用虚拟机. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.1 VirtualBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.2 Bochs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4 使用软盘镜像. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4.1 制作软盘镜像. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4.2 用软盘镜像启动虚拟机. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
第二章最小的“操作系统” 19
2.1 Hello OS world! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.1 Intel 汇编转化为AT&T(GAS) 汇编. . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.2 用连接脚本控制地址空间. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.3 用Makeˉle 编译连接. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.1.4 用虚拟机加载执行boot.img . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2 FAT 文件系统. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.1 FAT12 文件系统. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.2 启动扇区与BPB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2.3 FAT12 数据结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.2.4 FAT12 根目录结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.3 让启动扇区加载引导文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.1 一个最简单的loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.2 读取软盘扇区的BIOS 13h 号中断. . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.3 搜索loader.bin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.3.4 加载loader 入内存. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.3.5 向loader 转交控制权. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.3.6 生成镜像并测试. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.4 本章全部源代码. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

我的一些关于盗版的观点

前段时间我写了篇 扔掉你 Windows 操作系统中的盗版软件吧 的博客文章,那是因为我不得不使用 Windows 下的 QQ 来和我女友进行视频聊天,而我又不想在我的系统中再次塞满盗版软件,所以就尝试着完全使用免费软件来工作,结果我发现效果还很好。不使用盗版软件并没有影响我的工作,有时候反而能促进我的工作效率,所以我想打破“使用 Windows(正版) => 不得不使用盗版软件工作”这种神话。

我并不是一个无条件反对使用盗版的人。我认为版权保护的目的就是为了促进人类知识和智慧的发展,就像林肯说的那句话:The patent system added the fuel of interest to the fire of genius. (专利制度是为了用利益燃料来浇灌天才之火。) 而在当前的某些状况下,版权保护体系其实是在实现某些团体的利益,而阻碍了人类知识和智慧的发展。因为有很多后发国家,有很多落后社会,版权保护体系在它们和先进国家之间划分了一道巨大的数字鸿沟。从某种意义上来讲,这有点像垄断组织对资源的控制和对其它后起企业的挤压一样,虽然垄断组织也是从自由竞争中发展起来的,但是当它成为阻碍市场发展的力量时,它就应该被拆散。

所以说,我不反对“贫困却希望享有平等获得信息权利”的盗版行为(比如盗版音乐、电影、书籍),我也不反对“由需要而只能使用无法替代的应用”的盗版行为,但是我反对“了解到有替代的东西而不去使用它”的盗版行为,更反对“知道这一切却我行我素并不以使用盗版为耻”的盗版行为。总的来说我的观点是:如果一个人使用盗版,必须感到抱歉,认识到这是一种违法行为;如果某种东西无法替代,为了自身的发展,可以在很抱歉的情况下来使用它;如果某种东西可以替代,那么就应该采取行动避免使用盗版。

关于盗版不仅仅是道德层面的问题,还有一些其它的影响。这些警钟已经被敲过很多遍了,就比如关于 Windows:微软的新操作系统 Vista 引入了一些 DRM(Digital Right Management)的新特性,微软喜欢把这种概念叫做“可信计算”,有一个计划叫做“palladium”,后来改名叫做“NGSCB(下一代安全计算基础,Next Generation Secure Computing Base)”,意思是为了用户安全。但是关于这个说法,Richard Stallman 的一句话 说的很正确:

When Microsoft speaks of “security” in connection with palladium, they do not mean what we normally mean by that word: protecting your machine From things you do not want. They mean protecting your copies of data on your machine From access by you in ways others do not want.(当微软提到和 palladium 有关的“安全”时,它的意思不是我们所说的“安全”的通常意义:“保护你的机器,不做你不想做的事情”。他们的意思是:“保护你机器中的数据拷贝,在他人(和微软相关的企业或者组织)不允许的情况下,你不得访问。”)

那么这个的实际意义就是:你在 Windows 下用 QQ,不是你觉得“我相信 QQ,我要用。”你才能用,而是需要 Windows 说“我相信 QQ,你能用!”,你才能用。这才是可信计算的真正意思,可信计算组织要控制你访问自己系统资源的能力,所以不要相信什么带有安全芯片的笔记本电脑,那个安全和你的安全是不一样的。况且,任何国家生产的安全芯片,都是需要加入某些国家安全部门产品的。

这些大公司大企业(就是你正在侵犯他们版权的那些企业)并没有那么慷慨,盗版的代价迟早是要付出的。他们所做的是让你先陷入盗版的深渊,然后再剥夺你的自由权利,最终获取更大的控制权和更多的利益。Trusted computing 就是其中的一步,当每台电脑都被微软强制安上安全芯片后(这可能是由盗版用户的市场贡献给微软带来的特权),恐怕你运行自己写的程序也要先给微软发封电子邮件以得到许可了。

那么如何避免这种现象的发生呢?只需要提几个问题你就明白了:如果 Linux 占桌面市场操作系统份额 50% 以上,微软会/能这样做吗?如果 Loongson(龙芯) 在中国个人电脑芯片市场占统治地位,Intel 会/能这样做吗?如果世界前 10 名高性能计算机中 Lenovo 占一半以上,IBM 会/能这样做吗?

所以不使用盗版软件,也是你为后代人做的贡献,恐怕你不想听到你的孙子问你:“爷爷,为什么我爸爸要花掉收入的一半去买操作系统和其它软件的授权呢?”