阿里的味道May 28, 2010

http://farm5.static.flickr.com/4037/4647585758_62c3640a37.jpg

故事

背着背包,从走出公司的那一刻,思绪还是无法的平静。已经从阿里离职了,但自己从潜意识中还在问我自己,「我真的离开了吗?以后我的脚步该走向哪里」。

回忆从那年的面试,有人问我,「您为什么来淘宝?」。那时的我很桀骜的回答,「因为离我住的地方近」。那时的我觉得,那些「语出惊人」的回答能搏得众人的眼球,显得自己很与众不同。

进入阿里,那种自我的感觉逐渐的被消灭,是因为周围的同事们用他们的行动无声地教会了我什么是团队。

回到家打开背包,整理我平时的物品,逐张的翻阅战友们给我写的明信片。那些煽情的字眼本人自诩为已经免疫,但看见每个人笔尖留下的字迹,已然深处的那跟神经已经被触动。

双手拿着的那些已经不是单单薄薄的几张纸,那是情。

看·想

记得阿里对自己公司的介绍,「阿里巴巴是家理想主义驱动的公司」。记得有朋友开玩笑的说到,只要在阿里混过的员工,我不面试直接就可以让他进来我公司,因为他们不知道什么是上班、什么是下班、什么是加班。

是的,「人没有理想和咸鱼没区别」,在公司每个人都在为自己的理想而在拼命的工作。

然而在我看来,阿里仍然有很多的问题。去年的九月刚过完它的十周年生日,如果将公司比喻为个人的话,那么他已经是名小学生,而这名学生需要学习的地方仍然有很多。

我担心由于人员的增长,那份原本属于学生的童真和幼稚将不复存在。公司的价值观如果被稀释,那么剩下的仅仅是具没有灵魂的躯壳。

同时,阿里仍在不断地做着加法而忘记了沉淀。从技术角度上说,底层的基础没有打好,那么楼越高越是显得危险。

悟道

躺在沙发上细细品读《阿里味》,也只有这个时候才有时间仔细得阅读其中的文字。

那些字里行或许煽情、或许木讷的文字已然都被同时印在这本小小的册子上。品读书中的每一个故事,犹如那也是我真实的经历 -- 在同个办公地点,呼吸着同样的空气,那些可爱的人,其实就在你身边埋头敲着代码。

阿里的味道,犹如那瓶瓶罐罐的调味料,酸甜苦辣咸五味具呈。比如那些贵重物品忘记带,第二天被保安’贴纸条‘的那份感动、项目延期、被无休止的 Bug 折腾得那些怨念和惆怅、项目顺利发布的那些许的自豪和成就感…

此时此刻这些在平时平常得无法再平常,细微得无法再细微的事情,都在被无形得放大,犹如幻灯片一样,在脑海中不断地被轮播。 而我知道,不管怎么样,不论我以后的脚步在哪里。我对我在阿里付出的 822 天青春,不会感到任何的惋惜和后悔。

因为,我已经是名阿里人。

-- EOF --

我常用的 Mac 软件May 9, 2010

Fenng 搞了台 mbp, 正在折腾 Mac 常用的软件 ,我这里也总结下日常我经常使用的 Mac 软件。PS,如果你机子比较老, 可以看下我几年前的列表

偷懒一下,下面的软件就不逐个做连接了,相信搜索他们的名字就能得到想要的结果。

我选择软件的原则

  1. 尽可能的自动化,并占用资源少
  2. 界面和功能过于复杂的不用。因为通常一个巨型牛逼的软件都会被两三个「简单」软件打倒
  3. 不追求版本号,够用就行,哪怕是几年前的「火星」软件

浏览器

我最常用的浏览器是 Chrome,其实系统自带的 Safari 已经足够好用(支付宝控件什么时候能在 Chrome 下使用呀)。使用 Chrome 的原因是有

  1. 书签能够和其他机子同步
  2. 速度快
  3. 真的是习惯了

