枚举

2013-05-12 10.58.24

如果你以为这是个标题党,那你就错了。今天的内容就是接着昨天的话题讲Objective-C。

想听扯淡的等明天吧。

2、枚举类型的改进

在OS X v10.5之前,我们如何在Objective-C中定义一个枚举类型呢?如下:

typedef enum { 
    ObjectiveC,
    Java, 
    Ruby, 
    Python, 
    Erlang }
Language;

这种写法简单明了,用起来也不复杂,但是有一个问题,就是其枚举值的数据范围是模糊的,这个数值可能非常大,可能是负数,无法界定。

在OS X v10.5之后和iOS中,你可以这样写:

enum {
    ObjectiveC,
    Java,
    Ruby,
    Python,
    Erlang
};

typedef NSUInteger Language;

这种写法的好处是,首先这个枚举的数据类型是确定的,无符号整数。其次由于我们采用了 NSUInteger,可以不用考虑32位和64位的问题。带来的问题是数据类型和枚举常量没有显式的关联。

现在,你可以这样写枚举了:

typedef enum Language : NSUInteger{
    ObjectiveC,
    Java, 
    Ruby, 
    Python, 
    Erlang 
}Language;

在列出枚举内容的同时绑定了枚举数据类型NSUInteger,这样带来的好处是增强的类型检查和更好的代码可读性。

当然,对于普通开发这来说,枚举类型可能不会涉及到复杂的数据,使用之前的两种写法也不会有什么大问题。

源于梦想并始于微不足道

2013-05-12 10.57.34

昨天谈的付费免费和产品创作等内容,仅仅是思想表达,并不是要探讨Mac技巧是否要收费的问题,就目前微信平台的运营模式,即使我们想做收费阅读,也无从收起,所以大家不必介怀,主要看文字内容。

有位叫做「醉染林夕」的读者发表了这样一个观点,很有趣,大家感受下:

来自沉默的大多数:既然收费与否的问题说不清就说一种观点吧。写作分享做好事这种事很多情况下是作者的表达欲在作祟,也就是他并没有因为做了这个可以得到什么而去做,而是他就想做,他想把事情做极致,这可以说是他的命。 连岳有篇文章叫《个人之上再无价值》曾引发了很多人对个人是否要有社会责任的争议,很多人担心如果大家都只看到自己的利益而不去为社会着想,社会怎么进步,或者说社会怎么会快速进步。这里我认为就预设了一个假命题,即大家都为了自己利益。 其实总会有那么一群人为了大家着想的,总会有人不为其他的努力与现状抗争的。毕竟,自私,同情,分享等等美好品质都是人的天性,或者至少说是一部分人的天性,社会自有系统。

我以为这一段写得非常好,再好一点就赶上我了(哈哈)。我认识的好几位技术人做微信公众平台都属于兴之所至,而不是盈利为先,无论是表达欲望也好,创作欲望也罢,大家在无偿的分享自己的经历和思想,这是命。当然如果有一天这些频道和内容衍生出了伟大的事业和财富,我们也不会拒绝,谁会拒绝内容创造的财富呢?这也是命。

所有伟大的事业都源于梦想,并始于微不足道。

Macintosh之父拉斯金的梦想之一是“数以百万计的电脑”,他的远大志向是“如果个人电脑能够真正面向个人,那么任何一个家庭都该拥有一台”。但是Macintosh项目初期,整个项目组只有四名研发工程师,而且每隔一段时间项目就会被拿出来讨论。30年过去了,这个微小的项目组成就了现在的Mac帝国。

另外,昨天推荐的「一天一件艺术品」的微信号有误,错误的原因并不是我记错了,而是下划线被markdown编辑器吃掉了,于是很多读者反馈找不到这个平台。这事我也挺纳闷的,其实只要知道了公众平台的名字,就可以很容易查到这个频道,点击微信底部菜单朋友们-添加朋友-查找微信公众帐号,输入「一天一件」即可。找不到的自个面壁去!

「一天一件艺术品」正确的微信号是:

one_art_everyday

最近扯淡有点多,今天开始从语法层面为大家介绍一些Objective-C的新特性。

