神奇的程序员—王小波

goldtime

从昨晚到现在大概收到了1500多条反馈意见,也没法统计了,大体上看了下,差不多是3:3:3的比例,喜欢看随笔的,喜欢看技术和一样都不能少的。那就维持现有风格,可能每篇文章在随笔和技术内容上各有侧重吧。另外tips类型的Mac技巧已经讲了很多了,后续的技术内容略有进阶,不喜欢的自动忽略吧,想看tips的,记住回复 m。

(昨天最奇葩的一个回复是俩字:退订,然后人家就退订了,言出必行,赞!)

喜欢读书的人,我想对王小波都不陌生,他是中国最富创造性的作家之一,他是中国近半世纪的苦难和荒谬所结晶出来的天才,他英年早逝。他的作品对我们生活中所有的荒谬和苦难作出最彻底的反讽刺。他还做了从来没有人想做和做也没才力做到的事:他唾弃中国现代文学那种“软”以及伤感和谄媚的传统,而秉承罗素、伊塔洛·卡尔维诺他们的批判、思考的精神,同时把这个传统和中国古代小说的游戏精神作了一个创造性的衔接。(以上部分摘自百度百科)

我读过王小波三部曲黄金时代,白银时代和青铜时代,读过沉默的大多数,读过红拂夜奔,读过似水六年,但是最近才知道,原来王小波是一个伪装成作家的程序员(这位同学不用站起来了,不知道这是调侃么)。

  • 王小波很早就接触了计算机,1988年毕业于美国匹兹堡大学东亚研究中心,获硕士学位,那时就知道Macintosh,玩过IBMPS/2。
  • 90年学习FORTRAN,开始进行数据统计,并开始在北大教统计学。
  • 91年搞了个用调整字模发生器方法输出汉字的系统,并发出嗟叹:嗟夫,不过现在我对微机已无兴趣,因为发现写小说也可赚到钱。一代天才作家终于开始写小说了,但他依然没有停止编程的脚步。
  • 92年开始写C,“用C编的软件已经用熟,并做出了各种写小说的工具,别人的软件已不用了。现在主要是写书赚钱。从今年初开始写长篇,首先做了写长篇的专用软件,现在基本调通,开始写了”。
  • 93年开始搞汇编,“下决心买了一台286,这些日子在改造软件,作了不少汇编工作。其核心是它在虚拟保护方式(virtual address protected)下工作,以便利扩展内存(expandedmemory)”。
  • ……

如果王小波不那么早辞世,估计会有更多伟大的文学作品和软件产品留下。谁说文科生不懂技术?谁说程序员不能写书?这才是技术与人文的完美结合啊,你们感受一下……

点击底部的{原文},查看王小波的软件历程。

今日Mac技巧:

1、更简单的禁用通知的方式

经过多位童靴提醒,我们可以通过按住option键,点击右上角的通知按钮,即可禁用或恢复通知系统。

2、Objective-C的消息机制

上次讲了一些Objective-C的历史,很多童靴觉得不过瘾,今天为大家介绍下这门语言的消息机制。

Ojbective-C的语法设计主要基于Smalltalk,除了提供传统的面向对象编程特性之外,还增加了很多类似动态语言Ruby、Python才具有的特性,例如动态类型、动态加载、动态绑定等等,同时强化了消息传递机制和表意(Intention Revealing Interface)接口的概念。

