2012

2012-12-31 评论(9) 分类:生活

又到了一年一次的年终博客时间~

作品

今年的个人作品,只有一个伊书。

从1.0到1.5.3,一共迭代了12个版本,1.0到1.4是我热情最高涨的时候,每次升级都是大功能,1.4以后因为各种原因,没有全身心投入它,放缓了更新。我花了大量心思和时间在伊书上,实现了打造一款我自己喜欢的APP的愿望。同时也想证明不用那么蛋疼的方法也能开发出一款好的APP。在生活沉闷的时候,需要寻找一点希望和曙光,在当时伊书就是我的希望,以及乐趣所在。

在中国做产品,产品质量没有推广和渠道重要,伊书的用户量不高,主要原因是无资源,推广不力。我没有推广策略,只能靠最土的的推广方式,就是去读书论坛发发帖,发发微博,没其他了,自然不给力。伊书用户量不高,但也不会太差,前些日子按友盟的统计,伊书总启动次数超过了百万,日均1W+,平均每次使用时长7分钟,按友盟这数据的意思是伊书已被人使用几百万分钟,这数字看起来还挺夸张的。加上AppStore上的很多好的评价,个人还是挺满足的。

除了伊书,我一直在想要做点什么别的产品,我已经动手开始做然后觉得不靠谱抛弃的项目都有三四个了,一直没想出什么好的主意。

工作

2012年刚开始时,我的QQ签名是2012求改变,到最后确实改变了,开发伊书是一次改变,换工作是另一次改变。

今年3/4的时间在做iOS开发,开发QQ邮箱APP和文件中转站。QQ邮箱其中一个版本由于人手调动原因,只剩我跟另一个同事负责新版本上线,而那个版本又引进了复杂的增量更新功能,那时承受了较大压力,在一个星期里都是凌晨回家,被各种bug搞得焦头烂额,当时很沮丧,但同事说得好:问题总会解决的,最后顺利上线。其实每次APP新版本上线前一两个星期都是这样,只是其他时候的上线我没有主要负责,所以没那么辛苦。回过头来我还是觉得,没必要,但这样的开发方式会在那里持续下去,这不是因为出了什么问题,这是习惯。

我了解了职场,有段时间感到失望,不知怎么说,不是理想与现实有差距,而是我不知道我应该改变自己迎合职场,还是保持原状,这个问题不会有正确答案,什么答案都是正确的,只能靠自己判断和调整,follow your heart说得好像是真理,真要决定怎么做不容易。

离开腾讯的事就不重复了,新的工作是在家工作,充分体验到它的好处和坏处,好处是自由,坏处是少了交流,宅在家里也不是我的习性,我还没有融入这样的工作方式,在家工作需要自律,因为在这期间发生些事情使我没法好好做好自律的规划,现在刚恢复正常,希望我能尽快进入状态。

心理

在某一段时间里,有了点心理问题,也不知道是为什么,可能是身体有点小问题引发的,我认识到人的身体机能十分复杂,现代医学只认识到一点皮毛,如果身体出了状况,不能全靠医生,很多时候还要靠自己判断。到现在我几乎解决了这个心理问题,通过看书和丰富生活,不过还没完全解决。

旅游

今年几乎没旅游,只是去了香港一日游,珠海露营,以及去南沙和珠海的度假酒店,南沙和珠海是部门和公司的旅游,第一次去度假酒店,在游泳池旁躺着喝红酒,再下去游一游,蒸一下桑拿,进冰池里冷一冷,很休闲放松,感觉很好。珠海的海泉湾泡温泉也不错,在游乐场里坐了过山车,过山车很刺激,被甩得晕头转向,不太舒服,跳楼机就很好,高高的可以看到很漂亮的风景,这些都是第一次。国庆去珠海跟酱油团露营,通宵聊天游荡,十分快活~

其他

今年跟不少人聊过天,发现我非常喜欢跟不同的人聊天,总能从对方身上学到很多东西,我是外向的人,只是我从小养成的性格习惯让我在交际上不主动。

