Monthly Archives: January 2009

裁员滚滚过大年

这里声明“裁员滚滚”是我借用某人的说法,总之今年这个年对于在这边的中国人来说过的不踏实啊。话虽如此,年总是要过的,与其愁眉苦脸的等着被裁,想想还是该怎么样就怎么样,过年吗,对于中国人来说是一年中最大的节日了,总得找点儿乐子吧,可是看着也没有人放鞭炮,再加上时差,一点儿年气都没有。后来还是拉了几个朋友到我家包饺子,总算找点儿气氛吧。 上点儿照片吧 View Full Album 唉,没办法,俺们男同志们平时都是甩手掌柜的,两位主力的家庭主妇又不是北方人,饺子卖相不是很好,大家就凑合着看吧。当然了,话虽如此,能在异国他乡吃上饺子,已经很不容易了,更可喜的是还有青岛啤酒喝,呵呵。 这个年就算过了,希望十五之前不要再有裁员的消息,这样好安心的过个元宵节。

Posted in 生活杂记 | 1 Comment

Unicode和system locale

我相信大多数中国的程序员都知道unicode对于多语言支持和全球化软件的重要性。但是如果问他们不用unicode会有什么后果,可能大多数人只会说,在某些系统上可能会出现乱码之类的现象。其实这只是一个最浅层次的影响,深层次的影响是什么呢?那就是你的程序根本就不工作,并且需要花很多的人力资源去查找发现并解决这个原本很容易避免的问题的根源。为什么这么说呢?因为我昨天晚上碰到了一个例子。 老婆最近在上课,其中有一门课是远程教育的,你买书,然后安装配套的软件,然后每天根据老师的email看书并在软件上完成作业。听起来很不错?是的,的确是这样子,除非你的软件有问题。 昨天晚上书和配套光盘终于到了,我帮老婆装软件,说实话,这是一个很屎的软件,好像是用director做的,安装程序是wise installer。运行安装程序,提示我安装,没有问题,装完了,没有任何出错提示,要求重启,好吧,重启之后,按照指示去开始菜单里,找到了该软件的快捷方式的子菜单,可是点进去一看,nothing!作为一个IT民工,俺自然想到创建快捷方式的那部分出错了,无所谓,咱是专家啊,直接去安装的目录找exe不就结了。打开安装目录,发现没有想要的可执行程序,但是有一个很可疑的临时文件,一看就知道是安装程序留下的,大小还不小。第一反应就是把它的扩展名修改成exe,果然,图标也出来了,没错,就是这个。看起来一切顺利,运行,没有问题,登录,也没有问题,然而到打开课程的时候报exception了。 因为最近在dogfood windows 7,以为他跟win7不兼容,于是又在我的xp的机器上装了一下,问题依旧。想想我老婆她们班怎么说也有几十号人吧,同样的软件,同样的版本,难道他们就没有遇到这个问题?想来想去,还是觉得安装程序就有问题了,于是又开始用universal extractor把程序的安装包自己解开,发现也没有问题啊,看着里面的内容跟我实际安装的一样。难道是光盘出错,某个字节恰好被搞错了?但是安装包一般都是压缩过的,一个字节出错基本上就不可能解压开了。应该不是这个问题,于是祭起process monitor (原来的File monitor),监视了一下安装程序,打算看看到底那个临时文件是怎么回事儿,个人感觉应该是安装程序重命名这个文件的时候出错了。很快,结果出来了,发现process monitor里面安装进程试图重命名这个文件,但是失败了,原因很简单,它企图重命名的新文件名里有个问号,这在windows的路径里面属于非法字符。 可是为什么呢?这个明显的错误,应该所有人都很容易发现,为什么没有人汇报这个问题呢?难道是我的电脑设置有问题?突然问好让我想起了MultiByteToWideChar里面的comment,对于无法转换的字符,会被替换成“?”!好了,知道原因了:我的系统因为要用网银,而某个银行的傻逼网银软件不支持unicode,所以必须把system locale设置成中文,所以久而久之我就养成了习惯,即便是英文系统,system locale也会在装系统的时候改成中文,肯定是这个原因。于是去控制面板,将其改回英文,重启,重装,一切搞定,再进去,没有任何问题了! 下面再来分析一下问题吧,猜猜这个软件为它的exe取的文件名是什么? XXX Pro™5 这里考虑到某些原因我隐藏掉了软件的名字,但是注意名字后面那个TM标志了吗?就是它搞出了问题!如果这一切都是unicode,那么很好,没有任何问题,但是或者这个wise installer不是unicode版本的,他只支持1252 codepage,或者是软件制作人指定名字的时候指定了ANSI version。所以TM标志的编码就是0x99。安装软件rename的时候会调用CreateFileA,也就是ansi版本的createfile,然后传入这个ansi版本的名字。但是系统还是用unicode的,所以系统就会有MultiByteToWideChar来试图把这个转换成unicode,但是MultiByteToWideChar需要一个codepage作为参数,因为这个是non-unicode程序,所以就去了ACP作为参数。ACP怎么解释呢?他就是system locale对应的codepage,在我机器上,就是936,简体中文的codepage。而在这个codepage下面是不存在”\x99\x35”这个组合的,于是MultiByteToWideChar把\x99\x35转换成了一个”?”!   当然问题不止这些,即使我手工把名字改过来,运行后某些地方还是出错,而这一起在system locale是英文的时候没有任何问题,这就说明这个软件本身其他地方还存在类似的问题。

