当前位置

技术

技术

Thinkpad 上的仿 'SMS' 应用演示

还记得上次对 MacBook 做的关于 SMS 的介绍吗?IBM 的 dw 刚刚放了一篇关于如何用 perl 检测 HDAPS(硬盘主动保护系统) 传感数据并控制程序的例子。同时 YouTube 上也有演示:

从 YouTube 的相似链接来看,还有用 ruby 实现的例子... 当然,目前这一切只能在 linux 上实现

可惜偶的 r51e 不支持 APS,又增加一点缺憾

Topic: 

万里开源

我是在搜索 mysql 的一个功能的时候发现 mysql 居然有了官方的中文手册,然后顺藤摸瓜,知道这个手册是万里开源这个公司提供的。

从缺乏创意的名字,这个公司实在无法在第一时间内获得我们的尊重,但它却是 MySQL 在中国的金牌合作伙伴,真是让人大跌眼镜。在 google 上搜索,关于这个共创Turbolinux 合作产物的介绍是少之又少,首页也是很没有诚意的 "Under constructing....",直接输入 http://greatlinux.com 更是直接去了 turbolinux,不由得让人们对其是否能承担 mysql 金牌合作伙伴(可能还是中国大陆唯一)这一使命而心存疑虑.

但无论如何,对于中国现在如火如荼的以 MySQL 开始其基础架构的创业公司而言,现在有了一个可以近距离获得现场支持的可能,另一方面,这类基于开源产品的专业服务也是中国难能可贵的尝试。至少万里开源的血统还算高贵纯正,如果您确实在担心存储在 MySQL 中的数据有一天可能突然无法访问,那么可以考虑联系一下万里开源,看看他们的实力和姿态是否足以打动你们的 CIO。当然价格也是需要考虑的因素,MySQL 的白金服务也不过 5000$/Year,不晓得万里开源是怎么定义其服务项目和收费标准的。

虽然我得承认我个人并不喜欢它,但这里还是先为其鼓掌吧。

==================================================
后记:这样的写作风格是不是所谓的华尔街体

Topic: 

用免费工具 VC Toolkit 2003 编译 Mozilla Firefox 1.5

由于编译过程中需要生成的临时文件 xpidl.exe 要链接 glib 和 libIDL,对应 MOZILLA_1_8_BRANCH 来说,用 vc8 链接它们有些问题(Visual C++ 2005 Express Edition),需要的 patch 都在 trunk 里面。所以如果是编译 Firefox 1.x,1.5.x,甚至以后的 2.0.x 的话,最好还是用 Visual C++ Toolkit 2003

但另一方面,Visual C++ Toolkit 2003 是一个很不完整的开发平台,欠缺不少编译需要的工具和库,下面是我的编译环境配置过程,供参考:
1. 安装 Visual C++ Toolkit 2003,30兆安装包.
2. 安装 .NET Framework Redistributable Package version 1.1,20兆安装包(当然可能你的 XP 在升级过程中已经具备了这个环境)
3. 安装 .NET Framework SDK version 1.1,100 兆安装包
4. 安装 Platform SDK. 我半年前只有"Microsoft® Windows Server 2003 SP1 Platform SDK - April 2005 Edition",现在最新版是"Windows Server 2003 R2 SDK - March 2006 Edition". 我只安装了:
 Configuration Options(但没有安装 Register Environment Variables)
 Microsoft Windows Core SDK(Tools、Build Environment、Redistributable Components)
 Microsoft Web Workshop (IE) SDK(只安装了 Build Environment)
5. 安装 MASM32,半年前是 8.2,现在最新版本是 9。免费下载,3兆安装包。这包里面提供了 ML.EXE 和 DUMPBIN.EXE 是编译需要的
6. 下载 moztools-static.zip ,以及 vc71-libIDL-0.6.8-bin.zip、vc71-glib-1.2.10-bin.zip. 安装方法为:
 6.a 解压 moztools-static.zip 到 C:\moztools
 6.b 解压缩 vc71-libIDL-0.6.8-bin.zip、vc71-glib-1.2.10-bin.zip. 比如到 C:\vc71 目录
