Ruby Hacking Guide中文版

星期日, 02月 1st, 2009

Ruby Hacking Guide (简称RHG),是青木峰郎创作的一本剖析ruby实现的书。Javaeye.com目前有几位在翻译成中文版

http://www.javaeye.com/wiki/Ruby_Hacking_Guide/1262-chinese-version-of-the-ruby-hacking-guide

了解一下语言的实现无疑对编码有很大的助益,关注。

php精品推荐给callaly

星期三, 11月 8th, 2006


From: Taobao Blog

原文: User Interface Design – Taking the Good with the Bad

成功的婚姻之关键在于折衷。当事情沿着你不希望的方向发展,在最后,形成的争论却可以为你带来极大的好处。这条定理同样适用于用户界面设计。毕竟,如果婚姻不是形式和仪式又是什么呢?

设计用户界面的过程从根本上就是折衷的训练。这个训练并非指设计者和项目赌注者之间的折衷(可用性从来没被办公室政治利用过),而是指设计方案的倒 退和前进之间的折衷。每一个有关用户界面的决定,从一像素的精确定位到整个网站的信息架构都需要深思熟虑。对每一个设计方案给用户带来的好处与花费两者之 间的仔细权衡才是本质。人们常常忽略有时是很小的代价,但每一个用户界面设计都要付出的代价。经过考虑的折衷原则其实贯穿了所有的用户界面设计,但在设计 最佳的用户界面时,具有讽刺的是,它还要求你避免设计折衷的界面。

你不能吃了蛋糕还想拥有它

在创作用户界面的时候,你必须处理两个主要且冲突的局限:在仅有的一个显示器上传达海量的信息;用户在一定时间内接受海量的信息。在一个显示器上显 示太多的内容,用户不得不从混沌中“艰难跋涉”了;显示太少的信息,用户为了找到他们的目标,又不得不靠猜测了。好的设计应该在程序和用户之间找到平衡 点,既有效利用屏幕,又能考虑用户理解信息的能力。

你的舞台(显示器)是有局限的——毕竟有x像素的宽和y像素的高。这意味着资源很重要,你利用的每个象素都可看作是有价格的。当你试图去创建一个用 户界面的时候,保持信息密度的平衡是项挑战。每个设计方案都要经过深思,因为在屏幕上每增加一块内容就加大了信息密度,这对用户有限的精力和认知过程是个 挑战,使得用户更难弄明白了。

好的设计代替不好的

无论何时,花费只要能带来好处,采取折衷原则也是可以的。理论上,你可以最大化好处和最小化坏处,但本质问题是,所带来的好处能否超过其花费?不仅仅是超过,在所有可选的设计方案中,它能否带来最大利润?果真如此,它才是最佳方案。

花费/好处的折衷考虑穿越了用户界面开发的所有层次,从导航设计到字体大小。越是重要的设计方案,越是体现出用户界面巨大而潜在的影响。小的设计方 案看起来似乎无关紧要,但积少成多,也会对用户界面产生潜在影响。无论大小,每一个设计方案都应该在可用性评估和考虑网络用户界面好处之后再决定。

一些对比的设计方案

设计 好处 花费
减少信息构架的层次 找到信息时减少了点击 更混乱
深层信息架构 清晰,减少混乱 找信息时点击多
小字体 一屏上显示更多信息 某些用户太难阅读了
大字体 阅读起来容易 每屏信息少了
下拉框 在有限空间里容下了更多选项 隐藏了选项
单选框 同一时间看到更多选项 需要更多空间,易混淆
图标 一旦记住就容易辨认了;视觉愉悦 要学习识别
文字链接 总是易懂的 一旦不理解,可能必须阅读更多的资料
缩写 节约空间 需要学习和识别
非缩写 易懂 需要额外空间
键盘快捷键 数据高速输入 需要学习
鼠标指向和点击 直觉的 交互增加了额外的时间,需要更多的经验

疯狂背后的模式

事实上,你无法刻意评估每项设计方案的优劣。此过程就像天性一样,你可以凭直觉判断哪里该用下拉菜单还是单选按钮,或者此设计是不是比另一个略胜一 筹。但直觉是建立在相关经验和努力之上的。设计的折衷评估仍旧可能发生,它在潜意识中形成了。这种潜意识行为可能让你没意识到为什么选择了此项,而非另一 项方案。但如果你拆开了这个过程,其核心就是基于可用性原则的判断。

