坚守承诺

promise

申明:在《方恨少》那一期(回复108 可读),我写了这么一句话,“Mac技巧写了这么多期,我觉得我需要更多的积累才能继续输出,我在考虑这玩意是不是也搞个第一季,完结之后重新思考一段时间再继续上路……”

没想到这句话同时引发了微信公众平台“鬼脚七”的共鸣。鬼脚七的微信号是taobaoguijiaoqi,由知名技术人文德运营,他的微博ID是 @淘宝鬼脚七,长期专注于搜索引擎、电子商业。他运营的平台“鬼脚七”主要分享电商资讯、搜索趋势、淘宝动态、产品设计和人文感悟,不知道他哪来那么多的精力,每天更新,文长而有趣,我关注之后,学到了很多好玩有用的知识,推荐给大家。

我俩聊天时想,是否可以类似美剧那样一季一季的写微信平台,这样作者和读者都有个空档期来思考一些东西。遂决定,鬼脚七和Mac技巧这两个公众账号将于2013年4月28日结束第一季,第二季开启时间会在第一季的最后一期文章里说明,这段时间大家有什么建议或者意见,可以随时反馈给我们,非常感谢!

以下正文,今天讲个小故事。

在一场大地震之后,满目都是破坏和混乱,一位父亲安顿好家里其他人之后,跑去儿子就读的学校,但是学校已经被夷为平地,父亲痛苦不堪,但是他想起了对儿子的承诺:无论发生什么,我都会在你身边。于是这位父亲找到儿子所在的教室位置,开始在石砾中挖掘和寻找。

这时候更多的父母赶到学校,他们变得绝望和无助,不停的呼唤孩子的名字,也有好心人过来劝阻这位父亲,一切都太迟了,接受现实吧,回去吧,等等。面对劝阻,这位父亲的回答只有一句话,你们要帮我吗?然后继续一块石头一块石头挖,寻找自己的儿子。

消防队长和警察也开始劝这位父亲,这里还有危险,请尽快离开,我们会处理一切的。但这位父亲的回答是:你们要帮我吗?然后继续寻找。

为了搞清楚自己的儿子是死是活,父亲继续挖掘,在经过30多个小时之后,父亲推开了一块巨大的石头,听到下面有响声,他大声喊着,儿子,是你吗?

这时父亲听到了这一生最美妙的天籁之音:爸爸吗?是我,我知道你会来救我的!

这个教室有30多个孩子,教室倒塌时,刚好形成一个三角形的支架,为其中的14个孩子形成了一道生命的屏障。因为这位父亲,14个孩子幸存下来。

这是我在很久以前的一本叫做《每天读一点英文》的杂志上看到的一则短文,当时印象非常深刻,现复述下来,送给所有坚守承诺和保有希望的人。

今日Mac技巧:

继续介绍OC的Protocol吧。

Protocol一般使用在哪些场景呢?Objective-C里的Protocol和Java语言中的接口很类似,如果一些类之间没有继承关系,但是又具备某些相同的行为,则可以使用Protocol来描述它们的关系。不同的类,可以遵守同一个Protocol,在不同的场景下注入不同的实例,实现不同的功能。其中最常用的就是委托代理模式,Cocoa框架中大量采用了这种模式实现数据和UI的分离。例如UIView产生的所有事件,都是通过委托的方式交给Controller完成。根据约定,框架中后缀为Delegate的都是Protocol,例如UIApplicationDelegate,UIWebViewDelegate等,使用时大家可以留意一下,体会其用法。
 
使用Protocol时还需要注意的是:

1、Protocol本身是可以继承的,比如:

@protocol A
 -(void)methodA;
@end
@protocol B < A >
 -(void)methodB;
@end

如果你要实现B,那么methodA和methodB都需要实现。
 
2、Protocol是类无关的,任何类都可以实现定义好的Protocol。如果我们想知道某个类是否实现了某个Protocol,还可以使用conformsToProtocol进行判断,如下:

[obj conformsToProtocol:@protocol(ProcessDataDelegate)] 

逝者安息生者坚强

今天本来是不想推送微信的,因为周六安排了封闭培训,晚上也有些其它事情要做,但是在早晨出发的路上就收到了四川雅安地震的消息,当时以为不会是大地震,持续关注才发现死伤人数急剧上升,到现在已经是156死5000多受伤的,地震又一次袭击了四川!2008汶川大地震的记忆再次席卷心头。

