分类: 生活

生活种种,比如旅游、美食等等

  • soma.js, infuse.js, Nervenet

    上一篇日志中,我介绍了Nervenet的创作思路。虽然JavaScript有着各种各样的先天不足,但是,运气也是实力的一部分,所以广大开发者只有用各种手法去适应它、改良它。应该说大家干得很棒,我也想贡献自己的力量,于是创造了Nervenet,希望解决我在开发中遇到的各种问题。

    就在我写完Nervenet初版的时候,偶然看到MVC框架soma.js的介绍,发现跟我的思路很相像(其中用到的IoC类库:infuse.js,也是他们开发的)。于是仔细研究了一番,学到不少东西。今天我准便拿Nervenet和它们分析对比一下。

    soma.js

    我自认是个不喜欢“重复发明轮子”的人,于是看到出发点和实现方式如此接近的框架,不免一惊,心说果然世界足够大,持同样想法的人非常多。不知道soma.js的作者有没有用过robotlegs,二者的API真的很像(也许是mvc框架的标配吧,我没看过相关介绍)。我最初也希望引入robotlegs的做法来改善JavaScript编程体验,不过在反复思考后,觉得并不需要全部移植,比如mediator。在Flash里,新的影片剪辑被添加到舞台上时会触发Event.ADDED事件,可以被robotlegs侦听;同时,所有mc都是Sprite的子类,可以使用类名作为索引来创建需要的mediator。而到了JavaScript方面,Dom节点发生变化并不会触发事件;添加的Dom节点也没有类的关系,所以这里的mediator只能我们自行创建,这样其实也就没什么实质性的好处了。

    另一个不太需要移植的是Command类。在MVC框架中,它的功能基本就是响应全局事件,进行相应的处理,很多时候只要实现execute方法就好。ActionScript 3在面向方向上做的比较充分,代码都会封装成类,于是Command里还可以放一些helper类型的函数;到了JavaScript这儿就显得不太合适了,既没有强继承关系也没有类型检查,甚至连类的实现都不完整,helper也可以用闭包实现,如果一样搞成类来处理,只是凭空加重了对代码的限制,在我看来有点得不偿失了。

    所以我在Nervenet中并没有把robotlegs的功能都移植,而是选取部分比较重要一定会用的实现了。(代码参看测试用例,这里不贴了)

    infuse.js

    接着再说infuse.js。我一开始准备直接给对象加上app或者context或者injector属性,但是一直觉得这样太过简单粗暴;看过源码发现他们比我略微温柔一点,先遍历对象的属性,如果map了同名属性,就注入进去——仔细想想这差不多是另一种粗暴吧,不由分说的注入同名属性,如果代码不是针对infuse.js写的,可能会产生更多问题。不过我还是学习了这种做法,并进行了一些改造:如果对象属性中有以“$”(可配置)开头的同名属性,就注入。有了这样的规则,新写代码有理可依,改动代码也会比较放心,阅读代码时也有利于识别本身属性和注入属性。

    JavaScript没有类型检查,但是在日常开发中难免遇到多个类的实例适合同一个名字,比如model、remote之类的,如果在注入时能自动选择合适的类型,那自然是极好的。于是我想到利用变量声明时的初始值,把类名包括命名空间写进去,作为类型说明,就可以在注入时自动选择合适的类型了。

    代码请看测试用例inject部分。

    值得一提的是,infuse.js中每个函数都对参数进行了充分的验证,很值得学习,不过我目前还是偷懒只验证了很少一部分。

    依赖管理和代码加载

    依赖管理和代码加载也是我力图实现的功能,虽然看起来和架构无关,不过在操作层面上,还是比较合拍的。因为我们总要有一个入口函数,比如jQuery中的$(function () {});,通过分析入口函数,就能得到依赖关系,继而可以实现依赖管理和代码加载,这样丝毫不会影响代码架构。目前我也正是这么做的。

    不过这种“自然”的代码书写方式也会给加载带来难度。无论AMD还是CMD,都会把代码以函数的形式封装起来,在依赖处理完成后执行;而这种自然的方式,就要求每段代码执行前依赖都已经加载了,所以只能用Ajax把代码以文本的形式加载下来,分析依赖,继续加载,直至全部完成;在按照依赖关系放入script标签执行。如此一来,执行的代码是不允许依赖关系嵌套的,那么,以闭包来实现私有属性和方法的做法就行不通了。这点我还在思考解决方案。

    使用方式参看测试用例

    总结

    目前Nervenet已经初步完成,我正在编写入门文档,并将其应用到实际项目中进行测试。这些完成后将发布0.1版。目前市面上有一些做法很接近的框架,不过具体实现上还有差异,孰优孰劣也有待验证。我会尽量解决各种开发中的痛点。

  • 僵尸,快跑

    昨天晚上做了个梦,觉得有点意思,记下来。

    有一天,世界性僵尸病毒爆发了,全球一半以上的人口变成了僵尸。(这里的僵尸是最原始的那种,行动缓慢,吃新鲜的肉,击中头部就会死。)在幸存者的共同努力下,这次危机终于被成功控制住了,而且,人们发现,僵尸并不像想象中的那样完全无法控制:由于感染程度的不同,部分僵尸一定程度上保留着生前的技能,只不过因为极度嗜血而无法自控;在药物控制、食物训练之后,甚至可以从事一些高级工作(有点类似僵尸肖恩)。当然,指望他们完全恢复意识暂时是不可能的

    后来世界各国通过法案达成协议:

    1. 所有变成僵尸的人,认定为死亡,按照一般死亡处理后事
    2. 失踪的人,也按照死亡处理
    3. 因情况特殊,遗体集中销毁,大家都不再追究

    但是,此时世界人口减少一大半,尤其是原本的人口密集地区,劳动力大量短缺,就有人打起了那些“尚能工作”的僵尸的主意。很快,庞大的地下僵尸交易市场就形成了,尤其是生前技能保留的比较完整的,非常值钱。可想而知,即使被感染成了僵尸,音容笑貌,未曾改变,对于活着的人而言,是绝不肯看到自己曾经的亲人沦为货物的;再加上感染的危险存在,所以各国对这种“新奴隶主义”打击也非常重,抓到一定第一时间把僵尸焚毁。原本默许的,大家可以照管亲人变成的僵尸的权力,也被严令禁止了。

    就在这个时候,“我”苏醒了。我被病毒改变的只有死灰一样的外表和动静差别极大的代谢系统,静止的时候,与死尸无异;运动的时候,代谢系统又会快速将能量供给到全身。(就像灵光波动拳那样,发动的时候会重现年轻。)我这次苏醒是因为一个什么原因(忘了),当我发现社会秩序已经基本恢复后,就像赶紧回到家人的身边。

    于是,我需要在僵尸贩子、各国警察的层层抓捕下,东躲西藏;又需要对抗自己对血肉的渴望,对昏睡的渴望;还需要保持运动量,避免以僵尸的面目示人。在刚刚脱离危机自顾不暇个个自危的人中,寻找真正可以依赖可以托付的伙伴,让他们帮我回到家乡。

  • 姆二诞生记

    姆二诞生记

    有道是瓜熟蒂落,经历过十月怀胎,终于到了一朝分娩。

    离京之前,虽然日子离预产期越来越近,但是可能因为工作安排的比较满,我一直没有特别紧张的感觉。终于,21号晚上,老婆打电话给我——手机一响候我就预感,这个电话内容非同一般——接起来一听,见红了,我瞬间紧张了起来。

    不过如我所说,我一直希望自己能够时候保持冷静,于是我尽量沉着的,拿出另一部手机,Google见红的定义以及还有多久会生(现在你们知道我为什么随身带那么多手机了吧)。确定还有几天准备时间之后,我稍稍安了心,然后和老婆确定了预备事项。

    23号一早,我飞去重庆,见到老婆,她表示还好,除了见红没有其它临产特征。于是我们一起吃了青蛙和烧烤,心满意足的上床睡觉。没想到姆二在肚皮里感知到我已经到位,当晚就折腾起来,第二天我们就住院了。

    在北京产检期间,我们深感医院人多之苦,决定在老家生产,并选择了重庆收费较高但是技术服务较好的金山医院作为姆二的诞生地。事实证明这个抉择十分英明。

    虽然之前上过课读过书,知识储备和心理准备自觉都不错,但到了临床才发现完全不够。老婆的宫缩比较奇葩,站起来走动,频率就会提高,很快就达到5、6分钟一次;一旦躺下,又会逐步降低,直到12~16分钟一次。结果,第一天的宫缩几乎徒劳无功,第二天助产士一验,宫口没开。

    没有办法只有继续等待。第二天的宫缩更痛了。然而一白天过去,宫口仍然没有进展。老婆渐感力不从心,我们商量了下,决定如果第三天还是这幅阵仗就直接剖了。熬到将近午夜,转机终于来了,助产士一摸,说开了将近一指头,有希望!周期性的宫缩让人根本无法入睡,于是医生开了支杜冷丁,打下去后我们都抓紧时间睡了觉,准备迎接次日的决战。

    我们一开始就打算上无痛分娩,刚好有一支美国团队在这里推广相关技术,所以第二天就跟他们确定了手术方案。但是老婆宫口迟迟不开,无痛也没法上,只能忍。第三天,宫口终于达到3cm的标准,于是马上开始无痛。老婆事后表示,美国人的药真好,打下去人立刻就放松了。

    在无痛和催产素的双重作用下,宫口迅速从3cm开到10cm,速度快到我不敢相信——尼玛这是打巫妖王的节奏啊,脚男们费死劲把阿萨斯搞到10%血,老弗丁一脚踹碎冰块手起刀落战斗就结束了……总之,第二产程开始,也就是真正的生产。

    这里我们遭遇到另一个难题。姆二的胎位不是很正,入院时B超显示枕横位,比之前的枕后位要好,但仍属于难产的类型;老婆挂着麻药,感觉不到宫缩,没法用劲。我们折腾了快1个小时,收效甚微。护士长马上跑去请示美国人,是否可以停药。这里必须批评美国人太教条了,他说没关系,让医生把手伸进去将胎儿的头转过来就行——问题在于,这边的医生也好助产士也好,都没这么操作过,直接临床就搞根本不可能;美国团队只有麻醉医师,没有接产医师,所以他们只能检查埋针和配药,无法帮助生产。

    事后证明,在场医生护士的抉择都是正确的。护士长和医生商量了下,把麻药停了,准备利用宫缩正胎位。过了一会儿,她发现老婆已经很累了,胎位似乎没变化,于是建议我们剖;我们俩处在崩溃边缘,立刻就同意了。护士长就出去准备手术,一边的助产士上前来,说老婆的宫颈骨盆情况都很好,姆二也不是很大,按理生的出来,喊我们再努力下。这时候,麻药劲儿已经下去了,老婆顺着宫缩用了3把力,竟然能看到姆二的头发了!

    助产士马上打电话给护士长取消手术,并召唤医生前来接生。呼啦啦屋里一下涌进来5、6个人,有医生有护士有助产士,还有实习的。我们先把老婆驾到厕所,利用坐便、宫缩、地球引力,把姆二的胎位彻底正了过来;再扶她继续躺在产床上努力。姆二的身体真不错,相当争气,胎心始终不乱。这次努力了40分钟,终于在15:54分,姆二完全生了下来,被医生扔到老婆的肚皮上,嗷嗷哭了两声,就睁开眼睛打量这个世界。

    目睹这一切后,我相信再过很多年我也能清晰的记得那个画面。不过我当时的心情很复杂,有点想哭,很激动,也有些茫然,然后,一首歌开始在我脑海里单曲循环——《The Circle of Life》。

    可能由于激动的缘故,之后的记忆比较含混,我走出产房给家人报喜,打电话发微博发微信;然后回病房;然后出院;然后抱孩子,换尿布,喂奶……然后,我就回到北京了,15天一晃而过。

    无论如何,当爹了,要更努力了!

    对了,从我们住院起,开始下雨;当老婆生完回到病房,云开日出,阳光穿透云层射到医院中庭天井花园中,煞是辉煌。我心中不禁暗暗叹道,姆二还真是奇人自有异象啊。最后上张新妈志得意满的照片。

    老婆和幺儿
    生完第一张
  • 买车记

    买车记

    搬家之后,我和老婆惊喜地发现,楼下的停车位似乎挺富裕,不像以前那样每天早上推箱子;而且停车费也不算贵,于是买车就被提上了日程。

    老火的是,我们还没牌。虽然来北京工作将近7年,中间未曾中断过,但是09年换工作的时候,因为两家公司的发薪日有差,导致社保中断了一次,于是到现在仍然没有摇号的资格。所以必须找些旁门左道。开始准备找神州租车,后来他们的销售有头没尾的玩消失,又没留下联系方式,只得作罢,准备租4S店的牌子。

    选车的过程没什么新鲜的。因为是第一辆车,准备买个10w左右能开就行。后来在汽车之家上看着看着就奔15w去了……最后确定买亲戚推荐的菲翔。选择菲翔一来相中他的样式,二来想追求与众不同,这款车比较少见。少见的表现就是全北京只有两家菲亚特的4S店,这也省事儿了,正合我意。打电话一问,其中一家的车牌是委托另外一家租赁公司做的,在我看起来似乎比租4S店的牌要靠谱一些。于是就决定买他们家的了。

    之后就是买车、选车、去租赁公司办手续,然后就是漫长的等待。因为中间手续比个人繁杂,租赁公司又要休周末,所以这一办就整整办了15个工作日(连双休19天)才拿到车。车长什么样我都快忘了……

    菲翔
    车牌还不错

    车到手后面临一个尴尬的境地:公司搬到我家附近;北京道路几乎随时都堵着。开车的机会少之又少。

  • 《北京遇上西雅图》中的孕期误区

    电影《北京遇上西雅图》很好看,汤唯真女神,吴秀波演绎的伪屌丝也挺到位。不过里面难免会有一些镜头不够科学,都是影视剧中常犯的怀孕和生产错误,我决定科普一下产前课上所学的知识。

    (更多…)

  • 兰卡威流水账:吉隆坡

    现在真是越来越懒,再不写就该彻底忘干净了,赶紧写篇,省得都要去下个地方了。

    (更多…)

  • 2013年春节小结

    去年变化很多,今年的春节也就不同以往。

    1. 老婆姐姐生了小龙仔,她就回重庆了,继两岸三地及北京答谢会后,迎来了第一次各回各家
    2. 政府想起来修路,要拆我们家房子,那就拆呗;结果今年家里几乎没做什么过年的准备
    3. 堂哥移民出去了,表姐1生了个儿子,表哥1跟媳妇去东北,表哥2公派到米国,表姐2和大姨在北京过年(并帮我照看姆依姆伊,感谢),家里格局正在变化
    4. 跟老爸老妈的处事方法差异太大,回来头几天吵来吵去,家里也没暖气,结果竟然咳嗽转上感再转感冒,到现在都没好
    5. 头几天困的厉害,想补觉;后几天感冒了要休息,春节几天基本啥事儿都没干,净睡觉了——睡得我都不想睡了……
    6. 家里老人身体都还不错
    7. 叔叔说借我辆车开,是手动的,我没敢借;结果春节几天路上几乎没人没车,倒是因为交通问题耽误不少时间,哎,该知道借了
    8. 搬新家后,得说服爸妈把生活档次适当提高一点
    9. 三线城市果然比不得北京,iPad类平板似乎还很相对高端,国产低端平板的质量太差,国内急需Kindle Fire或者Nexus 7/10之类的良心来建立市场
    10. 湖人继续不争气,科比继续先放狠话后输球……
    11. 出去旅游的人不少,大家对“年”的概念在向“假期”变化,而计划生育产生的小型家庭——三口之家,孩子结婚后变成四口或六口——使得旅行度假成为可能
    12. 几乎每天都能梦到姆依姆伊……

    总结,因为种种原因,今年春节过得比较颓废,现在回想起来,10天时间被荒废,还是很心疼。只有希望回到北京后,身体尽快好起来,状态也尽快回来。

    列下近期应该关心的事情:

    1. 产检,以及继续修正年内日程安排
    2. 督促表哥和老妈,给侄子建立起良好的耍平板机制
    3. 找回工作状态,如果可能的话,赶一赶进度
    4. 搬家后,要求父母在若干方面切实提高生活质量
    5. 赶在开动项目一周年前(3月20日)公布肉大师
  • 2013年计划

    嗯哼,去年我对自己基本满意,既然熬过了世界末日,又要迎接新生命,2013年就必须更加努力了!

    回顾一下2012年初制定的计划,有一些随着时间流逝已经不想了,比如买投影机;有一些因为各种因素而有所改变,比如去年看了将近10本书。计划肯定服从变化,不过那并不影响制定计划,所以接下来就是2013年要做到的事:

    1. 减肥,目标105kg。如今搬到学校旁边了,减肥必须提升日程。失败的很彻底……
    2. 尽快完成发布肉大师,并将它打磨完善。之前写的不够好,准备彻底重构之
    3. Web开发提升 完成
      1. Require.js
      2. GCSS
      3. 部署工具
    4. 移动开发提升 虽然方向不一样,不管也算完成了
      1. Windows 8开发
      2. Flash Stage3D开发iOS和Android
      3. Phonegap
    5. 学会测试 完成
    6. 读10本左右的技术书籍 算完成一半吧
    7. 读若干本小说 完成
    8. 写完几个系列文章 失败,来年继续
    9. 完成几个独立项目 失败,来年继续
      1. 吸血鬼(手游)
      2. 来一发(应用)
      3. 聚享网(网站)
    10. 真正意义上的学会开车 有车了,哦也
    11. 买一台好点的相机 手机足够了,放弃
    12. 完成两部左右的小说/游戏设定 完成,可惜没时间做
    13. 最后,帮助公司取得超出预期的进步 大完成
    14. 所以,收入的涨幅,大约应该是30% 算起来差不多

    能否实现,还看今朝,哦也

  • 总结2012

    元旦长假,正是总结和展望的好时候。静下心来总结下去年,对来年应该会有帮助。

    工作单位

    我爱打工,所以这一年继续打工。前年离开Z公司后,转投来乐(现在应该叫磁聚乐),是我人生的一大转折点。关于Z公司——我还差最后一篇文章,不太好写,不过我今年一定把它结了——就不多说了。来乐是家好公司,有非常强的工程师文化,有非常好的技术经理Eidiot,我在那里学到很多东西,受益颇多,如果想换工作的话推荐大家考虑下。今年年初架不住Live邀请,又特别想快速改善生活,终于在4月份加入点乐,一晃就到了现在。

    我现在工作的挺开心,新的一年希望公司和我个人都有更大的发展。

    另,公司刚拿到一笔小钱,求靠谱设计师加盟。

    又另,我想找设计师长期合作各种试验性项目,求有空闲又想搞点什么东西的设计师合作。

    技术和开发

    加入点乐之后,我开始主攻HTML+CSS+JavaScript,间或做一些PHP和移动开发,几乎没碰AS,Stage3D之类的更是不明觉厉,不过新闻动态什么的倒是一直有关注。明年得空再补一补,做做游戏之类的练手。值得欣慰的是JS方面进步不小,啃完几本书,现在基本上大多数细节都了然于心。如今各种Hybrid技术层出不穷,Windows 8 开始支持直接用HTML5开发应用,明年要继续关注,多多尝试。

    框架方面,Backbone用的很熟了,这个框架设计的确实好,难怪那么多人喜欢。不过有机会的话,我也想尝试一下其它框架,比如Ember.js,或者Closure。UI方面,Bootstrap真是个好东西,可以节省大量的界面设计时间,还有很多配色可选。相比之下,jQuery UI就比较弱了,我现在基本只用其中的draggable、resizable和sortable。明年要继续学习,开始使用Require.js和GCSS,进一步提升效率。

    今年开始有目的的收集开源免费的设计类资源。

    今年接触服务器更多,加上平时用Mac,积累了不少Linux和服务器的相关知识。还尝试了在服务器端使用Git和Ant来部署代码,效果不错。

    Git用的很熟练了,包括Github、BitBucket在内的工具网站也不在话下,明年需要学习下Git服务器的搭建和Submodule的用法。

    开发工具方面,也尝试了WebStorm、NetBeans、VS 2012 Express等等,现在主要用NetBeans。

    2012年出了很多有意思的设备,价格便宜样又足,终于让我把所有平台都买齐,明年做一些应用出来玩。今年工作时候使用Mac,回家使用Windows,也学到不少东西,产生很多想法。

    今年投入了几个月时间在原创独立项目“肉大师”里面,现在已经基本成型,不过还需要再努把力,才好意思拿出来给大家看。这个项目对我的Web和Mobile的提升帮助非常大,将来我会把这个项目开源,自己也会投入大量时间把它做好。

    生活

    今年生活方面的变化也不少。同住4年半之后,堂哥他们于今年10月份顺利移民澳大利亚,留下我们继续在北京奋斗;我们也搬离了住了4年之久的知春路罗庄社区,到了老婆单位附近居住。

    国庆期间,带父母同游兰卡威,了却一桩夙愿。将来有机会,争取5口同游。

    上班坐地铁后,看书的时间多了不少,除了技术类书籍,今年还看了不少闲书,渐渐重拾起阅读的乐趣。不过与之相反,打游戏的时间越发少了,虽然基本上都会购买,但实际用来打游戏的时间不多了。

    最后,新的家庭成员即将到来。新的一年,有的忙了。

  • 兰卡威之旅:总结篇

    我和我老婆把旅行的第一站选在富国岛,如今看来是幸事也是不幸。幸运的地方在于,蜜月之行如此完美;不幸的地方在于,之后的旅游还都没能赶超那次。而且我越发觉得,一个地方,应该去不止一次——第一次通常都要交些学费,等弄明白各种选择的优劣,渐入佳境的时候可能就要走了,所以后面几天虽然更好,但已为时不多——好吧,我真正想说的是,7、8天假期完全不够玩……

    这次出去玩,还肩负着一个历史使命——带我父母一同出游,并且给我爸过60大寿。工作之后,回家陪伴他们的机会就不多了,出去旅游更是绝无仅有。这次趁着他过生日,又恰逢国庆中秋连休,决定带他们俩一起出去玩,一来尽孝道,二来工作这么久了,也得回馈回馈家里了。

    老爸老妈百年好合
    老爸老妈百年好合

    整体来说,兰卡威之旅还是相当圆满的;不过,这几天也踩了不少坑,值得记一下提醒后来人。后面开始总结。

    (更多…)