今年仍然没有解决注意力分散的问题,时间管理没好,一些日常要坚持的东西没坚持好。希望接下来能改善。

小锻炼坚持了挺久,但身体素质似乎没怎么变好。

看了20本书,18部电影。看好的书能让人开阔视野,避免局限于自己的小世界里,认识世界的多态,有时能让人身心愉悦,推荐《罗素的故事》和《看见》。

认识到自己的两大缺点,悲观和急躁,悲观是由于习惯谨慎地预计事情的最坏结果,急躁是是性子问题,急是顺应社会环境,躁是好胜心,想要改善这两个缺点,需要时间慢慢来。

对接下来一年的期望,还是那些,家人朋友们和我身心健康,技术上能有进步,作品能达到期望,再贪心点就是能找到明确的目标。

《海贼王》

2012-11-29 评论(5) 分类:随记

最近重温了漫画《海贼王》,觉得挺有意思。

1

海贼王规划了一个新的世界规则,可以跟现实世界作对比。漫画里人的武力差距很大,现实中武力差距很小,但现实中人的能力差距很大。

武力的差距很容易看得出来,因为非常容易对比,只有一个领域,而且武力作为竞争的最有效的手段,自然直接能让武力高者处于社会的上层,低者处于下层。

现实中能力的的差距很难看出来,因为一个人的能力分散于多个领域,单个领域的能力容易对比,如普遍应用于社会的如交际能力,智商,视野等虽然可以容易分出高下,但整体的能力对比就难了,而且这些能力的高下并不能直接变成社会地位,能力高的强者还需要借助运气和位置的力量才能发挥,不像武力无其他限制,在一个以社会地位判别人的强弱的社会里更难分辨出能力的差距。

所以在一个武力差距大的世界里,十分简单粗暴,弱肉强食,强者为王,弱者为奴,而在武力差距小,能力差距大的现实世界里,可以不那么残酷,强者上位还需要借助运气和外界条件,弱者也可以过得不差。武力世界把资源都集中在强者身上,现实世界的资源大量分散,总的来说,现实世界更美好。

2

海贼王跟其他战斗漫画比多了一点励志,不像其他一味热血,海贼王宣扬同伴、变强、自由、活着。

现代社会人与人之间的真实感情所剩不多,大家都渴望有愿意为对方牺牲,共度患难的同伴,或者说渴望在一个团队里,每个人都可以发挥各自所长,互相扶持,建立深厚的友谊,一起做一件伟大的事情。现实中我们经常碰到让我们感觉无力的事情,漫画里激励人努力变强是一个解决方法,我忘了是否受它影响,我经常说能力不够就无法享受到更大的自由。每个人在现实中都多少受到各种束缚,每个人都向往自由,主角说想当海贼王是因为海贼王是大海上最自由的人,所以海贼王最大的主题就是追求自由,自由的道路是艰辛的,需要大无畏的勇气和强大的实力和精神力量去突破重重困难。漫画里也不止一次宣扬“活着就一定能碰到美好的事情”,不管这个世界有多少不好和痛苦,都要坚信活着是美好的。

3

海贼王偶尔会揭示一下现实世界的规则,漫画里标榜正义的海军大部分时间是反派角色,但海军也不全是反派,也有很多真正正派的人。海贼群体里也有很多邪恶和正义的人,而且某些邪恶之人按剧情发展后会变成正义人士,现实世界就是没有真正的善恶之分,个体都没有绝对的善恶,以群体分善恶更是不可理喻。此外正义是必胜的,这是真理,因为胜者才能谱写历史标榜自己是正义对方是邪恶,对公众洗脑是很容易的事。

4

海贼王到现在接近700话,一周一话,连载了15年,按剧情设计,正常发展估计还有600话,也就是说作者打算用接近30年的时间去打造一部漫画,看过《食梦者》了解了一些漫画家的工作流程,画漫画的工作量是很大的,每周一话时间并不宽松,休息时间比上班族少,二三十年夜以继日画一部作品,每天做着同一件事,即使腰财万贯也不会受外界诱惑去叹世界,这种事情估计只有日本人做得出来,十分佩服。只有耐得住寂寞,推崇终身职业,不止为名利的日本人才能创造漫画这个产业。此外二三十年里作者一直沉浸在海贼王这个世界里,能比其他像作家编剧更好的规划一个新世界和规则,这是漫画的独特之处。

