2011

2011-12-31 评论(10) 分类:生活

结束了在百度的实习,回到广东,时隔一年,怀念北京的同事。

脱离学校,告别了可能是人生最自由的时光。穿梭于各种毕业照间,

定了工作,纠结后留在广州,在这过程中麻烦了一些人,深表歉意。

租了房子,华师附近,走路上班,还是熟悉的地方,让毕业的转变不那么剧烈。

参加了长达25天的腾讯入职培训,枯燥又很水的军训,听到好的跟不好的课,跟106大伙三国杀得爽。

正式进入工作,有点小迷茫,状态一般,少了点什么,作息时间跟大伙有时差,工作不规律,工作内容可能是我所能分到的最感兴趣的。

发生了一些我觉得恐怖的事,让我在充满焦虑和不安全感中度过了几天,幸好最终没事。感谢这些事,让我加倍珍惜现在的自由生活。

痛苦艰辛地学完了车拿到了驾照

去了云南旅游,确实是个美丽的地方,洱海坐船,茶马古道骑马,远望雪山,还记得丽江清酒吧“日光倾城”里歌手唱的《Scarborough Fair》,很美妙。我对旅游并不是很感冒,但偶尔这样出游一下去开阔的地方放松感觉挺好。

差不多成了果粉,买了梦寐以求的macbook air,终于拥有笔记本,用着感觉很好,让我觉得没有比这更合适的了。在我的G7出问题,垂涎iPhone的时候,公司年会上竟然抽到了iPhone4S,一阵狂喜。随后的霉运让我继续相信等价交换的机制。

只做了两个个人项目,即连伊书。还是自娱自乐型,只开发无运营。做即连过程中入门了linux,接触到底层的皮毛。工作从前端开发暂时转向object-c。技术进步速度缓慢。

几乎告别twitter,也不再弄推特中文圈了,这个带给我很多的东西的产品结束了,很希望能再做出这样的产品。

今年的博客是过去5年里写得最少的,可能是我懒了,工作后没时间了,和谐面变多了。如果我写的什么东西,技术之类,总结之类,不能放在博客上公开,我是没什么动力去写了。但至少,每个月一定至少会有一篇。

浪费了大量的时间,惰性增强,难以专注,没有时间管理,无所事事的时间变多,思考变少,这是今年最失败的地方。

还是在随着性子做事,不会勉强自己去做对自己有好处但让自己不舒服的事。我写着写着突然明白为什么我会出现那种恍惚忧郁的状态,因为出了学校,有些事情就要压在心里了,不能公开说了,以前没这样的压抑,我还不习惯。要开始各方面慎言,真的,很不习惯。

总的来说,大事顺利,小事一般。有时还会两秒内分不清今年是2010还是2011,就要到2012年了。希望2012一切顺利,身体健康,激情燃烧,奋勇向前,全面提速。能力不够,就无权享受到更大的自由,共勉。

伊书 – 苏菲的世界

2011-12-7 评论(8) 分类:作品 Tags:

伊书 – 苏菲的世界

介绍

距上次我在新浪微博发”I got an idea“已经过去快一个半月了,现在终于把这个idea完成了。

其实也不算idea,只是想认真地做一本针对iOS的电子书,webApp方式,最好精致点,取名伊书。

伊书是电子书,一本书一个APP,用webApp方式实现,打开浏览器,添加到屏幕,即可完成整本书的下载,随时离线浏览。伊书有以下特点和功能:

  1. 最基本的点击左右两侧滑动翻页
  2. 手指滑动拖动页面,在低版本的iPhone上性能会差一点,iPhone4以上较流畅
  3. 注释功能,点击正文上的注释按钮显示注释内容。
  4. 底部红条显示当前章节的进度,按住可以显示页码,拖动可以快速翻页。
  5. 夜间模式
  6. 排版:
    iOS5以上支持左右对齐的justify排版,iOS4以下不支持。
    书信开头的左顶格,落脚的右对齐,引用内容的。
    标点悬挂,将出现在行首的标点提前到上一行末。
  7. 当然它是离线的

历程

想起2001年有个网站叫E书时空(这个网站竟然还存在),提供电子书下载,一本一个exe文件,设计良好,很喜欢。想来我特别喜欢那种包装起来成一个完整个体的东西,像一本本电子书,一个个iPhone APP,还有一个个完整的FLASH游戏。像我以前做的Q版海底俄罗斯这个FLASH游戏,特别喜欢打造这样一个完整东西的感觉。

