Jack's profileJack @ 新加坡SINGAPORE ● 上海...PhotosBlogLists Tools Help

Blog


    30 April

    Get Inspired on Labor Day 灵感图片

     
    你理想的办公室是怎样的呢?于我而言,办公室其本身并不重要,它因为我而获得了生命。除了赋予它生命,我也会用心让它的外表光鲜宜人。这些彩色图片正是我以前用来装饰大学里办公室的。玻璃门上有一串这样的图片,墙角也零星散落这些美丽图片。
     
    用120行写的Flex小程序,将这些图片与大家分享 >>
     

    BASIS v0.1 编程更新

     
    Can you image doing OO in the client side and pushing to the server side to commit in such an elegant way? Flex is truly brilliant.
     
    Finally, I added some UI to the framework - view the screencast here (or the direct SWF link). Disclaimer: This UI is very 'raw' - not user friendly, more for developer debugging purpose. More sophiscated UI will be implemented.
     
    As you can see, there is nothing much. However, there are some points that are worth mention:
     
    - Everything is driven by metadata. The GUI have no idea about the Employee class (in fact the Employee class does not exist). With metadata, the GUI simply displays its attributes and creates a proper pop up window for view, create, update an Employee.
     
    - Auto validation. If the user supplies an invalid value, the text input will display a red banner to remind the user about it. Again, the GUI validates the user input with the meta data.
     
    - Easy database update. At the Flex side, suppose we have an object named emp. Here is how to update the database: emp.set("name", "Jack Jr."); unitOfWork.commit(emp); This also means we can easily create custom UI on top the generic UI.
     
    - Flexible querying: the first query in the demo is SELECT e FROM Employee e ORDER BY e.deptId. Let's say, if we want to get the Department objects associated with the Employee objects, we can simply append [s:e.dept] to the query (meaning using subselect instead of joining to retrieve the relationship). Also, you may add criteria to the query, like find all employees joining the company after 2006.
     
    - Flex remoting with BlazeDS rocks! Although it requires me to write the same thing in two different languages namely Java and ActionScript, the result is very promising - can you image doing OO in the client side and pushing to the server side to commit in such an elegant way? Truly brilliant.
     
    The simple GUI at least proves that most of my design are actually working. Next, I'll create editors for editing entity types and attributes.
     
    P.S. My current lifestyle: coding, joggling, drinking, sleeping. According to my calculation, every month I spend about 40 bottles of Jacob's Creek wine to pay my rent. So it's perfect ok to drink a few glasses every day. Strange logic, isn't it? Well, just life, keep it living well :)
     
    26 April

    It's Weekend 今天周末

     
    在习惯了凌晨四五点睡觉中午才起床之后,将周五当成周末也不稀奇。于是起床穿好衣服就出去了,虽是中午一点多,不过今天似乎特别清凉,微风拂面,分外惬然。穿过人群稀疏的商场到了翡翠。我很是喜欢此时的这家餐馆,稀疏的闲客,简洁的布置,素浅的灯光,恰到好处的服务,喝一口淡香的中国茶,尝一颗细致的小笼包,品一口浓香的肉汤,很有幸福感,也找到了思考的空间。
     
    吃完午餐,又去银行办事。恰有朋友开车到附近,载我兜了兜风。很晴朗的一天,蓝天白云绿地,令人心旷神怡。晚上又有人买了戏票,请我看了<功夫之王>。这是一部完美的影片 - 假如时光返回到25年前。也罢,电影吗,何必认真。说到认真,之于工作,我还是非常的用心。这周将Flex和BlazeDS所有能找到的资料看了一遍,对UI设计与服务器的交互有了比较好的理解。我想我可以一天作出很多页面来,但我必须制止自己这样做。在下笔之前需要,最好成竹在心;在写程序之前,必须先考虑到整体的架构,所以我花了很多时间来设计一些UI与后台交互的机制。内涵与外表同样重要。
     
    前日,一个超级富豪老乡(更准确的是朋友,但现在的我称他为朋友并不恰当)给我打电话,他的以前手机号码,几乎全是8;现在这个备用号全是6. 也许这辈子永远无法在财金上达到他的水平,但还是阿Q感觉自己活得很潇洒,以自己的手机号结尾是家乡的区号而沾沾自喜。 人生就是如此,结果只占几天的时间,我们将绝大部分时间花在了过程上面,享受过程才是真正的享受人生。喝光了朋友从国内带过来送我的两瓶白酒[Thanks, LW],今晚买的是半打Tiger. 喝着啤酒,吃着烤肉,哄着歌曲,忘了明天还是工作日,以拥有此时此刻而干杯!
     
    To myself: It's ok to step into a road that no one else has ever walked on. Just use your own best judgement.
     
    14 April

    Towards an Integrated Platform 整体平台

     
    一年之前的这个时候,我曾经花几个周末天天去Takashimaya - 不是去购物,而是为政府的一个大型项目做技术咨询。Spring和Struts是那个团队使用的主要框架。我曾经试图去帮忙实现Spring内的自动化测试,不过失败了。一是比较缺乏Spring的实际经验,二是它本身是一个不断在进化的框架,非常缺乏高质量的文档;另外一个框架Struts就更是变化巨大,当时Struts 2突然摇身一变成了Webwork。这样的变化,你只会感叹何去何从。我写过技术方面的书,所以我很清楚基于某项技术的书籍必定花大量的篇章介绍相关框架的好处,而到后面随便点一下实际使用的注意事项,而往往后者建议不要使用前面的方法。这个商业化的世界,你也无法怪谁。
     
    Spring - Inversion of Control Container 我是喜欢自主control的 - Live/program free or die,所以你可以想像我听到Inversion of Control我会多反感!相比之下,我更喜欢Service Locator Pattern. Call me old fashion, but I am not a fan of XML. XML的设置文件令人心烦意乱,而Annotation只是让配置更加晦涩。我需要一个在运行的时候也可以随便更改的平台,这样简单的要求Spring, Hibernate, Toplink没有一个可以满足。我知道我可以去修改这些开源项目,来得到我想要的。与其修改,为什么不自己去实现自己想要的呢?
     
    于是这九个月来,我花了大约一般时间来研究一些大型软件的架构,另外一半在写自己想要的平台。本月,我将完成这个平台的服务器端 - 类似Hibernate和Toplink,并开始UI的工作 - 没有UI的日子太缺乏鼓舞了。这个平台还有非常多优化的空间,因为不涉及API的更改,所以打算放到以后去做。这将是公司拥有独立的技术的第一步,以后所有程序都将通过此平台来实现。
     
    这虽然是公司的一小步,却是我的一大步。
     
    P.S. 昨晚终于读完达芬奇的传记,在技术和艺术的双重熏陶下,享受一种悠远的愉悦 Sleeping half-moon
     
    07 April

    一个人的海 A Walk by the Sea

     
    前天。在家写了一天程序后,晚上打算出去吃顿丰盛的晚餐。换好衣服 - 依然是钟情的N件白色衬衫之一,迎着凉风往外走。等车的时候突然有个念头想去海边走走。于是在饱餐一顿日本料理之后,就去了圣淘沙。
     
    这是第一次我一个人来这里。路上的人不多,毕竟已经晚上九点。先去了Siliso沙滩,就在香格里拉的旁边,很幸运遇到Jazz by the beach。悠扬的Latin jazz,热情的歌声,主唱一袭民族风的白色长裙,旁边的椰树。在露天的酒吧高凳上,喝着啤酒,沉浸在这海风沐浴的夜晚。
     
    三瓶过后,歌終曲散。一个人静静的走向那不远的海。先是坐在很矮的沙滩上,不一会涨潮的调皮海浪就开始碰到我的腿了。隧光着脚提着鞋子,在时陆时海的地界行走。软软的沙子,柔和的浪声,I am the merry one. 这是博大的海,所有的人和事在它面前都是那么的渺小以至于忽略不计;这是细腻的海,自己的脚下的沙滩平整的沙地就是明证;这是微妙的海,平静中的动荡,沉稳中的冒险,执着中的恐惧。
     
    一个人的海,带着心灵散步。
    03 April

    自强不息 厚德载物 Virtue Goes a Long Way

     
    这几天大脑一直处于一种比较紧张的状态。原因很简单,但专业太复杂,还是举个例子吧。譬如制作一个火箭,一个技术团队也许得花上几个月来设计推进系统,又几个月来控制系统,再几个月导航系统,不到最后火箭升空(假设幸运),你无法知道每个部分是否可以真正的整合运作。我的代码没有火箭这么高度复杂,但花了几天时间一直写代码,今天方能运行测试,其复杂度以我个人经历来说是非常高了。
     
    写的过程是一种磨练。有人说大脑最多可以同时注意十个点,这次里面有N个点。有天凌晨3点多,刚准备睡觉的时候,突然灵感一闪,想到了一个算法,于是开机去实现了它。更绝的是早上醒来我的大脑就开始思考软件里面的问题了,OMG. 写的时候,心里不踏实,毕竟很多方法只是在脑海里或者纸上推演一番,实际运行难以预料,不过还是听着Symphony 92.4FM, 喝着浓浓的咖啡,认真的把代码一行一行写出来。电脑终不负这些美丽的代码,在除掉几个小bug之后,系统运行成功。
     
    犯得着这样做吗?为什么不用现成的库呢?时常听到这样的反问,实在难以回答。或许这就是我的坚持吧,自己认为不好的东西,我不想去给别人用。爷爷是方圆几十里最好的农民,父亲是最好建筑工人。我见过他们怎样播下一粒粒种子,怎样堆砌一快快砖头。踏踏实实,认认真真的写代码,有一天我也许可以成为最好的程序员。
     
    暂时的小胜利给我一些鼓舞,但代码马拉松还在继续。除去骄傲,除去浮躁,留下勤奋。于是十年之后,愚钝的我明白了母校的校训。