7. 安装 cygwin,除了缺省包以外只需要
 Devel 类别下选:patchutils, make 3.80 (not 3.81!)
 Interpreters 类别下选:perl
 Archive 列表下选择:zip, unzip
 安装完以后把 cygwin 环境里面的 link.exe 改个名字,因为路径上可能有冲突

基本上免费工具就这么多了,但是还是缺,需要 hack.....
1. VC Toolkit 2003 没有缺省带 lib.exe, 要获得有两个方法
 1.a 要么是安装 Platform SDK 的时候选择 Microsoft Windows Core SDK -> Tools -> Tools (AMD 64-bit) 来获取
 1.b 而我当时看到 64bit 就害怕,就自己创建了一个 lib.bat,内容为:
  link /lib %*
 然后修改 mozilla 关于 lib.exe 的相关配置
  修改 configure、nsprpub/configure,寻找 ""AR=lib"" 以及 ""HOST_AR=lib"" 的地方,修改成 lib.bat
  修改 security/coreconf/WIN32.mk,寻找 ""AR = lib"",修改成 lib.bat
 以上方法参考链接
2. 生成 msvcprt.lib (在 Cygwin 环境下..)。
 进入 ""C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin"",执行
  echo ""LIBRARY msvcp71.dll"" >msvcprt.def
  echo ""EXPORTS"" >> msvcprt.def
  dumpbin /exports msvcp71.dll | awk '{ if (FNR > 19 && $4 ) print $4}' | sed -e 's/\r//' >> msvcprt.def
  link /lib /def:msvcprt.def
  mv msvcprt.lib ../lib
 参考 链接

在 cygwin 自己的 home 目录下创建 .mozconfig
. $topsrcdir/browser/config/mozconfig
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/my_firefox
ac_add_options --enable-optimize
ac_add_options --enable-crypto
ac_add_options --enable-static
ac_add_options --disable-shared
ac_add_options --disable-debug
ac_add_options --disable-tests
ac_add_options --disable-activex
ac_add_options --disable-activex-scripting
ac_add_options --disable-xpconnect-idispatch
ac_add_options --disable-accessibility
ac_add_options --disable-test

设置编译所必须的环境,比如创建一个 vc71.bat 文件
@echo off
rem --- Basic config, with VC7 libIDL files
SET MOZ_TOOLS=C:\moztools
SET GLIB_PREFIX=C:\vc71
SET LIBIDL_PREFIX=C:\vc71
SET CYGWINBASE=C:\cygwin

rem --- Clean slate start
SET INCLUDE=
SET LIB=
SET PATH=C:\;C:\windows\system32;C:\windows;C:\windows\system32\wbem;

rem --- Then prepend Cygwin path
SET PATH=%CYGWINBASE%\bin;%PATH%

rem --- Set VC7 compiler environment vars

CALL ""C:\Program Files\Microsoft Visual C++ Toolkit 2003\vcvars32.bat""
CALL ""C:\Program Files\Microsoft Platform SDK\SetEnv.Cmd"" /XP32 /RETAIL
CALL ""C:\Program Files\Microsoft.NET\SDK\v1.1\Bin\sdkvars.bat""

rem --- Add glib/libidl to build environment
SET PATH=%PATH%;%GLIB_PREFIX%;%GLIB_PREFIX%\bin
SET INCLUDE=%GLIB_PREFIX%\include;%INCLUDE%;
SET LIB=%GLIB_PREFIX%\lib;%LIB%

rem -- moztools comes last after glib/libIDL
SET PATH=%PATH%;%MOZ_TOOLS%\bin;C:\MASM32\bin

bash --login -i

最后执行这个 bat 进入编译环境,进入 mozilla 源代码目录,
 make -f client.mk build

