A Serious Man (Almost can’t make it)

I’m very serious recently, like a serious man. Since the Pandemic starts, I rarely feels less serious. Seriously, I lost friends, sleep and humorous, like a tree burning inside.

My family, my reason for life, plan a Hawaii trip with another family this summer. I know everyone is flying to this island to get rid of their tedious prison time at home, and I think that popular idea is not too silly. My brilliant wife booked a very very nice vocation home at the big island, and it’s about 4 time the size of our current home. And Hawaii is just a couple of fold better than San Jose where famous for their sands industry.

That vacation feels like a hole of light when I’m trapped in a dungeon. I’m counting every last bit of my fingers and toes. That’s the hope that I will not murder by my new boss in my deadly enterprise company, if I miss the flight I will definitely found dead. American has a drinking problem, and I lost my sense of beer tasting, totally eclipsed by the guilty of drinking. I can’t fake. I have no talent of beer tasting, I’m just using that as an excuse. There’s no cure for being a dull and tasteless soul. Not even Pixar’s soul, which is brilliant BTW. Before I gave up myself to “Church of Jesus Christ of Saints of the Last Days”, no offensive, but you may know that’s the joy of being a fundamentalism (so you won’t be a hacker). Oh, I mean it’s hard to be a good dad, being optimistic, being a OK husband. I feel that is a wormhole to reborn. Maybe I can be “not serious” about everything, like a desperate meat ball.

When I march through this long and dark tunnel, I can see the light is at end of the tunnel. It’s only weeks away. It’s my nirvana, like “Negative Creep”.

And then, a day, then weeks, I get stuffy nose and other allergies symptoms. It’s OK, it happens every year. It’s the pollen, a good year for vegetarian, bad for my nose. Every year my months of allergies turns to Sinusitis around May, this year no exception. Oh, some exceptions, I also get a very sore throat. I mean like something burning inside, I shared the link above, that’s what I felt. I virtually visit my doctor, she is so nice, she told me that I should be under antibiotic. Oh, lovely, I love writing scripts with a powerful language. Penicillin is as lovely as PHP, which is the best language in our world. Penicillin is definitely better than beers! When I can eat Penicillin I will not even dream about beer. I was so happy, I start to worry. I worry that my nose and throat may get worse.

Oh, and it did. I lost my voice the next day, even with my favorite Penicillin. I didn’t get my bonus fever though. Lost voice is a good thing, I don’t need to show up in meeting. I just kissed my pillow for 2 work days, and a weekend. On a Monday, my voice becomes funny. My throat is burning. But my nose feels better, the Penicillin works. And a week later my voice sounds less funny, but throat is still dry, burning, like the unlucky California tree, still burning inside. Oh, it’s OK, it’s still two weeks until our vacation, I still have time to win the battle with feeling stressed of ruin my vocation being down.

Time flies to 72 hours before the trip day. We need to do our COVID test together. I’m sure my dry throat is not because of COVID, I got my Pfizer shots and are fully cooked.

But the night before the COVID test, my younger daughter got fever. I can’t believe that happened, I’m shocked it’s not a nightmare, it’s real. But we still need to do our test. We drive a hour and visit a city 1 hour away from our home, that’s another indicator that everyone is flying to Hawaii. I’m a serious man, doing a COVID test for a hot baby is a good idea, we can tell if she got COVID!

The next day, we got a good news that everyone is negative in our family. I mean we really feels negative, because our vacation is very close to vaporized. We will not fly when anyone in our family has COIVD, we will also not fly with a hot baby! Oh, I forgot the good news that we are COVID negative. One thing is off the list, but our little flower is still fever “not free” on that morning! It’s 48 hours until the flight. I’m a serious man, we almost can’t make it. Indeed!

But our little is fever free on that 47 hours mark. And then she stays fever free until 24 hours mark hit. So we have a thin hope to fly honestly (fever and symptom free, and COVID negative). But in the meanwhile I don’t feel sick, but my throat still feels funny, I still get dry mouth at night, I still feels like shit that we almost can’t make it. I start to plan for the worst, so I won’t die from heart attack. We start to pack our luggage, like there is still hope, like the summer Olympic this year. I start to worry that theft will visit our home. I found that I forgot my password combination of my safe, a physical safe weight for a ton (a metric ton not US ton, use as a metaphor). Then I search my home, from 1Password to every piece of paper I may use, I can’t find the combination. But I’m looking for that combination? I don’t need my passport, I don’t need money there (and there’s no money in it), I don’t need to use the prime lens in that safe, I don’t need to leak more secret of my life. And then I found the combination, I tested and been positive that I can open and close the door of safe. And then I continue pack my luggage. We sent our guinea pigs to our most thrusted friends’ home, they have a pool so everyone is happy to take care of other’s pets. We even get BBQ treat from my friend, we even tested our Snorkeling equipment from him. He even have snorkeling equipment we can borrow so we can return our equipment bought from Amazon. Sorry to waste some natural resources, I feel guilty because I love what Greta is doing. Oh, you can tell I’m a serious man, I’m talking with my “Rabbi”, and I feels like approaching a black hole. That’s just a metaphor, like what Christ Nolan used in his interstellar. Oh, where is my train of thought. I’m packing my luggage. I packed too much, like moving home. I want to pack a lot of medicines, so that we won’t sick in the trip. At this stage, me, the little flower may be sick at any time. We may be super tired, we may miss the flight. We may catch COVID on the flight because our immune system is weak. Lost our ticket for life is a step away.