Firefox 已经被我沦落为开发工具,除了开发平时不会开启这个「巨无霸」。

编辑器

很开心 Mac 下有对应的 Vim 版本:MacVim,这是我用过的最舒服的 Vim 版本,甚至我觉得比 Windows 下的 gVim 还要舒服。

顺便说一下,MacVim 还在开发中,如果下载官方正式版碰到很多诡异的问题, 可以尝试下我的编译版本

其他的如 Coda 、BBEdit 等都尝试过,但是我的真的是太过于「依赖」Vim 了,所以请不要再向我「推销」其他编辑器了。

还有个就是其实系统自带的「文本编辑」也足够我使用,类似 Windows 下的「记事本」一样。

PS,用 Emacs 的达人,可以 Aquamacs Emacs ,据说这玩意也很靠谱。

看图

因为我用的是 10.6.3 的系统,所以一般看图片仅仅是简单的敲下空格,使用 QuickLook 就可以。

在 Mac 还没有我喜欢的 Windows 下的类似 IrfanView 的软件,不过如果单纯是看图片的话,其实 Xee 其实也凑合。

如果需要批量处理图片,那么我会用 ImageMagick,虽然这是控制台下的工具,但学习掌握它绝对不会浪费你的时间。

下载

电驴在 Mac 下有对应的版本,如果想用类似迅雷的工具,那么还是用 Windows 吧。iGetter 以及 SpeedDownload 都是好的下载工具。两者都是收费软件,但 Google 下还是会有惊喜的。

如果是 FTP 软件,那么 Cyberduck 是第一选择,如果觉得「免费的不靠谱」那么推荐使用 Transmit。需要 BT 下载的,推荐使用 Transmission 。

聊天

QQ 有 Mac 下的版本。其他常用的 IM 可以考虑使用 Adium,支持 Gtalk、MSN 等等。不过个人用了一段时间,还是用回 iChat 了,无他就是因为双方的 Gtalk 用户都用 iChat 能够语音聊天。

如果想用旺旺的话,暂时会悲剧下。如果非用 Mac 不可,那么可以考虑暂时使用 iWangWang 顶下。相信 Mac 版本的阿里旺旺会很快就能出来。

UML & 脑图

我的眼里只有一个软件:OmniGraffle,甚至据说很多人因为这个软件而买 Mac 。它能完成的事情实在是太多了,你要亲自尝试下在能了解它的功能。PS,Omni 公司出品的系列软件都可以尝试下,非常的经典。

还有个选择就是 NovaMind ,不过不知道是不是我人品的问题,当节点一多反映就会很慢。

幻灯片 & 文档编辑

这个没话说,Keynote 就能完成我所有的应用了。Office 套件在 Mac 下的选择太多了,但基本上分成三大类:Apple iWork、Microsoft Office for Mac、NeoOffice/OpenOffice。

开发环境

如果要在 Mac 下开发,那么 XCode 是必须安装的。下载个 iPhone 的 SDK 基本上 gcc、make 等工具都全给你安装好了 -- 谁让 Mac OS X 和 BSD 的渊源那么深呢?

说到 BSD ,相信你很希望能使用类似 ports 的软件包更新、安装环境。MacPorts 是个好的选择,但是它实在是太老了。

如果你想尝鲜,那么 Brew 是个非常好的选择 ,我个人用 Brew 废弃了 MacPorts。

还有比如 Windows 类似 SecureCRT 等的软件功能,通常使用 expect + 终端 就能够搞定。

备份&系统维护

备份通常我用 rsync 和 TimeMachine 组合,其实 Mac 下如果你用 TimeMachine 并记得定时备份的话,数据这快就可以高枕无忧了。

系统维护的软件有一大堆,个人经常使用的是 Onyx、CleanMyMac,其实我并不怎么清理什么「系统垃圾」。

如果悲剧得误删除了数据,那么还可以尝试下 Data Rescue II,它曾经为我挽回了很重要的数据,顺便感谢下。

视频相关