去年的WWDC上,苹果针对Objective-C和LLVM编译器都做了重大改进,我们来看一看Objective-C增加了哪些新特性。

1、方法顺序无关

Objective-C类由声明文件h和实现文件m组成,所有的public方法都在h文件中声明,private方法可以写在m文件中,但是在早期的编译环境中需要注意方法的顺序,例如下面的代码,在早期的编译环境会给出警告:

类和方法声明:

@interface ObjcNewFeatures : NSObject
-(void)doSomething:(NSString *) text;
@end

实现:

@implementation ObjcNewFeatures
-(void)doSomething:(NSString *)text{
        NSLog(@"%@", [text stringByAppendingFormat:[selfgetCode]]);
}
-(NSString *)getCode{
        return@"Unicode";
}
@end

早期编译器编译时会出现:warning: instance method ‘-getCode:’ not found…

这是因为根据编译顺序,编译器不知道在doSomething之后还有getCode方法,所以会给出警告。解决办法有多种,比如可以把getCode方法放到doSomething之前,也可以提前声明私有方法,如下:

在m文件中增加:

@interfaceObjcNewFeatures()
-(NSString *)getCode;
@end

新版编译器在LLVM中增加了新特性,改变了顺序编译的方式,首先扫描方法声明,然后再对其实现部分进行编译。这样无论是public还是private方法,就变得顺序无关了。

付费还是免费,这不是问题

fee

Mac技巧频道共积累了200多个Mac日常使用和开发使用的Tips,这些技巧散落在之前100多篇文章中,入口是m,回复m,是对的,问说「好的Mac技巧呢」,将遭到无情忽视。

上次做的付费阅读调查,仅仅是个探讨,因为微信公众平台的作者无法确定收费规则,最多搞一个支付宝的donate,自愿捐助,这也是不少读者建议我采用的方式。

调查结果也很有意思,简单的看了一下,20%的反馈者属于铁杆读者,认为文章定价太低,「好的信息,一条10元都值得」「必须订阅」。还有20%的游离态读者,「党费一年才两块四呢」「如果付费的话则会取消」。剩下的60%基本上属于中坚读者,表示每月1块可以接受。当然也有表示每年10块可以,每月1块不能接受的。这也是我特意想求证的一点,每月1块钱和全年10块,其实差距只有每年2元钱,我想知道时间走到2013年这个号称大数据的时代,是否还有人在意这2元/年,事实证明,有的,而且不是个案。所以你就知道,永远不要把自己的认知想当然的代入到消费者和用户的想法中。

当然还有更多的读者没有任何反馈,他们属于沉默的大多数,这个时代,这样的人,总是最多的。

关于软件、书和文章的付费问题,我个人有两个观点,第一,首先要关注我们提供的东西是否能够真正解决用户的问题、满足需求并带来价值;第二,付费总是能够在某个阶段为作者带来更旺盛的创作热情,在某些时候也可能适得其反。

很早我就认识到的一件事情就是,人们乐于去花钱买好的东西「当然我指的的普通人,不是强盗」。从长远来看,人类对美好的事物的追求是永无止境的。所以不要担心他们是否愿意买你的服务,不要担心他们是否会把钱花在你做的东西上。如果有人不愿意并抱怨你做的东西,这没什么,因为这并不是他们真正需要的东西,仅此而已。

世界上还有大量的人懂得欣赏,愿意付费去购买美好的东西,因为他们认为它是值得的,它让他们的生活更美好,只要你的东西足够好。我想这是技术人持续编程和写作的最重要的理由之一!

另外,就我个人的软件使用体验来说,收费软件的平均水平远远高于免费软件,除非这个免费软件的背后有强大的社区和公司支持,比如优秀的开源免费IDE工具Eclipse,就是由IBM支持的,可以说Eclipse是世界上程序员使用最多的开发工具。但即使是这样,与Jetbrains的付费软件Intellij IDEA相比,Eclipse的功能依然稍逊一筹。没有人能够饿着肚子写出优秀的作品。捐助和付费,从长远来看,能够获得更好的回报。当然,也可能出现的情况是,创业者或创作者由于用户和读者的付费发财了,慵懒了,把公司卖掉了,或停止创作了,这会导致产品的质量下降或停止更新。但是从另一个角度来说,这是这些创业和创造者应得的。因为大部分人在朝九晚五和电视电脑前消磨人生的时候,他们则在孤独的环境中默默的创造内容。