消息传递模型(Message Passing)是Objective-C语言的核心机制。在Objective-C中,没有方法调用这种说法,只有消息传递。在C++或Java中调用某个类的方法,在Objective-C中是给该类发送一个消息。在C++或Java里,类与类的行为方法之间的关系非常紧密,一个方法必定属于一个类,且于编译时就已经绑定在一起,所以你不可能调用一个类里没有的方法。而在Objective-C中就比较简单了,类和消息之间是松耦合的,方法调用只是向某个类发送一个消息,该类可以在运行时再确定怎么处理接受到的消息。也就是说,一个类不保证一定会响应接收到的消息,如果收到了一个无法处理的消息,那么程序就是简单报一个错。甚至你可以向一个值为nil的空对象发送消息,系统都不会出错或宕掉。这种设计本身也比较符合软件的隐喻。   在表意接口(Intention Revealing Interface)方面,Objective-C也是设计的比较出色的语言。面向对象语言的特性之一就是通过API把实现封装起来,为上层建筑提供服务。但是需要注意的一点就是,你封装的API最好能够让调用者看到接口描述就知道怎么使用。如果为了使用一个API必须要去研究它的实现,那么就失去了封装的意义。Objective-C通过显式的API描述,让开发者不自觉的写出满足表意接口的API,比如下图中的API描述。 objcapi 上图中描述了一个传统意义的实例方法,但和Java或C++不同的是,其方法关键字由多个字符串组成,在这个例子是insertObject和atIndex,(id)anObject和(NSUInterger)index分别表示参数类型和参数名称。整个方法看上去就像一个英语句子,我们可以很容易的知道,这个方法就是在索引为index处插入一个对象。如果你是从其他语言转到Objective-C,那么开始的时候会感觉这种写法有些繁复,但是一旦理解并习惯了你会感受到其巨大的好处,这种写法会强制你写出优美易读的代码和API,而且有了XCode强大的提示功能,再长的方法也是一蹴而就。

后续讲讲Objective-C的多态和继承。与Java一样,Objective-C一样不支持多重继承,但是通过类别(Category)和协议(Protocol)可以很好的实现代码复用和扩展。

一生有几个好朋友

friends

昨天冒着臭鸡蛋和西红柿的危险尝试发了一篇纯技术探讨的文章,结果遭到部分小白了激烈的阻击,比如:

太专业了,不懂,严重申诉
今天的文章太难了,要想读懂,我得查好多资料
挖。。。什么也看不懂噎!耶耶耶~
拜托,说点能听懂的

当然也有鼓励的:

最近正在学习这门语言,表示确实觉得重头到尾都体现消息传递,开始不太理解。看到这篇文章,有点感触,谢谢。
以后技术性更强些会更喜欢
我每天都在阅读你的文章,每次都能获得一些新知识,非常感谢你!希望今后能多分享一些oc或xcode知识。再次感谢!每天等着阅读你的文章,等待是一种期盼,一种思念,更是一种享受,有你,我的夜生活更加精彩!(我不得不说,这一段有点肉麻,你们该看出来我自己是编不出这样么优美的文字滴)

Mac技巧写到现在,已经完全不是我的初衷了,读者估计有一部分是冲着扯淡来得,一部分是学习技巧的,还有一部分是干嘛的来,不知道。做个调查,如果您是来看扯淡的,回复“扯淡”,你是来看技术的,回复“技术”,两者都看的,回复“扯淡加技术”,如果以上都不是,你得告诉我你是来干嘛的?有时间的读者,回复一下,以便我做内容的调整。

每天要写一半人文一半技术,是很残酷的事情。当你扯得正嗨的时候,突然看见冷酷的“今日Mac技巧”,你就知道还有一部分冷冰冰的技术内容要写,每到此时我就想起了王朔的一本小说,一半是火焰 一半是海水。

进入正题:

随着年龄的增强,人会越来越怀旧,于是有很多人开始积极的组织同学聚会,大学的、高中的、初中的,小学估计少有人记得了,没听说搞小学会的。对于类似聚会,我偶尔参与,但一向敬而远之,由此也挨过不少骂,比如清高啊,不合群啊等等,虽然我完全不是这个意思,但是不会有人听你解释。

我个人的想法是,在现在这个社会上,能够把身边的亲人和朋友照顾好,就非常不容易了。人的一生如白驹过隙,会经历很多人很多事,大家一起共事的时候相濡以沫,不同路了就相望于江湖。没必要十年不见不联系,在同学会上称兄道弟,然后再等候下一个十年。