上午收到Mac技巧读者Sunshine的微信,她提供了08年汶川地震后译言社区众多志愿者紧急翻译的美国紧急事务管理局 (FEMA)的地震灾害手册(《地震安全手册》和《地震搜救手册》)。我分别在朋友圈和微博上转发了,在微薄上也得到很多朋友的转发。下面摘录部分重要内容,希望大家传播给更多人。感谢译言网。

————————————————————————————————————————
如果地震时你在室内

•   蹲下,寻找掩护,抓牢——利用写字台、桌子或者长凳下的空间,或者身子紧贴内部承重墙作为掩护,然后双手抓牢固定物体。如果附近没有写字台或桌子,用双臂护住头部、脸部,蹲伏在房间的角落。
•   远离玻璃制品、建筑物外墙、门窗、以及其他可能坠落的物体,例如灯具和家具。
•   如果地震发生时你在床上,请待在那里不要动。抓紧枕头保护住你的头部。如果你上方有可能坠落的重型灯具,请转移至最近的安全地带。
•   在晃动停止并确认户外安全后,方可离开房间。地震中的大多数伤亡,是在人们进出建筑物时被坠物击中造成的。
•   要意识到可能会断电,火警以及自动喷淋装置可能会启动。
•   切勿使用电梯逃生。

如果地震时你在室外

•   待在原地不要动。
•   远离建筑区、大树、街灯和电线电缆。

如果地震时你在开动的汽车上

•   在确保安全的情况下,尽快靠边停车,留在车内。
•   不要把车停在建筑物下、大树旁、立交桥或者电线电缆下。
•   不要试图穿越已经损坏的桥梁。
•   地震停止后小心前进,注意道路和桥梁的损坏情况。

如果你被困在废墟下

•   不要使用火柴及打火机。
•   不要向周围移动,避免扬起灰尘。
•   用手帕或布遮住口部。
•   敲击管道或墙壁以便让救援人员发现你。可能的话,请使用哨子。在其他方式不奏效的情况下再选择呼喊——因为喊叫可能使人吸入大量有害灰尘。

点击{原文}查看[地震搜救手册&地震安全手册]

愿逝者安息,生者坚强,如果我的读者中有四川地区的同胞,祝你们平安度过这段日子!

说说我和Mac(二)

Panther-X.3-picture

回复 98 可以看 《说说我和Mac(一)》,今天是二。

我在洪恩软件一共工作了3年半的时间,这段经历让我的能力和见识得到了长足的成长。期间做过互联网(没错,就是传说中的第一波互联网神奇泡沫,一触即溃),基于Perl构建洪恩在线网站;做过企业级软件数字校园,基于Java和Jsp技术;做过英语培训软件,基于.Net和C;还管理过儿童产品事业部。不过让人非常伤感的是,我参与的大部分软件项目都以失败告终,洪恩在线遭遇互联网泡沫,数字校园过于超前,销量一般,英语培训碰到2003年非典,完全无人问津。当时洪恩的主要的业务还是电脑教育、高教、英语、儿童软件等,现金流良好。但安则思变,公司开始尝试其他的业务类型,比如互联网、游戏、企业软件、培训等等,这些项目我基本都参与了,但成者寥寥,这对当时年少轻狂的我来说打击非常大,经常参与失败或无疾而终的项目会让人产生对己对人的怀疑和不自信。

要么留下来继续坚持,要么出走寻找新的挑战,这是很多人当时的选择。有些人选择坚持,有些人选择离开,留下的很多技术人员组成了后来的游戏公司完美时空的技术和策划班底,完美时空2007年在纳斯达克上市,目前发展得非常好。离开的人,则就各自有各自的生活和精彩。

所以说选择这个动作真的很神奇,人生漫漫征途,到处十字路口,每次选择就把你带向一个完全不同的路和沿途的风景,我们只能慨叹,嗟夫,人无常势,水无常形。

当时我选择了离开,那段时间是1999到2003年。在这段时期里,地球的那一边,乔布斯正在重新整肃苹果,在进行了精兵健身并相继推出了iMac和iPod,苹果正在一步步走向巅峰,只不过还没有看看到这家没落帝国的潜力,在国内,Mac仍然是稀有物品,我也仅仅见过两款。(待续)