I can’t sleep at night. My watch told me I didn’t sleep well. I still need to work, and the work feels heavy like black hole. This is mental disease, I’m not a capable man to raise two kids and keep my wife afloat.

I’m beer free for 3 weeks minus a day. I’m pretty sober but feels worse than those days I drink beers. But you know you can’t trade sin with god, you can’t please gods/goddess. Oh, I forgot to mention. I got neck pain, like lose a wrestling game. That was 3 days before the trip, the day after we did our COVID test. My neck and back just sore like lemon. I can’t tell the difference of sour and sore, I’m a bad language user, I don’t like PHP. I wore my winter cloth, because I see snow at peak of Hawaii big island. I worry I may get more cold and develop more symptom of serious man. I have a metaphysic feeling that warmth helps my neck. But you know that feeling is not much difference of getting helps from god. And I don’t even know how black hole feels. But it turns out the warmth doesn’t help, my neck and back still sore like stoned (I don’t know why stoned doesn’t mean it feels like stone, but have a sinful meaning. I don’t mean that “stoned” literally). So I used a pain reliever called ibuprofen, and it worked. Sorry, I’m not reducing fever, I just want to get rid of the back pain. It doesn’t work that well, my work still feels like sucking my soul out of my skull. So I used a pain relieve cream from Walmart, and it worked! There’s a volcano eruption on my back, near my neck. The ingredient of menthol burns my skin, but rather than that other ingredients do their job. The warmth do work, I mean that feeling like Salonpas patches, they smells like root beer, but they do relieve the pain.

So there’s a chance that I can reborn before the flight, my ticket to life. And only time can tell.

I’m writing this in Hawaii. I’m not detained by police. Our flight didn’t dive into sea water. Black hole doesn’t burp with our earth. So we actually made it! Flora is fever free and have a very high spirit. My wife didn’t divorce me. But Hannah did get her fever from yesterday, but then fever free for a whole day. Lyft scheduled pick-up worked. We get a XL car, and it caries our over-sized luggage just fine. No traffic, no traffic accident, no highway cops. We didn’t catch COVID, finger crossed. The Hawaii travel’s official website do work, and our PDF is not eaten by my Mac. We don’t have food poison. I do get some deep sleep before the trip, at least better than some other horrible day. I didn’t lose any electronics on the airplane. I didn’t forget batteries of drone, cameras. My back pain is still with me, but fades a bit. I get a blister on my foot, but it’s not broken. I still make mistakes, but they didn’t take my ticket to reborn.

Oh, I’m a serious man. I will go to interview, find some work which doesn’t eat planet earth. I still suck at leet code, but that will not take my ticket to reborn. I have some cash to stay afloat even my boss hate me. I love my daughters, my wife, my parents and the beautiful world. Hawaii is nice. It’s not as weird/cool as Australia, but very nice. It’s the same feeling to hear “Aloha” after you did your apple fitness+’s mindful cool down. The ramen place we went right after landing was a disaster, but it won’t take my ticket to reborn. There’s a small beach near the nice rental house where kids can practice snorkeling before they go to real snorkeling.

I’m doing my meditation, and my neck is sour like sore. I did drink an Ola light hazy IPA yesterday, and that taste worse than my home-brew hazy IPA I yielded last year. Which make me feel like not the worst beer taster in the world, at least I can brew something not horrible. Oh, I’m not saying Ola beer is horrible. It’s using the wrong malt bill and wrong yeast, used not enough dry-hopping and added to much hops to their wort. I’m the most hateful person in our group, because I critics like hell. But today, I start to joke like I used to be. Because I know I’m a serious man, and you can tell the end is as black as it is in the movie. You can only blow that gravity away by a laugh, like the serious Sci-Fi TV serious “Dr Who” (Sorry I only see maybe 3 episodes of them, and they are old, scary but fun. Newer episodes are boring, see I like critic like hell). And then I cleaned all the dishes, cleaned kids’ wounds from today, washed myself. Then I sit down, alcohol free, writing a poem of myself down. I will post it on my blog, I’m not a private person, I’m the opposite.

I lied a lot, like I used to be. But there’s some truth in this blog post, like I used to be. I hope that I actually get a reborn, been lighter body, been funnier, been serious only with none-PHP-language and maybe English and Chinese. I don’t want to lose my sleep, and the 3 hours time difference helps, it’s still before 10PM when I finish typing the words before this sentence. Why I’m pouring this much of negative words here? Because I’m really a serious man? I never own a motorcycle but I love to learn how to do maintenance of them. I love the craft of living, like I love making coffee and tasting beer.

Hope tomorrow I will fly away from the black hole, lands in Island Hawaii. Seriously joking like that’s the real quality of life.

工具-不会用不丢人,怕会用才丢人

工具就是进行生产劳动时所使用的器具。工具的目的在于提高生产劳动的效率。感慨于一些真正的Geek的blog,我也想了一些工具对于我的重要意义,用来作为下一段的目标。

