Tuesday, June 9

Google太客气了

今天的Google Developer Day 2009居然一人发了一台HTC制的Android手机 :P ,触摸屏带2G MicroSD。真是笑纳笑纳了





这次Google Developer Day 2009 YOKOHAMA的主题是A More Powerful Web
强调手机,社区和易用性


精彩的新产品是http://wave.google.com/ 融合mail,chat和sharing的新工具,值得期待

全部照片在
http://picasaweb.google.com/baryon/2009_06_09YOKOHAMA#

Wednesday, January 28

为iphone手动安装pxl文件

上周买了iphone 3G,softbank的黑色16G。越狱成功。安装了一堆软件。
但是pxl格式的软件怎么也安装不上,
iBrickr好像不支持iphone 2.2,pc suit在我的机器里面无法运行,一启动莫名地死掉了。
只好研究了一下如何手动安装pxl文件。

1) pxl文件本质是一个zip文件,将下载的pxl文件的后缀改成zip

例如:

2.0_wobble_1.0.pxl --》 2.0_wobble_1.0.zip

2) 然后解压缩zip文件,形成一个目录结构,含有一个PxlPkg.plist和一个app目录,还有一些Doucment之类的目录
看一下解压结果里面的PxlPkg.plist文件,里面说了app程序的安装位置和权限设置

3) 以2.0_wobble_1.0为例,按照PxlPkg.plist所说,用winscp将Wobble.app目录拷贝到/Applications/Wobble.app,
然后修改app目录权限到777
再修改Wobble.app目录下的Wobble文件权限到775

4)删除/private/var/mobile/Library/Caches/com.apple.mobile.installation.plist这个文件,否则APP格式的游戏或软件可能无法显示

5)重新启动iphone就可以看到安装好的软件了。


app格式的程序参照步骤3,4,5

ipa文件本质也是zip,但是不需要自己拷贝到/Applications,他是被itune自动安装到/private/var/mobile/Applications

Wednesday, October 22

不要将Swap File设置到外接硬盘

我的mac机通过1394口外接了一块250G的Maxtor Personal Storage,使用BootCamp启动vista。因为一开始只给windows留了30G的空间,碰上vista这样的吃空间的巨兽,硬盘很快就没地方了。为了节省宝贵的C盘,有一天灵机一动将swap file设置到外接硬盘上。从那天起,恶魔附身了,电脑休眠,关机时经常会出现莫名其妙的蓝屏。只要通着电源,关机状态的电脑会突然自动启动。真的见鬼了。
一周以后的今天,vista终于告诉我,蓝屏的原因是关机的时候正在对外接硬盘读写,让我确认外接硬盘的驱动是否正确。
原来如此,记住不要将Swap File设置到外接硬盘

Monday, May 26

Ruby的UTF8

做了几天ruby的程序,关于日语和汉语的乱码问题做了一点研究
yaml文件可以是UTF8格式,ruby可以正常读取,但是记得一定是不带signature的UTF8格式
我使用的emeditor编辑器可以保存文件的时候选择这种UTF8 without signature的编码方式。

做ruby和ror程序,包括cygwin的gcc程序的最佳工具就是netbeans,现在最新版本是6.1
在netbeans的output窗口输出的文字也总是乱码,这时候需要手动修改在netbeans安装目录下的\etc\netbeans.conf 这一配置文件。在netbeans_default_options=”….的最后,引号之前空一个格,然后键入-J-Dfile.encoding=UTF-8
保存netbeans.conf,在windows2008里这个目录有权限保护,需要改安全属性,才能保存成功。
重启netbeans应该可以解决output乱码的问题了。

在windows的console窗口显示UTF8,也是一个问题。
据说 chcp 65001 这个命令可以改变console的编码格式,值得一试
另外的办法就是安装cygwin UTF8, 使用cygwin代替一般的cmd console
cygwin UTF8在这里:http://www.okisoft.co.jp/esc/cygwin-20.html
我没有装,因为我在windows2008安装的cygwin出现了问题,如下,百思不得其解

Huh? No /etc/fstab file? Using default root and cygdrive prefix...
bash: /usr/bin/tr: No such file or directory
bash: /usr/bin/sed: No such file or directory
$
根据http://cygwin.com/ml/cygwin-apps/2008-05/msg00180.html
知道/etc/fstab 找不到是目前的cygwin的一个BUG,应该可以很快改好。
目前可以在安装cygwin时选择 Prev 也就是前一个版本。