没人欠用户什么,大家都有选择自己生活的权利。像乔布斯那样坐拥百亿资产身患绝症依然充满创作热情的,这个星球上就那么一位。比尔·盖茨做不到,保罗·艾伦做不到,史蒂夫·沃兹也做不到。

付费和免费,这是个问题,但不是我的问题。

推荐几个同样『小众』的微信公众平台(以下排名不分先后):

一天一件艺术品:one_art_everyday

目前主要以翻译国外的艺术品鉴书籍为主,已经基本翻译完两本:How to Look at a Painting、How to Understand a Painting,目前正在啃30,000 Years of Art。 人生有涯,常常要在痛苦与无聊之间来回摇摆,得不到就痛苦,得到了就无聊。艺术家的艺术品,可作人间的孟婆汤,让人忘记痛苦与无聊。 木心说:艺术广大已极,足可占有一个人。艺术,让一个人足以知道生的可贵,足以面对死而坦然。谈艺术,是为了拯救自己。

推荐给关注人文和艺术的程序员

二爷鉴书:findbook

定期推送各种读书心得、好书介绍和烂书揭露,以IT、互联网行业为主。虽然更新频度不高,但几乎每篇都是经典,我在他的推荐下购买了几本,都是上上之选。 私下聊天开玩笑说,Mac技巧也要写书评,抢二爷鉴书的生意,因为之前偶尔写过几篇。但在书评方面,我是业余的,二爷鉴书才是专业的。

推荐给爱书的程序员。

iOS开发:iosDevTips

介绍iOS开发时的各种经验技巧。帐号作者具备丰富的iOS开发经验,他组织的QQ群里有网易,腾讯,新浪,搜狐,美团,豆瓣等公司的iOS程序员,群内很多讨论很有价值的内容会分享到这个公众账号中,间或也有他的个人博客作品。

推荐给iOS程序员。

Mac技巧会定期推荐我认为好的Mac App和iOS App,如果你的团队有好的App,可以联系我!

Google的不做恶

2013-05-12 10.57.25

为了避免每次被新读者问道「说好的Mac技巧呢」,我决定在每篇文章的开头加上这句话:

Mac技巧频道共积累了200多个Mac日常使用和开发使用的Tips,这些技巧散落在之前100多篇文章中,入口是m,回复m,是对的,问说「好的Mac技巧呢」,将遭到无情忽视。

今天凌晨Google 2013年I/O开发者大会在美国加州旧金山开幕,期间发布了新版的Play/Music/Maps/Google+/Gmail等软件产品,关注具体信息的,直接用Google百度一下,包括拉里·佩奇的演讲「科技改变世界」,都值得一读。

随着开发者大会的强力召开,Google的市值也强势突破3000亿美金,开始逼近苹果。我个人还是很喜欢Google这个公司的,Google Glasses和无人驾驶汽车表明这是一家不断创新放眼未来的公司,虽然它关闭了我最钟爱的Google Reader,好吧,暂时先原谅它。

另一家科技巨头苹果公司市值刚刚跌破4000亿美金,很多人觉得苹果在走下坡路,我不这么认为,它只是暂离世界之巅放缓脚步而已,无论是Google还是Apple,都是充满技术底蕴的公司,Google I/O给我们带来了很多惊喜,同样的期待,我们送给6月份的WWDC,希望Apple更精彩。

前几天看到一篇文章,说的是Google的不做恶,非常有意思,摘过来给大家看看:

关于“不作恶”文化的访谈:

Sagal(主持人):所以我想问问你们是怎么想出来著名的“不作恶”规矩的?

施密特(前Google CEO): 这……咳,这是 Larry 和 Sergey 发明的。但是其实他们都不知道“恶”是什么。当我进入公司和他们一起工作的时候,我觉得这个规定真是愚蠢之极,因为根本没有什么除了圣经之外的读物解释了“恶”具体指什么。