在设计过程中描述这个潜在法则可能并非必须,它很自然就发生了,但是你必须清楚,并在逻辑上意识到你的设计。如果你和别人一起工作,他们的建议可能 降低了可用性,你意识到自己的决定是如何产生的就很重要了。通过将用户界面设计中潜意识的行为化作语言,你可以为坚持自己的决定增加了砝码。但如果你让每 个人都对界面设计提出一种意见(就像恐怖的会议讨论),界面可能会像过去那样难看了。

好 – 坏 = 网络可用性

你是否注意到你可以立刻指出各种界面设计的不足?这是因为在界面设计时的折衷原则使然。甚至最好的设计解决方案都可能有些倒退,一些成员可能会尝试 改变设计。但任何设计都有不足之处,每一个无不如此。这样的不足还不至于损害设计。一个设计比另一个设计更好的地方在于无时无刻不照顾到网络可用性。所 以,好-坏=网络可用性。最后测量的标准就是网络的可用性价值。

批评开始满天飞了。字体太小了、图标含义不清、缩写词意不明。也许最初只是脸红一下,然后就红到耳根了,仿佛这些批评都是对的一样。事实上,这类宣 言单独来看都是正确的,但它太过正确,也应该被挑战。来决定它值不值,就要既考虑花费,又要考虑好处了。后台设计者能立刻识别一个特殊设计的花费,但是他 们看不到好处。你需要客观的评估每个建议对可用性的影响,从而决定哪个是最可取的。

除了要懂得界面设计中的折衷性,你也应该鼓励那种有缺陷的设计建议。为了有效评估那些作用于界面设计的花费和好处,你需要涉猎多种领域:从认知学到 人因学到图形设计。只有对人们如何与应用程序交互建立了巨大的知识储备,你才能更有效地评估用户界面设计。这不仅仅是个非对即错的事情,因为花费总是与带 来的好处相关。

举例来说,你的页面字体可能小了,对一些老年人相当难以阅读。这就是花费。但这在一屏上提供了更多的信息,也意味着更少的滚动,减少滚动可以降低物 理操作和认知输入。现在假设统计出你的用户年龄90%在21至30岁之间,因此比较其他解决方案,这时字体更小一些会更好,网络的可用性也更高。

所选的方案并非完美,但它提供了更好的可用性。你也可以提出异议,用好的替代坏的设计,但对于你特定的应用,选择这种方案无非是最明智的。你必须在完整的程序使用中加以衡量,才能选出最合适的方案。

懂得在界面设计中无所不在的折衷原则,并应该灌输给整个项目组,甚至每个普通员工都要知晓。对用户界面的争论应该被鼓励。在每一个设计方案中通过理解、评估和解释折衷原则,你可以设计可用性更高和更有说服力的界面。

对成功的评估

当评估一个设计是否更好时,又需要一个用户界面准则去评估,以下是几个用户界面质量的元素:

  • 容易学习并容易记住
  • 使用的有效性
  • 出错率,可伸缩性和可恢复性
  • 个人满意度

以应用程序的最后使用效果评定,每一个因素都可能是重要的。举例来说,使用的有效性也许对高端的用户程序有用,而对小册子市场就不一定那么有效了。虽然这种转变可能会提高个人满意度。但每一个设计决定都应该接受上面四个因素的考验。

广泛折衷原则

折衷也不应该以屏幕设计为终点。在用户界面设计中占据了很大分量的包括:网络信息统计(比如什么浏览器、平台、显示效果尺寸等)、瘦/胖/富客户端 体系、开发时间和花费的资源等。在评估折衷时,可用性占据了极大的分量,但真实使用环境中的一些问题也日趋重要。比如说,如果一个设计方案比另一个好得 多,是否值得用1万美元开发它?这部分功能的提升值得吗?反过来想,节约的这些钱是否削弱了可用性?这类讨论是如此现实,需要被谨慎评估。