如果编译过程中报告什么没有 comsupp.lib,可以打个 patch 让程序不去找它.
参考http://www.koka-in.org/~zophos/SideB/daytripper/index.rhtml?date=20050208
--- browser/components/build/nsModule.cpp.orig 2005-02-07 14:50:22.350250000 +0900
+++ browser/components/build/nsModule.cpp 2005-02-08 18:34:08.470375000 +0900
@@ -58,7 +58,7 @@
#include ""nsPhoenixProfileMigrator.h""
#include ""nsSeamonkeyProfileMigrator.h""
#if defined(XP_WIN) && !defined(__MINGW32__)
-#include ""nsIEProfileMigrator.h""
+//#include ""nsIEProfileMigrator.h""
#elif defined(XP_MACOSX)
#include ""nsSafariProfileMigrator.h""
#include ""nsOmniWebProfileMigrator.h""
@@ -89,7 +89,7 @@
NS_GENERIC_FACTORY_CONSTRUCTOR(nsProfileMigrator)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSeamonkeyProfileMigrator)
#if defined(XP_WIN) && !defined(__MINGW32__)
-NS_GENERIC_FACTORY_CONSTRUCTOR(nsIEProfileMigrator)
+//NS_GENERIC_FACTORY_CONSTRUCTOR(nsIEProfileMigrator)
#elif defined(XP_MACOSX)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSafariProfileMigrator)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsOmniWebProfileMigrator)
@@ -136,11 +136,10 @@
nsProfileMigratorConstructor },

#if defined(XP_WIN) && !defined(__MINGW32__)
- { ""Internet Explorer (Windows) Profile Migrator"",
- NS_WINIEPROFILEMIGRATOR_CID,
- NS_BROWSERPROFILEMIGRATOR_CONTRACTID_PREFIX ""ie"",
- nsIEProfileMigratorConstructor },
-
+// { ""Internet Explorer (Windows) Profile Migrator"",
+// NS_WINIEPROFILEMIGRATOR_CID,
+// NS_BROWSERPROFILEMIGRATOR_CONTRACTID_PREFIX ""ie"",
+// nsIEProfileMigratorConstructor },
#elif defined(XP_MACOSX)
{ ""Safari Profile Migrator"",
NS_SAFARIPROFILEMIGRATOR_CID,
--- browser/components/migration/src/Makefile.in.orig 2005-02-07 14:50:22.787750000 +0900
+++ browser/components/migration/src/Makefile.in 2005-02-08 09:00:43.763625000 +0900
@@ -84,8 +84,7 @@
ifeq ($(OS_ARCH)_$(GNU_CXX),WINNT_)
DEFINES += -DPSTOREC_DLL=\""$(subst \,\\,$(WINDIR))\\system32\\pstorec.dll\""

-CPPSRCS += nsIEProfileMigrator.cpp \
- $(NULL)
+CPPSRCS += $(NULL)
endif

ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT)))

Topic: 

微软的免费 C++ 编译器

虽然已经有 CygwinMinGW 的 gcc/g++,但在 Win32 平台下,被广泛接受的还是 Microsoft 的 VC。而且 firefox、python 这样的重量级开源项目,win32 平台上的二进制版本,也仍然是用 VC 系列编译的.. 因为 VC 更加稳定.

在当今一片免费开源的潮流下,微软也为贫穷的程序员们提供了免费 VC 工具,先后是 "Visual C++ Toolkit 2003" 和 "Visual C++ 2005 Express Edition". 或者说 "VC 7.1" 和 "VC 8".

现在在 Visual C++ Toolkit 2003 的主页上,下载链接已经被去掉,转而劝告人们使用 Visual C++ 2005 Express。但实际上,VC 7.1 还是很有用处的,比如 Python 2.4 和未来 Python 2.5 的扩展编译都应该在 7.1 下完成。

这里提供一个下载使用 vctoolkit 2003 的方法,去 google 上搜索 VCToolkitSetup.exe,还是很有一些下载链接的... 它的 MD5SUM 为: 90d8b963ca196aa9855b2ca6c3174c14