我是看到“唐茶”才想起这些的,非常喜欢唐茶这样的APP,很有苹果的风格,阅读体验上追求完美,确实是阅读新境界。手机阅读随时随地,我自己也在手机上读了不少书,自身需求较大,我想用自己的方式去实现一个。我没见过有人用web的方式做这样的电子书,算是实验尝试,也算是自娱自乐的项目。

第一本书我选择了《苏菲的世界》,觉得它很好,以非常轻松的方式让人了解整个科学哲学史。这部书原版出版于1991年,按理来说至今20年已经没有版权问题了,但翻译的版权还是存在的,所以这还是算盗版吧。整本书的内容是在网上找的,内容有非常多的错误,我见到的都一一修改了,光改内容已经花了我很多时间,相信这是网上能得到的版本最好错误最少的《苏菲的世界》。

工作后做业余项目真是不容易,时间太少,娱乐时间大部分都贡献出来了,有时是乐在其中,有时不得不去做琐碎的事情,不得不去做不擅长的设计,也是有点辛苦的。设计对我来说是个难题,设计的过程是憋出来的,一点点试出来,比较痛苦,很想自己的设计能力能提高,但很难,也很想跟好的设计师合做一个产品。

这个产品从80%到100%花了挺长时间,产品发布的页面都做了,还有在safari打开时针对高清屏的优化,总的来说,这次还是比较用心的。这样的产品,做出来感觉很快乐,但如果有人用,可以增加百倍的快乐,希望有人会喜欢吧。

iPhone webApp缺陷

苹果对webApp支持力度较大,在移动端对HTML5,对webApp支持得最好的就是iOS了,但它还是有很多缺陷。

  1. 无法阻止屏幕旋转
    只能做一个在旋转到横屏时提示“不支持横屏”的提示。
  2. 无法正常切换任务,一切换就重刷页面
    原生APP从后台切回来直接恢复状态,webApp跟iOS时代的APP一样,一切走,再切回来,就是重启应用。
  3. 不能调节亮度
    这个还可以接受,只是在阅读时比较需要这样的接口。
  4. 图标和开启页面无法使用manifest缓存
    manifest无法管到APP的图标和启动图片,每次打开应用都会去请求这两张图片。
  5. 头部状态栏无法去除
    少了一些宝贵的显示空间
  6. 性能
    iPhone4S上性能给力很多了。但是,原生APP可以流畅实现更炫的效果时,webApp不过是刚好能实现简单效果。

有点痛苦的学车经历

2011-11-17 评论(4) 分类:生活 Tags:

今年三月去华师里的华科大驾校报了名学车,因为考虑到工作后要再去学车考驾照就很麻烦了,没时间,趁着大四空闲赶紧在毕业前把这事给办了,结果办到现在工作N个月了才办成。挺后悔之前没有去报,大学期间应该尽快解决这种麻烦事。

教练

整个学车过程是非常不爽的,不爽在于教练,驾校也算是服务业吧,应该找不到第二个行业,服务比驾校更烂,即使是政府部门的服务也比他们好很多。

去学车的时候比较傻,我们几个人让驾校随机分配了个教练,袁教练,接着不爽的学车历程就开始了。说说这位教练差在哪:

  1. 态度极差。很重要的一点,辐射整个学车过程,N个小时的痛苦由此而来,仿佛每个学员都是笨蛋,脑子不好使,刚学车自然没有他这位十几年老车虫那么熟练,只要操作有一点不合他意(不一定是错误操作),就被他吼骂,仿佛天天更年期,百吼不厌。后来我发现他对我算仁慈了,最后一次学路面的时候,跟另一个40多岁的大叔一起学,他直骂那位大叔猪脑,垃圾。我都听不下去了,那位大叔年龄比他大多,竟然能这么骂,真够™混蛋的。
  2. 考试要买烟。每次考试,他都开口向我们要烟,直接载我们到小卖部门口去买,20多块一包的五叶神,不多,但也挺厚颜无耻的,刚开始考桩时还骗说是给那些考官的,这谎撒得很拙劣,后来索性不撒了,考完再载我们去买烟。似乎这间驾校的其他教官是没这嗜好的。
  3. 约练车,约考不跟人商量时间。练车和约考直接单方面给你定下时间,不来练车,就算你这节课学过了,不来考试,就算你挂了,交补考费下次考。导致我最后一次路面练得很辛苦,因为约考的时间很近,我又去旅游,回来后马不停蹄地连续4个早上练车,极其累。
  4. 教学才能全无。整个过程就是应试教育,非常机械地让我们对好点就完了,完全不会说什么原理,为什么要这样做。有时候一些完全没问题的做法,因为不符合他的机械教学方式,也会被吼停。
  5. 每次看他在上级和那些开着车过来练车的有钱学员面前点头哈腰的样子,我就忍俊不禁。