只要认识到用户界面设计是建立在折衷上的,会帮助我们清楚地认识到为什么如此设计。这样做会减少优秀界面设计出轨的风险,尤其对那些只看到事物一个 方面的人有用。通过清晰地列出花费、好处和相互交流设计的意义,你可以更好地说明别人、得到更多的支持。总之,如果我们能依照折衷的原则,我们就能正确地 看待好处和坏处。只是希望别带给我们丑陋的事物。(完)

Experience of Wii

星期一, 10月 30th, 2006

如何展现用户的体验?这是一个非常有力的参考!

http://uk.wii.com/exp/

experience Wii

btw:我和callaly一致认为,我们需要这样一台能给我们带来如此非凡体验的游戏机。

VisualComplexity.com

星期一, 10月 30th, 2006

可视化复杂结构。如果用图形化方式描述复杂结构或流程,这里有很多有意思的创意和参考。

VisualComplexity.com

visualcomplexity.com

孔庆东的“千夫所指”

星期日, 08月 6th, 2006

我喜欢在睡觉前登录我的rss portal,随便看看各类文字,前一段时间收集了孔庆东老兄的blog,每必看,甚得其乐。

今日又见一文名曰《千夫所指》,或纯直,或狡黠,或狂放,或怯懦,或嬉笑,或悲切,皆在其中。

是一句沉甸甸的古训——千夫所指,无疾而终。

是一柄乌荧荧的匕首——横眉冷对千夫指。

是一位雄纠纠的真猛士——虽万千人吾往矣。

是一曲甜腻腻的假民谣——妹妹你坐船头,哥哥在岸上走——《纤夫的爱》。

千夫所指,为什么就会无疾而终?我从小就不明白,至今也还是不明白。幸亏了这不明白,我得以皮糙肉厚,每每在千夫所指的长坂坡上,七进七出,即使血透了征袍铠甲,也只当是洗个樱花浴。

然而我并非不知道,千夫所指,已经点翻了无数的好汉,正如我的一首诗里所写:“平原上,网翻了无数,雄狮猛虎。”肥大的,切作牛肉卖了;瘦小的,剁成细馅,蒸得上好包子,卖与华老栓和祥林嫂们。我亲眼看见,千夫的弹指神通,如机关枪布成的火网,扫射着一个又一个爆破组。董存瑞、黄继光、马特洛索夫、张志新、布鲁诺……全都倒下了。我只是不相信,难道就不会有例外?或者是故意蒙骗住自己的理性,以不相信为借口,企图硬扑上去,扑出一片弹孔中的黎明?所以周大哥才说:“忍看朋辈成新鬼,怒向刀丛觅小诗。”

然而周大哥的话,我总是读许多遍,才懂个大概。小学时就读不大懂他的“横眉冷对千夫指”,因为这教训,我现在主张小学要多读周大哥的“美文”,中学再读他的“檄文”不迟。那时我们班主任、地主出身的李大牙老师,上下开合着她亮闪闪的大板牙说:“横眉冷对千夫指,就是横着眉毛,冷冷地面对着,敌人的手指头!”说着,她就竖起一根硕大的食指,吓得女生们一动不敢动,死死盯着黑板上方的毛主席像,希望慈祥的毛主席赶快把李大牙抓起来,解放我们这些祖国的花骨朵。

唯一能跟李大牙抗衡的就是我。李大牙对我是既欣赏又害怕,这一点可以参考我的《遍地英雄不吸烟》一文,此处不再赘叙。我问李大牙:“眉毛本来不就是横着的吗?千夫指为什么就是敌人的手指头呢?敌人那么多吗?”李大牙不放过任何一个灭我的机会,于是大讲了一番敌强我弱的革命历史,最后又绕到她最擅长的王二小那里,以铁的事实证明了敌人多,我们少,所以鲁迅先生就英勇地面对着敌人的一万根手指头了。同学们都觉得李大牙这次讲得很有道理,终于把狂妄的孔庆东给灭了,于是都发出呜呜咽咽的狼崽子的笑声,只有我那愚昧的同桌王亚霞和少数几个死党用疑惑的目光探询着我。这一刻,我想起上一次李大牙灭我的事情。她问我孔老二说的“克己复礼”是什么意思,我说是“克制自己,恢复周礼。”她轻蔑地一挥手:“不对,克己复礼,就是复辟资本主义的意思!你连你们家孔老二的反动思想都不知道,你还整天骄傲个啥呀!”教室里顿时一片暴笑,人人都觉得特别解气。想起这件事,我忽然心头一亮——我就是从那一刻起,明白什么是“千夫指”了。

