CS巴别塔(1)

A Complete Program Inside a Tweet?

Posted in Uncategorized by Kenny Yuan on 2010/09/21

这是一篇无聊的文章,对此不感兴趣的读者可自行选择:关Tab、关窗口、退订、拔网线、砸电脑、自残、自焚、人体炸弹、当黑暗大BOSS毁灭人类、入党……





Boss

Boss





OK,你还在,我也还在,那么我来继续记流水帐:《能否在一条tweet中写一个求值程序?》

看到有人讨论面试问题,其中有人提到用“现场写一个计算器”来作为考题。在瞎掰了很久之后,我决定自己实际试试,因为“光说不练是假把式”么……当然,既然是自我挑战,那目标就设高一点:试着在一条推中写完表达式求值程序……

……嗯……显而易见地,我失败了!不过我在一条推的长度内写完了一个后辍(RPN)表达式的求值程序,共113字符:

(defun r(e)(let((s()))(dolist(x e)(if(numberp x)(push x s)(push(eval(reverse(list(pop s)(pop s)x)))s)))(car s)))

用的是标准的stack解法。

至于将中辍转后辍的程序,我只写出来这个:

(defun v(e)(let((s())(o())(m'((+ 1)(* 2)(- 1)(/ 2))))(dolist(x e)(if(listp x)(setf x(v x)))(if(numberp x)(push x o)(progn(do()((or(null s)(<(cadr(assoc(car s)m))(cadr(assoc x m)))))(push(pop s)o))(push x s))))(r(append(reverse o)s))))

足足有235字符!看来目标是达不到了……(@googollee老大也失败鸟——嗯,我很happy)

不知道有没有哪位读者是语言达人,可以完成这个伟大的目标呢?

最后声明一下:直接eval,或者调用bc这些玩赖的方式肯定能行,但太没技术含量……

——路人甲:还有比这篇日志更没有技术含量的?

——路人乙:大家洗洗睡了吧!

于是,我去准备洗洗睡了……

(如果哪位有好点子,请一定别忘了留言)








Tagged with: ,

说说用户界面那些事儿-银杏篇

Posted in Uncategorized by Kenny Yuan on 2010/09/19

汽车驾驶员需要专注,肯定不能边开车边看电影——就连打电话、发短信造成的事故都挺高发的,更别提电影了,这是在NHTSA有数据可查的。所以车载系统的屏幕,为了安全,最好也只显示枯燥的导航地图。但是乘客们不这样想,乘客们会想要利用车载系统来娱乐,比如看看电视、放放电影什么的。无奈安全第一,于是在常见的设计方案中,车载系统会“贴心地”在行驶中关闭娱乐功能,只允许使用地图功能。

但这个方案并不怎么高明:除了专业司机,很少有人会坐在停驶的车上看几小时的电影,而行驶途中的乘客则是最无聊的——跑长途时,行车几个小时太平常不过了,连续几天每天跑十个钟头的也很常见,就说在北京城内,堵俩钟头也算稀松平常的——这就让用户花高价买来的车载娱乐系统成了摆设(什么QNX什么WINCE的高科技RTOS,都是骗银滴)。这时候,可能有些负责任的厂商就会开始教育用户了:“just don’t sit in that spot——我们不是提供了后座上的车载娱乐系统了么?您倒是坐后座上去啊?”于是,当两人旅行的时候,如果乘客们不想在车上无聊,就会发生“妻离子散、劳燕分飞、两地分居、君在奔驰头我坐奥迪尾”的问题。而且因为无人陪同,驾驶员更容易疲倦,也就有可能造成更高的事故率——那可真是“撒手人寰、驾鹤西游、尘归尘土归土、生死相隔解愁肠”了。

在我往下接着侃之前,请读者您花10分钟细细考虑一下这些场景,并试着找一找技术上的解决方案……

梅赛德斯在08年发布了一项名为SplitView的技术(官方中文名称为“分屏视图”,是联合BOSCH做出来的),请看视频:http://www.5min.com/Video/Mercedes-Benz-SplitView-Tech-Review-259734353

大概地解释一下:司机在左边,看到的画面是导航地图;乘客在右边,看到的画面是电影。电影的声音可以外放(比如演唱会之类的还是可以让驾驶员听听的),或者也可以将声音全部输送到乘客的无线耳机上。所有的中控台按纽都是给驾驶员用的,控制的是导航画面等功能。乘客使用一个独立的无线遥控器来控制娱乐功能。嗯……遥控器?

Remote Click

Remote Click

我想,看过了视频之后,关于这个系统的优劣,聪明的读者你一定已经有所体会,我就不多评价了。这个系统的原理也很简单:从像素上来讲,那个显示屏是“双份”的,所以画面都是同时显示的(并非分时)。只不过两份画面被分别限制了可视角度,估计是利用了裸眼3D之类的技术,但是设定了不同的研发目标而已。

本文没有末尾的总结,因为读者们总是最聪明的 🙂

Mercedes Benz Splitview官方图

Mercedes Benz Splitview官方图

Ctrl + X, Ctrl +S; Ctrl +X, Ctrl + C …

Tagged with: , ,

说说用户界面那些事儿(第三部分)

Posted in Uncategorized by Kenny Yuan on 2010/09/12

这真是一个最好的时代,也是一个最坏的时代:优秀的用户界面全都相似,差劲的用户界面却各有千秋——但无论如何,一个优秀的计算设备必须要有一个优秀的用户界面,这是放之四海皆准的事实。好的用户界面是设备的生命之光、欲望之火种源,同时也是设备的罪恶……

——哦,对不起,我不是文学青年,不能引用太多的“名著”开头,这部分文章里,我得继续讲科学定律……截止到目前为止,本系列文章仍然在介绍小学文化程度的基础知识,没有侃大山,也就没有切题(因为题目叫《说说用户界面那些事儿》,典型的侃-able title)。所以我尽量压缩内容,尝试在本篇内结束这些没人爱看的基础知识介绍,从下篇开侃。

嗯,虽然我很想压缩内容,但是有一个新的变化:我终于又回归到了机械键盘一族(Cherry的青轴)。虽然在twitter上我不是像某些同学那样不管什么样的鸡毛蒜皮的小事都要不停地推啊推啊的那种话痨但是有了这块超级好用的每按一次键就发出清脆的响声让人感觉打起字来就像弹钢琴时用上了节拍器一样合谐的Cherry机械键盘之后我发现我打字的欲望开始变得异常地强烈了起来甚至达到了一句话竟然可以写出上百个字都没有标点符号的程度而且整个句子都只是没多少意义的文字而已似乎只是为了打字而打字这一个单纯的目的而已了——嗯,话说小时候写作文的时候也是这样凑字数的。

——常看网络小说的你一定知道的:以上段落作废……(并非只有起点的大大们才能享有这种权利)

Cherry青轴机械键盘

Cherry青轴机械键盘


(2.3) Hick-Hyman Law (希克海曼定律)

常有脑残批评我的思想太阴暗,为什么不忽略那些负面的东西,只看那些伟光正的。从这个角度来说的话,此系列的前两篇文章恐怕也太“负面”了。所以我来写点光明的、令人振奋的东西,同样的,它还是科学定律:

——嗯,以上段落仍旧作废。下面我来介绍一个科学定律:Hick-Hyman Law (希克海曼定律)。

T = b * log2 (N + 1)

其中,N是选项个数,b是可以用经验法测量的常量,T是做出选择所需要的时间。

这个定律说明,当选项的个数以线性增长时,在若干个选项中作出选择所需要的时间是以对数曲线增长的。换句话说,选项的数目在快速增长的时候,做出选择所需要的时间只是在慢慢地增长。假如选项的数目增长了250倍,所需的时间也仅仅是增长了8倍左右。在前面一句多余的解释之外,还有一个多余的图表用来解释:

从图中我们可以看出,如果你弄了许多的菜单项出来,用户肯定会受到困扰,操作时间会变长。但是操作时间的增长数量,和菜单项数目的增长数量相比,基本上可以无视了。

Maya的PieMenu里有很多选项


关于这个定律,其实还有一些可以深入的话题,还可以扯到认知科学和神经网络。但我一来懂得不多,二来不想浪费太多篇幅,所以就到此打住——嗯,有话痨趋势的我在此不得不多说一句,研究HCI一定要懂一些Cognitive Sciences(认知科学),不用精通但是怎么也得懂一些基础。比如:Change Blindness, Inattention Blindness和IOR之类的……


(2.4) Power Law of Practice (实践的幂定律)

古人云,常言道,俗话说,曾子曰,Confucius he say:“包子有肉不在摺儿上”……哦,错了,应该是“一回生、二回熟”(所以,摺上有肉的包子不能只蒸一回,嘻嘻)

——以上段落作废。

我们都有过这样的体会,在最开始做一件事情的时候,往往需要集中全部精力,但往往还做得不够好,比如骑自行车/学开车,或者解数独,或者打地鼠,或者玩Super Mario Bro——还记得你第一次上手红白机的时候么?在控制Mario向前跳跃的时候,你有没有把手柄当成了WII手柄来用?后来当你可以不用Konami Code也能全八面迅速通关的时候,你肯定不会再把游戏机从桌子上扯下来了吧?

Super Mario Bro


上上下下左右左右前前后后


Power Law of Practice (实践的幂定律)

T = a * N ^ (-b)

其中,N是练习的次数,T是第N次的完成时间,a和b是常数。

这个定律的意思是:随着练习次数的增加,完成相同任务所需要的时间是指数下降的,参见下图:


有了这样的一条定律,对我们来说无疑又是一大利好消息——哪怕一个任务设计得很糟糕、很耗时也不用太担心,只要用户多加练习,那么用户完成任务的时间就会大幅下降,而且是迅速地大幅度下降。

如果你想验一下Power Law of Practice,可以先找一个秒表(或用手机功能/手机App),开始计时,然后清空你的浏览器的内容缓存、所有保存的表单内容、所有保存的密码、所有的URL历史、所有的Cookie,然后记录下所用的时间。然后再重新开始并计算时间,如此重复若干次,然后画图。

如果你多注意观察,在以下这些电脑用户的身上也能观察到Power Law of Practice的效果:超市收银员、银行柜员、照相馆里PS一寸免冠照片的操作员、电脑城装机器的技术员……

虽然有Power Law of Practice的保驾护航,但是,我要说“但是”:一般在设计一个普通操作的时候,最好也不要超过3次鼠标点击。这并不是一个科学定律,只是一个经验公式;而且它也不是普适的,只是针对一般性的普通操作。举个例子来说:一个频繁更新的软件,如果在下载完更新包后,一定需要用户的操作才可以实施更新,那么,最好能让用户在三次鼠标点击之内完成这一次更新。(联想一下JRE Update/Adobe Update/iTunes Update/Windows Update,再对比一下Google Chrome这种不需要任何鼠标点击的)

嗯,接下来我的恭喜作为读者的你,看了我这么多枯燥的说教竟然还没有被吓跑,其实我还有心介绍一些更多的理论上的东西,比如GOMS/MTM之类的,但一来那只是一种测量方法,二来做科普时基本上无法夹带我的私货(嗯,开篇说过了,我自己在做的一个基于手势的HCI,暂定名为WheelUI),三来有许多有意思的东西如果不“先下手为强”,估计别人慢慢地就都知道了(那样子就无法完成ZB伟业了)……呵呵,你看我写了这么多理由,就是为了能够到此为止,点到为止,从些不再写知识点,继而进入侃大山的历史新篇章…… History became legend; legend became lenovo… until, when chance came, a new era had begun… And a brand new saga is being written…

谢谢观赏,下次再见!



00:00:25,469 --》 02:45:35,634
<font color="#ffff00"
反义:Sharon桶 盆泥
脚对:大妈 杀啦
世间粥:歪脖子的小马,不拉屎皮特



(以上是字幕组加上的一大堆乱七八糟的文字,我从来没有看懂它们的意义,请不要跨服务器追捕)






Tagged with: ,