再见广研

2012-10-25 评论(13) 分类:生活

三年前人生第一次面试是腾讯,很紧张很兴奋,那是我心态上的转折点。两年前第一次从校园踏入社会到广研实习,很期待很忐忑,对大公司正规强大的技术很期待,对没有团队合作经验的自己能否融入团队感到忐忑。一年多前第一次正式工作还是在广研,职业生涯开始了。到今天正式离职,比想象中快。

广研的技术团队是个执行力很强的团队,对于理论上可行的所有需求都可以稳定地开发出来,也善于攻克相关的技术难题。团队里的多数人是全面的能手,技术知识不会局限于工作范围内,基础很好,科班出身,对于完全没接触过的领域,可以马上现学现用,多数人很拼,很努力工作,不过总体工程师感挺重,没有hack文化。跟能力强的人工作是挺爽的,可以学到他们的思维方式,解决问题的思维逻辑,基础知识的补充,追求完美的精神,这些在自学时很难学到,很感激工作过程中给予指导的terry和angus lucious等人。

广研的产品和设计追求简洁完美和高端,这与Q邮箱的发展历程和老大的品位有关。Q邮箱是注重真实用户体验和细节发展起来的,同时在发展过程保持简洁文艺,这作为传统延续下来,这里不会出现粗制滥造的产品,也不会有低俗的产品。记得Q邮箱APP上线时设计的一个广告图,上面一只手拿着装上Q邮箱APP的iPhone呈递给你的姿势,写着“我们有个新东西,你可以试一下”,感觉很好。其实所有人都喜欢简洁高端,看看苹果多火就知道,一直觉得Q邮箱和微信是“做给普通用户的高端产品”,能做到这点很牛逼。不过有时太过于追求细节的完美,会导致快速迭代的丧失,与“注重真实用户体验”相违背了,因为在推出产品之前,是不知道“真实用户的体验”是怎样的,猜错了就会有大量浪费,不过这样做有可能是因为做的产品已经不是单纯面向用户的产品了……

广研在腾讯里是独特的,在多数人眼里广研跟腾讯完全不一样,广研很独立。好的方面是,这里有点像创业团队,每个人都在做实在的事,没有繁琐的流程,没有各种会,上班时间弹性,几乎可以无视腾讯总部的很多流程,没有大公司病。不好的方面是,作息时间不正常,很多人正常上班时间11点,下班时间十点,忙的时候十二点,上线的时候凌晨五六点。忙的时候,只有周末可以见到没在睡觉的家人,整体情况是经常比较忙。另外,夸张点说,这里只有一个产品经理,类似苹果公司,这个模式在牛人的带领下是可以做出好产品的,甚至做出好产品的概率比其他模式高的,但对下面的人有负面影响。

广研有各种好和不好的地方,每个工作都是这样,都有好与不好,看自己某个时期内更看重什么。感谢一起工作一年多的同事们给我带来的帮助和指导,感谢广研,再见~

[Node.js]简化学习everyauth的异步流程控制

2012-10-22 评论(4) 分类:技术文章 Tags:

看了everyauth源码,第一次看解决异步流程问题的实现方法,感到很惊讶,为了更好地学习,实现了这个流程的简化版。

例子

先看看这段代码,功能是从本地文件读到一个url—请求这个url—把结果写入另一个文件。

var fs = require('fs'),
http = require('http');

fs.readFile('./url.txt', 'utf8', function (err,data) {
  http.get(data, function(res){
    var body = '';
    res.on('data', function(c){
      body += c;
    }).on('end', function(){
      fs.writeFile('./fetchResult', data + body, function(e) {
        if (e) console.log('error', e);
        else console.log('done');
      });
    });
  }).on('error', function(e){
    console.log(e);
  });
});