此教练姓袁,袁教练,记住了,去华科大驾校学车千万别选这个人。其他教练我不知道会怎样,当然是会有好教练的。在学车期间曾有几次让一个助理教练教,许教练,这个教练就很好,通情达理,悉心教导,每步都会说为什么要这样做,也很少吼人。可惜,只让他教了几次,剩下都在这姓袁的阴影下痛苦度过。

对以上两位教练的评价,我们一起学车的三个人都是很一致的。

我觉得驾校要控制教练们的态度和教学质量是很容易的,学员的考试通过率跟薪资挂钩,学员可以对教练进行评价,给个好评差评,也与薪资挂钩,这不很简单吗。驾校没这么做,考完车了我至今无渠道跟驾校反映这位教练的行径。可能因为就算教练素质再差,来报名学车的人也能源源不绝,就不用管这些了。

过程

学车过程不太顺畅,文科考试和桩考无压力,但接下来的九选三电子考挂了。九选三当时学到我们都恶心了,还没能过心情很糟糕。第一次考时感觉还挺轻松,很容易就完成斜坡起步和侧边停车,但当我觉得侧边停车已经完美完成的时候,车上的机器说话了,考试不合格,擦,莫名其妙,只能再来一次了,结果第二次我自己弄错了,侧边停车在入库倒车时倒多了,于是挂1档想向前走一点调好位置,结果那个SB电子监控以为我已经入了库再出来了,叫我马上进行第三项。于是我就挂了。挂了后那位袁教练用比我臭百倍的脸对我说,半年后再考吧!

第二次九选三时人工监考,容易多了,比较轻易地过了。接着长途很郁闷,跟一对情侣和一个社会人士一起去,都不认识,去到连南那个地方,比我家乡还破旧,住的旅店抽到一个很偏僻地非常差的。在非常的无聊中度过。最后的路面上面说了,很辛苦,还好最后过了,那位交警虽然一副黑社会样,但感觉还是挺好的,比袁教练要有素质。另,这位交警长得挺像韩红。

其他

考车不难,但每次考试前我都会挺紧张,很讨厌那种感觉,虽然在考车这事上这种感觉只是轻微的,希望这是我最后一次参与这种考试了。其实之前在找工作面试时,在上台演讲时,也有这样的感觉,紧张,这一小段时间的紧张没什么,主要是在此之前长时间的焦虑,比较困扰人。不敢放松下来,因为感觉松弛了不利于发挥,我应该是个心理很敏感的人,至今未能很好地解决这个问题。我惰性发作的时候,觉得是否有必要解决这个问题这是个问题,有人说人要跳出自己的舒适区去提高自己,但有时我发现不用辛苦地去迎合大众所认可的那些成功特质,只是在自己舒适地范围内发挥自己的特长,也可以过得很好。

QQ邮箱iPhone版 — 混搭式开发的尝试

2011-10-25 评论(9) 分类:技术文章 Tags:

QQ邮箱iPhone版开发了几个月,多次延迟发布,过程十分艰辛。这是第一次尝试混搭的开发方式,即整个应用主要由web组成,APP给web套上一个壳并提供一些原生的接口,以达到更好的体验。我们使用了开源的PhoneGap框架,但其实到后来已经可以抛弃它了,没用它多少接口,自己实现一下也只是时间的问题。

总体

整个APP主要是以下三点:

  1. APP由js驱动,与手机邮箱触屏版/ipad版使用同一套逻辑,同样的M层,架构一致。
  2. 由APP客户端提供绘制头尾以及动画切换的接口,由js调用。
  3. 使用HTML5的sqlite/localstorage缓存数据,applicationCache缓存静态文件和页面。

加上各种细节,就可以构建一个仿原生应用了。

问题