人家说工欲善其事必先利其器,还有磨刀不误砍柴工,实际上在说明工具对提高工作效率真的非常有意义。

今年的我,上游离于前端开发和后端开发之间,同时我还要在两个不同的团队(ThoughtWorks StudioCruiseMingle两个产品开发团队)之间切换,所以对于我来说频繁的需要Context Switch(工作环境切换)。两个团队所使用的技术也不同。

  • Cruise是一个标准的Java团队,大家的开发工作站都是Ubuntu环境,IDE是Intellij IDEA,源代码控制是Mercurial(aka. HG),自动化构建脚本基于Ant,持续集成工具就是自己开发的Cruise。
  • Mingle团队是标准的JRuby on Rails团队,大家开发机器是Macbook pro或者Mac mini,编辑器是TextMate(JRuby部分有IntelliJ IDEA的工程),源代码控制是Git,自动化构建脚本基于Rake,持续集成工具有两个,其中提交前使用的precommit CI是基于我们公司的开源产品CruiseControl.rb,而主持续集成服务器是基于Cruise(也就是前面那个团队的产品)。
  • 两个团队所使用的敏捷环境是Mingle,用过Mingle的朋友知道,这个NB的工具的可配置性很高,这两个团队的Mingle项目模板区别很大。
  • 这两个环境的区别还是相当大的,而且每次我切换了团队(大约2个月的周期),我很有可能就需要很大的更新我的Macbook pro上面的各种库。
  • 当我做前端开发的时候,我还要切换与我的Mac上的Photoshop CS3和Mac的VMWare Fusion上的Fireworks中(使用Windows的Fireworks的原因是授权,我的正版授权是Windows的)。使用Fireworks的原因是我们的设计师使用它,所以我需要使用它来调整一些小的设计。
  • 在做Javascript逻辑的部分,我需要在Firefox 3/2、Safari 3、IE6/7(VMWare Fusion)之间切换,每个浏览器都有不同的附加调试工具(主要的三个Firebug、Inspector、IE Dev toolbar)。

我想对于一个强悍的程序员(最近比较崇拜的delphijhdcola云风等神人)来说做这样的环境切换也许还是可以的。可是对于我这个不善于multi-task工作的人来说,马上让脑子适应不同环境,熟练使用不同的工具就成为了一个挑战。

所以,结果是,这一年中,我基本上对于这些工具很少深入学习,基本上就是凑合着使用,如果没有通用的快捷键我就懒得去翻手册学习了。结果就是使用HG的queue功能(超级有用的qnew、qrm、qpop、qpush系列)的时候经常把自己搞崩溃(今年居然有和李彦辉教授在pair的时候搞丢了2个小时内的修改,相当丢人),所以后来在使用HG的时候异常小心,生活在心理阴影下面。而对于Git,我居然完全没有使用过stash功能(和HG的queue类似)。昨天胡凯还问我是否用过bisect,是一个折半查找坏提交的功能(在HG和Git里面有等价的功能),我完全没有使用过。因为这些精巧的基于命令行的源代码控制工具对于程序员来说非常之重要,从这个角度体现了我对于工具的不求甚解达到了什么程度。突然想到梅兰芳里面十三燕那个很棒的台词“输不丢人,怕才丢人”,用不好工具没事,但是害怕学习用工具那就是很丢人的问题了。

那么自我分析的结果就是,由于环境切换,我缺少了专注,形成了对学习环境中的工具的恐惧,最后影响了我的工作效率。