昨天谈了第一季第二季的想法,有读者回复,一季一季也不错,间歇期间可以出点题目之类让大家投稿,分享大家的想法。
这个思路,我觉得不错。

今日Mac技巧:

说完了Objective-C的Category,今天简单说说Protocol。

Protocol,简单来说就是一系列不属于任何类的方法列表,其中声明的方法可以被任何类实现。这种模式一般称为代理(delegation)模式。你通过Protocol定义各种行为,在不同的场景采用不同的实现方式。在iOS和OS X开发中,Apple采用了大量的代理模式来实现MVC中View和Controller的解耦。
 
定义Protocol很简单,在声明文件(h文件)中通过关键字@protocol定义,然后给出Protocol的名称,方法列表,然后用@end表示Protocol结束。在@end指令结束之前定义的方法,都属于这个Protocol。例如:

@protocol ProcessDataDelegate <NSObject>
@required
- (void) processSuccessful: (BOOL)success;
@optional
- (id) submitOrder: (NSNumber *) orderid;
@end

 
以上代码可以单独放在一个h文件中,也可以写在相关类的h文件中,可以视具体情况而定。该Protocol包含两个方法,processSuccessful和submitOrder。这里还有两个关键字,@required和@optional,表示如果要实现这个协议,那么processSuccessful方法是必须要实现的,submitOrder则是可选的,这两个注解关键字是在Objective-C 2.0之后加入的语法特性。如果不注明,那么方法默认是@required的,必须实现。
 
那么如何实现这个Protocol呢?创建一个普通的Objective-C类,取名为TestAppDelegate,这时会生成一个h文件和m文件。在h文件中引入包含Protocol的h文件,之后声明采用这个Protocol即可,如下:

@interface TestAppDelegate : NSObject<ProcessDataDelegate>;
@end

用尖括号(<…>)括起来的ProcessDataDelegate就是我们创建的Protocol。如果要采用多个Protocol,可以在尖括号内引入多个Protocol名称,并用逗号隔开即可。例如<ProcessDataDelegate,xxxDelegate>
 m文件如下:

@implementation TestAppDelegate
- (void) processSuccessful: (BOOL)success{
    if (success) {
        NSLog(@"成功");
    }else {
          NSLog(@"失败");
    }
}   
@end 

由于submitOrder方法是可选的,所以我们可以只实现processSuccessful。

方恨少

fhs

微信公众平台在首页放了一份“系统升级造成群发延迟的说明”,看来不是想关门,那么大伙还可以写下去。最近时间严重不够用,业余时间里又增加了一项新任务,准备重新规划一下自己的时间,周末或节假日Mac技巧可能会断更,用大块的时间做些其他的事情,先和大家说明一下。

昨天的《晓说不小》收到很多反馈,有些人看过晓说,有些人准备去看,还有些人吃惊高晓松怎么会有那么多东西可以讲。其实没什么可吃惊的,高晓松出生书香门第,可以说是博览群书,年轻的时候随着性子看了很多杂七杂八的书,包括音乐、军事、科技、历史等等,有些成了他谋生的手段,有些成了兴趣,但是我觉得有一点可以确定,他当年去读去记去探索这些史料文集的时候,肯定不会想到几十年之后会和优酷做一个晓说的脱口秀节目,也不会想到这个节目在2012年会成为年度最佳视频节目,没有鲜衣怒马,只有古砚香台,结果反而老少皆宜,各自有各自的收获。

所以说,看书学东西,不必那么功利,还没开头就想知道结果,一个Hello World还没写完就问这门语言在市场上什么价位。拿出时间和计划去积累就好了,但行好事,莫问前程,河狭水急,人急计生。我们很难预测积累的这些东西什么时候会用到,如果将来用到,那是你的幸运,没用到,就当做兴趣。挺好。

其实对于那些中大型的企业也是一个道理,在有条件的时候尽可能的预研和积累,无论是技术还是业务,别成天惦记员工花了你的工资,不想着种树成天想着摘桃,等别人摘到果实了,您才想起来要种树了,第一没时间了,第二没人了,在IT行业想要倚马可待把人家积累很多年的东西搞出来,基本上是天方夜谭。所以,希望每个老板的眼光都能长远一些,也希望大家能够找到这样的老板。