实际上说得简单,做起来难,碰到很多问题。

性能

DOM的性能差,渲染速度慢,最初在各个模块之间切换时速度不能忍受,经过各种优化后情况才好转。优化包括:去除所有高级CSS特性,例如阴影渐变等,减少list默认显示条数,缓存DOM,APP头尾控件缓存,APP动画拍照优化。即使经过很多优化,目前性能上还是跟原生APP有所差距。这种差距目前来看只能等待硬件升级。其实在未做任何优化前,在mac的模拟器上体验已经很好了,无性能问题,因为mac的硬件够好。

manifest

applicationCache的manifest是个令人头痛的东西,项目过程中几度出问题。它最大的不足在于不能清空缓存,一旦使用了它,将很难抛弃它,只能更新,不能抛弃。造成的问题是,manifest更新时,拉取新的资源文件,一旦主页面在后台输出的是个不正确的页面,被缓存起来了,就万劫不复,再也无法进入应用了,因为没有机会再次取拉正确的页面了。所以要使用它,需要强力保证主页面绝不会输出错误,最好是个静态页面。

此外用manifest还要非常细心。项目过程中有两次出现突然无法离线的情况。一次是manifest针对高清屏输出的文件有个地方没换行,导致缓存无效。很难看出它没换行,因为manifest文件是套模板的,模板上是有换行的,转完输出就没有了。只针对高清屏错误就导致模拟器和iphone3都没问题,只有iphone4有问题。折腾这个诡异的问题半天。另一次是写在APP里的启动网址参数里多了个’s’,导致打开的页面跟缓存的页面不一致,很难发现,也查了挺久。

JS-APP不同步

APP提供了绘制头部底部的接口,何时绘制以及绘制什么由JS控制。模块的切换会有动画效果,在js调用模块切换时,先拍照,再画头画底,再回调开始动画的事件,JS渲染自身的dom,动画切过去,整个流程挺简单挺清晰,但实际会有各种问题出现。

在初期经常出现APP头尾和模块内容不一致的问题,由各种原因导致,可能在切换模块整个流程没结束时马上又切换模块了,或者再调一次画头尾,会打乱流程。这通过APP那边把命令加入一个队列顺序执行,并且在动画过程不响应事件来解决。

登录问题

由于历史问题,登录没有使用ajax,整个应用不可避免地需要页面跳转,这会导致非常多的问题:
1.在某些网速非常慢的情况下,整个应用白屏无法避免,因为在跳转了页面并且页面还未载入时,必然会先出现一个空白页面。
2.登录的loading菊花卡住不转,因为跳转了页面本页面的无论是gif还是canvas都停止运行了。
3.一旦出现运营商劫持/wifi验证页面,整个应用就会调转到这个页面去,完蛋了。这个后来通过把表单提交到iframe解决。
所以,最好不要出现跳转页面的情况,必须整个应用在一个页面里。

沟通成本

本来一个iPhone APP的开发链就是,UI-客户端-后台,加入js后,多了js与客户端沟通的成本。而在这种开发模式不成熟的时候,这个沟通成本挺大。另外在APP出问题的时候,有时挺难判断是js的问题还是客户端的问题。

由于APP介入了表现层,进入JS的逻辑,所以必须对APP和JS两端都熟悉了解,才能掌握整个流程。之前不清楚为什么phoneGap不推出这个固定画头画底的接口,这是所有APP必备而在web上实现性能又很差的东西。现在知道这会使APP变复杂,phoneGap只提供功能接口,作为后台角色,其他全交给JS,不需要与APP进行过多的沟通。

webView/网络

出现了一些问题我们还没弄清除是不是webView的问题,例如,记住cookie的问题,登陆过后是设了cookie的,但如果这时马上退出,下次进来就不会有cookie,如果是隔个二三十秒过后再退出,cookie就能记住。非常奇怪的行为,对此我们只能打个补丁,把某些cookie存到localstorage,下次进来如果没有cookie就从localstorage里取,这个方案还依赖了mainifest。

另一个是APP环境改变时ajax的行为问题,在请求或者上传时,APP切换到后台,APP切换网络,APP切换到后台长时间不用再打开,APP终止webView的请求,都会由可能导致ajax卡死,无onsuccess或onerror的callback,有时还会导致JS被阻塞,接下来无法正常响应请求。这是我们框架的缘故,还是webView的缘故,还待查。