下面的内容用来自勉,分析一下工具对于我到底有多么的重要(也就是说这个是我使用和学习工具中比较Happy的部分)。对于还没有注意到工具重要性的朋友,可以关注一下,看看是否有所借鉴。

  1. 关于GTD:去年看了不少退墨的文章,我深感这种意为减轻压力的“Todo list“对我的重要。最早我使用了文本文件来记录,每天一个文件。但是后来发现跨天完成的任务使用这种方式不好,需要手工拷贝。所以后来按照每个Context(家、单位、电脑、手机…)放一个文件,然后使用日期作为风格,跨天的任务我就拷贝一下,这个文件本身放在EverNote里面实现多平台共享。但是后来我发现这样也不好,因为不明显,也不好做计划。再后来我开始使用iGTD,发现似乎不错,它的结构比较简单,而且它分开了context和project两个概念,所以像“OpenParty、Mingle、Cruise、梦想”也有了自己的归宿。GTD的做法,please google之。
  2. 关于工作和休息的切换:一开始我惊艳于Livid修改过的TimeOut这个软件,但是它运行的经常很慢。后来我使用了原版的AntiRSI这个抗劳损软件,它的原理就是根据你设定的时间提醒你做短休息(一般是15分钟,站起来休息30秒),还有长休息(一般是45分钟,站起来休息5分钟)。再做结对编程的时候弹出它可能你的pair会有意见,但是你需要通过它的实际效果来感动他们。结果是Mingle的队友已经基本上都在使用它了。
  3. 分布式版本控制工具:DVCS可以帮助你更好的管理本地分支,让分支变得轻量,而且它还可以帮助较大的分布式团队更好的管理自己的本地主干。而且他们里面还有很多帮你管理提交习惯的工具,比如前面提到的提交队列工具,可以鼓励你使用更加频繁的本地提交。当然使用分布式版本控制工具的前提就是你要仔细阅读一下hand book,学习一下他们的基本概念和原理,这样才能达到更好的效果。
  4. Feeds工具:我使用Google Reader阅读文字型RSS Feeds,使用iTunes订阅Podcast。
    • 阅读工具多了去了,你的选择很多。但是要做的是学会更好的使用这些工具。今年从Patrik lightbody那里学会了重构Rss Feed订阅的重要性,要减少一个feed使用多个tag进行管理,因为一般鼓励在一定时间段里面保持未读feed不要积攒太多(这就失去了持续阅读的能力),但是如果使用多个Tag标记feed,那么在统计未读条目的时候往往会重复统计,会造成很大的阅读压力,而且对于给自己的不同feed组定不同的优先级也不利。
    • 所以我首先做的是将所有的订阅单一化,分类清晰了很多。分类有一个小技巧,不要对个人博客按照主题打标签,比如以前我给robbin的博客打上java的标签,而livid打上了apple的标签,那么在我决定要看哪个标签下的主题的时候就会感觉很迷惑,因为个人博客都没有固定主题,所以这些标签就编程没有意义的误导了,所以我现在对于这类feed直接标记为“Interesting Person(有意思的人)”,我可以给这些人很高的优先级。
    • 另一类是如GizmodoLifehacker这种信息门户型,他们每天要更新50+的新条目,所以我把他们放到一个单独的如news portal这样的分类里面,我可以给他们很低的阅读优先级。
    • 不同优先级的条目在Google reader里面还可以对应列表/展开的方式查看,可以很好的提高使用效率。再有就是Google Reader的快捷键,在吃午饭的时候,右手用来吃饭,左手可以通过一个空格健来实现滚动和查看下一条,s是标星,Shift+S是共享,这个基本上就可以实现单手阅读了,很方便。
    • Podcast是坐地铁上班时很重要的学习工具:因为地铁和很多交通工具非常拥挤,即使带上书也没有空间看(尤其时备上电脑上班的我们)。所以在非常拥挤的时候我会选择听音频的Podcast,如锵锵三人行(了解时事)开卷八分钟(了解好书,不过越来越没意思了)、Ruby on Rails Podcast(Rails的)、RailsEnvyTackSharpJDD主讲的关于摄影)等等。在不是那么拥挤,也就是胸前有10厘米以上空间的时候,我会选择看视频Podcast,最精彩的是TED Talks的演讲,不错的有Apple Quick TipsX-Play Game Previews等。用这种方式消磨时间比用PSP好很多。这是一个购买iPod touch 2的理由^__^
  5. 信息分享服务:这个又是一个很大的话题。大家在聊天的时候经常感觉很有收获,原因是兴趣相投的人在互通有无可以带来很多的有用信息,而不是像电视的新闻节目或者报纸那样给你带来没有针对性的噪音。社会化网络SNS实际上是个很好的分享有用信息的平台,可是我不是很喜欢facebook等给我带来的参与压力,所以我一般通过一些通用的分享服务来满足自己的需求。
    • 我一般通过Last.fm来实现音乐播放历史的跟踪,通过它的推荐服务来发现一些我喜欢的音乐。这实际是一个相关度算法的应用场景,它不同于简单的试听型的网站(现在国内的xiami.comkedou.com我觉得基本上属于这种类型),它的目的不是给你知道的音乐听,而是根据你听过的音乐推荐你一些音乐听,收集音乐品味的过程叫scrobbler,我在使用iTunes放音乐以后会被自动同步到last.fm并用来做数据挖掘。使用Last.fm服务需要注意的就是要及时更正你的mp3-tag信息,这样你提交的数据就不会是垃圾,这对未来享用推荐服务非常重要。但是现在我发现的一个问题是,由于中文有简体和繁体,所以很和多时候Last.fm的亚洲歌手的名字都会出现多个版本,这给推荐带来了难度,也许国内的服务上可以帮我们解决这个问题吧。使用iTunes的朋友可能苦恼于mp3-tag信息乱码,那么使用Glider开发的ID3Mod2这个软件。
    • 看电影和看书通过豆瓣就很爽了,我对它使用的很初级,但是豆单等已经聚合过的相关分组已经可以给我看电影很多启发了。使用豆瓣这样的工具我们要做的就是尽量及时的更新你的阅读列表,这样豆瓣得到你的更多数据,那么推荐也会更加准确。
    • 我非常珍惜Google Reader的share功能,尤其是share with note。因为这个几乎是最好的和靠谱的朋友分享信息的手段,我一直认为这个是最好的一个人肉过滤器,你的朋友圈子越准确,得到的share也就更符合你的品味。自己在share的同时,可以看到你的share的朋友就和你做了非面对面的交流。而且有的时候如果你1个月没有读feed,已经无从看起的时候,完全可以把他们置为已读,然后去看朋友的分享。这减少了很多信息过滤的成本。
    • 最后一个重要的分享服务就是Twitter了。Twitter解决了你不能和所有的你想交朋友的人聊天的缺憾,这样你可以轻松的follow业界大牛,如d2hkent beck等。它也是一些重要信息的最快速发布场所,同时也是一个重要的社交场所。在使用Twitter以后我发现我甚至越来越少的在使用IM软件了。使用Twitter这个工具你需要做的就是有节奏的发信息,而不是三天打鱼两天晒网,这样大家不会因为你太贫而退订你,也不会因为常年见不到你的twitt而忘记你。
  6. 信息存储服务:网上看到好东西我们经常想收藏,这种行为叫做网摘,最早我使用CyberArticle(荣幸的买了正版,用的很High),而后用了Linux,所以改用Scrapbook,作为firefox的插件它是跨平台的。此时我的同时推荐我使用在线的Google记事本,这几个软件都能很好的做网摘。但是这几个软件的缺点是缺少协作,那么后来最常见的就是社会化书签应用,delicious,在浏览器装个插件以后它可以帮你用tag管理书签,好处是还顺便帮你做推荐服务,很方便。后来我发现并非只有这些数据需要存储,我们还需要网络磁盘服务,这类服务很多,我个人倾向于使用Dropbox,它的好处是各个平台都有客户端(Win、Mac、Linux),而且是用户空间磁盘系统,用起来和本地磁盘一样,它同样可以用来在项目组之间共享一些文档、电子书等。最后,我还推荐一个类似M$的OneNote的免费在线文档、及数据存储服务EverNote,我用它来存储一些简单的文本文档,还有用它写一些视频note,因为它有一些方便的工具帮你来做音频或者视频的记录。(对了,还有梦断代码里面描述的难产的软件Chandler,它是一个本地的数据中心软件)
  7. 快速启动服务:就是使用键盘快捷索引的启动工具,有代表性的是QuickSilver(是Mac下的,详情看Robbinlu的这篇blog),它显然比Mac自己的Spotlight好用(而它又比win下的很多桌面搜索强很多很多)。通过培养这样的软件可以帮你极大的提高效率。Windows下有launchy也很不错。
  8. 还有很多,但是我没有必要一次全部说完……

