2010年11月8日星期一

QMessageBox点滴

QMessageBox本地化,需要使用QT自己的翻译文件,translations下的qt_zh_CN。这也告诉我们利用Qt的翻译机制本地化软件是很方便的,而且便于管理显示字符串。

QMessageBox如果不指定parent,则其图标为系统默认程序图标;如果不指定标题,则标题会取可执行文件的文件名。

2010年11月5日星期五

停用QQ号

在这些只允许娱乐的日子,连能活着都得靠幸运,何况什么隐私安全。

自从用了Win7,每次打开QQ系统都会弹出个提示框需要提升权限,因为QQ要Update。终于,某年某月某一天,照例启动QQ,授权Update后,桌面上多了一个QQ医生。我异常震惊,居然Update出一个医生,这是我绝对没有想到的事,它挑战了我的权限,我的脑子里一片空白,唯一能做就是马上把它卸载掉。

又到某年某月某一天,我无聊到打算QQ游戏一把中国象棋的时候,猛然发现下盘棋也要实名制了。在全国人民都在斗地主的时候,也得时刻记得自己的身份,这不是你的地盘,你做不了主。

这一回,它拒绝运行了。原来6亿的桌面只是别人娱乐的舞台。

2010年10月27日星期三

潜行


近来经常是伴着落网的音乐工作的,当看到VOL.220的标题时,我知道这就是我最近在寻找的词,潜行。

昨天以前公司的主管打电话来,说是准备成立一个产品研究组,问我是否愿意回去做这块儿。我还是很赞同部门作这决定的,尽管我离职时也提到了更愿意转向产品方面的工作,但是我更想踏踏实实的把现在的工作做好。
到了新的工作中,角色有一些变化,而且刚过来的一段时间先是接手了一个比较紧急的项目,所以还没有完全适应过来。现在,这个项目进入了常规化状态,又有一些新的项目即将启动,在这个时候,需要思考一下接下来的工作内容和方式。
潜行,就是给自己的状态。

说到产品研究,确实值得去做。如何将新技术运用到产品中去,给用户带来效率的提升?面对市场上充斥着的各种产品,如何体现自己的特点与优势?如何做用户需要的东西。
前段时间接手项目后,跟客户就需求文档中的某些内容进行确认与探讨,客户说,我们共同的目标是做出易用的软件产品,而不是做出仅仅符合文档的产品。而看到许多难用的产品时,有时候很是怀疑我们是否应该指望计算机或者软件来帮助我们改善生活。

就自己而言,目前对于产品,需要进行的工作有:
了解同类产品的相关情况,分析各产品的特点
了解可以改善产品的思想与技术

2010年8月9日星期一

Web与桌面的混合

AQP里一开始就讲Web与桌面的混合编程。回想一下最近做的几个项目,全都是这种模式。这样做的好处是充分利用了Web页面丰富的表现形式和桌面程序对本地资源的控制能力。

2010年7月15日星期四

Delphi 2010 使用UAC的问题


1. 不要引用XPMan单元。
2. 把Delphi 2010生成的资源文件中trustInfo节中的requestedExecutionLevel节点的level属性设置为requireAdministrator。
重新打开工具,编译;OK。

其实最好还是修改程序避免总是使用UAC。

2010年7月6日星期二

Love Explains It All

记着这些日子。

You say the words I need to hear
Dry my tears when I cry
You pull me close when I'm not near

You knows the colours of my mind
Every breath that I take
And still they say that love makes blind

And here I am 
Once again
Trying to think of what to say
And you're my friend
Knowing all of my dreams and my fears
And here we are - you and me
I guess love explains it all

I stay awake to watch you breath
So much I should have said
Somehow I tell you when you sleep
I love the silence when you're near
And i love knowing you
And every word you say i keep.

And here I am 
Once again
Trying to think of what to say
And you're my friend
Knowing all of my dreams and my fears
And here we are - you and me
I guess love explains it all

Time will pass
Time will change
Everything we know will turn to something else
Turn to something else

Time has shown
Us where to go
And still i wonder why you catch me when I fall
I guess love explains it all

Cause here I am
Once again
Trying to think of what to say
And you're my friend
Knowing all of my dreams and my fears
And here we are - you and me
I guess love explains it all

Here I am
Once again
Trying to think of what to say
And you're my friend
Knowing all of my dreams and my fears
And here we are - you and me
I guess love explains it all

Love explains it all
I guess love explains it all
Love explains it all 

2010年4月24日星期六

一个软件缺陷的来龙去脉


背景
P软件主要有两个模块C和M组成。前期发现C模块中的A组件存在问题,所以决定由另一项目组的一名开发发员W来改写A组件,暂称A'组件。
我负责修改P软件,以更换新的A'组件,同时修改若干其他问题。由于旧的A组件在M中所用的功能没有发现问题,所以我没有修改M模块。
我修改了C模块,采用新的A'组件,在未经严格测试的情况下,把P软件部署到了客户现场使用。