好处

与纯原生APP比,它是有带来一些好处的。

  1. 云端升级:应用的某些升级无需通过AppStore,无需用户下载安装,可以快速迭代。
  2. 代码复用:触屏版/ipad版的多数代码可以复用或者共用,降低开发成本,提高开发速度。
  3. 跨平台:我们暂时没用到这个好处。若要跨平台,数据层没问题,VC层还是有很多的不同。

总结

混搭的开发方式,APP最好不要参与到表现层的东西,只提供必须的功能接口,否则js与APP一起管理整个表现,会导致复杂度增加,开发困难。但目前没办法,可能走得有点快,就目前来说,纯web的表现还与APP的差距甚大,必须借助APP的力量,像最基本的头尾固定,只能由APP来展现。

目前iOS5的浏览器支持了position:fixed属性,可以在屏幕上固定元素,支持-webkit-overflow-scrolling: touch,可以原生支持对区域滚动,就具备了使用纯web实现目前的体验的基础。等接口提供再加上硬件不断加强,性能上的差距也会缩小,等市面最低版本是iOS5了,硬件都升级了,web主导的这类应用估计会多些。

微博之旅

2011-10-21 评论(3) 分类:互联网 Tags:

从08年3月开始用微博,到现在三年半了。至今认真用了四个微博,因为不同的原因迁移。

第一个用的是饭否,微博的先驱,有感情的一个平台。可惜用了一年半后,在09年7月7日饭否被关了,被迫迁移到第二个平台twitter,在twitter上混了一年,后来政府慢慢对twitter封得越来越紧,把中文圈全干掉了,我不想折腾,迁移到腾讯微博用了几个月,后来朋友们都去了新浪微博,起初我只是在新浪微博评论他们的微博,后来就慢慢迁移到新浪微博了。

在很早我就说过,我用哪个微博平台取决于我朋友们用哪个平台,相信这是大部分人的选择方式,还有一部分是看明星在哪个微博,不过如果不是狂热的明星粉丝,开个马甲关注足矣,决定真正使用哪个平台的,还是身边朋友。

前两次微博迁移是迫不得已,最后一次是新浪硬生生把人抢过去了,平台效应已经形成了,腾讯微博即使有内嵌QQ的方便,仍比不上新浪微博。不知道在其他人群是怎样,在我所接触到的人群范围内,除了同事 (我在腾讯),其他有用微博的都是新浪微博了。感觉腾讯微博已经输了,不过我猜可能90后那些喜欢玩QQ秀的比较多人用腾讯微博,没研究。

腾讯微博的活跃用户应该远少于新浪,用户数量水分很多,甚至活跃用户的水分也很多,很多是通过Q空间和签名同步,有的是从其他微博同步过去。腾讯微博僵尸粉丝很多,很长一阵子我一发微博就被不认识的人无评论转发,而且是即刻,貌似腾讯微博没严打这些用户,在新浪微博没出现过。在腾讯微博有1000个粉丝,可能只相当于在新浪有100个。

新浪腾讯微博同质化严重,微博这样的平台不需要两家一模一样的,就像QQ。MSN和QQ不是一样的,至少MSN是有主攻市场的,但现在腾讯和新浪就是一模一样的,微博没有用户就玩不转,用户只会越来越聚集在本来就多的那个平台。

新浪腾讯微博上娱乐信息过多,互联网十几年在BBS等地方积累下来的老段子在微博上不断转来转去,重复内容很多,无营养,无意义。不是说不关注某些人就可以避免这些内容,整体氛围如此,避不了。

挺羡慕其他国家有facebook的,微博对所有人都公开,跟facebook性质不同,偏向媒体/传播,个人品牌打造,facebook偏向个人生活,有隐私设置。我发的微博大多是生活,没办法,人人网太不争气了。

饭否在刚复出的时候还好,跟几个朋友在上面交流感觉不错,但一年过去了,饭否没什么跟新浪腾讯微博差异化的举动,只是做了几个应用,不免令人失望。twitter越来越少人上了,已经成为一个高端人群的微博,没事上去看看感觉挺好的。

iOS5 innerHTML插入内联touch事件的问题

2011-10-19 评论(2) 分类:技术文章 Tags:

iOS5一出来,很多对safari的溢美之声,那些新增的特性确实好,但这个版本的safari很有问题。