这段代码包括了三个步骤三个功能,但耦合在一起,可读性差,难以修改,对任意一部分修改或增加都要看完整坨代码才能找到,即时把每个callback都抽成一个变量,这一整个流程也是无法分离的。

改进版

对这种情况,everyauth使用了一种方法,可以把整个流程的实现代码写成这样:

engine
  .do('fetchHtml')
    .step('readUrl')
      .accepts('')
      .promises('url')
    .step('getHtml')
      .accepts('url')
      .promises('html')
    .step('saveHtml')
      .accepts('url html')
      .promises(null)

  .readUrl(function(){
    //read url from file
    ...
  })
  .getHtml(function(url){
    //send http request
    ...
  })
  .saveHtml(function(url, html){
    //save to file
    ...
  })

  .start('fetchHtml')

do是一串流水方法的开始,step指定每一个步骤对应的方法名,promises表示此步骤返回的变量名,accepts表示此步骤接受的参数(由前面step的方法提供的变量)。接下来是链式地实现每一个step的方法。

整个过程很清晰,程序的自我描述很好,把一段异步的流程按同步的方式写出来了。若要修改其中某个步骤,直接定位到某个步骤对应的方法就行,无需把整个流程的代码通读。若要增加步骤,也只需要在那些step流程上插入新的step然后实现具体方法,可以获取前面step提供的任何参数。

how it works

实现它用到四个对象:promise/step/sequence/engine

promise是基础,相信很多人熟悉它的概念,简单来说就是把多个callback放到一个promise对象里,在适当的地方通过这个对象调用这些callback。在这里的作用是:当step执行结束时,通知队列执行下一个step。具体地说就是把下一个step的函数保存到前一个step的promise里,前一个step完成任务时,带着数据回调下一个step进入执行。

step负责执行一个步骤,传入对应参数,并把执行结果(return值)按指定的promises名保存起来,以供下一个step使用。

sequence管理step链,让注册的step可以一步步往下执行。

engine是提供对外接口的对象,管理保存每一个do请求里的step和sequence,通过configurable配置自身的可动态添加的方法。

具体看代码:https://gist.github.com/3930621

(更多…)

关于工作

2012-10-14 评论(9) 分类:生活

对于程序员工作,若可以选择,有很多因素影响。

1.环境

公司的氛围/文化/价值观是否合心意。

表现在这个公司的氛围是否倡导快乐自由工作,文化是否鼓励开放分享,做出的产品是为人唾弃还是赞美。

自由快乐的工作体现在上层有没有尊重技术人员,是把技术人员当成纯粹实现自己想法或做出产品获得利润的人力资源,还是鲜活个体看待?是全心全意为领导服务还是为市场服务还是为价值观服务?是无限压榨把加班当常态还是合理安排加班?

国内的公司很少倡导程序员开放分享的,因为他们觉得没好处,自己花钱雇佣的程序员做出的东西为什么要跟别人说免费给别人用,这个人分享多了被外界挖了怎么办,对公司有什么好处。简单回答下,对公司的好处是提高代码质量,给在职的程序员带来快乐,另外能吸引外界,降低招聘难度。至于人被挖,是公司自己的问题。详见这里

此外我个人有点反感传统职场的“领导”氛围(更不用说官场了),对上司下属领导视察命令规章制度这些词有条件反射。如果说什么工作都这样,那我可以将就,如果不是,那我想追求没有这些东西的工作。

2.发展

发展机会是否足够好,自己的能力水平提升速度怎样。在大公司主管是否能给你足够的机会和资源去做事,做的事情是否非重复劳动,符合自己想要的能力提升。在小公司能否随着公司的建起或增长提高自己相应的能力。

3.同事

是否跟同事相处得很好,很有感情?跟同事相处得怎样是工作是否顺利快乐的重要因素,若整天黑脸对黑脸工作,或皮笑肉不笑地工作,你敢说很快乐?

同事间是否很多牛人,可以一直给你提供指导帮助,助你成长。一个好的导师/同事真是很重要,可以让水平提升速度加快N倍,节省很多时间,也可以树立一个标杆,让你想要尽快达到他那样的水平。

4.待遇

