技术

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: 技术

GNU/Linux 发行版简单对比

Ubuntu 8.04 vs openSUSE 11.0 vs Fedora 9

Fedora9 没有深入用,就是下了个 LiveCD,从光盘启动运行了看看..

桌面背景 Fedora 的蓝最漂亮,而且还定制了鼠标光标。
openSUSE 的绿也还行,但鼠标特效和 ubuntu 一样,估计是 GNOME 缺省带的
Ubuntu 的颜色不如以上两个惊艳。

而且为什么 ubuntu 的 grub 启动菜单缺省不是图形的?难以理解。openSUSE grub 菜单相当的漂亮

硬件支持 Ubuntu 最好,自动给我装了 ATI 的闭源驱动;openSUSE 马马虎虎,安装完成后第一次自动更新,问我设置几个安装源,里面可以选择 ATI、Nvidia 的驱动仓库
openSUSE 能很好的支持我笔记本的 ACPI,正是因为这一点让我毅然干掉了 Ubuntu

Ubuntu 能直接识别出 D-Link G650+ 网卡,然后加载 acx 驱动;openSUSE 在自动更新的时候可以识别出缺 acx 驱动,并下载,可惜驱动里面没有包括闭源的 firmware,还是得用户自己去找;Fedora 就更差一些,缺省居然没有 ndiswrapper 驱动

openSUSE/Fedora 都是 NetworkManager 0.7svn 管理网络连接,Ubuntu 是 0.6.6(好保守哦)

Fedora 和 Ubuntu 的中文支持都还不错,个人觉得 Fedora 可能更好一些。openSUSE livecd 里只有最丑陋的一个中文字体,如果你用 openSUSE livecd 的时候不小心选择了中文语言,那界面和字库以现在08年的标准看令人作呕,以前看网上推荐用 DVD 安装,现在终于明白是为什么了。

Fedora 和 Ubuntu 的菜单系统是 GNOME 缺省的。Fedora 稍有调整,算是比 Ubuntu 强那么一点点

openSUSE 用的是全新的 Slab,很像 Vista 的菜单。习惯标准菜单的人需要适应,但我觉得 Slab 是一个正确的道路。

openSUSE 最大的问题是中文社区支持比这两个都差,而且缺乏国内快速访问的仓库。相比较来说,Ubuntu 中文社区我感觉比 Fedora 要强。这应该也是 Canonical 和 RedHat 的定位差异而导致的结果

最后,openSUSE 比起另外两个有些额外的特性,比如官方对 KDE 的支持。其 yast 系统配置功能太丰富了,很好很强大,但另一方面我觉得对新手未必友好。这个项目为什么不和 freedesktop.org 合并呢?

Topic: 技术

Linux 下 D-Link G650+ 的 LEAP 无线认证

怀疑搜狐内部的网络环境是一水的 cisco,除了 vpn 是 cisco 提供的客户端外,无线也是走 cisco 的 LEAP 认证

我现在用的是 openSUSE 11.0,用 NetworkManager 0.7svn 做网络连接管理。

D-Link G650+ 内部是 TNETW1130 的芯片,对应的 Linux 驱动是 acx,这个模块在 ubuntu 8.04 可正常使用,但在 openSUSE 11.0 上加载后过十几秒就会导致整个系统挂起,从 log 看貌似是管理程序不断的操作这块卡引起的,最后只好转用 ndiswrapper.

这个网卡是很早以前的产品了,D-Link 产品线太多太长,老产品就不好好维护,其网站上的驱动并不是该芯片最新的。后来从一个使用同样芯片的 HWC54G 的网站上找了一个 7.0.1.33 的驱动来使用,我自己是感觉 7.x.x.x 的驱动明显比 6.0.0.18 的要更容易连接进 LEAP 网络.

有了正确的驱动后一切就很简单,在 nm-applet 上选择"连接到其他网络",里面填上 ssid (搜狐无线内网的 ssid 是隐藏的...),安全类型选择 LEAP,然后填上用户名和密码,就可以连接上了..

但偶尔还是会出现无法连接的情况,我怀疑和搜狐隐藏了ssid有关系。因为 ndiswrapper 驱动下用 iwconfig 命令是无法可靠的把 essid 设置上的。后来俺总结了一个技巧,就是在 nm-applet 启动连接的过程中再开一个终端,反复执行 iwconfig wlan0 essid foobar 的命令... 好像这样就可以确保连接上. 汗.......