人这一辈子,亲人不说了,真正的好朋友,不会超过一只手。什么是真正的好朋友?就是无论多久不联系,遇到困难的时候你会想到他;你会为这样的朋友甘心付出时间和资源;你能够随时向这样的朋友借钱,而且确定他会借给你;你的一部分生命,由这样的朋友组成。

生命和时间有限,所以这样的朋友,谁都是只有几个而已。

今日Mac技巧:

1、如何合并Safari的窗口?
打开了多个Safari窗口,如何合并呢?ctrl+command+w,可以把所有窗口以标签页的方式合并为一个窗口,点中标签页拖拽,可以在窗口之间移动标签。

2、如何禁用通知?
很多时候写作或写代码,不希望被打扰,这时候就需要把OX S的通知关掉,双指从触控板右侧滑入,呼出通知中心,在最顶部有一个显示提示和横幅的开关,关掉就会禁止通知,不过第二天会自动回复这个通知设置。

3、Finder的工具栏
我们可以把文件和程序拖到Finder的工具栏上,以便随时打开。但是想移除时会发现点击鼠标拖动是没法把这些图标移除的,这时候只要在点击拖动时加上command,你就会发现这些图标被destory了。

苹果的语言

apple8

申明:今天的文章技术性强一些,不喜欢的……可以申诉

最近连续被问到学习Objective-C的问题,比如我原来学的是C或C++,学Objective-C行吗?这门语言语法怎么那么古怪呢?现在学Objective-C有前途吗?
好吧,今天简单说说苹果的当家语言Objective-C。

首先说明一下,技术这种东西很难说学哪个更有前途,而且以前有一期也说过,如果你准备以技术手段谋生或实现你的理想,基本不可能只懂一门语言。就目前来看,Objective-C似乎是薪酬较高的语言,但是这个阶段迟早会过去的,就像当年的Java一样。一门语言只有掌握的足够深入,才有机会探讨它的前途和钱途。
想要看得远,必须站得足够高。吐槽完毕!

Objective-C是C语言的扩展,设计思路上借鉴了Smalltalk的面向对象和消息机制的思想。从我个人使用过的面向对象语言来看Obj-C是对消息传递支持的最彻底也最显式的。Objective-C的类中定义的方法都是消息传递,而且类和消息之间是运行时绑定的,运行时编译器把消息发送转换成对objc_msgSend方法的调用。其它的C++、Java、Python、Ruby都体现得不明显,更倾向于对象的封装和抽象。

Objective-C和C++基本上是两门语言,没有太大的关系。Objective-C本身是静态语言,编译后就是机器码,执行效率很高,但引入了很多类似Python、Ruby的动态特性,像动态类型推断,id,selector,block等特性,所以又非常灵活。用惯了Java或C++会觉得Objective-C的语法很怪,但如果你用学习新事物抛弃旧思路的方式去学习这门语言的话,你会很快爱上它的消息式的编程风格,加上XCode,无论是写Mac应用还是iOS应用,都会非常得心应手。

关于苹果为什么采用Objective-C的问题,说明一下,其实不是苹果采用了Objective-C,而是乔布斯创建的Next公司的操作系统NextStep采用了Objective-C作为原生语言。
Objective-C在计算机编程语言中有着不短的历史,80年代初Brad Cox和Tom Love发明了Objective-C,1988年乔布斯的Next公司获得了这门编程语言的授权,并开发出了Objective-C的语言库和NEXTSTEP的开发环境。NextStep是以Mach和BSD为基础,Objective-C是其语言和运行库。后来的事大家都比较清楚了,苹果买了NextStep,乔布斯回归苹果,NextStep也成了Max OS X的基础。以后发展越来越好,Objective-C反而成了苹果的当家语言,现在基本上是苹果在维护这门语言的发展。