计划下篇 blog 介绍用免费工具编译 firefox , sigh.. 还是很麻烦的. 大半年前试着编译了一下,然后顺手更新Mozilla developer center 上的中文版 Windows Build Prerequisites. 好像国内在 win32 上编译 fx 的很少很少的说.

Topic: 

最近做的事情

由于下决心不在新买的这台 R51e 上安装没有许可证的软件,所以也就没有了 outlook,因此我的手机也无法和 PC 同步了。

本来对于 Ericsson/SonyEricsson 的手机而言,有一款 FMA 是不错滴,可是它对中文的支持有故障,同步的地址本会丢失,于是只能自己动手了...

最终计划是用 Python 完成一个能和 ThunderBird 同步的程序。近两周来课余时间一直在尝试,完成的东西包括:
1. Python 的 irda socket patch. 目前已经能在 win32 下工作的很好,还特意加入了 python-dev 邮件列表,结果有些受打击——python 2.5肯定没戏了,看 python 2.6 会不会有维护人员对这个特性感兴趣吧
2. 基于 irda socket 的 irda 类
3. 实现 obex 协议的 obex 类,目前包括 connect/disconnect/get
4. 定义了一个承载 obex 的传输层接口类,以及从它继承来的 irda 的实现
5. 正准备开始实现 IRMC-SYNC, 基本协议已经了解七七八八了,感谢某牛人翻译的资料
6. 开始研究 sqlite,计划先实现 phone 和 sqlite 之间的同步再说.

对于 oo 我可以说完全是一个白痴,这次是第一次用类实现比较复杂的结构,战战兢兢,也没有信心把这个东西的源码给别人看 :)