书到用时方恨少,为啥,cause it’s too late.

Mac技巧写了这么多期,我觉得我需要更多的积累才能继续输出,我在考虑这玩意是不是也搞个第一季,完结之后重新思考一段时间再继续上路……

今天讲两个Mac Tips

1、屏幕画中画

在早期的《副产品》(回复19可看)一文中,介绍过屏幕放大功能,也就是通过option command ±可以放大和缩小屏幕,使用control + 滚轮也可以。

不过这只是放大屏幕方式的一种表现形式,我们还可以通过辅助设置改为画中画模式,打开系统偏好设置-缩放-缩放样式,把全屏幕改为画中画即可,效果大家自己看吧。

2、粘贴纯文本

我们在网页或其他文档上复制文字的时候,会把文字格式一并复制下来,command+v会把文字格式都粘贴过去,如果我们只想粘贴纯文本,可以使用shift+option+commadn+v,大部分软件都支持这种方式复制纯文本。

晓说不小

morningcall

这几天微信公众平台的文章审核慢的令人发指,让人慨叹难道这是要过慢生活了么?难道全中国网民都开始写微信平台了么?一小撮不明真相的读者还发来微信,说为毛这两天都凌晨发送,您改夜猫子了?这真是天大的冤情,以至于周五北京要迎来再次降温(这个寒冷的北京之春)。要怨就怨伟大的审查制度,要恨就恨媒体的自我阉割。

最近这段时间利用上下班的时间,把高晓松的《晓说》第一季全部听了一遍,晓说虽小,但格局很大,在这里给大家推荐一下,有心人可以去找mp3听一遍,涨见识不费电。

作为一个典型的70后,高晓松这个人我当然是在听了《同桌的年》,《睡在我上铺的兄弟》,《白衣飘飘的年代》等等校园民谣之后才熟知的,当时的感觉是此子才华横溢但恃才傲物,歌里表达的是内向伤感,外在却神采飞扬。后来才知道这位兄弟端得是根正苗红,外公张维是深圳大学的创办者、中国工程院、科学院两院院士;外婆陆士嘉中国著名的流体力学家、教育家;舅舅张克潜是著名的物理电子学与光电子学科学家;母亲是著名的建筑学家张克群,老爹最不济,也是清华大学教授。基本上是脑门上刻着“高知子弟”四个金光闪闪的大字出生的,小时候对门住着梁思成(梁启超之子)和林徽因,还去过共和国将帅家里玩耍,见过传奇大奖粟裕将军……哎,这见识怎么比啊,怪不得人家能说一年的脱口秀!

高晓松以前的定位是音乐人、导演、制作人、词曲创作者等等,2012年之后,又多了一个名号,脱口秀主持人。2012年3月,由韩寒命名的脱口秀栏目《晓说》开始播出,每周一期说了近50期,其中涉及的内容包括民国的刺客、镖局、青楼,千年科举,美国的医疗、种族、大选、枪、工会,开国将帅授衔、抗日风云、朝鲜战争、军力对比,大师照亮八十年代,好莱坞启示录等等,内容繁复,博古抵今,精彩纷呈,尽管有些观点我不能完全认同,但大部分是高晓松的独立思考,观点新颖,非常值得一阅。

以高晓松的杂文集《如丧》里的一句话结束今天的扯淡:迄今为止,我把所有喜欢做的事情都做了,除了恋爱和旅行,都已换成了钱,钱不多,够生活。感谢所有的衣食父母,包括我父母。所有人都老了,再没人死于心。我数着日子和钱,等着永逝降临。

今日Mac技巧:

上次讲了Objective-C的Category,今天接着说下。

在什么场景下试用Category呢?如果你遇到:

  1. 当你在定义类的时候,在某些情况下(例如需求变更),你可能想要为其中的某个或几个类中添加方法。
  2. 一个类中包含了许多不同的方法需要实现,而这些方法需要不同团队的成员实现。
  3. 当你在使用基础类库中的类时(比如NSString),你可能希望这些类实现一些你需要的方法。
     

