2011年11月14日星期一

与用户的连续三次沟通

昨天晚间,一位老师在使用我们的网站应用时,连续几次电话和我沟通。
第一次,她说无法添加评阅内容,添加评阅内容的输入框不会出来。我询问了她的电脑的操作系统和她使用的浏览器,得到的回答是遨游浏览器,只能很抱歉的让她换用其他浏览器,因为目前我们的网站不支持遨游浏览器以及其他等等安全的浏览器,我们只支持Firefox、Chrome和IE7以上浏览器。
第二次,她说换了浏览器,可是仍旧无法添加评阅内容。我猜测她想添加评阅的位置不对,我告诉她只能在原文上进行划词后,然后输入评阅内容;而她希望是像Word一样批注。
第三次,她说系统自动生成的评阅内容不能删除,我告诉她删除按钮在右侧;系统自动生成的评阅和她自己添加的评阅都可以删除的。

以上说明:
1. 我们的产品是有很多问题的(浏览器兼容、易用)。
2. 用户是不会去看使用指南的(在告诉用户可以使用产品的邮件中都附带了使用说明的,而且对上述所有问题都有讲述;整个文档共七页,大部份页面是截图)。
3. 现场用户的声音很重要,产品验证应该提前,在正式开发前就要请用户来验证设计。

几次通话后,本没有想到太多。后来看到《启示录》里对于产品设计验证的建议,就我目前手头的几个产品来讲,确实很有感触。

2011年9月13日星期二

悲剧的网络

Gmail等于连不上了,将就着用紫狐打开也是奇慢无比。VPSYou也很适时的发来邮件,说机器挂了,只能备份数据退款处理。更不用提下班后回到租住的房子里那让人断念的长宽。悲剧的网络,悲剧的网络时代!

2011年8月17日星期三

Excluding Operation For Multiple-Choice Items In Computer-based Test




Multiple choice is a popular item type in computer-based or internet-based tests. Its implementation and operation is so easy and straightforward that nobody need more instructions. However, some skills we used in paper-based tests cannot be applied to computerized tests. Excluding is just one of these. In a paper-based test, one can draw a slight line on the options to indicate the option is not the favored answer. How to provide this facilitation in computerized tests? It's a good idea to use right mouse-clicking for this function. Thus, we have two operations for the choice option, one is left click to choose it as the answer, the other is right click to exclude it as a distractor. And an option will have three states: normal, chosen as answer, excluded as distractor. We can draw a table about these states and operations.

state operation output
normal left click chosen
normal right click excluded
chosen left click chosen
chosen right click excluded
excluded left click chosen
excluded right click normal


green arrows indicate left clicks
red arrows indicate right clicks

As shown in above table, whenever left-clicking an option will lead to choose it as the answer - keeping the choosing operation straightforward, while right-clicking has a bit more functions. When the option is excluded, right clicking on it again will change it to normal state, otherwise to excluded state. Maybe a simple state transition diagram will make things clear. All left-clicking arrows point to the chosen state and all right-clicking arrows point to the excluded state except one started from itself, the last one arrow give a chance to change the option from excluded to normal. The states, operations and transitions make a simple and powerful design for computerized multiple choice items.

Question 1: Why not change the option to normal when right-clicking an chosen option?
Answer: Because we never provide a way to undo the choosing, we don't want to give the user more things than excluding. All new things is excluding and undo the excluding.

2011年7月12日星期二

空调(出现)之前

当我第一次看见空调的时候,就想这绝对是最愚蠢的发明。前几天在The New Yorker上看见了这么一首诗。

Before Air-Conditioning

by
Frederick Seidel

The sweetness of the freshness of the breeze!
The wing is wiggling the trees.
The sky is black. The trees deep green.
The man mowing the enormous lawn before it rains makes goodness clean.
It’s the smell of laundry on the line
And the smell of the sea, brisk iodine,
Nine hundred miles inland from the ocean, it’s that smell.
It makes someone little who has a fever feel almost well.
It’s exactly what a sick person needs to eat.
Maybe it’s coming from Illinois in the heat.
Watch out for the crow, though
With them around, caw, caw, it’s going to snow.
I think I’m still asleep. I hope I said my prayers before I died.
I hear the milkman setting the clinking bottles down outside.