document.getElementById("test").innerHTML = '<div ontouchstart="alert(\'touchstart\')"></div>'

一般,这样的代码是没问题的,一段HTML字符串赋给DOM的innerHTML后,自动生成DOM,并且上面的内联事件都是有效的。在至今所有浏览器都可以这样,但现在在iOS5的Safari不行,生成的DOM中ontouchstart事件无效,目前测试ontouchstart/ontouchmove/ontouchend都不行,若改成onmousedown,onclick等都是可以的。这个问题导致了jquerysencha的一些应用都挂了。

目前的解决办法就是,先把HTML加入一个新建的DOM里,再用cloneNode把创建好的DOM取出来加入目标位置,这样才可以。如果不用cloneNode而是直接把创建好的元素塞进去还是不行的。

var dom = document.createElement("div");                                    
dom.innerHTML = '<span ontouchstart="alert(\'touchstart\')">touchstart dom create</span>    ';                                                                          
document.getElementById("testTSdom") .appendChild(dom.childNodes[0].cloneNode(true));

可以在这里 http://bangswork.googlecode.com/svn/trunk/lab/ios5touchstart/index.html 看到效果

这应该属于一个bug,居然就带着这么明显的bug发布出来了,要折腾死做移动版的前端了。

此外,还发现iOS5下Safari的一些其他问题,例如缓存很奇怪js excution timeout,还有一些已经碰到但未明原因的,总之,这个safari很有问题。

说说HTML5/FLASH/webApp

2011-9-18 评论(2) 分类:互联网 Tags:

又好久没写博客,我必须凑数做到每个月至少一篇,不然破坏了这几年的传统感觉不太好。

最近HTML5太热门了,在微博上老是看到HTML5又能干嘛干嘛,又做出什么炫酷效果了,然后又跟FLASH对比,FLASH必被淘汰,这种论调出现得太频繁了,感觉挺无聊。用炫酷效果来宣传HTML5实在不是明智之举,现在HTML5能做到的任何效果除了WEBGL的硬件加速其他的5年前的FLASH就已经能很好地做到,而且性能更好得多,随便搜一下FLASH酷站,看看里面的交互,哪个不比目前纯WEB的方式强,感觉WEB使人机交互退步了10年。当然FLASH的优势是交互和效果强,HTML的优势是对内容处理能力强,现在互联网全是内容,一切以服务内容为主,强的交互和设计靠边站,FLASH也只能在游戏和视频上混了,视频上HTML5是可以代替FLASH,但游戏上HTML5提供的功能要在做游戏上赶上FLASH目前的水平恐怕还得四五年,到时FLASH会怎样还不知道。

我不是在唱衰HTML5,只是对那些天花乱坠的追捧和与FLASH的对比有点反感。HTML5只是前端开发的一些功能延伸,给HTML订了一些规范,给JS加了一些接口,给CSS加了一些高级特性,有了这些接口,webApp可以做得更好,没其他的什么。所以真正热的是webAPP,不是HTML5,不过把HTML5作为webAPP的代名词也没关系。就像几年前的Ajax一样。

webApp确实是现在和未来的热门,在移动端上,现在已经可以结合PhoneGap这样的框架给webApp提供底层接口,webApp已经能享用到跟原生APP一样的功能,但是性能上跟原生APP差距甚远,不过这会在未来一两年的硬件升级上把这个问题解决。到时套了PhoneGap的webApp就可以和原生APP媲美了,对于内容展示性的应用,例如微博,邮箱,SNS,由于webAPP开发比原生更容易,能写一次代码跨平台运行,那用webApp代替原生会是更好的解决方案。而对于交互性和性能要求强的应用,例如游戏,地图,QQ还是用原生APP实现,各司其职。

附带一下介绍目前HTML5提供的所有功能的slide:http://slides.html5rocks.com/

入职培训

2011-8-12 评论(14) 分类:生活

腾讯入职培训,本来是10天的培训,结果变成了25天,7天军训和18天培训,只有7月的两批入职毕业生才是这样安排,原因是腾讯招的人太多了,深圳各大厦坐不下了,新的大厦万利达刚装修好有气味,太快入住不好,所以给我们加了这么多天的培训,拖延入住万利达的时间。本来按理说推迟一下万利达同事的入职日期就行了,现在让两批七八百人全部延长培训,估计是想乘机试验一下多点培训和加个军训会不会有好效果。 (更多…)