通过安装UTF-8 Cygwin是可以显示日文和中文的。
下载修改过的cygwin1.dll
http://www.okisoft.co.jp/esc/utf8-cygwin/cygwin1-dll-20-04-21.tar.bz2
解压缩以后置换掉cygwin/bin下的同名文件。
然后修改home/yourname/下的.bashrc和.inputrc文件
将下面两个文件下载,将其内容拷贝到对应文件的最后。注意不要直接置换对应的文件。
http://www.okisoft.co.jp/esc/utf8-cygwin/.bashrc
http://www.okisoft.co.jp/esc/utf8-cygwin/.inputrc

修改适当的字体,你可以用cat看到用UTF8 without signature编码的文件内容。
如果一个rb文件类似

$KCODE='u'
p '日本語は大丈夫ですか'
p '汉语也没问题吗!'

仍然在console上输出乱码



实在没有办法只有
开一个cygwin然后输入

tail -f log.txt

然后在另一个cygwin里面打log出来
ruby -Ku test.rb >> log.txt

Monday, March 31

Boost 1.35

Boost 1.35经过长时间的准备, 终于在2008年3月29日公布了。
最先注意到的就是已经不再公开支持Borloand C++系列的编译器了。

http://www.boost.org/users/news/version_1_35_0

Friday, March 21

Windwos server 2008

日文Windows2008因为一个奇怪的bug,英文版发布2周以后才发布,下载,安装,一切顺利。
我没有刻盘,直接从daemon虚拟光驱安装,没有任何问题发生
windows2008支持vista的驱动,所以我的webcamera也可以安装上了,以前的windows2003是绝对不行的。

很多人将server版改造成workstation

可惜我的机器不是64bit的,使得很有趣的Hyper-V不能跑起来

一个重要的工具DosHere,可以在这里找到,在Vista和2008都好用

Friday, March 14

Windows的远程桌面

微软的Windows远程桌面(Windows Remote Desktop)功能非常之好用,下面有几个tips

1,windwos 2003的login是分console和session。正常从本地启动机器登录的桌面叫做console,从远程是缺省打开一个session的,这同windows xp和vista只能登录console是不同的。
要想远程登录到windows2003的console桌面,
在vista上使用命令:
mstsc /admin

在其他windows上使用
mstsc /console

2,远程桌面使用的port是3389,跨防火墙和route的远程访问要开放此端口

Sunday, February 17

市场决定一切

[東京 17日 ロイター] 東芝 <6502.T> が、新世代DVD規格の「HD DVD」に関連した事業から撤退する方向で最終調整に入ったことが16日、明らかになった。
2月に入って、米家電小売り大手ベスト・バイ や小売世界最大手の米ウォルマート・ストアーズ 、米オンラインDVDレンタル大手ネットフリックス がBD支持を相次いで表明。HD方式の劣勢は一層鮮明になっている。

 事業撤退した場合は、どの程度の損失が発生するかも焦点だ。現時点では損失は数百億円規模になるとの見方が出ている。


东芝这次的失败,对日经指数会造成多大影响,拭目以待。
市场决定一切

中文输入法请支持非英文键盘以及提供更好的输入模式

以下内容我贴在Google 实验室--拼音输入法 网上论坛里。其实国产的各种输入法大都有同样的问题,包括微软的拼音输入法。
对日文键盘支持最好的拼音输入法当然是日本高电社的Chinese Writer

请安装时自动判断系统的键盘布局, 支持非英文键盘。

比如对日文键盘的支持,最起码需要改变下面的注册表
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts
\E0210804]
Layout File=KBDJPN.DLL


另外对于中英文的切换快捷键请支持用户自定义,
我既不想使用shift也不想使用ctrl键
日文键盘的话,我更希望使用【半角/全角】键


请提供一种模式,在英文输入状态下自动提供英文单词提示功能,我不想每次敲 v 键
因为如果是英文输入,多数情况是输入不只一个英文单词
最好更智能,长句输入最好能自动判断现在输入的是英文还是中文。


输入提示最好不要在输入条上,而直接插入到windows的输入位置,按取消和变换也在输入框中做改变。
此功能请参阅windows的日文输入法。

Saturday, January 26

SVN Commit Error

我使用的trac是1.5.1版的Trac月
一个 Commit Error困扰我两天。
这个error的描述类似:

Error:Commit failed(details follow):
Error:MERGE request failed on '/svn/dir1/dir2/file'
Error:MERGE of '/svn/dir1/dir2/file' : 200 OK(https://tracserver)

经过长时间的实验, 发现基于windows的这个版本如果将apache作为service启动就会出现这种现象, 作为console启动没有问题。也许是因为某种权限或者用户路径的原因导致trac的post-commit没有完成。
也有一种说法是post-commit-hook的代码里有bug。
时间有限, 不再深究, 暂且console启动。

同病相怜者:
Vic Learn From World
Ariejan.net

Wednesday, January 10

Error: L6265E

"
Error: L6265E: Non-RWPI Section libspace.o(.bss) cannot be assigned to PI Exec r
egion ER_ZI.
Error: L6248E: libspace.o(.text) in PI region 'ER_RO' cannot have address type r
elocation to __libspace_start in PI region 'ER_ZI'.
"
使用arm编译器编译brew程序可能会遇到这个错误,原因可能有两点
1:程序中使用了浮点数
2:如果使用C++开发brew程序, 可能是使用了原生的new,而没有重定义new,也就是说没有使用MALLOC(sizeof(struct))来初始化对象。

Friday, December 22

brew程序的入口点

一个brew程序的真正入口点在AEEModGen.c里面

#ifdef AEE_LOAD_DLL
__declspec(dllexport) int AEEMod_Load(IShell *pIShell, void *ph, IModule **ppMod)
#else
#if defined(BREW_MODULE) || defined(FLAT_BREW)
extern int module_main(IShell *pIShell, void *ph, IModule **ppMod);
int module_main(IShell *pIShell, void *ph, IModule **ppMod)
#else
int AEEMod_Load(IShell *pIShell, void *ph, IModule **ppMod)
#endif
#endif
{
// Invoke helper function to do the actual loading.
return AEEStaticMod_New(sizeof(AEEMod),pIShell,ph,ppMod,NULL,NULL);
}

可见模拟器通过DLL的公开函数AEEMod_Load进入初始化阶段

brew各个模块之间可以进行消息传递函数回调, 而每个模块都可以单独编译不需要连接lib, 是因为各个模块实际公开的都是函数指针, 类似于
#define ISHELL_SendEvent(p,cls,ec,wp,dw) GET_PVTBL(p,IShell)->SendEvent(p,0,cls,ec,wp, dw)

AEE环境给每一个module都传入IShell指针, 在程序里如果想调用其他模块, 需要首先通过ISHELL_CreateInstance创建一个新的实例。
ISHELL_CreateInstance没有代码可看, 可以猜测AEE通过给出classid, 到自己维护的classid表里找到需要dll(module), 调入内存, 执行公开函数AEEMod_Load做初始化

AEEMod_Load-> AEEStaticMod_New设置modFuncs->CreateInstance = AEEMod_CreateInstance
随后AEE调用这个指针,在AEEMod_CreateInstance里面完成调用AEEClsCreateInstance的任务, classid这时候作为参数传进来
在AEEModGen.h里面有AEEClsCreateInstance函数的声明, 这个函数的定义需要在自己的程序里面完成。
int AEEClsCreateInstance(AEECLSID ClsId, IShell *pIShell, IModule *pMod, void **ppobj);

如果一个module里面定义了多个class就需要判断classid的值,创建不同的实例。

在初始化代码里
if (NULL == (pme = (AEEApplet*)MALLOC(nSize + sizeof(IAppletVtbl))))
return FALSE; //分配空间,nSize代表CAPP的空间大小!!
appFuncs = (IAppletVtbl *)((byte *)pme + nSize);
这两句表明在applet的结构体后面就是IAppletVtbl

appFuncs->AddRef = AEEApplet_AddRef;
appFuncs->Release = AEEApplet_Release;
appFuncs->HandleEvent = AEEApplet_HandleEvent;

在AEEApplet_HandleEvent里面将IApplet指针转换成AEEApplet指针,然后调用AEEApplet的pAppHandleEvent
之所以可以这么转换是因为AEEApplet的第一个成员就是IApplet指针的地址。结构体的第一个成员的地址就是这个结构体的地址。

INIT_VTBL(pme, IApplet, *appFuncs);
这一句使的AEEApplet结构体的第一个成员指向applet结构体后面的IAppletVtbl

Tuesday, December 5

突然想起若干年前某些华人的卑劣

1999年在日本,我第一次搬家。打登载在中文报纸上帮助搬家的人的电话, 电话里的声音听上去很朴实。搬家当天那个人开了一辆面包车来, 一开始并没有说什么。等你家当装在了他的车上, 开车途中, 露出了本像。先套话看你是不是黑户口, 然后用骂骂咧咧的语言, 讲他家开的是风俗店, 差点明说他就是黑社会。让我多交搬家费, 后来当着我一位女同事的面,讲黄色笑话。

2000年陪老婆去参加日语一级考试。校门口,韩国老生摆起桌子提供饮料为韩国学生鼓劲。零散的几个中国妇女往学生手里塞F:L-G的传单。

Friday, December 1

Vista冲击

刚刚看了微软Vista中国发布现场实况。
http://wmv.it168.com/others/06.11.30/Windows.wmv

加上前一段时间ms放出的vista sdk+.net framework 3.0,
http://www.microsoft.com/downloads/details.aspx?FamilyId=C2B1E300-F358-4523-B479-F53D234CDCCF&displaylang=en

我认为vista将迅速普及。这里有两方面的原因
1,面向家庭用户, vista的交互界面对用户的吸引作用,加上硬件的需求很高, 使得intel和dell这样的硬件厂商非常热衷于推广它。推动用户更新电脑就意味着更高的收益。
2,面向企业用户,vista sdk和.net framework 3.0的捆绑对于企业软件提供商有很大吸引。特别是缺少积累的中小软件开发商,因为开发成本降低和用户体验大幅提高, 市场竞争将会更加激烈。

纯技术观点
在vista下运行你的软件, 这个blog显示了可能会存在的一些问题
http://blogs.itecn.net/blogs/winvista/archive/category/1095.aspx

给我印象深刻的是这篇文章
http://blogs.itecn.net/blogs/winvista/archive/2006/09/03/3604.aspx

如果你从一个程序员的角度暂时没有感到冲击,那没什么不正常。因为你还没有面向vista编程。注意vista改变了一些东西,加强了安全性。比如service将处于session 0, GUI将处于session 1, 再比如顶楼blog里提到的"虚拟重定向"。

如果你作为企业类软件的厂商暂时没感到冲击, 那说明你的嗅觉不够敏锐啊。

如果你做为普通用户没有感到冲击, 那说明你非常成熟, 一眼你就看出了新玩意的本质。可难道iPod之前就没有mp3 player吗?

Thursday, November 9

莫名其妙的糖尿病特效产品DNJ

父亲让我查一下一种叫做DNJ的糖尿病治疗产品。
在中文网站上可以找到叫做"地恩基(中国)国际医学研究院"的网站在宣传这种DNJ产品。看网站上的宣传就让人起疑。于是借助google和yahoo检索了一下, 也许是google和yahoo做的不好,并没有找到"日本糖尿病并发症研究所(JDCS)常务理事、早稻田大学名誉教授、DNJ日本国际医学研究院井上孝治博士"的任何信息, 也没有找到"日本神奈川大学桑叶研究中心"这么个机构。也没有野尻博士的什么信息。
只有DNJ这个关键词确实可以找到一些治疗糖尿病的健康食品的信息。比如这里的一些介绍。里面只是说DNJ是桑叶独有的成份,期待其成为控制血糖,减肥的健康食品素材。
一些信息显示是神奈川县卫生研究所对DNJ的抑制血糖效果作了研究。通过Google可以检索到他们的研究报告(1),(2)

我不是学医出身,只能简单看一下里面的结论。报告显示实验用白鼠在吃混有桑叶提取物的饲料40周以后,对空腹血糖的升高有明显的抑制作用。

也许这种叫做DNJ的桑叶提取物确实对糖尿病人有益, 但也不至于达到山西患者张阿姨30天逼近治愈的程度吧!

Wednesday, May 24

改变微软拼音输入法的键盘布局

从windows2000以来,在日文环境下输入中文已经不成为问题了。特别是微软中国网站还提供最新的微软拼音输入法2003下载。安装到日文windows 2000/xp上就可以轻松输入中文了。
但是,在微软拼音输入法缺省使用的是英文键盘布局,通过日文键盘输入中文的时候经常出现找不到键的情况,要想快速的使用msn messenger聊天,特别是输入表情符号的时候,头脑中需要记住英文键盘布局,还要切换自如才行。

今天经过调查研究,知道了可以修改下面的注册表,来改变微软输入法的键盘布局。在日文键盘的环境下,将
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\E00E0804
的Layout File的值改为kbdjpn.dll,再启动机器,应该可以成功地达到目的。

注册项Keyboard Layouts下的键值里面,以0804结尾的是简体中文,0404是繁体中文,更多国家代码参见:Configuring and Using International Features of Windows: Windows 2000 - List of Locale IDs and Language Groups

以上办法也总不灵验,极端大法是用系统目录system32下的kbdjpn.dll代替同目录下的kbdus.dll文件。以WindowsXP为例,首先将C:\WINDOWS\system32\kbdjpn.dll拷贝到C:\下,改名为kbdus.dll,然后考回C:\WINDOWS\system32目录,覆盖原来的kbdus.dll。重启机器。

以上办法在Windows XP日文版和Windows 2003英文版实验成功。

Tuesday, February 14

避免IE窗口的双重启动

很多项目中有避免IE窗口的双重启动的需求。
具体而言就是通过一个链接打开的窗口,因为可能已经输入了一部分资料而还没有提交给服务器,如果再此点击同样的连接,不能轻易轻易就将已经打开的窗口替换。另外也要避免未保存就直接关闭窗口的情况。窗口关闭的时候要同服务器交互,通知服务器。下面的几个要点可以避免发生问题。*只在IE6上做了测试
1,使用window.open方法打开新窗口。这个方法的第二个参数是target,如果target的名字一样,不同连接或者相同链接打开的页面会在同一个IE窗口中显示。
2,IE窗口中的页面迁移,更新,提交,窗口的关闭都会触发onbeforeunload这个事件。在这个事件中设置确认消息。如果回答OK,画面才会进行下一步的动作。
3,在关闭确认之后onunload事件会被触发,在这里通过ajax技术同服务器端进行交互。因为IE的bug,onunload事件有可能不会被触发。我们可以通过其他办法避免这个bug。

针对这项技术我可以提供一个sample和通过email的技术支持。 Need Support

Sunday, January 15

Using WTL with Visual C++ 2005 Express Edition - The Code Project - WTL

虽然我的英语不好,但是在WTL Group Members的鼓励下,还是在CodeProject上发布了自己的第一篇文章。Using WTL with Visual C++ 2005 Express Edition - The Code Project - WTL 记住发布的日子2006年1月13日。
下周去无锡出差一周,我已经很久没有回国了,希望这次工作顺利。
如果希望作更有价值的人,那么还犹豫呢? 我应该回到我的祖国。

Monday, December 19

首页 - 历史我记录

这里应该避免成为转贴转载的集中地,没有自己经历过的事情不要记入为好。

1949年以来,中国飞速发展,这其中你是如何参与建设,开发的呢?

希望这里能多多记录每个人的经历,项目,产品的开发,失败与成功的故事,其中一定孕育了大量为中国人骄傲和自豪的事情和故事。必成为中国的ProjectX的素材集中地

Read more at www.recordhistory.org/m...

Tuesday, November 8

如何在VCExpress下安装WTL

1,从MSDN http://msdn.microsoft.com/vstudio/express/visualc/ 下载并安装VCExpress 2005
2,按照MSDN的指示安装PSDK, 并且修改VCExpress的相关文件 http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/default.aspx ,
3,在修改VCExpress的Visual C++目录时添加下面的目录
Include files: C:\Program Files\Microsoft Platform SDK\include\atl
4, 修改PSDK的atl目录下的atlwin.h和atlbase.h文件

修改atlwin.h的1725行的SetChainEntry函数,将第一个for循环里的int i;定义提前。
---------------------------------------------------------------
BOOL SetChainEntry(DWORD dwChainID, CMessageMap* pObject, DWORD dwMsgMapID = 0)
{
int i;
// first search for an existing entry

for(i = 0; i < m_aChainEntry.GetSize(); i++)
---------------------------------------------------------------

修改atlbase.h的287行的AllocStdCallThunk和FreeStdCallThunk函数,将元代码注释,用新的宏代替。
---------------------------------------------------------------
/* Comment it
PVOID __stdcall __AllocStdCallThunk(VOID);
VOID __stdcall __FreeStdCallThunk(PVOID);

#define AllocStdCallThunk() __AllocStdCallThunk()
#define FreeStdCallThunk(p) __FreeStdCallThunk(p)

#pragma comment(lib, "atlthunk.lib")
*/
#define AllocStdCallThunk() HeapAlloc(GetProcessHeap(),0,sizeof(_stdcallthunk))
#define FreeStdCallThunk(p) HeapFree(GetProcessHeap(), 0, p)
---------------------------------------------------------------

3,下载并安装WTL http://wtl.sf.net
4, 下载WTL for VCExpress Wizard, 拷贝到WTL的AppWiz目录下,并双击安装WTL Wizard到VCExpress
WTL for VCExpress Wizard

enjoy VCExpress&WTL