现在和未来的待遇怎样。把待遇放在第四个纯粹因为这样看起来我很高尚:)。工作当然很大程度是为了赚多点钱达到财务自由生活过得更好,占的比重很大,如果说给我现在10倍的工资我可能可以无视上述说的所有因素,但若给我一两倍的工资我就要仔细权衡了。

此外工资还是要现在和未来几年一起算,不过未来几年的预期工资肯定是要乘上一个概率的,像创业公司画大饼,一个概率乘一下算出来也不多,只有现在的待遇是不用乘概率的,所以那些给很低工资的创业公司说“目光放长远点,要看未来”纯粹是忽悠,自己还是要有个公式去衡量。

除了上述四个,还有一些其他因素,例如地域,做的产品等,不列了。

————————————————

其实有些工作只有合不合适,没有好不好。例如在苹果公司做软件,据闻iOS软件部门的主管Forstall对下属经常说的一句话是:“史蒂夫不会喜欢那样”。在一个讨好上司,在独裁文化的公司里是能做出很好的产品的。有些人不喜欢这样的氛围,有些人觉得无所谓,看自己更想要什么而已。

我对自己想要什么还不是很清晰,但对不想要什么还是挺清晰的,所以我从腾讯广研离职了,多些尝试,多点提升自己的能力,希望可以追求到让自己满意的工作方式。

TXT小说断章实现

2012-9-1 评论(7) 分类:技术文章

上个版本伊书支持TXT格式,免不了要做断章功能,粗略分享下断章的过程。

总体上的步骤很简单,只有两步:

  1. 用正则找出所有包含“第X章”的位置,保存在一个数组
  2. 循环处理这个数组,第i组的位置和第i+1组的位置之间就是这一章的内容,提取出来保存。

但有许多地方要处理和注意:

  1. “第”字和“章”字之间的数字不能过多,否则可能是错误的匹配。
  2. “第X章”这样的关键字有可能出现在正文,必须去除这样的匹配。(据测试QQ阅读没去掉这样的匹配)
  3. 除了“章”字,还有其他关键字,如“卷”“节”“部”等。针对以上三条,最后使用的正则:@”\\s{1}第(.{1,5})(章|节|集|卷|部|篇)”
    前面的一个\\s{1}保证不匹配在正文里出现的“第X章”,中间限制1到5个字,达到中文计数的百位(如“一百二十一”),应该够了。最后收集了除了“章”之外的一些关键字,可能还不全。
  4. 章节标题的提取。TXT上的章节标题可能是“第X章 XXX”这样,之前匹配的只是第X章,要把后面的字也作为章节标题提取。方法是在匹配到的第X章的位置找后面30个字符内的第一个换行符,匹配到这一行的文字就是章节标题。若30个字符内没换行,就以“第X章”为标题。
  5. 开头结尾的特殊处理,匹配到的第一个“第X章”关键字要把这个位置之前的内容作为一章。匹配到的最后一章不再以下一个匹配的位置作结尾,而是全文最末为结尾。
  6. 在无法匹配到章节内容时,采用普通分段方法,把全文按每章大概固定的字数分段。这样分段时在截取固定长度的字符串后向后查找最后一个换行符,以这个换行符的位置为点分段。目前使用普通分段的情况是匹配到的章节数小于4,或章节内容过长。

经过以上这些处理后,分章是有点靠谱了,但还有一些情况没考虑到,需要慢慢完善。

伊书的几次更新

2012-8-14 评论(12) 分类:互联网

6月10日发布伊书以来,至今两个多月,又发了三个版本,从1.0到1.3,算起来两三周一个版本,这个节奏还挺快的,能这么快是因为我业余时间不知道要做什么,就只能做伊书了,提交一个版本后,会马不停蹄开始下一个版本的功能,AppStore审核周期又那么长,1.1和1.2都审核了两周,一般在上个版本上架时,新版本差不多做好了,这次1.2到1.3的更新只花了两周,就是因为这样,1.2上架时,1.3已经做好了,提交审核后6天就上架了。

记录一下这几次更新。