Topic: 技术

openSUSE 11.0 解决了部分 thinkpad 笔记本 ACPI 的问题

Ubuntu 8.04 在我的 R51e 上 linux ACPI 相关的功能无法很好的使用。包括
1. 加载 thinkpad-acpi 模块慢
2. suspend 无法使用

3. 音量快捷键、屏幕亮度的事件传不到上层应用(这个不影响使用,但老婆的 DELL D600,甚至 qyt 的昭阳都支持的很好)

最后在 http://bugzilla.kernel.org/show_bug.cgi?id=8246 上查到了这个 bug,一年多以前提出来的,已经有好几个人从各个不同的角度给了 patch。虽然还不知道什么时候内核会合并哪一个 patch,但某内核开发者宣传他已经提交到 openSUSE 里了

从 patch 描述看,不止 R51e,那个时期 thinkpad 其它的 XTR 系列机型可能都有这样的问题

还有2天 openSUSE 11.0 正式发布,等待中....

Topic: 技术

Berkeley DB Replication, 以及 Python 开发, 以及 twistd 注意事项

BDB 从 4.0 开始,内建了 Replication 支持。它是在 "DB 环境" 里增加了若干日志文件来保存 Replication 所需要的信息,实际上 db 文件的格式没有为此做特别的变化;另外,它除了提供了隐藏同步的细节的 API 外,它还提供了在几个节点之间选举出新的 Master 的 API,这些 API 统一被称为 Base replication API。可以说 BDB 提供的是一个 HA 解决方案,完全超越了常见的 Master-Slave 模式。

在 BDB 最初的设想里,同步可能是在一个复杂、异构的网络环境(可能不仅仅是 IP 网络,或者需要用到 UDP 传输)里进行的,因此它最开始需要用户自己来编写网络传输的部分 + Base replication API 做开发。从 4.5 版本开始,它提供了一套基于 TCP 连接做同步的更高级的 API,"Replication Manager",开发者几乎不需要做任何工作,就可以轻松构建一个复制集群。

传统的 Master-Slave 的缺点是如果 Master 一旦垮掉,则在其恢复之前整套系统是不可写入的。但在 BDB HA 环境里,Master 垮掉后,剩余的 Slave 将选举出一个新的 Master,以后向新的 Master 写入即可,老的 Master 恢复后可能会作为一个 Slave 节点加入,或者引发一次新的 Master 选举...

注意当前的实现里面,Slave 节点是不可写的(它要是能自动将写请求转发给 Master 节点多好!)。写入者如何将写请求发送到新的 Master 上完全依赖开发者的实现。

如果要实现一个纯粹的 Master-Slave 环境——这样丧失了 HA 特性,但前端实现却很简单,读节点和写节点的网络地址都是固定的——就必须将 Slave 节点的 priority 统统设置为 0

有人在论坛上问过一个很好的问题:slave 节点里是否还需要"lock_detect"或"checkpoint"这样的操作?

官方答复是:checkpoint 就不需要了,但只要 slave 有请求,哪怕只是读操作,就需要做死锁检查

启动 REP 环境还有一点要注意的,尤其是在 slave 节点上,因为 rep_start 是启动线程后在线程里面开始从 master 同步的。如果在 rep_start 函数后就直接 db->open,有可能同步线程里面也在 db->open 而导致死锁。一个建议是等 DB_EVENT_REP_MASTER(master上) 或 DB_EVENT_REP_STARTUPDONE(slave上) 事件后再去 db->open,不过这样做仍然有危险:假如 Master 掉了,启动 Slave 是永远也得不到 startupdone 事件的。我看有的例子是除了等 startupdone 外还设置了一个等待超时时间;或者在这里加入死锁处理循环也是可行的。

对于 replication env 来说,还有一个限制就是 db 文件必须直接放在 home_dir 或 data_dir 目录下,而不能是其子目录中...

