容易的事都让别人做了

noteasy

今天遇到一位读者问技术问题,结果回复的时候发现人家把消息接收关了,那您问的哪门子问题啊,害的我白敲半天字。这个情况遇到好几回了,记住,如果你想收到回复,请把帐号详细资料里的接受消息选上。

最近在帮着几个朋友看项目,发现了一个很有意思的现象。被企业客户蹂躏的不像样子的兄弟,想做面向个人消费者的互联网服务;在个人消费者的市场里或默默无闻或头破血流的开发者,想去企业软件市场试试水。

我想说的是,都不容易,因为容易的事已经被别人做了。另外,个人消费者和企业这两件事,真心没必要割裂来看。

企业客户确实难伺候,比如互联网服务的开发者可以这样:爷就不支持IE6了,爱他喵用不用。而企业软件的客户可以这样:爷就用IE6怎么啦,不支持别想验收。 大家感受下是不是有点不一样。而且企业客户还有两件宝,就像太上老君的金刚圈一样,随时扔出来砸晕你,第一是有问题了要免费的咨询和交流,更牛的直接要方案,别谈钱,谈就远了;第二是开始干活了要专家。哪那么专家,专家都砌砖呢,砌的好的都忙着呢!大家再感受下。

虽然环境恶劣,但仔细分析一下,企业客户是很真实的,你的软件确实帮助他解决了问题,就能够保证自身的现金流,有了现金流,你就可以做其他的事情了。想挣钱,就别怕干脏活累活,创业公司活下去最重要。单纯做互联网当然阳春白雪了,几十万上百万的用户给你虚幻的存在感,但是一旦VC的钱没了,这些存在感就烟消云散了,过去两年里,那么多公司和服务,用着用着就没了。

所以我觉得吧,完全可以以战养战,做做企业软件产品和项目,先自己养活自己,同时积累技术和经验,以期伟大产品的诞生和长治久安。(最近读贝塔咖啡鸦总的文章,他们似乎在走类似的路子,不知道猜的对不对)。

下周谈谈互联网和企业软件的融合趋势,欢迎拍砖。

再推荐三个微信帐号吧,相对人文一点的:
1、贝塔·朋友
betacafe
我记得原来叫贝塔咖啡来着,咋能改名呢?肯定是裙带关系!这个账号由江湖人称鸦总的白鸦维护,沉寂了一段,最近重新出山,基本上每天都更新,而且文章质量有越来越好的趋势,产品内容多一些,现在也谈谈人生扯扯淡。

2、听甘德霜讲故事
igandeshuang
差不多隔天更新,主要说一些八卦的历史话题,偶尔也会说说别的,读起来也蛮有意思的,喜欢历史八卦的关注下。

3、戏里戏外
beyondthewall
互联网有一道墙,但是有那么一扇窗,偶尔透出一丝暖暖的微光。这帐号就干这事,其中的系列法源寺外史很好看。

今天下载了@tinyfool 做的App「新杂志」(还未正式发行),基于iBooks Author相关技术,其中首批创刊号包括了「小道消息」「戏里戏外」「Mac技巧」的部分内容,非常好看。在杂志中Mac技巧更名为「MacTalk」,算是大众一点吧。等正式发行了,我会推荐大家去看看。

今日的MacTalk,讲OC的第三个新特性:属性合成

每个开发人员对property都很熟悉,我们需要为类定义属性,编写getter和setter方法。那么我们在Objective-C中是如何进行处理属性呢?很简单,首先在h文件中定义属性:

@property (strong) NSString *name;

然后在m文件中使用@synthesize指令实现属性的accessor方法和定义实例变量ivar:

@synthesize name = _name;

@synthesize的含义是,如果没有进行重载的情况下,编译器会根据读写属性自动为类实例变量_name生成getter和setter方法。当然,你也可以用@dynamic指令指定该属性的相关方法由开发人员实现。

这样看起来是不是已经很简单了?但是没有最简单只有更简单。现在我们可以省略掉@synthesize name = _name; 这一行,完全交给编译器去实现。也就是说在h文件中声明属性name后,就可以直接在实现文件中使用该属性的getter和setter方法,并使用实例变量_name。并且编译器会根据属性的可读和可写自动判断是否提供setter方法。

那么在这种情况下,如果你声明了@dynamic的属性,编译器该如何处理呢?所有synthesize相关的特性将不再起作用,你需要自己去实现属性的相关方法。

总接一下属性合成的新特性:

  • 除非明确说明,否则属性相关的accessor方法(getter和setter)将自动生成。
  • 除非所有的accessor方法提供实例变量,否则实例变量(例如_name)会自动生成。
  • 如果使用了@synthesize,并没有提供实力变量名的话,会自动生成。
  • 如果使用了@dynamic,那么自动合成无效,需要开发者自己实现。
  • Core Data的NSManagedObject及其子类不使用默认的属性合成功能。

源于梦想并始于微不足道

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,可以联系我!

甲方乙方

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的文章,你们感受下…