所以我们是这么用的。开会的时候,我们在争论某个产品或服务的时候,一个工程师捏紧拳头捶了桌面一下,然后说,这是在他X的作恶啊!然后所有对话就停止了,随之而来的是一阵愤怒的声讨,然后就停止了这个项目。

哈哈,大家可以脑补一下这个场景。

明天周五没有更新,别问别等,本周末会推荐几个同样小众的微信公众平台,有需要的同学关注下。

改进中的创新

facebook

曾经推荐过的电子阅读App「多看」终于重新登录App Store,之前没有下载过的童靴可以去下载了。我个人以为多看是国内顶尖的阅读类应用,用户体验不断调整和创新,所以现在能在多看买到的书,我已经不去其他地方购买了。之前也入了不少豆瓣阅读的图书,不过豆瓣的App似乎一直停止不前,鲜有更新。关于豆瓣阅读iOS版不能支持数学公式、iPad版不能调字体的问题,我反应过多次,无果,不知道这部分是否已经不再是豆瓣重点投入的方向了。

最近这几天Facebook频繁更新,昨天发现图标都变了,今天又发了一个更新,图标又变回来了,我晕,估计扎克伯格也晕吧,不知道是哪个工程师干的。

这次Facebook的更新改进了一个非常有意思的功能,就是实时聊天。当你和朋友聊天时,那个会话会变成一个圆形图标浮动在Facebook的界面上,如果有多个会话,就会有多个图标重叠在一起,在这期间你可以做任何其他操作,当有新消息时,图标就有提示,点击即可进入聊天,极为方便,拖拽多个会话图标还会出现拖尾的动态效果,非常棒。想要删除这个会话时,拖动图标扔进那个圆形X图标即可。

今天的附图就是Facebook App的截图。

写了多看和Facebook两个App,有两点想法:1、创新总是随着不断的改进而来。2、移动App必须不断更新才能吸引用户,否则太容易被遗忘了。

今天在微博上写了个段子——「互联网应用开发者:爷就不支持IE6了,爱他喵用不用。企业软件客户:爷就用IE6怎么啦,不支持别想验收」,收获众多受害者和幸灾乐祸者的反馈,呵呵,大家也感受下,以后会谈谈互联网应用与企业软件的那些事儿……


据说微信现在有4亿用户,我身边很多人都是微信用户,上面留下了很多欢声笑语,那如何保留微信上的语音呢,今天给大家介绍下。

首先使用类似iExplorer的手机文件浏览软件连接你的手机,打开Apps-微信,找到Audio文件夹,导出到Mac的文件系统里。

你会发现该文件夹下有很多后缀为aud的文件,如何播放aud格式的音频文件呢?

使用HexEdit.app(16进制文件编辑器)打开aud文件,在文件头增加如下代码:

0x2321414d520a

实际上就是在文件头增加了#!AMR\n,表明这是一个AMR文件。

然后把文件后缀由aud改为amr即可正常播放。

如果需要批量命名,可以打开终端程序(应用程序-实用工具-终端),找到文件位置,输入如下批量shell命令:

for var in *.aud; do mv “$var” “${var%}.amr”;done

打完收工!

技术成长(下)

2013-05-12 10.57.05

昨天的文章发出后,很多人说,Mac技巧的读者群素质真高。好把,其实我一直是这么认为的:)

关于Mac技巧这个名字,多次被朋友们善意吐槽,土、小众,这些咱都认了,谁让当年做这个频道时没想清楚呢,咱也没想到一个非知名、非互联网公司、非创业者的技术人写的东西,到现在会积累了近2万的读者。想改名又不让,所以就随他去吧,小众一点,挺好。

吐槽『挂羊头卖狗肉』的新读者,建议你们看看第一季的文章,里面包含了大量的Mac使用Tips,这些东西不能反复推送,有心学习的,回复m即可。

关于技术成长,我想先讲个小故事。

村里有一个傻子,他的古董手表不走了,拆开手表一看,发现里面有一只死蟑螂,傻子恍然大悟,『怪不得手表不走了,原来管事的家伙完蛋了』。

不知道大家看完这个故事是怎么想的,我的想法是,永远不要简单的割裂的看问题,很多时候我们以为找到了问题的答案,真实的情况是,我们只触摸了表象。