几乎每次回哈尔滨,我都去看望我的中学老师或小学老师。但始终没有见到李大牙,其实我很喜欢她。我写文章调侃她,也是怀念她给我们当班主任的那个岁月。她为了不让二班的小黄老师把我挖走,特意给我买麻花吃,并且预言我长大后肯定能当科学家。我是永远感谢她的。

因了这感谢,因了那交锋,我喜欢的英雄开始多样化。从杨子荣、李玉和、武松、赵云,开始扩展到阿庆嫂、曹操、雷锋、王进喜,一直扩展到某些不被人们认可的“特立独行”的人。上了初中,我跟语文老师说,横眉冷对千夫指,千夫指的意思是包括敌人和麻木的群众的,两个语文老师都不明白我为什么会有这样的思想,她们慈爱地告诉我不要想这些乱七八糟的问题,你是学生会主席啊,思想一定要“正”!到了高中,我又问语文老师,刘国相老师说:“什么包括敌人?不包括敌人,鲁迅先生指的就是那些王八蛋群众!”到了高三·八,我问班主任老魁,老魁诡秘地一笑:“你觉得是谁就是谁呗。”也许正是一路遇到了这些老师,影响了我报考北大中文系,后来选择现代文学专业,并且多次丧心病狂,做出了“虽万千人吾往矣”的鲁莽行径。

不怕敌人的刀枪,固然也算得英雄,倘若是孤胆斗敌,还可算做大英雄。而不怕千夫所指,是大英雄也很难做到的,因为千夫里多数正是英雄所要拯救的人,还有他的战友和同志。萧峰、杨过、令狐冲、袁崇焕,都是面临过千夫所指的。被千夫所指的,有时候确实是坏人坏事,比如秦桧和日本法西斯,所以千夫就更有了豪迈的正义感,特别是当自称代表党意民意、代表自由民主的现代媒体充当了那千夫的时候。媒体杀人,酷于暴君,凶于猛兽,天罗地网,万民称颂。鲁迅的一生,多数精力就是在媒体上跟那些丧失了良知的媒体和“民意”做斗争的。

问我怕不怕千夫所指?我承认,我也怕。虽然洗过若干次樱花浴,也还是“心里有点跳跳的”。特别是当那千夫里,有我的朋友和邻里,有我的老师和学生,甚至有我的亲人和爱人,他们跟恶人小人汹涌在一起,向我射出愤怒的“六脉神剑”时,我往往退缩了,妥协了,假装幽默了。我因此知道,我不是萧峰,我不是鲁迅,我不是耶稣。我顶多能做个金圣叹,在刑场上给含泪的儿子出个对联:“莲(怜)子心中苦”,儿子因悲伤对不上来,金圣叹大笑曰:“傻儿子,应该这样对,梨(离)儿肠内酸。”金圣叹也是个千夫所指的另类,所以我很可能连金圣叹也做不了。另类不敢做,庸人不屑做,剩下的就只有“妹妹坐船头”了。唐伯虎、贾宝玉走的就是这条路,企图混在脂粉堆里,恩、恩、爱、爱,纤绳荡悠悠。结果仍是被革命群众给揪出来,还落个文化流氓的名声。看来真的如范仲淹所云,是进亦忧、退亦忧了。所以,对待千夫指,有时候要横眉冷对,有时候要低眉顺眼,有时候要眉开眼笑,有时候要眉头一皱、假装无疾而终。还有的时候,我们自己也是那千夫的一员。归根到底,千夫是谁?是我们大家,是我们这个互相吞食的可怜的世界。千夫啊,我为你们忧伤,然而,我爱你们。

异史氏曰:抬头望见北斗星,夜半三更盼天明。摇身混入千夫指,轻罗小扇扑流萤。

似孙猴子得了老祖的传示,抓耳挠腮,喜不自禁,胸口又觉得一些郁郁,不胜感叹。