下面要分析一下我做的不好的地方,迎来跟踪我的改进:

  • 没有认真的学习Git和HG的用法,没有很好的贯彻他们的最佳实践。
  • 没有很好的学习shell。很少给自己写脚本来提高每天工作的效率。对很多*nix命令还很不了解,如wc、du……,对于微语言awk等不了解,这就限制了我制造自己的组合工具的能力。
  • 没有学习如何使用Mac的automator和appleScript。
  • 对于C语言的了解太初级,还是大学上课的水平,而它又是读懂很多code的关键(我并不想成为c程序员)。
  • 没有很好的整理好自己在各个网站的帐号。所以经常忘记去使用这些服务。
  • 没有很好的整理自己家的硬盘,没有对里面的电影和音乐进行过删减。因为数据也会过期,如果总是舍不得那么它们都被积累为工作噪音。所以要勇于与过去告别。
  • 没有好好学习Photoshop和Fireworks的使用,总是在使用低效的重复劳动。
  • 没有管理好自己的博客。我今年做了的事情就是把blog从BlogJavaLive Space移动到了朋友的机器上的wordpress上,但是由于访问速度比较慢,而且离线的时候写东西不方便,我今年也很少写blog post。
  • 没有学会使用一个有效的照片库软件,iPhoto的分库功能我最近才知道,不过没有认真整理(要减少单个iPhoto Lib的大小,这算个最佳实践)。我也应该学会使用一个LightRoom或者Apeture那样的面向摄影的后期软件。
  • 没有学会使用图片分享服务,我游离于flickr、picasa web和好看簿之间,前两者现在都有了iPhoto客户端,但是我还没有很好的使用。在9的内容做好后,我要更好的利用图片分享服务。
  • 没有很好的学习Ruby on rails,虽然一开始仔细阅读并且也用1.0的rails写了些小应用,但是我的知识没有及时更新。
  • 没有很好的清理自己的数据遗迹,我这个人很注意备份,但是没有注意清理过期的备份,想个好的工具来解决它,如TimeMachine。
  • 没有使用好Facebook和Linkedin这两种SNS,它们实际上能够帮助我很多
  • 没有利用好我买的图书,书是学习工具,而不是收藏品,我没能很好的阅读它们。

暂时先准备写到这里,其它的关于工具的话题我会另开post来总结。(最后更新于2008年12越21日)

良心能够保护你自己!

沉默了很久,但是这句话要喊出来!良心能够保护你自己,问问自己的良心吧。

老婆写了一篇文章很不错的日记发生在我身上的小故事来谈谈信用问题,里面记录了上个周末我们逛灯具市场的时候遇到的一些“信用”问题,我们总是需要费神的侃价,才能稍微看清我们买的到底是个什么档次的灯。之所以感叹这个司空见惯的事情,是因为我们去澳大利亚旅游的时候看到了很多的诚信,而诚信在商业上体现在定价的自信上。我们看到的澳大利亚商人,尤其是小商品市场的商人,他们对自己的定价充满了自信。我们经常可以看到如冰箱贴这样的小商品,在他们的摊位上可能明确的写着一个3元,两个5元,3个7元。我们习惯侃价,所以问老板是否可以优惠,老板会指指板子上写的价格。那么我们会追问,那4个呢,老板会拿出计算器,3+7=10元,完全按照他写的规则来。这种死板的定价方式体现的是老板对定价的一份自信。回忆起来那里的大部分人都有这种自信。