2011年4月30日星期六

公司与椅子

昨天在列表里看见一个觉得很无聊的问题,问有哪些公司难进,值得进,正准备屏蔽掉的时候,发现一帮人随后开始讨论公司与椅子的问题了。其中有人说选公司很简单,去面试的时候看看他们坐什么椅子。确实,我上学时觉得对于程序员来说最累的是屁股和眼睛,所以一定要有个好的椅子和显示器。实验室当初装修的时候,买的300多的椅子,虽然说不是什么太好的东西,可感觉比那些小椅子舒服多了。等毕业到了公司,我有时候会拿公司的椅子和显示器说事,那种小转椅,旧的CRT显示器,好不容易换液晶显示器了,居然是个1366*768的18.5寸的憋屈玩意儿。记得转正的时候,主管问我有啥意见,我直说硬件比较差,在追问之下,我干脆就说显示器和椅子。看来,椅子确实不是对公司的偏见了。终于,我又回实验了,当然跟椅子没太大关系。看来对于某些不知道员工为什么要离开的老总们,先把公司的椅子换换吧。

2011年3月30日星期三

折腾

这一年来没少在折腾。最近发现折腾出了几根白发,而且似乎大有星火燎原之势,难怪某日梦见已然银发满头,真是未卜先知哪。
昨天又有前公司的领导同事过来请吃饭顺带一个主要任务是邀我回去继续做同事,虽然理性分析给出的条件还不错,但是我想我还是会做非理性的选择,至少在看得见的一两年内还得继续折腾。
地球离了谁照转,他说出来的,我深感同意。机会只是瞬间的,不会为谁停留。留给我的还是折腾。

2011年2月7日星期一

春节假期过去了

因为放假前事情太多,家里房子又刚刚装修,所以这个春节没有回去过年了。这是我第二次没有回去过年了,上一次是98年1月地震后。

这几天除了休息、工作,还尽情地玩了几个晚上魔方,发现虽然忘了几个公式,但是速度却比以前稳定了,50次平均成绩终于进了26秒,如果再想提升,就必须有目的的加以练习了。

这几个下午,还去城隍庙和文化宫去猜了几回谜语,在城隍庙时遇到一个高中生,跟他一起猜谜。今天下午去文化宫去猜谜语,猜了十几个,得了一双手套、水笔、铅笔袋什么的,结果灯谜协会的看我对猜谜语挺感兴趣,就邀我周末有空的时候过去一起玩,还留了联系方式。回来的路上还冥思苦想了几个计算机相关的谜语。我知道自己属于瞎猫逮死耗子的那种,完全业余,所以回来搜索了一下灯谜协会的活动,顿时觉得自己的文学与知识面都太弱了,还是老老实实写代码吧。

继续老老实实写代码,马上春节假期就结束了。

2011年2月4日星期五

魔方界杂感

在等待Android SDK下载的空当,手里转着魔方,想起好久没到魔方吧去看看了,不知大过年的有啥活动没。打开论坛却发现了已过半年的一次事件,老瓦被WCA禁赛三年。为了了解下事情经过,进而翻了好多旧贴,看到了很多东西,连同之前自己的一些想法,整理一下。

规则
翻看了论坛里相关的贴子,仍然是一团糊涂。既然WCA已经出结果了,那就按规则来吧,反正大家参加的都是WCA的比赛,那就只能按WCA的规则来办事了。感觉老瓦的行为是有些过了,但是我却不认为这是单一的原因。经历了南京赛的最小步风波,再看这里到处提到的一轮还是两轮的赛制,真是觉得无奈。如果说最小步风波是比赛规则的漏洞可能被利用了,那么赛程的不确定性就是这次事件的导火索了。数次比赛的安排给参赛者的意思都是看时间吧,如果时间允许都安排两轮。如果说大家在赛程上没有分歧的话,就不会把矛盾积累到这么深。所以,比赛规则和赛程还是事先确定,跟大家明确讲清楚了比较好。
我觉得WCA虽然是个有规则的组织,但它并不是一个专业的机构,所以能做的事情很少,即使在这些冲突的处理中,也只能是从主办方和WCA代表处了解些情况。现在比赛举办的越来越多了,主办方应该先把规则和赛程定好,以避免类似的事件。