问题
由于A'组件未经严格测试,存在缺陷:采用A'组件生成的文件无法以普通方式打开。
而P软件通常并不以普通方式打开A'组件生成的文件,只是在C模块中采用A'生成文件,然后在M模块中通过A组件进行操作,转换为另一格式的文件。
但是在少数情况下,也需要以普通方式打开A'组件生成的文件。
很快,少数情况真的出现了,问题显露了,C模块生成的文件不能以普通方式打开。我确定了这一事实后,开始怀疑在M模块中是否能正确进行转换工作,因为P软件的C和M模块的采用的组件是不同的。
客户暴怒、技术支持愤慨,测试人员紧急测试一番,M模块工作正常,P软件工作正常。

反思
如果C和M模块的A组件被同时替换为A'组件,虽然问题不能避免,但出现问题时,不必考虑由于C和M模块中组件不一致会引起的可能性。
如果P软件经过严格测试,出现问题时,就不会考虑M模块功能是否正常,能确切知道缺陷影响的范围。
P软件对于未经严格测试的A'组件,有测试的义务,因为A'组件本身不是一个项目,只是一个开发人员写的组件。


2010年2月2日星期二

够酷够简的Sikuli


Sikuli真的够COOL,样子也真的够简陋,安装好了只有一个Editor,连个Help菜单也没有。不过这些都没关系,阻碍不了它的酷,也妨碍不了它今天0.9.7明天0.9.8的的版本更新速度。

正在开发的程序,界面主要由Flash组成,以前用的自动化测试工具还不能认出Flash中的控件,只好用取坐标的方式来编写自动化脚本了;这真是让Sikuli一显身手的地方。中午开始,把以前用AutoIt3编写的一段脚本,由Sikuli来完成,算是试用。

前两天只看到了Sikuli的四个函数:switchApp、wait、click和find。这四个函数已经够做一些事了。可是今天需要更多,于是看一下API吧,真是少得可怜,当然,毫无疑问这才叫足够简单。好了,既然是Python,import几个模块来用用,def几个函数试试,一切顺利,一小段GUI自动化测试脚本完成了。运行一下,跟之前脚本的功能一样,不过,Sikuli可是更聪明,它能知道需要的界面出来没有。

再看一下Sikuli Test API,哈哈,函数少到不到再少,只有assertExist和assertNotExist两个函数。可是测试不能只看存在不存在,如果能多几个OCR之类的函数,可能用处会更大吧。也许很快就会出现了。

2009年12月17日星期四

换位

毕业时找工作,几次面试的感觉很是不爽。
昨天换了位置,第一次面试别人,于是可以不再单方面的看待面试这一过程了。
应聘者如何表现出自己的技能,面试者如何给应聘者机会来展示自己,这确实需要仔细思考。

最近项目组比较缺人。没有准备的时候,被同事拉去面试一个应聘者,完全不了解任何情况,我跟同事前往洽谈室。路上简单向同事问了下基本要求,然后去人力资源那里拿了份简历看了看。应聘者简单自我介绍后,同事开始跟他谈一些他过去项目相关的问题,我借机把简历仔细看了一遍,接着他们的话题插了几句。最后,问了几个简单的技术问题。

其实我一直觉得面试应该是有一个提纲的,或者更死板一点儿,应该有若干预备问题的,这样的一个提纲,从不同方面来考察一个应聘者的表现。
从面试别人我才认识到介绍项目时对于自己在项目中的工作,以及遇到的重点和难点的解决过程的说明是非常重要的。

究竟需要从哪些方面来考察一个应聘者呢?
我想对于项目组的应用开发来说,从应聘者对软件开发流程的理解、对所用开发工具的熟悉程度、以及对基础概念的了解几方面看就可以了。

2009年12月14日星期一

Detach from Program

一个程序出问题了,我用Delphi附加到远程进程进行调试,下班的时候,我想把本地机器关掉,让远程的程序继续运行。无奈不知怎么脱离开调试的程序。

查看Delphi帮助,明明确确的看到了一条Detach from Program

Choose Run|Detach from Program to tell the debugger that you no longer want to debug a process. It is different from Program Reset in that Reset kills the process you're debugging. Detach from Program effectively ends the debug session on the current process, but it leaves the process running (the debugger no longer controls the process).

但是到菜单里一看,根本就没有Detach from Program这个菜单项嘛,帮助文件睁眼说瞎话?

求助于AQTime看看,结果看到FAQ里这样一条:

Q.: How do I detach from the process that I attached to earlier? 
A.: Currently, detaching is not supported. When attaching, AQtime instruments the process's binary code and these changes cannot be undone.

好嘛,What done cannot be undone。