而继续回忆,在澳大利亚我们不仅看到“自信”,更多的还是信任。比如,我们去住他们的度假村,我们说我们要出海去玩,老板就拿出两条大浴巾给我们,说出海这个用的上,当然他们信任我们会在离开的时候还给他们。街边的饮水机旁边还有抽拉纸巾,遛狗人多的地方有免费的宠物便便袋子,国家植物园是开放的,公园里面的芒果树上掉下的芒果大家也可以自助,社区里面也有公用的烧烤架,众多的方便实际上都是基于信任,大家都回按需消费这些东西,支付的是“信用”,积累的也是“信用”。

我们宏观的问问自己,“诚信”和”信任“哪里来?我觉得从良心里面来。用良心这个词是因为它非常朴素,我们也可以说它是”道德标准“。我相信朴素的感情里,人都回体现出良心。

上周和ThoughtWorks的胡凯,是我在Cruise的队友,热爱背包客文化。他和我说起曾经背包在云南步行过3个月,经常是走饿了就去田边的老乡那里讨口饭吃,老乡经常就分享出自己的”馍馍“来,并且绝对是不要胡凯的钱的。遇到好客的,胡凯还被邀请去人家一起吃过午饭,临走还拿到了老乡现采的很多脐橙,然后又拿脐橙作为报酬搭了顺风拖拉机。听起来感觉很美好,背包客非常崇尚”缘分“。我认为,”缘分“在这里其实就是朴素的良心的体现。我记得动物世界说大象是不愿意看到同类的尸骨的,他们会远远的忘着其它大象的尸骨,并且哀鸣,即使完全不认识这些尸骨的主人,并且他们走近尸骨的时候都回被“吓跑”。我觉得大象的本能是一种设身处地的朴素感觉,他们怕自己死掉,所以会对死者表示哀思。那么对于人类,这也可以更加高级的表现为看到别人有难愿意帮助,看到别人高兴自己也会高兴。

看来完全不相关的事情,其实都是良心。有良心,你可以看到朴素美好的感情,没有良心,你可以看到互相的不信任,欺诈,甚至是幸灾乐祸,还有很多到了恶毒程度的感情。

现在,还没有解释为什么一定要写这篇blog。因为有毒奶粉的问题。因为我怕我也成为沉默的大多数。

在我们公司,因为零食和饮料是免费供应的,所以冰箱里面的东西往往是提前储备好的。这次的毒奶粉事件我刚听到的时候没有在意,因为我国的食品安全问题是常事了,常见也就容易麻木。前天收到我们公司的一位新妈妈给公司集体发的一封信,提醒大家不要让声音就这样越来越小,提醒我们要注意身边的各种奶制品的安全。同事她也说到我们公司冰箱里面的蒙牛奶已经全部更新为三元的了,而提醒我们公司更换奶的人是我们一位国外的PM。听到此事有点感慨,我们公司的外国同事在公共问题上都有很强的责任感。以前有人上班用音箱放音乐,我的同事bobby就发信解释因为每个人的品味问题,所以可能每个人对所放的音乐的反应不同,所以提醒大家最好用耳机。后来有人用P2P软件看电影,网管出来说希望大家不要用了,bobby也站出来写信跟大家解释为什么。我的意思是说,我们不能沉默(龙应台的文章:中国人,你们为什么不生气?),我们要负起责任。公共责任也是良心的体现。

我的文笔不好,写点文字总是形散神也散。上周周末我们非常成功的又举办了一次Beijing Open Party活动,我这次又当了主持,回家的时候我感觉非常累,身体累,但是精神上非常满足。因为我感觉我为社区贡献了我的力量,这是我的责任,我认为它是我能做也应该做的一件事。我又想起我平常面对我的工作,不管是我在新浪的时候做新浪邮件,还是到了ThoughtWorks工作在Cruise和Mingle项目之间,都有一种良心在驱动我所写的程序,我怕我写的代码会对后来维护代码的人带来麻烦,所以我感觉我没有写出什么不负责任的代码。我怕,但是怕的感觉让我按照了良心做事,没有出轨。

那么如果我们的同胞都能保持孩童时的朴素感情,我想他们一定不会越轨去制造这么多可怕的食品安全灾难,那样我们就可以有足够的自信,有足够的自信为自己的服务定价,我们就可以在离开世界前都无愧于良心了。从我们自己做起,不要再带来新的灾难了。我们不能闭嘴,我们不能保持沉默!我们要告诉自己,也要告诉别人,我们有权生气,有权表达我们的想法。

说说我以为的RIA与Rich client

中午徐X和米高讲了一下Rich client的架构。其中徐X讲的是如何从单机分层系统到Rich client。