Posted in Win32 Programming | 4 Comments

核战末日?奇怪的梦

昨天晚上做了一个很奇怪的梦,梦里面回到了西安,跟一群高中同学一起玩,然后我们就在大街上走,说去一个同学的家,走着走着,不知怎么的就到了野外,脚下是一片草地,旁边有个小山头。这时候突然看到头顶上有一架直升飞机,吓了一跳,认真看了一眼,确实是直升飞机,但是很奇怪,别人都是螺旋桨在上面,网上拉,它是螺旋桨在下面,往上推。我还在想,这样的飞机怎么降落啊。突然那直升飞机上居然有人机枪扫那个小山坡。旁边一个二炮的同学突然说大家赶紧跟我来,于是一群人一溜烟的往前跑,进了山脚下一个门,我是最后一个,等我跑过去他们已经没影了,于是我就按照看见他们跑的方向走,走到了一个好像电梯一样的们口,只有下,我就按了然后电梯门开了,我进去。里面没有按钮,而且黑乎乎的也没有灯。过了一会儿门就关上了,电梯开始往下降,降了好久,我还说这楼还挺高的,这时候四周有亮光了,原来这个电梯是那种工地上那种周围用铁丝网围着的,外面也没有墙,看上去就是一个很大的空间,也不知道哪儿来的灯光。一直降了很久电梯才到底,然后我打开跑出去随便挑了一条路往前跑,到了一个地方,跟宾馆一样,两边都是房子,我找了一个有人声音的房子,推门进去,里面的人都在看电视,没人理我,我看了看,有两台大液晶,放的都是同样的内容,仔细一看原来不是电视,好像是监视器,里面的景色就是我之前的那个小山坡,然后突然就看到到处都升起了蘑菇云,附近的楼房就像电影里核弹爆炸那样全塌了,靠,原来是发生核战了啊。 后来过了一阵子,好像不在有人袭击了,一群人就往出走,我也就跟着出去了,期间还注意到地上有很多管子往外喷东西,一阵一阵的,但是喷出来的东西一出来就不见了,紧跟着就被闹钟搞醒了。

Posted in 梦溪笔谈 | Leave a comment

我爱油泼面

圣诞节趁假期回了趟家,可惜啊,时间不够,就吃了一顿扯面,是老妈做的,虽然很美味但是还不是正宗的油泼面。还是老婆心疼我啊,知道我想吃面,昨天晚上突然跟我说,我给你做油泼面吃吧。我说算了吧,我们周末有空儿了再说,说实话,我对和面还是比较畏惧的,总觉得比较复杂。没想到老婆说,我面都和好了,都醒了一天了。呵呵,我一听,既然这样,那就吃吧。想了想,毕竟我一个西安人,怎么能让老婆一个湖北人做面条呢,于是挽起袖子洗了个手,开始试验第一次扯面。 嘿嘿,还是蛮不错的,老婆的面和的挺好,就是稍微有点儿软,折腾了半天,第一锅面条ok了,看起来不怎么好看,有的粗有的细,不过下到锅里到没有烂,也没有粘,还不错。捞出来调上辣子,拌了拌,老婆尝了尝说,嗯,还不错! 有了老婆的鼓励,我又信心十足的做了第二碗,恩,这次好多了,面条扯得很均匀。以后终于可以结束每天吃米饭的生活了,哈哈哈哈。 上两张照片给大家看看: View Full Album 这次的辣椒粉不好,颗粒太粗,酱油也不上色,下次得搞点儿好的。本来还照了一张陕西老农吃面的照片的,不过吃相太过萎缩,不能体现陕西人的豪爽,就不上传了,呵呵

Posted in 生活杂记 | 3 Comments