1.1完善了书籍阅读外围的事情,如导入导出书籍,书籍来源的增加,书籍分类等。(7.14)

这些功能最大头的是书籍分类,交互上有很多要做,较繁琐,也为设置按钮的摆放纠结了好一阵,尝试了多种方式都不合适,最终还是把它从书籍列表页去掉,只有阅读页有入口。

itunes导入书籍,需要遍历文件的创建时间以筛选出新文件,找了很久获取文件创建/修改时间的方法,object-c里提供的方法没有只有这个文件真正的创建时间,没有副本创建的时间,搜索很久才找到用C语言获取文件时间的方法stat()。底层知识不熟悉的代价。

1.2完善书籍阅读过程的事情,如书签笔记,字体导入。(8.2)

书签笔记,这四个字包含的工作量太多了。书签还好,只是有点繁琐,设计上花了一些时间。笔记这功能是最难的,因为CoreText渲染出来的文本,是没有选中功能的,需要自己实现文字的选中和操作。文字的选择在1.0版本发布之前就已经粗略调研过,参考了EGOTextView的程序,当时找遍网络关于CoreText文字选择的方法,幸好有EGOTextView,否则要我全部自己研究实现,不知要多久,所以我在第一版发布时就说“enormego是天使般的公司”。在文字选择的各种细节调整上花了非常多时间,还有解决文字标记,点选标记的功能,都碰到不少难题,有的解决了,有的在可接受范围内就不解决了,在“完美”和“完成”上我有我自己的平衡点,自己做APP感觉好的地方是,这个平衡点完全自己掌握。

字体的动态导入,一开始我以为这是做不到的,在能搜到的字体导入方法中,都是字体加入项目工程一起编译,不能让用户自己导入字体。后来有网友跟我说已经有APP实现,我才知道这是可行的,几经搜索终于找到方法。有时候一些事情别人能做到,确定可行,自己才能做出来,先行者与其他人的差别巨大。

1.3支持TXT格式,图片显示,微博分享,分类密码,章内快速翻页等。(8.14)

这个版本更新的内容较多较杂。每一个功能都有点不容易。

TXT格式,我自己不怎么喜欢,用这种格式书籍排版勘误分章什么的质量不会好到哪去,只是顺便支持下。自动分章的功能少不了,阅读软件们给分章起了个更好听的名字,叫智能分章,试一下后发现只是根据第X章X卷这样的关键字去匹配分章,连第X章出现在正文中间也照分不误,很简单,不怎么智能,我也差不多是这么分的,如果有些书籍没这样的关键字分章,就根据长度拆成多个部分。TXT格式的基本阅读是没问题了,当然没达到很好的程度。

书籍内容显示图片,其实在1.2已经有这功能了,不过1.2需要epub在HTML页面里显示指定图片的宽高才能显示出图片,大多数图片还是显示不了,到1.3做了自动读取图片识别宽高,所有图片都可以显示了。除此之外做了图片的放大缩小,因为整个阅读界面的手势太多了,View的层级也很多,比较复杂,费很大劲才把图片放大缩小这功能做出来。

分类密码实现简单,但其实并没有完全实现用户使用这个功能的原衷需求:隐藏不想让别人看到的书籍,因为分类密码在很显眼的分类选择处暴露了这个需要密码的分类的入口,让别人知道了你有这么个分类不想让人看到,会逼问你密码。更好的解决方法是直接隐藏掉加锁的分类,解锁时显示,但由于这样做产品逻辑太复杂,操作交互也繁琐,纠结很久,采用这种最简单的方法,这也是一个权衡。

快速翻页这个功能我自己是不需要的,但似乎很多人都有这个需求,由于伊书内容渲染实现的方式问题,暂时没法做到全书进度条拖动翻页,所以只做了单章内的快速翻页。但这个进度条的入口要放哪里也纠结很久,对于这种(我觉得)不常用的功能,不想为它在显著位置新增一个按钮,最后很隐蔽地需要在阅读时点击中下方,它才会出现。这太难发现了,只是暂时没办法的权宜之计。

香港行

