opinions
xuyou 写了一篇 开发人员为何应该使用 Mac OS X 兼 OS X 小史 , 以作为开发平台的便利性及其历史演化角度阐述Mac OS X的出色之处。
接着Twitter上就引出了另外几篇关于Mac的旧文:
@virushuo 在iBook 还不是那么好用的时候(2006年)写的这段时间在干什么,顺便说说苹果, 让后来者(@xiaolai)感叹买Mac赶上了好时机。
@robbinfan 从自身体验出发写的两篇:我的PIM之旅(2) – 用Mac和iPhone来实现我的PIM 以及 为啥国外的开发人员都喜欢用Mac呢?
另外还有在 xuyou 的帖子中也提及的由 @tinyfool不久前写的为什么我认为每个程序员都应该用Mac OS X?, 以目前的市场情况,设备及平台趋势,开拓视野等角度论述其理由。
已经有了从各个角度出发帮忙推广Mac的好帖子,我这种还没成为Mac用户的就不装13掺和了,发这帖一是为了汇总一下上面的几个帖子,二是抒发下这两天的一点体会。
09年买的电子产品中,有一个黑莓手机和一个三星的移动硬盘。
原本我是“有迫切需求才购买”的坚定执行者,买黑莓是一个意外的进步,想试试不同的手机,原来的Nokia直板6070虽然功能简单然反应迅速,方太拿去还用得很顺畅。但它开始让我对工具的态度发生了改变。我喜欢上黑莓的全键盘,用它在旅途中写笔记,记录想法,写blog;用稍快的edge网络上网,借助opera浏览器“即时”搜索需要的信息,用它上twitter保持真正的即时……。对比原本以满足我“能发短信打电话就行”需求的老手机,它引导我发现更多美妙的需求,也提高了处理效率。
而移动硬盘的出身更凄惨,是因为我自己动手拆修笔记本将本子整得苟延残喘,怕一旦搞挂了或者启动不了要拆本子里的硬盘出来快速利用其中的数据比较麻烦,才买了移动硬盘备份数据。在这点上,1、我不是保存视频的爱好者,通常看完就删 2、不能随便丢失的文档都会在多个远端备份。 所以死硬地认为笔记本里容量甚小的硬盘足以满足我的需求。直至前两天跑进机房去给已经退役过一次的众多测试服务器更新系统,老莫( @longshanksmo )同学带着带着他的笔记本进去播放Star Trek来消磨装机等待时间(主要是为了诱惑我跟他一起看一遍全系列的Star Trek),并给我解说精彩的故事。在服务器的集体愤怒的轰鸣声中,我终于妥协,乖乖交出移动硬盘让老莫带回家从他的怪兽级超级下载服务器上给我拷视频。周末他又在GTalk上发他收集的各种精彩的视频资源信息给我看,充分发掘了我对诸如:MythBusters系列,pixars的短篇集,战争风云,战争与回忆…… 之类精彩视频的需求。当时我就感慨:“移动硬盘买晚了啊,看来要尽快入手Mac以’被‘发掘新需求。” 当然了,我目前还坚持着我的底线, 没有受老莫同学诱惑把他收藏的N多古典音乐也塞进我可怜的硬盘里。
读大段文字的网页时,我喜欢文字有更好的显示效果,于是在看开头提到的那几个帖子时,将原本没在Safari中打开的网页重新打开一次,来来回回地拷链接,觉得长久以来使用的方式还是太别扭了,就在Twitter上求助,收获几个有趣的方法且让我又受Mac刺激的记录:
–【求教推特大神,剪贴板中复制了一个URL,什么办法能最快地在浏览器中打开它?】–
1.liyang80s: 我的方法:开浏览器, F6 , Ctrl+V , Enter 。
KrzyCube: 就是因为觉得这么干太慢了
liyang80s: 我也觉得,更快的肯定有,需要用一些软件脚本之类的。
liyang80s: 这类的我也想过,比如开着 IM 的话给自己发个消息然后点击,
不过对于 Firefox 开一天的人来说还是直接打开好了。
KrzyCube: 我也浏览器常开,其实最想省掉的是“C-v + Enter”
2.hushuqi: 打开word,ctrl+v,点击链接
jeffz_cn: 打开个Word很慢的……我倒经常是win + R,然后ctrl + v,回车。
3.zhuangbiaowei: 如果用chrome,不必Ctrl+C,直接选中以后点右键,
就有一个打开该网址。
KrzyCube: url大多数情况下不在浏览器页面中,不然多数浏览器都可右键了,
Opera这种支持全快捷键的可以更猛
zhuangbiaowei: AutoHotKey
4.virushuo: 如果在mac上,用quicksilver,连ctrl+c都不用就可以打开了。
win上有类似工具,应该也能做到。
—-
最后这条mac最吸引我的原因是:我在Ubuntu下使用仿Quicksilver而生的Gnome Do用得很开心!
总计大约花了7个小时读完了《软件随想录》,包括昨天早起的一小时;下午坐在和谐号车厢门道地板上,陶醉于书本而不再傻愣愣抱怨没有座票的三小时;今早返程大巴上的三小时。看来阅读能力还是没有恢复的迹象。
其中有那么两到三个小节看了一眼后觉得目前并不需要细读,就快速瞟一眼了事。看到这种章节的时候,有两个选择,一是坚定地跳过去,二是大致浏览一下。如果能在浏览中保持神经弹性的话,可能还会发现一点有趣的东西。不过对比这点可能出现的乐趣和大片的枯燥文字,不如直接跳过。因为读到枯燥章节时保持弹性可不怎么容易。
剩下最大的问题是怎么判定自己是 1. 读到了目前不准备精研的枯燥章节,还是 2. 又看着旁边美女的大腿走神了。
我的做法是左手一个手指始终夹在目录那页(如果每章开头有小目录那就更好),发现自己看不明白当前这个小节时就切到目录看看大标题和小标题回顾一下之前看的内容。这对我很有效,硬着头皮往下啃我是看不懂的,而且会迅速变得沮丧以至于不能继续阅读。一旦确定枯燥就跳过去这个小节, 往下找更有趣的;而要是发现是累了走神了,那就专心欣赏美腿甚至搭讪来转换一下思绪。相信我, 跟美女搭话能催生很多人生感悟;另外据说还能延长寿命。
最终,这七个小时的阅读时间里包括:阅读前言、第一遍浏览目录;阅读期间时不时切到目录调整思路;旅途上的小憩,比如过杭州湾跨海大桥的时候我小睡了一下,因为知道过桥后进服务区司机会通知下车走动一会,我就会按时醒来接着看书而不会睡完全程;看完后再复习一遍目录以确定每个小标题下我都能有一两个印象深刻的回忆和感受。嗯,中间可能还发现了一个脚注里的翻译错误。
这次发现了有一个小标题我一时间什么也没想起来,多可怕的事情,3小时前读的我居然忘光了。于是我翻到第202页去,准备体验一下重见的惊喜。果然主角十四岁时做的那笔甜面包圈生意很有趣也让我收获了好建议,幸亏我复习目录才有幸两次读到其中的乐趣,这下把它跟小标题绑定上不会再忘了。
读完这本书后有三个页码我印象深刻,一个是202,上面说了。 另外两个是63和234, 有兴趣的可以去找找是什么。
先叹一声:太忽悠了!
2009年10.21晚,乘国内航班经国际到达通道进入帝都,囧!到22日凌晨才入住巨偏远的温都水城,SD2C大会的会场特色就是,没有最偏僻,只有更偏僻。
22日头一天, 安排了一整天的keynote,就是赞助商广告日,猛然发现蒋总裁和M$那人的讲稿跟不久前在上海的CSDN 英雄会上用的基本一样嘛,我当场就傻逼了。听了一早上受不了了,午饭后小憩一会儿奔赴SNDA在帝都的子公司, 参观中见识了一堆相当好玩的硬件设备。
当晚于五道口那家传说中其实是卖酸梅汤的“麻辣诱惑”同#TopLanguage的几只名人见面,见识到了#TL总舵主等人。不得不提及体型比我更大只的@tinyfool,最近他以著名的“雪计算”又火了一把。为啥这家伙会叫tiny呢,我囧啊囧。
23日我早早起床跑去会场占位置,准备近距离聆听Bill Venners讲Scala。结果没听到我想听的内容,囧了。其实他就是做了个介绍顺便推介他的书,当然,就介绍一个语言来说,他讲的还是很有料的。
介绍的主题是: Scala是个相当productive的语言,也更容易测试.
- functional;
- static type (Static Type itself can be read as docs)
- many useful lib & directly import and use jave’s infrastructure
- amazing testsuite (RSpec Style)
- …
其实我这么积极地跑去听这堂课,是期望听到Scala在并行开发方面的内容的, Scala的线程模型用的是Actor。作为一个Erlang的Fans,我很关注这东西。不过Bill貌似不太care这东西,前面有兄弟问及,他只说Actor以库的方式在语言里提供了。不过貌似要以Actor方式方便地写代码,是需要在语言的语法上提供一些设施的,这个就跟设计之初的目的有关了。于是回来去翻Scala的介绍,果然, 在介绍(http://www.scala-lang.org/node/25)的The Conception of Scala一节写道:
“…But for the full vision of scalable concurrent programming to be achieved he saw that the basic Java syntax would need to change. You simply couldn’t get there from here. But a deceptively simple shift in syntax gained better uniformity to the object-oriented aspects of Java, and this in turn enabled a natural fusion with functional programming concepts which are critical for tackling concurrency….”
虽然没有谈及我关心的话题,不过因为听得相当用心,倒也有些别的体会,以后再谈。我继续期待下午邓草原的课程,他在Erlang和Scala上都有实际项目应用的实践, 理解很深,而且还是NetBeans Scala IDE 的开发者。
无奈,草原也没有谈及我最care的内容。
接下来在同一会场有蔡学鏞的DSL和云风的Lua+CPP开发,在这两个之前还夹了一个不知所谓的应用程序调试(windows),听了一半我就睡着了,为后面的两场储备了充沛的精力。
晚上跟老许混到讲师预留席吃饭,期间草原聊到他开发Scala的IDE的痛苦经历,瞻仰之。饭后就欢快地接受了云风的勾引, 拉了一帮人在房间玩桌:《现代艺术》。除云风外都是刚接触桌游的,但玩得很high。自称没有经商头脑的雪愚同学还在最后一盘赚得了骇人的财富。不得不说桌游是用来结交朋友的好工具,拉到一起玩游戏,什么交流障碍都没了。桌游诱惑太大,于是放弃了本来打算去的刘江组织的沙龙,不过从这里看貌似还是,嗯,蛮明智的选择
第三天(24日)的课程内容达到了忽悠的巅峰,早上我就倒在那膜拜了。下午的“云计算workshop”是amazon推广它的服务,发了些实验帐号给大家玩。于是雪愚同学又发飙了,一开始三下五除二就顺利登录,开始建instance,搞得那印度讲师连竖大拇指。刚过了一会儿,阿三同学就傻眼了,雪愚同学迅速地搞出了10个instance,震得阿三兄直说少开点,少开点。助理也跑来说:“Save me some money!”,看来实验用的资源并不很充足。另外就是会场的网络实在太慢,本来雪愚同学应该可以建出100个的.
参会最大的几点体会:
1. 水货太多,干货太少
2. 桌游很好,很强大
3. 意外发现喜洋洋的剧本非常好
4. 意外发现自己的英文听力水平有进步,虽然还是不太跟得上Shelldon(The Big Bang Theory)那种速度
以null为标题,一是内容确与它有关,二是内容其实也没什么分量
前两日读CouchDB: The Definitive Guide, 边读边想起两个东西:null与关系型数据库,当年刚接触它们的时候,我就有奇怪的反应
- null
刚开始学c语言的时候,一看到null,我脑子里第一个出现的发反应是“冗余”。就觉得这玩意是多余的,someVar = null, 这么一个毫无意义的东西为什么要存在呢, null的存在本身就是个冗余。后来才发现null所表示的意思与冗余(redundancy)并不相同,只是对null的奇怪感觉就此种下。
- 关系数据库里的表
当初学如何设计一张数据库的表的时候,就觉得把数据提取再结构化成一张张表是很奇怪的行为。提取意味着丢弃了一些数据,有表意味着以后会有不少改变,特别是在听到软件工程课的老师讲需求变化的时候,更觉得把数据阉割了存起来简直就是灾难。而且创建一个字段的时候还有“是否可为null”这种诡异的东西,让我又一次诡异地想起了诡异的null。
好嘛, 如今CouchDB火了。 人家说了:
1. 不存在的东西,咱就没有,不会有xx=null这种东西
2. 咱是文档型数据库,真的数据库,不阉割
3. 关系不这东西,多不稳定啊,时不时你来看一下当前的情况就好了嘛,于是CouchDB有了强大View引擎
null这玩意丢开了(我有我可以啊),不用害怕阉割了,关系不再是僵死的了(随时可以脚踏n条船啊),太鼓舞人了。
我自然是写不出韩愈那等《师说》的, 只是借个标题用用,虽然借标题这回事,也属于我下文所斥之事。
近些日子, Twitter和Blog上类似“xx老师”的句式增多。虽说“三人行必有我师焉”, 可除了调侃成分十足之外,我并没有从这些频繁出现的“xx老师”的句子中看到更多的内容。心头略有些郁闷,各位真的要毁掉“老师”这个词,然后痛斥文化缺失吗?抱怨到此为止。
念了许多年书,碰上过好多老师,对好老师崇敬无比, 对“坏”老师深恶痛绝。在我自己的概念里,”老师”是个神圣的名词,良可师益方友。经历过一些让我直想一鞋板拍她脸上的”所谓”老师后,甚至曾经认为『三人行必有我师焉』纯粹是句不负责任的屁话,要不就是那些道貌岸然的家伙,随便解了一个意思过来捞钱。没准人家原创的时候说的是”三人若能成事,可为我师”,“三”没准还是个虚数。
这回被激起关于老师的想法之后,又想到自己以往对这句话的理解,想再验证一下,于是关门放了一把google,才发现我都已经忘了这句话完整的其实是:“三人行,必有我师焉。择其善者而从之,其不善者而改之。” 他人有长处当赞赏学习之,不好之处引以为戒。然,我仍然坚持称师该是极审慎之事。师者,传道授业解惑,是有莫大影响力的的。在一个向来以师为尊的国度,一个不合格者被称为师,更是害死许多渴求鸡血疗法这等都市传奇的不明真相的民众。
手一抖多点开个搜索结果后就看到更有意思的了,《“三人行,必有我师”新译》, 引两段:
—-
1. 行,愚以为当以“行事”作解,“三人行”即“三个人一起做事情”。
2. 孔子为圣贤,其为人有一个很大的“弱点”,就是“好为人师”,“认人为师”绝非其所长。况且,以孔子的水平,并不是每个人都敢做他的老师的。所以,孔子此言只是在客气而已,并不是其真实的意图。“三人行,必有我师”实际上是在说:“三个人一起做事情,我一定是你们俩的老师。”这才是孔子内心真实的想法。只是因为孔子是一个谦谦君子,是懂礼数的,他担心这样直说会冒犯了人家,让人家接受不了,所以故意使用了曲笔。
—-
哈哈, 这个更强!
昨晚从会议室出来,发现有几位在金山时的同事(@HanTuo , @lidaobing , @hangzhupeng , @wangdong)在twitter上讨论关于接口注释的问题,整理如下,相应回复的紧贴一起,就省去了twitter中多级RT吧:
HanTuo: 实在不喜欢代码里面有太多注释。函数注释太多说明实现的太复杂,接口注释太多说明接口太复杂。
HanTuo: 其实我说的也没道理。个人习惯吧。反正我就是不喜欢。看着特别难受。
lidaobing: 我觉得接口注释是非常必要的, 用来定义你这个接口的行为, 比如抛异常还是返回null, 这种很难猜中的。函数注释我同意你的观点。
HanTuo: 接口注释我比较喜欢搞一个API文档。唉,个人习惯吧。我看到代码里有一大段绿色的就浑身难受,有生理反应,一点不夸张。
lidaobing: 调一下配色吧, 比如 xp 蓝?
wangdong: 没错,能用代码说清楚的事儿非要连篇累牍整注释,痛苦的很
hanzhupeng: 在编辑器里面屏蔽掉注释就好了
看到以上内容,我想大多数程序猿都心有戚戚焉,近来正好在这上面有个的经历不妨一说。先来理理上面提到的需求:
然后开始讲故事了,小朋友们请坐好,陪同的家长在这方面有深刻认识的,可以去外面抽根烟消磨时间,不用在这里掺和了。
4月初入职的时候,要加入的项目已经有了一版设计稿。看懂了之后不得不说,那是个很棒的设计,你要知道那作者可是头大牛。不过,对我这个没有参加最初设计的人来说,这个这个……为了不让某人说我有夸张的嫌疑以及被鄙视阅读能力,就不啰嗦:
等等这些问题了。我想说的是,其实我一直不知道除了设计者之外,有几个人真的静下心来深入理解了这些设计稿了呢。说“这些”是因为不止是咱这项目吧,估计有项目的地方就有这故事,这玩意儿实在不怎么好读。因为它真不是什么好写的东西,就跟代码里头的注释一样,写粗了不行,写详细了更郁闷。要么就跟高爷爷说的那样,咱上Literate Programming,写程序跟写小说似的,还用专业的Latex加自创字体排版。读者贼快乐,从头顶爽到脚底。放心,这些工具几十年前就bugfree了,不会有印刷错误,绝对不带勘误表,那什么改了代码忘了更新注释的事情,明显不会存在的嘛。另外我们的情况更特别,其实这Team至今也还是只有两个人,于是那个写第一稿设计的人就不言而喻了,有兴趣参加设计稿阅读比赛的同学赶紧报名,前32位报名费优惠。
接着俺们就准备开工了。在实现这个设计稿中描述的系统之前,觉得有必要先有一个底层的库来搞定消息传递的问题,这东西基本顺利搞定,称之为CERL,是模仿实现Erlang Style Concurrency。可直接在这个库之上就来写一堆的消息处理,在C++ 这种某某标准一拖再拖继而不知道拖到猴年马月的质朴语言里搞序列化,又实在是会挠光头发的事情;要知道这些未进化完成的程序猿每天受的辐射量巨大,发根可不怎么稳固。于是就想着,要不搞个xx语言,来描述一下服务进程,然后让xx工具来生成底层代码?一合计,这玩意儿不错啊,于是先定义了一个描述语言,贼简洁,什么返回值啊,异常描述啊,基本一行搞定。然后搜罗出一堆语言啊,库啊,工具啊就开始准备给这个刚怀上的孩子造儿童专用自行车–编译器了。就跟吃火锅那么简单,反正见到什么菜啊肉啊,花椒啊大蒜啊就往里面加点。什么C++库当底裤,PHP处理做缎子,JSON表达当化妆,Erlang风格作亮相……,能用的全给它用上,什么流行、够酷就用什么。大牛同学随随便便翻翻以前的代码,找了个文本处理库,三下五除二写了个暂时只会:
“报告,失败了” “败在哪了?” “忘了!”
的前端分析器。接着俺又临时学了学PHP,处理了JSON就捣鼓出来一个Code Generator,这个东西会报点错。于是号称Server Description Language的山寨语言出品了。写个描述文档,没几行,通常文件大小不超过2k,装到那儿童车编译器里这么一跑,直接从Erlang样式的接口描述,生成服务器进程的底层代码,什么同步/异步调用,消息封包/解包之类的脏活累活,能干的全替你干了,你只要往空白的函数实现体里填几行代码,这孩子立马从小班升大班,眼看就能上小学。Erlang里头管这玩意儿叫啥来着,噢,gen_server。
不好意思,刚才走岔道上去了,咱接着说设计稿的话题。搞完了底层库,俺这边又弄完了山寨语言。那边立马就出了一个简单DEMO了,要不怎么说瞬间升级到Beta版呢。可我一看傻眼了啊,仨东西:一个设计稿;一个SDL文件,不带注释的,倍儿纯洁;几个代码文件,同样纯洁得跟小白花一样。因为大家都觉得这代码要是满篇注释吧,那真不是人看的,要是需要在代码里连载注释当小说看的,那更不是好代码。要不说设计是设计,实现是实现,一上来愣没理解顺溜了,不知道这消息哪跟哪。耗了不少力气对应上了,脑袋里走了走流程,接着往下写功能呗。写着写着不行了,再牛的设计,总会有点缺陷,那就改改吧。这下痛苦来了,一个结构缠绕的设计稿,人家费好大心思才弄得看起来不那么累了,那是能随便动的啊。这一改设计,引入几个新概念,立马就多掉几根头发。此处说个不该出现在这种讲故事场合的“语重心长”: “千万别轻易决定在系统里引入一个新概念,会被同胞们寄明信片悼念的!”
眼看着键盘缝里的头发比饼干屑还多了那么一点点的时候,悟了,这不咱造了个山寨版SDL么,那不是一般的山寨啊,乍一看名字就是直接盗版“卖哭了软水果公司”那iDL似的,跟M8啦,HiPhone啦,那还是可以拼一下的。
来试试写个都市剧本。弄张纸简单一概括,就画几个框,列一下都有哪些角色,然后用点虚虚实实的线条表示跟这几个MM之间的暧昧关系,再弄几个附录把各种琼瑶式对话一列,都市情感纠葛的剧本大纲就算出来了。
故事初期,啥都抽象朦胧的时候挺美好,不闹心。可这摸摸小手的初级阶段一直下去,再持续就一百年过去了。就要仔细考察各个人物,挑一个准备来点实质性转变了。这下这彪悍抄袭外国设计大陆厂商制造的SDL文件就派上用场了,用来描述下她们是如何迎来送往,以及这些角色MM们每季度什么时候要向Master交税(发送某些状态消息)之类的,那是最适合不过。
module tv;
code invalidaccount = 0x11;
code accountexception = 0x12;
code unregistered = 0x13;
code cut = 0xff;
type BillNumber = UInt32;
type ExceptionMessage = String;
type BillArray = UInt32[];
type Locale = String;
type PayStatus = ok|unregistered|{false,ExceptionMessage notenough};
server RoleBoyA
{
RoleBoyA(Locale lc);
//
// From: Director
// Brief: ' xxxx '
// Arguments: "none" - 'xxx'
// Exception: "cut" - ' xxxx '
// Remark: ' xxxx'
// Note: ' xxx '
//
[id=1] are_you_ready() -> ok | false;
[id=2] actionTalk(String msg) -> ok | {cut, ExceptionMessage};
[id=0x81, async] recvTalk(FirstArray something);
}
server RoleGirlA
{
……
[id=0x81,async] payDuty(BillArray bills);
[id=ox82,async] payResult(PayStatus status);
}
选好了之后就要跟对方亲戚朋友来来回回扯皮了。家庭关系,那是讲究辈份的的。重要问题,你不能先找人家小表妹谈,更不能找人家表姐刚出生的孩子谈,这得有个流程。画个流程图把这先先后后的关系理顺,这关就算过了,这后边的事情,多少彩礼、摆多少桌(这不就是空间使用吗)那都是不含糊的,一路顺畅无比。
要说这画流程,不比那传统大红双喜剪纸艺术简单。用Visio这等超级牛力工具,不是像我这样刚放牛还没爬上牛背的牧童能轻易搞定的,老牛则更是嫌这草太老,口味不佳。于是翻山越岭,跋山涉水,到那遥远的西天求得一部梵语经文,手拈兰花,念完梵文,这流程图它就出来了。不信?那就看看咱的修行成果:
从这个:
Director -> RoleBoyA: are you ready?
activate RoleBoyA
RoleBoyA -> RoleBoyA: prepare something.
RoleBoyA -> Director: ok
deactivate RoleBoyA
RoleGirlA -> RoleBoyA: Hello, xxx
activate RoleBoyA
RoleBoyA -> RoleGirlA: Hi,xxxx
Director -> RoleBoyA: cut,xxxx
deactivate RoleBoyA
变成这个:
也想画图? 访问这个:http://www.websequencediagrams.com/
要不今天咱就到这?
“等等,不是听说西天是金光万丈,五彩孔雀漫天飞的吗?你这些东东怎么净是黑白两色这么凄惨?”
哟,不说还给忘了,说道这个颜色问题,在SDL这山寨产品诞生的时候,就考虑过怎么推广。也得给它整两广告啊,就想着给它写个啥emacs-mode啥的,差不多就是天朝台黄金时间的广告级别了。可现在看街边免费赠送八卦小报的比看新闻播报的多。不过咱不能啥报纸都上,那得选专业的!重要的是免费,比如那什么上海地铁里发的那一时代报知道不,那发行量,那是相当的大。上班随手取一份,方便;还能读到夹页广告。申请一笔经费出去一考察”烟酒”,发现这Notepad++不错,发行量大,方便好用,随便装插件,跟往里边夹一广告那么简单,关键还免费。可这人家也没有现成的SDL高亮规则,自己整一个还挺累,看有没有现成近似的盗版一个算了,咱的口号是:“山寨货,不求更真,但求更假”。
试了半天,Notepad++崩溃了N次,看来这规则解析还有些漏洞,最终选定了Smalltalk,几个好处:
1. 首字母大写为类型,高亮之
2. 首字母小写为atom, 不高亮
3. 字符串后紧缀一冒号,立马变色
4. 双引号跟单引号那颜色还不重复。
SDL一看到这SmType的“色x小说”语法规则,那真是干柴烈火,谈好价钱(注释规则)就立马勾搭上了。从此山寨喽罗和贵族美妇生活在五彩斑斓的世界里了:
故事讲完,回头看需求:
1. 代码真没注释嘿
2. 真有API文档嘿
3. 配上流程图一看就明白
4. 生活五彩斑斓,但绿色不多