Ubuntu教程

星期一, 07月 24th, 2006

言简意赅的文章和信息全面的著书,前者往往能让人获得更多的信息,这里面的起作用的是人的态度,而不是信息的多少。

http://forum.ubuntu.org.cn/about18740.html&highlight=%E8%BE%93%E5%85%A5%E6%B3%95

SQL Server 2005 中的分区表和索引

星期三, 07月 5th, 2006

http://www.microsoft.com/china/msdn/library/data/sqlserver/sql2k5partition.mspx?mfr=true

mount – linux下如何访问fat分区

星期一, 06月 19th, 2006

我google了一下如何在linux上访问fat分区,找到了如下文字。

mount使用指南

在Linux中,如果你要使用储存设备(Mo、硬盘、光驱等),就得先将它挂上(Mount),而当储存设备挂上了之后,就可以把它当成一个目录来进行访问。挂上一个设备使用mount命令。

在使用mount这个指令时,至少要先知道下列三种信息:

  1. 要Mount对象的文件系统类型?(Filesystemtype)
  2. 要Mount对象的设备名称?(/dev/????)
  3. 要将设备Mount到哪个目录去?

一、获得系统支持的文件系统类型

就第一点来说,用户可以执行
cat/proc/filesystems

来获得机器上支持的文件系统类型。如果系统并不支持你要挂接设备的文件系统类型,那你可能需要重新编译内核以使其增加对该种文件类型支持。关于如何编译内核请参照LinuxAid在线培训栏目中的相关文章。

常用的文件系统有:

  • Win95/98常用的FAT32文件系统:vfat
  • WinNT用的文件系统:ntfs
  • OS2用的文件系统:hpfs
  • Linux用的文件系统:ext2
  • 光盘片用的文件系统:iso9660

其中虽然vfat是指FAT32系统,但事实上它也兼容FAT16的文件系统类型。

二、确定设备的名称

在Linux中,设备名称通常都在/dev里。这些设备名称的命名都是有规则的,我们可以用”推理”的方式把设备名称找出来。

譬如说/dev/hda1这个IDE设备。hd是HardDisk(硬盘)的意思,sd是SCSIDevice,fd是FloppyDevice(或是FloppyDisk?)。a则是代表第一个设备,通常IDE接口可以接上四个IDE设备(例如四块硬盘)。所以要识别IDE硬盘的方法分别就是:hda、hdb、hdc、hdd。此外,hda1中的”1″代表hda的第一个硬盘分区(partition),hda2代表hda的第二个分割区,依此类推。

此外,你可以直接检查/var/log/messages这个文件,在该文件中可以找到计算机开机后,系统已辨认出来的设备代号。

三、查找挂接点

最后我们要决定将设备挂接到哪里,先查看一下你的计算机是不是有个/mnt的空目录?该目录就是专门用来当作挂载点(MountPoint)的目录。建议您在/mnt里多建这几个目录:/mnt/cdrom、/mnt/floppy、/mnt/mo等来当作目录的专用挂载点。

举例而言,如要挂载下列五个设备的话,其执行指令可能是(假设都是Linux的ext2系统,如果是WinXX的话,请将ext2改成vfat):

  • 软盘>> mount -t ext2/ dev/fd0 /mnt/floppy
  • MO>> mount -t ext2 /dev/sda /mnt/mo
  • cdrom>> mount -t ext2 /dev/hdc /mnt/cdrom
  • SCSIcdrom>> mount -t iso9660 /dev/sdb /mnt/scdrom
  • SCSIcdr>> mount -t iso9660 /dev/sdc /mnt/scdr

这是假设,如果你的设备的名称跟这个不同的话请自行修改。

最后需要注意的是:
1.执行mount动作时先打一下pwd看看现在的目录是不是在挂载点,如果现在目录在挂载点的话,mount(或umount)不会成功(会显示devicebusy)。
2.想卸载某设备的语法是umount目录名,例如umount/mnt/cdrom等。

Dive Into Python

星期四, 05月 18th, 2006

Dive Into Python 是为有经验的程序员编写的一本 Python 书。

http://www.woodpecker.org.cn/diveintopython/

2 of 3123