商业
魔方这么火热,最开心的就应该是魔方厂家了,当然,也没啥太开心的,因为靠这东西发大财还是很难的。但是,随着魔方的继续升温,比赛越来越多,规模肯定也会越来越大,那样,看中商业机会的也许是不仅仅是几个魔方厂家了,也许还会有其他厂商。这样,魔方中的商业气氛就会变浓,冠名、代言、赞助这些形式的广告宣传也一定会影响主办方及参赛者。为了避免因商业化而引起的与运动本身的冲突,更应确定好比赛的基本规则,将比赛限定在一个基本的框架内。外围事物可以丰富广阔,但不应影响到运动本身。看到占星拒绝春晚的机会的时候所写的东西,很佩服他的想法,尤其是提到不能让魔方奥数化。

魔方
我很佩服国内魔方厂家的创新精神。国甲二加入了轨道,尺寸小了那么一点儿,感觉顺手多了,我现目前用的还是两年前从老张那里买的国甲二,后来又买了若干各式魔方,都没觉得这个顺手。国甲五干脆把每个块的大小都做了变化,初次试用,真是爱不释手。现在大雁孤鸿凌云又深得大家喜爱。不过,随着魔方热,背后的专利问题很可能会困扰各魔方厂家。

真想不到,一个小小的魔方,引出了这么多事。魔方界在不知不觉中形成了。

2011年1月7日星期五

Sikuli X 之 如何创建GUI单元测试脚本

Sikuli集成了jUnit,所以支持图形用户界面的单元测试。在Sikuli IDE中通过快捷键 Ctrl-U或者菜单View下的Unit就可以打开单元测试面板。

Sikuli IDE旨在尽力减少代码输入,所以在Sikuli IDE中,一个继承自junit.framework.TestCase的Python类会自动生成并把你的单元测试脚本包起来。

通常,一个单元测试脚本包含有构造和析构函数,分别是setUp()和tearDown(),还包含一堆以test为前缀的测试方法。

单元测试脚本的基本结构如下:
 def setUp(self):  openApp("AnyRandom.app")   wait(SCREENSHOT_OF_THE_APP) # wait until the app appears  def tearDown(self):  closeApp("AnyRandom.app")   untilNotExist(SCREENSHOT_OF_THE_APP) # wait until the app disappears  def testA(self):  ....   assert exists(PICTURE_THAT_SHOULD_BE_THERE)  def testB(self):  ....   assert not exists(PICTURE_THAT_SHOULD_NOT_BE_THERE)

要运行单元测试脚本,需要点击单元测试面板上的“Run”按钮,而不是普通的运行按钮。

另外,也可能从命令行使用选项 -t test-script来运行单元测试脚本。


是软件就会有BUG

为了证明是软件就会有BUG,把翻出来的几张旧图贴贴。请看红色圈。

标题是"讨好主人",内容却是买好友。
<a href="http://blog.boyue.info/wp-content/uploads/2010/12/friendbuy.png"><img class="alignnone size-medium wp-image-38" src="http://blog.boyue.info/wp-content/uploads/2010/12/friendbuy-300x201.png" alt="QQ 讨好主人是买好友" width="300" height="201" /></a>

反过来的BUG也是可能的。
<a href="http://blog.boyue.info/wp-content/uploads/2010/12/qqfriend.png"><img class="alignnone size-medium wp-image-44" title="qqfriend" src="http://blog.boyue.info/wp-content/uploads/2010/12/qqfriend-300x197.png" alt="QQ 买好友与讨好主人" width="300" height="197" /></a>

主窗体状态是在线,任务栏图标却是离线。
<a href="http://blog.boyue.info/wp-content/uploads/2010/12/qqstatus.png"><img class="alignnone size-medium wp-image-39" src="http://blog.boyue.info/wp-content/uploads/2010/12/qqstatus-171x300.png" alt="QQ状态" width="306" height="450" /></a>

还有某些时候出现的 第22页/总21页,数数确实是个难题。