大学<四>

2011-7-2 评论(5) 分类:生活 Tags:

大三暑假开始去腾讯广研实习,去之前我还挺担心,之前从来没有试过团队开发,不知能不能适应,后来觉得挺好的,没多大不同,只是在一个项目中自己负责的东西少了也轻松了。整个实习期间都在做全新的QQ阅读,很幸运,实习期刚好是整个QQ阅读的项目期,我对这个项目也挺有兴趣,做起来挺爽。第一次工作可能还没完全适应工作环境,虽然没怎么加班,但有时感觉有点累,晚上回到宿舍就只想休闲娱乐了,再没有精力去编程学习做自己的东西什么的。

实习两个月就结束了,心里有打算,北京有最多的互联网公司,资源和氛围都很好,对互联网行业来说无论是创业还是打工都是最好的选择。我想在毕业前去北京实习,去了解在北京工作是否合适,我是倾向于留在广东,但如果实习后觉得很合适我也会留在北京。毕业以后不会再有这种“试一下是否合适”的机会了,必须珍惜这个机会。

有想找创业公司的,但觉得创业公司可能不能接受我这样的心态去实习,就试了百度。接着电话面试了百度,三轮过了。10月中旬过去实习三个月。进了web前端研发部的通用组,做百度通用的前端框架tangram,不做项目,相当于做基础架构的,比做项目的轻松很多,还能自己自主要求要做什么怎么做。三个月的工作是挺轻松的,也学到不少东西,最重要的是引我入了linux的门,也见识到里面很有黑客气质的牛人,感觉“黑客”是一种气质,跟“工程师”不太一样的气质,在他们旁边总能学到点什么。

组里的人很好玩,平常调侃组里唯一的女生比较乐,哈,氛围非常好,都挺开心的,最后离开时真是舍不得,总有那么一幕比较难忘,拖着行李箱在大家目送下走出办公区的那一幕,第一次有真正离别的感觉,差点防线崩溃,以前没体验过。

在北京也见到一些在twitter上认识的朋友,也有很多想见但没见到的。在北京租房也费了很大劲,在独自生活中觉得这不是我想要的生活,在这里可能就全心投入工作几乎没有生活了,我不是那种“事业为主,赚到钱,再享受”的人,还是回了广东。

从北京回到学校赶上最后一节课,但只是交交作业,没有正式上课,在东阶梯乱哄哄中结束,有点怀念上课,很久没上了,以后也不会再上了。大四上学期我在学校的时间只有一两各星期,其他都是在实习和回家。

大四下学期开始捣鼓毕业论文,论文是次要,毕业设计是主要,因为华师的毕业论文实在太容易水过了,两三天时间这里那里抄一点就能搞定,事实上在其他的论文我也这么做过。但我有充足的时间,想认真去做这个毕业设计,作为我大学最后一个作品。接下来几个月都在很低效地研究node.js做联机对战的游戏,每天花在上面的时间很少,总是分心做其他,断断续续地做。第一个版本跑通了,做成QQ游戏大厅那样有座位的,根据这个版本写了论文,上交了。论文最后没得到优秀,答辩老师把分数拉到89,省去了二次答辩,挺好的结果,我对学校的所有荣誉早已免疫。

接下来的时间里重新想了联机对战的形式,改成了即连,做出了完整的产品了VPS,某天突然想到可以放到webQQ上,后来webQQ某位产品经理说可以给我做推广,在首页登广告。后来广告打了一个星期,没有想象中给力,现在添加人数有7000多,可惜应用评价很低,大多是说打不开不稳定什么的。大学最后一个作品也就这样了,要想做出twitese那样受欢迎的产品太难,还是会继续努力。

这最后一个学期还碰到不少事,体验到了极度不安的感觉,对自由平静无限渴望和对现拥有的东西的珍惜。期间一段时间肚子出了毛病总是治不好,很痛苦。每到这个时候就要想起我所有认识的人所经历的困难,所有困难都会过去,事情总会变好,坏事不会持续的,every thing will be ok. 班里小羊的乐观情绪是我学习的对象之一。