2012-7-24 评论(5) 分类:生活 Tags:

过年时办了港澳通行证, 一直要找个时间去香港看看,到这周末,终于去了。

下火车后在尖沙咀逛逛,帮人买东西,去龙城大药房买,不明白为什么要去龙城大药房,因为要买的东西附近普通的店一般都有,这个大药房比我老家的超市还要小,人却爆多,大部分是讲普通话的大陆人,在里面被挤得烦躁,排队买单要20分钟,总之以后不会再去了。有一些东西在龙城大药房买不到,在附近的卓悦什么的地方买到了。

在尖沙咀感受到香港的挤,跟我想象中差不多,开车的路比步行街还小,人比步行街还多。路上有几个报刊亭,最喜欢这些报刊亭,大陆肯定看不到,那么多的杂志和香港漫画,很吸引人。

接着去星光大道,白天不应该去星光大道的,又热又没什么好看的,在酷热下,那里竟然还有很多人,外国佬也不少,有点费解。兜转半天后坐渡轮再坐车到太平山脚下,因为轻信了网上的说法,坐了到缆车处的公车而不是直达山顶的公车,缆车售票处队伍排得超长,一看就傻眼了,目测至少排一个小时,后来问了的士是可以打的上去的,还很便宜,跟另外两个人拼车一起上去了,路上司机很high,热情不停地跟我们介绍,这是董建华的房子,那是梁政英的,说梁朝伟和周星驰都坐过这辆车,他送他们回家的,好欢乐的的士师傅~

上了山顶本来天气蒙蒙的没啥好看,后来狂风大作要下雨,在山上吹着风看着乌云和闪电,近距离感受极品天气,非常爽,就这一段就不枉此行了,下完雨后还看见彩虹,空气也清新了,看下山去很清晰,景色不错。

——————————————这次改用分割线———————————————

在路上看到一些XX功的宣传,本来我对这些保持中立态度,但看了他们的宣传后反感了,因为都是在用极端的方法宣传对方的恶,没其他的了。做出这样行为的,自己本身邪恶的概率更大。

香港的物价挺奇怪,电子产品化妆品等那么便宜,吃喝却那么贵,可乐标准价一瓶8块港币,街边一碗面标准价20-30块。香港去多了会觉得大陆真好啊吃喝这么便宜。

观察到香港大多数人用三星,在香港看见三星的概率等同于在广州看见iPhone,奇怪为啥香港人喜欢三星呢,三星宣传得好还是因为屏幕大?看到不少人用galaxy note超大手机,我猜因为用它可以看漫画?

我个人很不喜欢问路因为有一些概率会碰到爱鸟不鸟的黑脸/不知道/错误的结果,所以能查地图自己解决的话我不问路,但在香港没有网络没法查地图,所以要不断问路,总的来说热情的人还是蛮多,特别时年长的人,会很详细地跟你说怎么走。路边摆摊做生意的人就没那么热情了可能被问的次数太多了烦了吧,向他们问路碰鼻子的概率比较高。

伊书

2012-6-10 评论(56) 分类:作品

伊书是一款追求最佳阅读体验的iPhone电子书阅读APP,可以通过开放书库获取海量书籍资源。

主页:http://yishu.cnbang.net
iTunes地址:http://itunes.apple.com/cn/app/id532812695?mt=8

3月开始在业余时间里断断续续做这个APP,5月22号提交AppStore,历经19天终于通过审核上线了,审核过程的曲折让我以为上不了线了,真不容易。

为什么做?

  • 要是一段时间我什么东西都没做出来,我会感到很不安。
  • 开发一个APP这个小愿望存在已久,用上了iPhone,有了macbook,不去实现说不过去。
  • 苦闷的生活中,它可以带来一些乐趣和一点希望。
  • 找回按自己意愿编程的感觉。
  • 喜欢创造的过程和结果。

伊书是一款epub电子书阅读软件,现在iPhone上类似的APP很多,为什么还要再做一个?因为阅读APP自己用得多,现有的APP不能满足我全部需求,所以做了。相对于其他APP有什么特色?老实说目前没有大的特色,在交互和细节上花了挺多心思,例如记录阅读时间,上拉页面查看阅读进度,仿纸质的滑动菜单和目录等。第一版做出基本功能,后面再发挥。