随着苹果的APP帝国不断壮大,这门语言也得到了长足的发展,从1.0到2.0,从面向对象的C语言扩展,到内存引用计数管理,属性管理,引入块的概念,实现自动引用计数,优化编译器,简化语法等等。Objective-C在2011年和2012年分别获得了TIOBE评选的年度语言,目前排名第四。
苹果CEO库克在2012年的WWDC大会上宣布,苹果已经为全球开发者支付了超过50亿美金的分成收入,时至今日,估计已经远远超过50亿了,对于开发者来说,这是一门能够独立创富的编程语言。

还有一点不能不提,第一台万维网的Server就是一个叫蒂姆·伯纳斯-李的大牛在NextStep上写的,包括浏览器。所以,咱们得感谢Objective-C,要不然还不知道互联网会发展成啥样呢……

甲方乙方

jfyf

题外话:
最近Mac技巧频道收到的反馈一直居高不下。

有发诗句过来的,比如“舍南舍北皆春水,但见群鸥日日来”
有发英文过来的,比如“Things I value slip out of my hands the way a comb loses teeth.”
还有发音频过来的,好吧这个就不比如了。

每天翻阅几十屏消息,花点时间也是蛮开心的,能回复的都回复了。如果您觉得这个频道还有点价值,动动手动动口,推荐给身边的亲人朋友,如果每人推荐一个,那我的读者就翻倍啦,写起来更有动力。

大部分人在成年之后,都做过甲方和乙方,有的人做甲方多一些,有的做乙方多一些。我的个人建议是,出来混总要还的,做甲方时,尽可能体谅乙方的难处,做乙方时,尽可能考虑甲方的需求。但是着落到我们这些做软件的人身上,无论是做个人软件、互联网服务、企业软件,大部分时间都是实际意义上的乙方,我们为用户提供产品、解决方案和服务,用户提升个人能力、企业能力和生产效率,并为此买单。

这本来是一个双赢的买卖,好的生产者和消费者会让双方都很happy,但在实际过程中,我们总会碰到一些难缠的用户,或者是一些我们认为难缠的用户,搞得大家心里憔悴,有时候双方都要疯掉,并相互兴起杀死对方的念头(哈哈,这个有点夸张)。对于这样的客户我们该如何处理呢?

这里面其实有个误区,就是有些用户并不是真的难缠,而是由于程序员的自我保护心理,压根就见不得别人说自家的软件不行。我见过太多的程序员一听到别人说你的软件烂,马上不分青红皂白抄起键盘要跟人家拼命,这是技术人员一定要避免的,即使一万个不愿意,也得紧咬后槽牙,假装心平气和的问问,您觉得我们的软件烂,到底烂在哪了?如果人家能说出个子午寅卯,那就说明这是好客户啊,不仅懂行而且愿意为你提需求,这种用户是值得我们尊敬的。

当年盖茨邀请后来的Windows之父阿尔钦加盟微软时,阿告诉盖茨,你们微软的软件是世界上最烂的,盖茨说,就因为烂才让你来啊。看看人家盖茨,比你聪明,比你程序写的好,比你有钱,还这么有胸怀!

注意,以上意见仅针对确实想购买或使用你的软件和服务的用户,对于那些真正难缠的,没有任何建设性意见的,玩政治的,玩人的Hater,我们还是要坚决将其从人民群众中甄别出来,然后毫不客气的让丫滚粗。用心写的软件,只给那些真正使用的客户!

今日Mac技巧:

1、保护你的数据文件
这个话题很多人问过,今天在这一期统一说一下。总体来说,我觉得在Mac下相对某些文件或数据进行加密操作有两种方式:
第一种:系统偏好设置-安全性和隐私-FileVault,打开FileVault即可。FileVault是全盘加密技术,可以对磁盘上的所有文件进行加密,后果是系统速度会稍微变慢一点点,如果你不是在军方服役,一般不建议采用。