六月毕业季,5月底拍毕业照,第一次穿正装,最好的朋友们都来了,很欢乐,可惜爸妈没来。那晚班级聚餐,酒喝得多,有酒才high,但没人醉,酒喝得恰到好处。接着坐草地,最喜欢大家一起坐坐草地,躺下看看星星,惬意自在,也是最后一次跟班里人坐草地聊天了。6月23学院聚餐,很给力的大餐,羊牛鱼虾鸡鸭猪肉都有,可惜我们班没有在大厅,没有感受大厅热闹的气氛,只是小桌子范围吃得欢乐。24日晚在西门外班里十五个人通宵喝酒,玩杀人游戏,数字游戏,骰子,单挑,几个人倒下几个人吐,还有一个BOSS,几个清醒的人合作搞定BOSS,这样的情景可能真的以后不会再有了,纯情时代,青葱岁月,这是最后一晚纯真的疯狂。26号毕业典礼,校长讲话很古板,除了调侃校园网迎来一阵掌声外,其他都太过沉闷,对比其他学校的校长讲话,显得无新意,无诚意。毕业典礼上播了个煽情的视频,听到很多女生翻包找纸巾的声音,背景音乐歌词“时光的河入海流终于我们分头走”,听者怎会没感触。典礼后班里人再聚餐,再去拍照,补回了我上次毕业照时没有跟班里人拍的遗憾。接着就是领毕业证,收拾宿舍彻底走人了。晚上翻着班里的毕业相册,看到从大一到现在一次次聚会和活动的集体照,看到大家各种青涩的脸,挺触动的,我喜欢这个班级,希望以后还能聚会,再见粉红七班!

毕业了被问什么感觉,最大的感觉就是舍不得,估计很多人都一样。四年的安逸,自由自在,无忧无虑的幸福生活结束了,这段时间可能是人生束缚最少时间,往前有学习压力,往后有工作家庭压力,只有大学轻松自在,这样美妙的时光过去了,但我没什么遗憾,我一直在珍惜大学每一天,享受每一天,从某天开始一直被小羊称为幸福小男人,我觉得确实很幸福,很知足。希望接下来的日子能延续大学的幸福。

在上大学的前一天,我写了篇博客,写道希望我在大学能保持奋斗的心,很庆幸我很好地做到了,一直保持着这样的状态,没有停止过对编程的学习。我很庆幸生在这个时代,有我喜欢的计算机专业,有各种高级语言可以捣鼓各种有趣的东西,不会在一开始被课程的枯燥编程吓到,可以按自己的想法去学习,快乐学习。我真是,很幸运。未来的路怎么走心里还没有定数,但希望接下来的日子仍然能保持奋斗的心,积极生活。

node.js源码研究—模块组织加载

2011-6-8 评论(1) 分类:技术文章 Tags:

粗略研究了一下node.js源码,它有8000行C++代码,2000行javascript代码,来看看js和C++间是怎么组织连接起来,以及各个模块是怎样互相调用的。

本文使用的node.js版本是0.4.8,可以在https://github.com/joyent/node/tree/v0.4.8这里看到源码。

js2c.py

node.js使用了V8附带的js2c.py工具把所有内置的js代码转换成C++里的数组,生成node_natives.h直接include到程序中,成了C++源码的一部分。这样做能提高内置js模块的编译效率。

node.js里内置的javascript包括了主程序src/node.js和模块程序lib/*.js,通过js2c.py让每一个js文件都生成一个源码数组,存放在build/src/node_natives.h里,node_natives.h在node.js编译后才会生成(编译的脚本wscript中调用了js2c.py),可以看到大致的结构如下:

namespace node {
    const char node_native[] = {47, 47, 32, 67, 112 ......}
    const char console_native[] = {47, 47, 32, 67, 112 ......}
    const char buffer_native[] = {47, 47, 32, 67, 112 ......}
    .....
}
struct _native {  const char* name;  const char* source;  size_t source_len;};
static const struct _native natives[] = {
  { "node", node_native, sizeof(node_native)-1 },
  { "dgram", dgram_native, sizeof(dgram_native)-1 },
  { "console", console_native, sizeof(console_native)-1 },
  { "buffer", buffer_native, sizeof(buffer_native)-1 },
    ....
}

这个文件被包含在node_javascript.cc里,node_javascript.cc提供了两个接口:
MainSource() 处理node_native源码返回v8::Handle类型的数据可供编译。
DefineJavaScript(target) 把其他所有模块源码变成v8::Handle类型后加载到传入的target对象上。

所有的js模块都被转换成了C数组,接下来看看它们怎么执行和互相调用。
(更多…)