如果环境中的 db 文件很多的话,那缺省的 Mutex 数目就可能不够用了。可能是我还不熟悉 BDB,要么就实在是它的 API 报错机制不友好,总之我的应用足足折磨了我一个多星期,才无意中发现了需要调整 mutex_set_max 才能正常工作。教训是如果 BDB 节点工作不正常,首先就要用 db_stat 看看它的各项资源使用情况。

开发 BDB REP 应用,最好用 4.7.25 或更新的版本。在我的测试里面,至少其 Replication Manager 比起 4.6 要可靠一些。

bdb 的 python 绑定现在(pybsddb 4.7.0)只有 Replication Manager 的支持。从 svn trunk 来看,4.7.1 似乎将增加 Base replication API 的绑定。

我的 db 服务是基于 twisted 框架的,首先得到一个 dbenv,然后用它做参数去实例化工厂类。但用 twistd 启动时发现一个问题:当用 -noy 参数启动,一切都正常;但如果想放到后台用 -oy 参数的话,同步就不再工作了。

google 之发现在 twistd 里调用外部线程(比如 rep_start 这样 C 扩展里创建线程的,或直接调用 thread.start_new_thread 启动的)都必须在 reactor 运行后进行,切记切记

总结:bdb 还是挺博大精深的,我强烈预感未来会有 BDB Programmer or BDB DBA 的专门职业出现。至少现在我好像就很缺一个 BDB Programmer... 呜呜呜

Topic: 技术

apt-get install 段错误析软件包的依赖关系树

这个差点让我崩溃了,虽然解决的也是莫名其妙的。一定要记一下。

ubuntu8.04 中,不知怎么的,apt-get 的命令,除了 update 之外,就全部要报“段错误析软件包的依赖关系树”这个错了,从系统->系统管理->新立得软件包管理器运行,在屏幕上闪了一下,就消失了,然后手工在 console 中输入 synaptic,段错误。

疯了,没有 apt-get 还玩个 p 啊,最坏的办法就是重装 ubuntu 了,可是我不甘心,用 aptitude 依然不行,到底哪出错了呢?莫非 apt-get 这个东东坏了?到哪能找到 apt-get 本身啊?我依稀记得之前是用过一个 apt-get autoremove 命令,难道这个命令很危险,用了之后 apt-get 就坏了?

在网上寻了良久,没有看到什么办法可以解决,甚至提这个问题的链接都仅仅找到一个,还没有答案。apt-get 是调用 dpkg 吧,恩(faint,scim 输入法里居然没有[口恩]这个字),试试 dpkg 先,随便找了一个 deb 的文件用 dpkg -i 装了一下,ok,再试试 apt-get install,Oh Yeah,成功了,remove,也成功了,autoremove,想了半天,还是试了一下,也没问题。

实在是搞不懂,不过刚刚在 autoremove 之后,又 install 了 audacious,没问题,我还是喜欢 Winamp 2.X 的面板风格,估计一辈子是改不了了。

Topic: 技术

wbr 是一个很酷的标签

首先参考一下我的这一篇文章,里面有一个很酷的 url link 的折行效果。哦,没错,这就是 wbr 魔术。

事实上昨天我还在为原来的丑陋布局懊恼不已:

不过今天在查找 webmail 的一个 pre 标签里很长一行文字如何强制折行的显示问题的时候,意外的从老韩那里知道了 gmail 的这个处理链接的方案,非常巧妙!

具体妙用,看看那篇文章的源代码就知道。或者用 firebug 看看 gmail 是如何没有发现空格断词的话就猥琐得时不时插入一个wbr标签的。

这个世界上靠精通 HTML 吃饭的家伙除了 W3C 和做浏览器的那帮人外,应该就是 google 这种搜索引擎公司了吧。

关于 pre 的折行问题,也有相应的 css 解决方案,我这里做了一个简单的测试页面

Topic: 技术

近几日记事

1. "If the only tool you have is a hammer, you tend to see every problem as a nail"

觉得自己所学还是远远不够

2. Google App Engine 发布。所谓未来的五台超级计算机,Amazon 的S3/EC2/SimpleDB 已经出现一段时间了,Google 现在也有了...

下一个会是谁?IBM 还是 MS?

3. 连续三天了,本周早上骑车出门,发现学清路居然不堵车了!!!感觉是新通了一条路,不错不错。

Topic: 技术 生活
订阅 RSS - 技术 | BT的花