第二种:创建磁盘映像文件,对磁盘映像进行加密处理,然后把需要保护的数据和文件放到这个磁盘映像中即可。具体方式如下:
打开应用程序-实用工具-磁盘工具,点击新建映像,在加密选项处选择256位AES加密,这种加密算法是极其安全的。创建映像时输入两次密码,即可创建加密的磁盘映像文件。在创建时最好不要选择“在我的钥匙串中记住密码”,这样可以每次打开这个磁盘映像文件时都需要输入密码,可以达到最佳保护数据的作用。

2、推荐微信频道:公共账号搜索——searchmp
这个频道是由霍矩先生维护的,关注后可以搜索已经注册的公众账号的文章和账户信息,比如搜索Finder,可以检索到Mac技巧里包含Finder的文章,你们感受下…

说说我和Mac(一)

Jaguar

30岁之后,时间仿佛开闸的河水一样滚滚而去,感觉自己浪费的时间太多。我们不得不承认,先知先觉的人会比我们领先10年甚至更多的身位。进入二十一世纪,世界迎来了信息时代,人才竞争尤其激烈,与其他人感受不同的是,我觉得中国涌现出了很多非常厉害的年轻人,例如微信账号“道哥的黑板报”的host,从大学少年班起步,23岁即成为阿里巴巴集团最年轻的技术专家,端的是少年英雄。但是放眼未来,无论现在的你是年少成名还是大器晚成还是默默无闻,都需要不停的奔跑和追赶。

感慨完了,说说今天的内容,很多读者让我讲讲自己的经历,非常惭愧的是,工作十余年并无可圈可点之事,实属籍籍无名之辈,谈之无物。倒是可以讲讲我对Mac的些许认知,中间也可以穿插讲点有意思的事情。今天是第一篇。

说起Mac,还得从2001年说起,那是我第一次接触Mac电脑,当时我在洪恩软件开发了一套叫做数字校园的软件系统,由于与一家厂商合作,需要把我们的软件移植到Mac Server上。

软件是BS架构的,基于JDK1.3构建,由于一直在linux上编程(当时Java几乎没有像样的IDE,Eclipse、NetBeans、IDEA等后来如日中天的工具,有的刚刚起步,有的还在孵化),所以Mac基本上是被我们当做Unix用的,印象中移植并没有太大的工作量,细节也不记得了,反正当时Mac对我来说就是一个Unix Server,以至于我现在完全不记得当年那台Mac服务器是什么样子了。

后来有另外一个组的兄弟要做音乐,公司专门给他配了一台Mac Pro,价格相当昂贵,那个兄弟估计也是没用过好东西,护的紧,基本不让我们这些土鳖程序员靠近,那时候Mac OS X已经告别了9,进入了10。如果记忆没有失误的话,那个系统用的是Mac OS X 10.2 Jaguar,其华丽的界面让一直用土土的windows的程序员口水留了一堆,但当时我们已经被Liunx下各种华丽但不实用的GUI伤透了心,像GNome,KDE基本都是浮云。于是苹果在我眼中就是个酷酷的操作系统,界面优美,适用于图形图像视频制作,价格贵的离谱,用来工作娱乐神马的,基本上是天方夜谭了。

现在留下的印象就是头发杂乱的流浪歌手,谈着吉他,安详的坐在Mac Pro前调音和谱曲的画面。那个兄弟叫老郭,专门为软件做音乐,经常对我们这些不懂艺术的程序猿说,嗯,你们都是土鳖,就知道编程,多无聊。当时我想,这话反过来说,也成!

待续,这给系列不想一口气写下去,穿插着写吧。

今日Mac技巧:

1、神奇的option键

以前很多期介绍过option相关的快捷键和功能,比如选中多个文件option+右键,可以显示检查器,按住option点击顶部菜单的电池会显示电池状况,点击wifi会显示网络状况,点击备份…好吧,你们都可以点点试试。别忘了最左边的苹果按钮,option+点击,在下拉菜单点关机、重启都不提示的。