实际上最早的单机分层系统的UI部分激发了OO作为界面的编程模型。然后分层模型为了C/S结构发生了一些变化,目的是共享数据和通信,但是由于OO在远程调用上面的失败应用(Corba,EJB,Dcom),所以让人对OO产生了怀疑(实际上只是用错了地方)。而后又发生了B/S的变化,是一种完全的中心共享方式,原因是HTTP的无状态性造成客户端很难保存state,所以就有了完全中心共享状态的架构。而后通过通讯的增强(Ajax),客户端的状态保持逻辑通过异步通信来增强,所以产生了更好的用户体验。但是对状态同步的进一步要求和对会话状态保持的进一步要求让Ajaxian了的应用还是有点难以承受,所以Rich client又回归了。当然回归的时候同时带来的还有新的编程模型,如基于标记的声明式编程模型,还有更方便View-Model同步(通知)的数据binding机制,布局管理器,绘图支持能力,多线程能力,内嵌的视频编解码能力。其实WPF作为Windows上的新型UI编程模型他的确从Mozzila的XUL还有Adobe的mxml吸取了一些经验。上面这些是徐X阐述的主要内容,很精彩(最后的编程模型是我加的注释)。

而后米高做了一些技术层面的对比,主要是对比了Web和rich client的区别,不过我比较失望^___^,因为对比有失偏颇,原因是米高只用了5分钟准备ppt。

最后是我的意见。我现在已经不想割裂的分开Rich client和Web上的RIA,实际上目前他们已经有走向统一模型的趋势。

去年在InfoQ写文章的时候我就表达过这个意见。今天徐X也强调了,经典的MVC实际上很重要的是解决了数据共享(同步通知问题)与状态(会话)保持的问题,所有的架构问题其实都围绕了这个问题。首先RIA里面已经开始了layout数据分离的加强过程,比较明显的就是声名式的组件组合配置,还有数据绑定模型,这个在Flash和Silverlight还有JavaFx都有着重的解决,而且方向都很类似。其中Silverlight其实是一个减缩版的WPF。然后我们从架构方面来思考,解决状态共享和传递是通过增强的双向通信能力来完成的,很多RIA框架在开始提供web socket模型,这样让通讯超过无状态的且单向的HTTP,包括HTML5(目的是扩展Web上常用的一些Object,增强Web的编程能力,且让很多元素得到正确的语义,这个与XHTML2的关注点不同)的草案里面也有Web socket(类似socket的编程对象,可以实现二进制协议的面向连接的通讯)的提案。当然些努力就是让实现消息传递的开销更小,时效性更高,配合线程概念的支持,就可以实现复杂的基于消息的异步界面逻辑(这会极大的扩展RIA应用的能力)。因为通讯其实是解决状态共享的一个方向,通过高效的消息通知达到多个消费端的状态共享。另外一种解决Browser端状态同步(这里主要指客户端与服务器的数据库同步)的方法就是离线存储能力,这样削弱客户端对服务器的依赖。这种解决方案的代表就是各种Gears,Google gears,dojo offline等等,他们在浏览器里面嵌入sql lite一类的数据库,让客户端有自己的结构化存储能力,对于没有多客户端数据同步要求的应用来说离线方式可以让客户端形成完整的编程模型,通过sync机制在连线的时候进行数据同步是一种非常帮的RIA发展方向,从这个角度它已经是Rich client了。

那么可以扩展一下。我们知道Lotus Notes有服务器端replication的模式,离线会存在本地,连线的时候再同步。而对于另一些应用,极端地如Skype,他对实时的同步要求很高(当然它属于通讯类应用,也就是3C中的Communicate,而不是Content system),Skype的解决方案就是p2p。如果RIA有了socket(当然还有跨域支持),有了多线程,那么p2p是不是也不算难事了呢?状态同步通过p2p来实现,虽然不是可靠的通讯方式,但是却符合Internet的最大努力原则,所以我觉得这两种技术的结合的确很容易让RIA和Rich client不在有明显的界限,未来的目的就是融合。所以,要注意的是为什么微软拼了命在推Silverlight,而且拼了命的公布了Mac和Linux版本的Silverlight,其重要原因就是让WPF的模型渗透到RIA,用Rich client围攻RIA,来解决Adobe用超级NB的Air这个RIA衍生来围攻Rich client的困难。

这样,我们知道2年前开始声音渐强的Offline storage和越来越强的绘图,data binding的意图了吧,融合已经开始了,目标当然就是吃下这个大平台,然后成为最大的赢家!

防止脑子坏了

Limo说我总喜欢把twitter的内容和google reader贡献也聚合到我的wordpress (blog)里面是个非常不好的“恶习”。可是我觉得实在是没有办法,因为现在我能产生的唯一一些有价值的信息估计都在twitter的bitching里面或者google reader的人肉过滤结果里面了。当然,如果3个以上的朋友在twitter或者邮件里面也同意Limo所说我就停止这样的做法。

博文标题说“防止脑子坏了”是因为最近一年经常发生上下文丢失的事情,就是说本来是想做事情A,但是实际上却转去做了事情B、C、D,结果最后一件也没有做好。还有一种情况是要实现一个目标,结果遇到了问题A,结果为了解决问题A又发生了问题B,我又调查了问题C、D、E都没有解决问题B,造成最后很疲惫的一件事情都没做好。我觉得这种情况发生的原因是“思路的丢失”。在一个人的思考习惯有问题的时候就容易发生这种丢失思路的毛病。