落到技术成长这个话题上,那就是技术人员在成长的过程中,关于技术和管理(或其他非技术技能),永远没有非正即负、非黑即白。

在计算机发展史上,确实有很多技术天才醉心技术不问世事,比如大家比较熟悉的软硬件技术天才史蒂夫·沃兹,他虽然是苹果公司的创始人之一,在苹果初创的时候几乎以一己之力单枪匹马做出了AppleI和AppleII,对苹果公司的贡献居功至伟,但他对自己的定位却非常简单,就是去做一些酷的东西,成为一个伟大的工程师,写出匪夷所思的代码,并且跟每个人都成为朋友。

这样的人是不需要去演讲、去管理、去销售、去协调资源的,让他好好做技术就好了。

世上能达到这种级别的技术天才凤毛麟角,我们是这样的或接近这样的技术天才吗?

如果回答是肯定的,下面的内容就不用看了。如果是否定的,可以接着读读。

先谈谈选择 大部分人进入IT行业是因为喜欢技术,还有一部分可能觉得程序员起点工资好一些,无论如何,进入技术领域之后,只要用心用功,大部分人会得心应手,在自己的岗位游刃有余。这时候不管是主动还是被动,都会有更多的责任找过来,你不再是搞定自己的任务就可以了,你需要去协调、交流、传播、聚合。每个人在这个阶段都是不适应的痛苦的,有些人挺挺就过去了,进入另一个更大的空间,有些人以不喜欢做繁琐的事务工作为由,继续回到原来的领域深入研究。

这两种选择,无所谓对错,但是有一点我想强调的是,不要轻易为自己设限,人的潜力是无法估量的,作为程序员,无论是哪种选择,都需要在专业的基础上尽可能的扩大自己的知识领域和综合技能,总是躺在技术舒适区是容易的,比如你是一个IBM 大型机的开发人员,你可以在最后一台大型机陈列在博物馆之前不去看任何其他技术。但是一旦这一天来临,你要承受的压力是巨大的。

另外,作为技术人员,多读一些人文类的书籍,好处多多不费电!

再谈谈领导。 首先我想说的是,如果大家看到领导和管理这些字眼,想到的仅仅是发号施令和挣更多的钱,那么就很难做好事情,这一点可能很多人不以为然,不急,大家慢慢体会。

技术领导在成为领导之前,一般是某个领域的技术明星,在成为领导之后,遇到最困难的事情就是没有那么多时间去接触和研究最新的技术,你会很尴尬的发现,有些技术问题你不得不向你的下属请教,这种成长的痛苦是非常折磨人的。

我个人就经历过类似的痛苦,不过现在我已经能够非常坦然的向团队成员请教问题了,因为技术领导需要的是敏锐的技术嗅觉和前瞻性,规划能力,解决问题的能力,组织协调的能力等等,而不是去掌握团队使用的所有技术。

而且,还需要注意的是,一个团队中除了有任命的领导,还有更多未任命的领导,他们往往充满活力,善于提出各种奇思妙想,自发带领团队以更有效率更优雅的方式工作,这样的潜在领导尤其值得关注,他们的发展空间可能更为广阔。

最后说说白衣飘飘的年代 当有一天你终成一代大师,白衣飘飘风尘仆仆,知行合一物我两忘,那时你追求的是如何找到终极答案,而不是要这个答案一定是自己回答的,因为大师有足够的自信去驾驭那些人和物,最终形成可用的资源。

性格决定命运,选择决定领域。世界上只有极少数人能成为大师,这个人不是我,但我希望是你。

今天推荐两本电子杂志:

1、National Geographic Magazine,英文版国家地理杂志,我从去年开始在amazon.com上订阅这本杂志,每月2美金,可以自动推送到Kindle上阅读,也可以在iOS上的Kindle App上浏览,支持图文版本和文字版本,图文并茂,非常好看。

2、National Geographic 华夏地理(iPad版),这是一个中文版本的国家地理杂志,热爱旅游、摄影、科技、文化、地理、历史和自然的读者可以关注一下,目前第二期限时免费中,做的非常用心。在iPad的app store 搜索“华夏地理杂志”就可以找到这本杂志App。