简约至上：交互式设计四策略 读后感

普适观点

• 人们喜欢简单、值得信赖、适应性强的产品
• 考虑大多数用户的体验，让他们觉得产品井然有序，轻松自在。他们正在掌控着一切。
• 改变会产生影响，需要有办法（最好是公式）来衡量究竟是正面影响大，还是负面影响大
• 描述你的设计
• 使产品的设计符合用户使用产品的环境，要意识到影响用户体验的因素极多
• 简单的用户体验是初学者、新手的体验，或者是压力之下的主流用户的体验
• 想要实现简单的体验，需要将目标定得极端，这样能保持产品迭代朝着正确方向前进。例如将目标定位“瞬间响应”而不是“快速响应”，这样我们能在开发新功能时时刻提醒自己。

实现简化的4个策略：

删除

• 去掉不必要的功能，直到不能再减

组织

• 按照有意义的标准将他们划分成不同的组

隐藏

• 隐藏不是最重要的功能，避免分散用户注意力

转移

• 将复杂性转移到其它地方。例如遥控器保留具备最基本功能的按钮，而将其它控制放到电视屏幕的菜单上

对待客户需求

• 不要简单地因为客户要求就增加功能，应该对用户的要求做逆向工程——搞清楚用户到底遇到的问题是什么，然后仔细斟酌这个问题是不是应该由软件来解决。
• 增加功能不一定能让用户体验更简单，反而经常导致更多的迷惑。

Simplicity is the ultimate sophistication
– Leonardo Da Vinci

Share

Sync two Git remote repositories

In Yahoo we use Gerrit as our code review tool. Engineers commit code changes to Gerrit for review. After code has been reviewed by peers, Gerrit help push to Github. However sometimes bad thing happens.

For example, if a committer forget to setup Gerrit env and the code is committed and pushed to Github directly (because he has this permission to do so), he will notice this soon because future changes from Gerrit might break. Then he try to submit a review for the missing commit to Gerrit with an “git commit –amend” to generate a change-id (which is used by Gerrit). Because “–amend” generate different commit-id, so after the review is passed, even the content is the same, the commit-id in two remote repo (Gerrit and Github) is different, which leads to future reviews are still not able to pushed to Github from Gerrit and sometimes new review could not be submitted.

So how could we fix it? It would be a good idea to push changes from Github to Gerrit to get them in sync. Here are two options.

Share

Recommended workflows in Alfred

Finally I purchase Alfred for workflows.

A Workflow is a combination of actions, and the killer feature in Alfred powerpack. In Alfred, we can import existing workflows or create our own workflows – to run a series of actions, which will dramatcially improve productivity.

My workflow lists

Before writing this post, I spent about half an hour on Alfred Workflows to go through all existing workflows based on the AlfredWorkflow repo by hzlzh and select following workflows as enhancement of Alfred.

There is another workflow repo by @zenorocha.

And here’s my lists.

Share

Apache Pig in Practice 1

I write many pig script in the past few months and have explored some tricks with my buddies. hopes it could help someone.

Let’s focus on some interesting topics in this first article and get prepared for the later Pig rush.

IDE & Environment

Vim

I use Vim to write most script language and those are my favourite plugins to write Pig:

• Pig Syntax Highlight. Latest update on Jun 2014, Pig 0.12 supported.
• You complete me. Best auto-complete plugins ever. If you don’t use a MAC, Supertab is also a reasonable choice.
• Tabularize Align and keep cleaness of the Pig codelet. Most common usage is :Tab/AS to align FOREACH ... GENERATE clause.

To improve debug efficiency, I like to run pig with short cut. Here are my simple approach: add the following in .vimrc for quick run with F5

revise run_pig.sh as you like. General idea is reduce redundant work and typo.

Share

如何准备技术演讲

内容的准备

• 多讲目标听众不知道／感兴趣的内容。听众投入最宝贵的时间来听分享，Speaker的一个起码责任是保证听众在这段时间的收获。
• 设计一个有创意的开头。提升自信良方。好的开头会影响观众对speaker的第一印象，也使听众更容易包容后来可能出现的失误。
• 设计一个强而有力的结尾。想一句推而广之有哲理的话，再来强而有力的”Thank you!”，告诉大家是时候鼓掌了。结尾推而广之的例子可见 一个关于数学归纳法的悖论问题：到底是第N天有N个红眼睛自杀，还是什么都不会发生？ 的最高票答案补充，我恨不得点3个赞。
• 避免常见错误或者明显缺陷。可以参考http://www.slideshare.net/heypig/caffeinenicotine-ppt 蔡老师就如何组织内容说得很好。
• 平日的大量积累。没有切身体验的死记硬背和摸爬滚打后的娓娓道来，听众的收获和感觉是大不一样的。在接受一次分享邀请之前，最好先掂量一下自己对这个话题的理解。

幻灯片(Slides):

• 有时间的话尝试用新软件去设计幻灯片。我用过的有impress.js, Prezi, Slidify。Prezi上手更容易一些，但是收费。Impress.js用HTML5实现了Prezi的大部分功能。Slidify比较适合数据分析师使用。花点时间稍加运用，绝对会让人耳目一新。
• 所有元素风格一致。包括但不限于字体，色调，标点，对齐方式，动画出现退出的方式。
• 用无衬线字体。中文字体里面比较保险的是微软雅黑或者苹果丽黑。宋体只会让人质疑你的品味。英文字体没什么研究，可以根据自己审美选择了，当然也有保险的Helvetica，或者Impact。

Share

Share

Learn d3 the Hard Way (3)-- Force

This is a very useful sketch for node placement. Rather than the original force only move nodes, this sketch also place label in it. Origin from Mortiz’s Force-based label placement.

The basic idea is to have labels orbit around their target node at a fixed distance, but repeal each other, so that they don’t overlap, and orient themselves to the outside of clusters. To support that, labels on the right of their target node are left-aligned, and labels on the left of their target node are right-aligned; in between, we interpolate. In this example, one force layout governs the node placement, and the second one the label placement, but of course, the node placement could be computed by any other algorithm.

Share

Learn d3 the Hard Way (2)--yet another collision detection

Another collision detection work. Very elegant.

Here’s a little bit background about this sketch. As we can see, this sketch is composed by non-touching circles in a canvas. This algorithm generate a random sample by generating K candidates, and choose the best one and add it to the system. The definition of best is that it’s the farthest away from the previous sample. By this way, the emergance of new sample would be more natural, compared with the uniform random sampling.

Some people ask, “is this useful? I can’t see how I can use it into my work.” They are probably wrong, an English artist use exactly the same effect in his work Silent Buddha. It’s a really impressive work.

Now take a look from the inside.

Share