2007年8月23日星期四

尝试Colemak布局



Colemak(http://colemak.com/)键盘布局是我在比较Dvorak键盘布局的效率时认识的。Colemak给我的第一印象是,它跟QWERTY很像,ZXCVBQW这些键的位置都没有变。在Colemak网站的FAQ(http://colemak.com/FAQ)上,发明者Shai Coleman列举的Colemak优于其他键盘布局地方有(括号内是我的解释):


  • Colemak的用户群正在增加。(有助于不断完善Colemak,开发相应软件。)

  • Colemak的设计初衷之一就是易学,很容易从QWERTY转换过来。(Colemak指改变了17个按键,而Dvorak改变了33个按键)

  • Colemak保持了Ctrl+Z/X/C/V四个快捷键的位置(请参见我的文章《解决Dvorak键盘布局快捷键的问题》)

  • Colemak对小指的负担不高。(Dvorak把L放在右上角。L键是一个常用键,因此对右手小指要求较高)

  • Colemak键盘布局的设计很稳定。(不会经常变化,要求用户重新熟悉)

  • Colemak可以在多种操作系统上使用。(Windows, Mac, Linux/Unix)

  • Colemak有相应的打字练习。(http://colemak.com/Learn


对于在Windows下使用中文输入法的用户来说,安装Colemak布局的最好方式是注册表重映射(Registry remapping)。注册表重映射是在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout键下建立一个名为Scancode Map的二进制键值,用于存放新键盘布局的键盘扫描码(Scan code)。启动系统时,Windows读取修改后扫描码,这样,整个键盘就被重映射了。如果想改回QWERTY布局,只需要删除键值,重启即可。

为什么是最好方式呢?因为一般输入法都有自己的键盘映射模块,会自己判断扫描码。注册表重映射是很低层的修改,新键位对输入法同样有效。

Colemak的注册表重映射实现在这里下载:http://colemak.com/pub/windows/Kmapper-1.0.zip。其他实现方式在这里下载:http:http://colemak.com/Download

用Colemak打了这两篇文章后,感觉最不舒服的是J键。虽然J在英文里是极罕见字母,在拼音里确是常用字母。但愿习惯后会好些。

解决Dvorak键盘布局快捷键的问题

虽然Dvorak键盘布局比QWERTY的排列更合理,但对于已经习惯QWERTY键盘的人来说,迁移的难度是很大的。对于惯用右手握鼠标的人来说,其中之一便是左手的那些热键,Ctrl+Z, Ctrl+X, Ctrl+C, Ctrl+V, 等等。因为现在的ZXCV都在键盘偏左的位置,所以不得不用右边的Ctrl键;另外,ZXCV等键相隔都很远,按起来很不舒服。

有没有办法修改Windows的全局热键呢?当然不行,我们没有Windows的代码。

能否使用重映射(Remapping)按键将ZXCV等键映射到原来的位置呢(这种方法很常见,很多日本同人格斗游戏的按键都可以通过软件修改到WASD来)?不行,因为这样就破坏了Dvorak键盘布局。

我们要找的是这样的工具,它能全局地拦截按键,并对指定的按键进行替换。替换的要求不只是单独的按键,同时要是按键序列。替换后的按键同样不只是单独的按键,同时要是可自定义的按键序列。

我尝试了很多软件,都无法满足以上的所有要求。昨天下午,无意间在VeryCD的一篇帖子里找到一个名叫Key Transformation(http://www.softboy.net/key/)的软件,试用后发现它满足所有要求。不过这是一个收费软件($44.95!)。要知道,别人一套虚拟机(Parallels Workstation)也才$49.99啊,怎么说,虚拟机的含金量也要高得多吧。放弃……

终于,在RandyRants找到了一篇文章介绍AutoHotKey(http://www.autohotkey.com/)。这是一个开源软件,免费。它能读取脚本文件,按宏的定义来替换按键。由于AutoHotKey支持的宏命令非常丰富,所以它完全能够胜任我们的要求。

比如,我们创建一个脚本文件test.ahk,输入

^j:: SendInput ^c

运行脚本后,按下Ctrl+J就相当于按下了Ctrl+C,而Dvorak的J键就在QWERTY的C键的位置。

当然,我们完全可以用AutoHotKey来模拟出一整套Dvorak键盘布局。事实上,在AutoHotKey的论坛上已经有人写出了脚本(http://www.autohotkey.com/forum/topic4473.html)。

另外,如果有兴趣的话,可以到这里(http://www.siteuri.ro/dvorak/)看看。这里有一个程序,你输入了一段文字后,它可以输出用各种不同键盘布局输入的效率比较。48小时之内允许测试5次。注意,最后一个键盘布局是Colemak,我正在熟悉它。关于Colemak键盘布局,我在下一篇文章中详细介绍。

不过,用新键盘来打出这么多字真是很累啊。万事开头难。

2007年8月20日星期一

RecycleTorrent 能够正常工作了!

经过近半年的努力,现在终于把一个有界面、有逻辑的基本BitTorrent客户端做出来了!主要还是用了Qt的框架,在Visual Studio 2005 SP1上编译。中间遇到很多问题,在解决问题的过程中也学到了不少,得到很多乐趣,这也是激励我在计算机这个行业中不断前进的动力了。

当然,目前连一个Alpha都还说不上,因为功能很不完全。不过既然已经走上正规,后面的工作主要就是体力活了:)

放上几张截图:


初始状态


尝试连接中


和BitComet对传数据


断开连接后

------------------------------------------------------------

当我把程序复制到一个干净的Windows XP SP2虚拟机里时,居然报错,截图如下:



Dependency Walker出错如下:



Side-by-Side?没怎么听说过啊?其实就是%systemroot%下面那个WinSxS文件夹里面装的文件。那些动态链接库按版本存放在WinSxS里。生成程序的时候,VS会创建.manifest文件,该文件用于保存目标文件的外部依赖的库,同时记录库的版本。当库文件未找到或者版本不符时都会提示程序无法运行。因为虚拟机里当然没有安装VS2005 SP1对应的CRT库,所以报错。下载Mircosoft网站上的Visual C++ Redistributable并不能解决问题,因为Microsoft目前还没有更新到SP1版本。当我复制[Visual Studio 2005 安装目录]\SDK\v2.0\BootStrapper\Packages\vcredist_x86\vcredist_x86.exe到虚拟机并安装后,就没有问题了。Microsoft的东西还真是挺麻烦的。(主要参考了这篇文章:Side-by-side screwup