option+点击Dock上活动的程序会隐藏,option+拖拽文件可以复制,按住option输入=输出是≠,option+shift+=,输出是±

还有好多,没事的时候多按按option键,你会有很多意外的发现。

2、推荐一款音乐处理软件XLD

XLD全称是X Lossless Decoder,是Mac平台上无损音乐播放、编码和转换工具,不仅支持APE、FLAC等无损音频,还支持读取音频CD,将音轨抓取出来之后创建音乐文件。

免费软件,喜欢的可以捐赠。

官网地址:http://tmkk.undo.jp/xld/index_e.html

不要做一个Hater

hater

这个公共平台开通以后,我收到过很多寻求建议的问题,也尝试回复过一些,还有一些是我没有能力回复的。人生一路走来我们会寻求很多建议,也有很多人给你忠告,需要警惕的是,这里面有相当一部分人的“忠告”总是负面的,比如你想去学编程,他说,你的逻辑能力不适合编程,你说要去做销售;他说,性格决定命运,你的性格做不了销售;你说我要去创业,他说,这个项目类型没人会投资的,早做早死晚做晚死;你说我要站着把钱挣了,他说,这是在中国……当你稍微遭遇了一点失败的时候,这些人就会祭出万试万灵杀手锏:你看,我早就说过……

我们把这样的人统称为Hater,这种人对自己不了解或没有勇气尝试的事务永远持否定态度,如果你发现一个人大部分时间在否定着什么,那么他们的意见不听也罢,甚至于那些鼓励的建议也仅仅是建议而已,仅供参考,因为最终不是那些提建议的人去做事和承担后果。做任何事情都是我们自己的选择,想清楚了也好,没想清楚也罢,想去做的话,尽可能鼓励自己去做,做实事的人总是让人敬佩的,而且由于我们在做事,所以总会遇到失败,这时候那些口诵大悲咒“我早就说过”的Hater是完全可以忽视的,因为所有人都是在试错中成长,那些不犯错的人充满了各种幻觉,其实是因为他不再成长了。

李笑来在《把时间当做朋友》一书中写道:他们一定要给你泼冷水的。泼冷水的愿望之强烈,你无法想象。那种强烈借助了太多的力量:怀疑、嫉妒、恐惧、 愤怒。而在表现的过程中却又包装上另外一层表皮:关怀、 爱护、友爱、帮助。

当然李笑来没有把“他们”定义为Hater,但我想应该是一个意思。所以我们首先不要自己成为Hater,另外也没必要去听取Hater的忠告。地球也不会因为Hater的存在而停止转动!

当老罗的锤子手机发布的时候,我仿佛是看到了一群Hater冲上去一顿狂贬,当然里面也包含了一些看似有道理的贬,但是这些东西有什么力量呢?老罗不也说了么,你们的感受我根本不在乎。我不认为锤子有一天能够砸烂苹果,但锤子会有自己要砸的东西……

当时就有写这一篇的冲动,不过一直放倒今天才写,是为记:Don’t be a Hater!

今日Mac技巧:

1、有人问如何输入国外人名中间的分隔符,比如汤姆·克鲁斯,如果你使用原生输入法,用option+shift+b,可以调出标点菜单,选6;如果是FIT,直接使用数字键1左边的键`,也可以输入·。

2、最近一直在使用MailBox做to do list,给大家分享一下我的做法。

正常收到的邮件,可以直接选中邮件向左滑动,滑到一半松开,可以设置以后什么时间阅读,一直向左滑动,可以为该邮件定义列表

那么如何设置自己的任务呢?很简单,直接给自己的GMail账户发邮件即可,邮件的标题描述自己的任务,发送后Mailbox会自动把该邮件标识为Note to self,选中该邮件用上面描述的方式为其分类和设置处理时间。

任务处理完之后,选中邮件右滑,一半归档,一直向右滑动删除。