Mac 下的播放器其实是个悲剧,不是因为没有,而因为是像是「全真七子」-- 加起来都打不过 Windows 下的 kmplayer。

目前用着比较舒服的是 MPlayerX、Movist 和 VLC。如果要看高清的话,推荐使用 Plex,用最新的编译版本支持显卡硬解码,温度会降下不少。

如果需要转换视频和音频,那么推荐使用 Any Video Converter Pro、All2MP3、Audio Hijack Pro 等等。

其他工具类

  1. 输入法我现在用 SunPinyin,尝试过 FIT 和 QIM。但因为 FIT 首次启动比较慢,QIM 是收费软件而且和 Chrome 有小的问题
  2. 解压缩软件我用的是 Rucksack,因为它是我在它活动的时候免费得到的
  3. Acorn 和 Pixelmator 都是个非常好的 Photoshop 替代工具,话说 Adobe 的软件在 Mac 都是悲剧
  4. CopyPaste Pro 是 Mac 下的多重剪贴板增强工具,推荐必装
  5. Dropbox 在 Mac 下也有对应的客户端
  6. 想要理财的话,推荐安装 iCompta
  7. KeyCue 能帮你显示当前软件的所有快捷键
  8. 对鼠标的加速度不习惯的话,使用 SteerMouse 调整下看看
  9. Flux 能改变显示器的色温,从而达到保护眼睛的目的,但并不是所有人都喜欢它

最后,Show 下我的 Mac 桌面

http://pic.yupoo.com/feelinglucky/5027594a3971/medium.png

各位有什么其他的好软件推荐,欢迎不吝提供。

-- EOF --

Array.prototype 的泛型应用April 28, 2010

在开始这篇文章之前,按照「惯例」我们先来道题目( 出处 )。

题目

请说明下面语句的输出:

x = {shift:[].shift};
x.shift();
console.info(x.length);

如果你回答正确,那么说明你已经了解 Array 函数的泛型应用。在理解这到题目之前,我 我们首先要了解数组(Array)的 shift 定义。

MDC 中已经对相关的说明 描述得非常的清楚

shift is intentionally generic; this method can be called or 
applied to objects resembling arrays. Objects which do not 
contain a length property reflecting the last in a series of 
consecutive, zero-based numerical properties may not behave 
in any meaningful manner.

同时,EMCAScript 中的定义也同时定义了对于 shift 操作对于对象 length 属性的改变, 那么基本上我们可以了解到上题中的答案为

0

扩散思维

如果对于上面的题目还无法理解,那么我们更清楚的说明 Array.prototype.shift 对对象 的 length 的影响。

x = {};
Array.prototype.shift.call(x);
console.info(x.length);

很明显,对于对象如果为定义 length 属性,则 shift 则会自动加上 length 属性并设置 为 0

既然已经说到这里,那么下面的题目输出什么留给大家去思考。

x = function (a, b, c) {};
Array.prototype.shift.call(x);
console.info(x.length);

重新认识泛型

很明显,上面的题目有可能还是无法说明本篇文章的题目。泛型(Generic)应用其实 期前也说明过 ,但这里主要说明 Array 方法 对于「类数组」的操作使用。

强制转换为数组

var args = Array.prototype.slice.call(arguments);

这个用法比较火星,其实期前也用过, 详细参见这里

迭代数据

Array.prototype.forEach.call(arguments, function(i) {
    console.info(i);
});

如果对象能够被递归,则出了「传统」的 for、while 等语句以外,还可以考虑使用 Array 的 forEach 属性(注意 IE 会是悲剧)。 Array 的 forEach 方法详见这里

其他的 Array 扩展用法可以散发自己的思维,如果对应浏览器的 Array 没有对应的实现方 法, 可以参见这里

其实,不仅仅是 Array 方法,很多浏览器原生对象的方法都是泛型,我们完全可以利用这 这些特性

  1. 使代码更为的清晰
  2. 使用原生方法,效率更高。

-- EOF --

Yahoo 统计