关于手机同步研究到这里,已经感觉有些吃不消了,还有一个及其麻烦的操作 thunderbird 地址本的问题,以及最终的 GUI 操作界面.. 估计整个七月都搭进去了. :(

Topic: 

在 windows 下通过 python 访问红外设备

打算尝试一下和手机作同步,在 Windows 下开发,语言显然只能选择 Python 了。首先下载了 fMA 的源代码(它是用 Delphi 写的),找到可能和 Irda 相关的文件,仔细看了看它的代码和注释,然后又从注释里面找到了 MSDN 关于红外编程的链接

查找 Windows 下开发方法的同时也参考了 MultiSync 中关于红外部分的代码。现在可以确认无论是在 Linux 下还是在 Windows 下,操作红外 IrCOMM 都是通过 socket 完成的,下面展示一下 win32 获取红外设备列表的代码。

  1. from socket import *
  2. from struct import *
  3.  
  4. #imports from WIrCOMMSocket.pas
  5. SOL_IRLMP = 0xFF
  6. IRLMP_ENUMDEVICES = 0x00000010
  7.  
  8. DeviceInfoSize = 29
  9. DeviceList = []
  10.  
  11. IrdaSocket = socket(AF_IRDA, SOCK_STREAM)
  12. IrdaInfo = IrdaSocket.getsockopt(SOL_IRLMP, IRLMP_ENUMDEVICES, 1024)
  13. DeviceNum = unpack('i', IrdaInfo[:4])[0]
  14. print DeviceNum
  15. DeviceListInfo = IrdaInfo[4:]
  16. for i in range(0, len(DeviceListInfo), 29):
  17.     DeviceInfo = DeviceListInfo[i:i+29]
  18.     DeviceInfo = unpack('i22sccc', DeviceInfo)
  19.     DeviceList.append(DeviceInfo)
  20.  
  21. IrdaSocket.close()
  22.  
  23. if len(DeviceList):
  24.     print "DeviceID  :", DeviceList[0][0]
  25.     print "DeviceName: " + DeviceList[0][1].strip('\x00')
Topic: 

班车是队还是栈?

一般来说,班车都是只有一个门的巴士(除司机的门外)。从外型上看,这是一个典型的栈。可它真是一个栈么?

就我的经验,班车来后,下面的人鱼贯而入,先进车门的为了先下车,会挑选靠近车门的位子坐。这样,班车从实际的功能上看,它就成了一个队!

当人太多车上座位不够时,会有一批人站在车里,那么下车时,站着的人当然不是后入后出,所以这时候班车就成为了一个混合栈的队,或着说是一个混合队的栈。

人真是一种可爱的动物,可以把一个本来是甲的东东硬生生的做成乙。

呜呼,为什么会这样?套用btsb的结尾方式,这个现象告诉我们,什么事物只要人掺乎进来了,那就复杂了,人越多,越复杂。

附件大小
图像图标 shuttle.jpg29.18 KB
Topic: 

最近看到的一些消息

觉得放到 link.eyou.com/qiuyingbo 不大合适,还是写到 blog 里面罢

1. google 访问不通畅和局域网内有人安装 Google Desktop 有关系

2. firefox trunk nightly build 已经开始支持 javascript 以外的脚本语言来操作 DOM 了... 够 cool 吧。首先支持的是 python,用 type="application/x-python" 来表示内嵌的脚本不是 JavaScript 而是 python. 不过我还没有尝试...

3. 利用 SVG 来操作网页对象的功能已经实现,比如旋转网页什么的,可以看这个链接的截图。该功能我已经运行最新的 trunk build 验证过,没有问题

前不久 trunk build 浏览 dup2.org/blog 就 crash 的 bug 也解决了,虽然 opera 9 也有很多好的特性,但比来比去,还是 firefox 看起来更酷一些

Topic: 

SMS, Cool!

这里说的 SMS 可不是那种用来抢钱东西,而是 Mac 笔记本上的 Sudden Motion Sensor (紧急动作感应器),IBM 从 R50/T41/X40 开始也装备了类似的技术,不过名字叫 APS (Active_Protection_System)

上周为了解决 AMD64 下网卡不通的问题,亲自动手下载了最新的 linux kernel source 去编译,结果在查看编译选项的时候看到了支持 IBM ThinkPad 硬盘主动保护的模块。立刻就想起前不久同事说的苹果笔记本上,拍屏幕即可切换桌面的技术。上网搜索,发现这项技术最热门的应用是 MacSaber,模拟星球大战里面光剑的嗖嗖声的效果. 见下面的演示:

切换桌面的程序叫SmackBook Pro. 效果见下面的演示:

对于 ThinkPad 用户来说,好消息是类似的开发已经有人在进行了,但是还不够好用.. 呵呵,希望有一天可以在 ThinkPad 上拍屏幕来切换 Gnome 桌面..

也有别人在尝试用这个技术研制笔记本防盗,呵呵,比上述的两个应用有用多了,但是就不够酷了..

Topic: 

近期的几个发现

1. >2GB 文件

碰到过好几次 apache log 撑爆 2G 的悲惨事件... 那么,怎么开发支持 >2G 的文件呢??

找到一个关于此问题的站点,http://ac-archive.sourceforge.net/largefile/index.html,刚刚发现。强烈推荐...这里仔细介绍了 Largefile 在各个平台上支持的情况

研究下来,觉得支持 >2GB 不难,现代的 C 库都已经包装的很好了。http://ac-archive.sourceforge.net/largefile/programming.html 说的很清楚

2. 虚拟化

VMware Player是一款免费产品,但它不能创建虚拟机,只能运行一个已经存在的虚拟系统。有人介绍了两个创建虚拟机的方法,一个是 VMX Builder 这个本地应用程序来运行,另一个就更酷,EasyVMX.COM 可以在线定制一个虚拟机下载.

vmmatrix开源软件镜像下载服务用过不少次,昨天才想起来看看这个到底是一个做什么的公司. 发现他们原来是提供虚拟主机服务,就是用 VMware 或 XEN 让虚拟主机使用起来类似一个真正的主机,甚至可以自由的远程关机,重装操作系统. 这样在传统的独立主机和虚拟主机两个产品之间,虚拟机对于 Geek 来说,可能真是不错的东东.

Topic: 
订阅 RSS - 技术