做个APP对我来说最大的困难就是设计了,因为设计我不在行,所以想得挺辛苦,速度也慢,花在设计上的时间估计占了有1/3,最后图标和阅读背景做得不好,但暂时做不出更好的,先这样了。

感谢以下开源项目:

ASIHTTPRequest 应该大部分用到HTTP的项目都会用它
MBProgressHUD loading菊花,简单易用
FMDB 简化数据库操作
SMXMLDocument / HTMLParser 简单封装了XML/HTML解析
EGOImageLoading EGOTextFieldAlertView enormego是天使般的公司,开源了很多好用的东西,接下来的新版本还需要继续学习和使用它的开源项目

iOS客户端开发与Web前端开发

2012-5-30 评论(3) 分类:技术文章

不知不觉做iOS客户端开发已经半年多了,了解到iOS客户端开发与Web前端开发的一些异同,写一下。

  1. 版本升级。用户角度上看,客户端升级必须让用户手动下载整个新的安装包覆盖安装,而web的升级无需用户做任何事情。开发角度上看,如果客户端有个小bug需要紧急修复,需要修复完后打包一个完成的安装包,给一个版本号,发布给用户升级。而web只需要修改后台的某些文件,然后传到自己的服务器,用多快速的迭代开发方式都没问题。web没有版本兼容性问题,客户端这个问题就大了。
  2. iOS客户端用编译语言,web用脚本语言。编译语言好处:很多错误编译期就知道,不用担心类似写错一个字母导致的问题。iOS客户端开发只能用XCode,无法选用自己喜欢的编辑器。使用脚本语言的web无论前端后端对编辑器的选择都很自由。
  3. 客户端一碰到异常就崩溃,直接退出,web一个try catch可以把所有错误抓住,用户可以继续使用其他不受影响的功能,即使所有功能都受影响,刷新页面搞定一切。web上界面和程序实实在在地分离了,客户端再怎样都是粘合在一起的。
  4. 发现HTML+CSS样式布局自动排列相当高级,客户端上一切都靠程序去指定大小位置以及排列的变化,可视化的XIB挺鸡肋。
  5. 单线程的web很幸福,客户端要处理多线程,虽然强大,但很麻烦。web几乎不用考虑内存泄漏,客户端需要。客户端开发可以使用到很底层的接口和功能。web处于较上层,在浏览器的包裹下,好处是很多问题浏览器处理web不用管,坏处是功能受限。
  6. web和客户端开发差不多都使用类似MVC的模式,数据通过控制器更新到各个视图。web多用callback,iOS多用delegate,虽然iOS也可以用block作为callback,但还是没js方便,还可能导致一些内存问题。

总的来说从开发普通应用来看,就算不谈跨平台,web开发也是好处多多,但这只是开发角度上看,实际上移动设备上webApp状况始终不好,与原生客户端差距很大,原因:

  1. 网络不行,流量要钱。国内网络环境大家懂的,虽然HTML5有manifest,storage这些手段缓存webApp,但给人感觉就是不靠谱,打开它还是跟打开一个网页一样的感觉:耗流量,还有可能在网络不好的情况下打不开,没有像已经下载下来的原生APP踏实。
  2. 动画/体验。一般的web在页面间切换或显示隐藏某个组件是没有动画的,大家也习惯了,iPhone带了个头,一切都要动画过渡,导致在移动设备上大家习惯了动画切换,受不了没有动画的应用,导致动画性能底下的webApp至今体验上远不如原生客户端。
  3. 把webApp通过safari添加到主屏幕这样的习惯非常不普及,极少人知道,不过这个应该也不算问题,若没有上面两个大问题,这个习惯很容易普及的。

P.S 在开发普通应用(数据处理/交互)方面,web有很大的优势,在网络和性能问题解决后理应是首选开发方式。但在游戏领域我看不出web有什么优势,继续对有点热的HTML5游戏开发表示不解。