这种丢失思路对于我这种看到什么都感兴趣的人来说就造成了什么事都做不专。可是我一直以来是以做事情做的专业自居的(为了我的自信心,不要反驳我的这个说法)。在和Limo pair一些东西的时候我也发现了这种情况,他说你做事的方式有改进的空间。因为我这个人本性里面缺少决断力,所以做事犹豫,所以就需要更多的理由来支持自己,所以非常容易发生分支思路。如果所有的分支思路都去cover一遍,那么付出的努力就会很大。无法让问题收敛并最终达到一开始的目标。

我现在已经意识到了这个问题,我正在思考解决的方法。我听说钱钱同学在学习决断力的课程,我相信用处不大,因为人的思考方式没有那么容易就通过学习班提高。今天我尝试了冥想的方式,自己感觉身体的每一个部位的存在,发现这种类似健康治疗的方法对于集中注意力非常有好处,感觉这是个路子。然后开始执行的就是在电脑工作的时候开一个文本记录思路和所有做过(要做,尽量让要做的分支工作进入堆栈,推后处理),在其它地方做事就尽量用本子记录同样的事情。短期看,已经发现了做事效率的提高,起码减少了不少分支的发生。待续…

重构我人生

我是一名程序员,但是其实我从来没有规划过我会成为一名程序员。从小我的爸爸就培养我的各种兴趣,其实所有的兴趣对于我都是一样,兴趣本身不是目的,收获的是一种态度,这种态度会指导我的生活。所以我有了现在,我是一名程序员了。

那么这个引子的目的是想说我的程序员中最大的收获,这个收获就是方法和态度。这个名字就是敏捷,敏捷就是这几年以来我接受的最有用的一个态度。敏捷是一个基本的不能基本的概念,但是我在这里不想展开,但是敏捷的所有方法中都提到的迭代与反馈的方法。而人生也是这样的,年复一年人生在迭代,每年我们都会回顾这一年,给这一年的生活一个反馈。所以说基本上我们的生活也可以是一个敏捷过程,那么我们还没有做的是通过改变自己的生活提升自己生活的质量。这个过程我们可以用程序员的一个术语,重构来描述,当然这是片面的。重构就是在不改变程序结果的情况下重新调整逻辑体,为程序的改变或者提升可读或者正确性等尽行的改变工作。那么人生也需要自己从自己的生活中找到可以提升效率或者改进行为方法的地方,为未来的变化做好准备。

扯多了,但是这个问题其实简单,所有的自发的变化都有可能产生重构的效果。那么这一段时间我进行了什么重构呢?

  • 1、开始消灭我的个人电脑的硬盘分区。从很就以前我的Windows机器的硬盘都是有很多分区,里面力图放相应的内容。但是后来发现这样一点也不好,因为最后数据的无序造成分区的最早企图的失败。那么后来我发现Unix的树型管理很科学,你也可以把不同硬盘/分区挂载到树的不通节点,很灵活。而且Windows的盘符其实和目录没有本质区别,但是灵活性奇差。硬盘的第二个变化就是买大硬盘替换多个小硬盘。我有80G+120G X2+160G+250G+320G这么多硬盘,放到机器里面实在费电,所以应该做的就是买500/750/1T这样的硬盘替换它们,这样省电省事。同时,随着关键数据的量的增大,逐渐我也要开始使用Time Machine备份来提高安全性。
  • 2、使用好Mac,这个的确提升了我的效率,而且也有机会接触更多Unix哲学。不是说Unix哲学怎样,而是多学习很有好处。
  • 3、读书。我在包里面放一本技术书、一本文学/哲学书、一本杂志,分不同场合查看。这个是好看簿的大野狼告诉我的一个方法,后来我发现真的很好。原因就是如果专注技术而忘记了人文知识的补充,那么人生就会暗淡下去了,所以这种方法引诱我丰富自己,感觉很好。
  • 4、重新思考自己的选择。看着我去年写的wishlist,关于一些男人的玩具,如大液晶,好手机,昂贵的镜头,这些愿望在去年没有实现,但是去年的目标都是一些“超值”的选择,但是经过一年的思考,从《身份的焦虑》这本书里面我知道对物品的期待如果画一条满足度的曲线,那么得到那个物品以后这条曲线会急速下降。所以其实我能够享受的很多就是拥有前的期待,尤其对于这些男人的“玩具”也许逐渐提高你的期待才是更有意义的。比如,现在如果我再期待拥有的单反已经是D300+17-55 DX+105VR+S 10-20+SB800这样的配置了,而长焦我基本上放弃了。而去年购入的LX-2给我带来的满足非常之大,这半年来我也的确照到了不少的好照片,记忆满满。提高的需求可以延缓无谓的投资带来的资金损失,在头脑清醒后可以增加准确度。
  • 5、经常整理你的物品/文件,删除或者扔掉没用的东西,这样可以减少下次整理它们带来的麻烦。减少没有必要的需求,让你能够享受的需求的质量更加高一些。

等我写到这里的时候我知道题目说大了,上面的这些还和敏捷搭不上边际。但是在实施和回顾的过程中,我发现我的生活变化了,变好了,这就够了。