遇到以上这些需求,Category可以帮助你解决问题。当然,使用Category也有注意事项:

  1. Category可以访问原始类的实例变量,但不能添加变量,如果想添加变量,可以考虑通过继承创建子类。
  2. Category可以重载原始类的方法,但不推荐这么做,这么做的后果是你再也不能访问原来的方法。如果确实要重载,正确的选择是创建子类。
  3. 和普通接口有所区别的是,在分类的实现文件中可以不必实现所有声明的方法,只要你不去调用它。
     
    用好Category可以充分利用Objective-C的动态特性,编写出灵活简洁的代码。

程序员提高英语阅读水平

问题:作为一名程序员,虽说每天都在和英语打交道,但是当看到一篇英语文档或者英语技术文章的时候还是比较头疼,理解他们的意思也只能是20%。尤其是使用google搜索的时候,很多问题解决办法都是英文的,还有一些国外比较有名的网站比如 stack overflow,上面也有很多学习的资源。怎样才能让自己顺利阅读这些技术文章呢?

回答:其实学英语和其他技能没什么太大区别,无论是你想在英语阅读、口语或写作方面提升自己,都需要进行长期的不间断的练习,坚持一段时间后(时间长短根据你自己的效率、每天用时、频率都有关系),你会发现自己的水平自然就提升了。举个例子,以前写博客似乎是最难坚持的,但是如果你每个月都能写一篇略有价值文章的话,5年就会有60篇高质量的博客,你几乎都能集结出书了。到了微信时代,似乎写微信公众平台是最难坚持的,但是如果你能坚持一年,那就有300多篇文章,于人于己,都是一份宝贵的财富。

作为程序员,英语阅读能力是最基本的要求,相对口语和写作来说也是最容易达到的,因为计算机类图书的那些常用单词就那么多,多读几本英语类技术图书,想不认识都难。
一个相对容易坚持的办法就是,找一本和当前工作相关的、急需的技术图书,每天拿出一小时阅读,不认识的单词,如果不影响阅读可以不查词典。如果某个单词多次出现,那么就该查下词典并计入生词本。如果你能坚持查阅英英词典,那么提高就会更快了。
每天坚持一小时,这本书读完,你就会发现自己的阅读能力提高了一大截。

这样看来提高阅读能力似乎很简单,但是,问题的关键是,你能否坚持下来,尤其是阅读初期,你只能看懂20%,需要不停的查字典,单词记了又忘,几个星期过去了,进展依然缓慢。这时候最容易放弃,你会痛苦的怀疑自己,我究竟是不是这块料。

毕竟人类的大脑都是倾向于舒适和懒惰的,谁都知道看美剧刷微薄,是容易的愉悦的。学英语学编程是痛苦的,有时候你甚至会有意识的去避免开始这件事情,先干点这个,再干点那个,熬到最后,发现没时间了,再拿起书来读一会,困了,今天先睡吧。就这样,一天天很快过去了,你发现自己似乎每天都在坚持,但依然没效果。但事实是,你既没坚持,也没效率,这根本不是刻意练习。

提高英语阅读能力这事,比提高英语口语和写作能力容易多了。如果程序员缺乏英语阅读能力,这将是你非常大的一块短板,如果意识到了,尽早补上。
另外说一点,英语翻译对提升英语阅读有一定的帮助,但这个要求比较高,必须要查字典,遣词造句,力求原汁原味的表达作者的意图。翻译并不是提升阅读能力的捷径。我曾经翻译过很多文章和半本书,没觉得自己英语水平有很大提升。

最简单的坚持,最后的结果都是惊人的。这世界上一直存在一条路,让我们的能力从平庸到杰出,这条路漫长而且艰辛,只有少数人愿意走下去,所以,优秀的人永远是少数。

今日Mac技巧:

今天推荐一款优秀的背单词App,叫做拓词,以前好像也说过,这款App的口号是,少壮不努力,老大背单词,大家体会体会。

喜欢看Mac Tips的,回复 m,可以查询文章目录,或者去公众账号搜索 searchmp 上进行全文检索。

今天波士顿马拉松比赛上发生了惨无人道的恐怖袭击,让我们为死者祈福,祝生者平安。

这件事让我忍不住想到运气这个词,人们说勤奋的人会有更多的运气、强者运强等等,我觉得这些说法纯属扯淡,运气有好运气和还运气之分,都是个几率问题。你勤勉半生,健康阳光,习得一身本领,结果看比赛时咣当一声烟消云散,这算是哪门子运气呢?

嗟夫,朝闻道,夕死可矣?唉……万恶的恐怖分子!