2013年4月2日星期二

关闭两个子blog

今天决定把把http://cocoapps.blogspot.com和http://i.venj.me关了。

自从开了http://cocoa.venj.me之后,http://cocoapps.blogspot.com已经没有存在的意义了。我想,这么久了,也没有人回来这里看了,都到cocoa.venj.me去了吧。

而i.venj.me则几乎从没人来看过,所以也关了吧。

这里是不能关的--除非Google把blogspot关了,毕竟这里囤积着从我写博开始的绝大部分文字。

好了,就说这些。以上。

2012年12月25日星期二

2012年年终总结

今天是人生第29个年头的第一天,从昨天开始的工作上的不愉快让我昨晚整晚没睡好。虽然今天靠咖啡撑着过完了一天,但是与此同时,也促使我开始重新考虑一些问题--特别是工作。

关于去年年底信誓旦旦的总结和展望一样都没有实现;博文产量创历年新低--可能该吐的槽都在饭否和企鹅微博吐完了;工作上也没有任何起色:从去年11月失业,在家游荡了3个多月,期间虽然去过一趟上海,做了两星期,但是也因为工作不是我想要的那样,匆忙间离职了;一直到2月底才又开始工作,期间又是总总变故,虽然坚持到了现在,但是各种问题已经迫使我重新考虑工作的问题了。我是个安于现状的懒人,总是要火烧眉毛了,才知道要往前看看。我希望这次的问题,能给我多一点时间的动力,至少不要只是3分钟。

2012年整年,可以说过的浑浑噩噩的;工资也赶不上家内的水平了;而需要我去做的事情却一件都没有完成。当收入处于弱势地位的时候,低收入阶层的男人是没有话语权的。比如,不久前向家内提出的购买iPhone的申请也被华丽丽的驳回了。是的,我还在扒着老迈的Touch 4,用屏幕几乎失灵的的安卓机的3G Tether来组合实现iPhone的功能。我在跟家内申请买iPhone之前,也预知了这样的结果。我对自己说,无论是否通过申请,我发誓不在2013年之内为自己购买任何水果家出的产品--这既是对自己的低收入赌气,也是在跟家内赌气。

关于工作,每次找工作,我都是无比不自信。这不是无缘无故的--因为我的临场发挥总是很欠缺;而且我也总觉得自己是一个不合格的iOS码农。看着各种招聘网站上白菜价的iOS码农招聘广告,我实在是感到很心虚。我总是试图通过掌握更多的知识来增强自己的自信,但是我自己也不知道,学到什么程度才能让我真正的自信起来--也许永远也没可能。

家庭生活,也面临着各种成长的烦恼,家事的各种烦恼就不在这里八了。

关于2013,我觉得很迷茫,我有些不敢谈目标和展望了,眼看着就要30岁了,我依然一事无成。我不想把现状中的各种问题归结于过去的某些抉择,路既然已经选择,那么还是要继续走下去的。

尽管心中有着各种的不安,我还是决定给自己定一个2013年的目标:
  • 跳槽
(全文完)

2012年12月14日星期五

清理Finder的“打开方式”菜单

不知道你们有没有碰到很多程序,每次升级之后都会在它关联的文件类型的文件的“打开方式”子菜单里增加一个条目。久而久之,“打开”方式里就充满了重复的菜单项,非常烦人。就像我的图片文件的“打开方式”那样:


无论你是否有传说中的“系统洁癖”,如果你经常用“打开方式”菜单,时间久了你肯定也会抓狂的。

自从我戒掉系统洁癖之后,这种风格的“打开方式”菜单居然和我相安无事了很久。不过这两天看书,正好看到了一个解决方案,所以我决定还是“洁癖”一下子比较好。解决方法如下:

打开终端,复制粘贴下面这个命令,执行下。

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user

如果执行后,你还是没有看到效果,那么再执行一下下面的命令:

killall Finder 

解决后的效果如下:



哇啦,重复项目全没了。 :D

你别问我上面那条命令到底做了啥,如果你真的有兴趣,你可以深度挖掘一下。不过说到深度挖掘,TMD,这命令埋得真不是一般的深啊!

2012年8月19日星期日

微博摘:关于沙盒和GateKeeper

今天因为看到因MPlayerX退出MAS所引发的各种对沙盒的批评,我在TXWB上写了点关于沙盒和GateKeeper的东西。本来准备简单写写的,结果还是写了不少,所以决定转载过来。基本上就是原文粘贴过来的,所以逻辑上可能比较乱,而且全是字,请各位见谅了。大家就随便看看吧。


沙盒对用户有什么影响吗?答案是:没有。用户是感觉不到沙盒的存在的。如果一定要说有的话,那么沙盒化的程序可能会比没有沙盒化的程序少一些需要特权的功能。

MPlayerX退出MAS是一个很中国热色的问题。因为MPlayerX需要实现的那些被沙盒限制(不是不允许)的功能,基本上只用盗版影视盛行的中国才有。比如,自动载入下一集,自动加在字幕。因为程序需要读取任意可能的目录下的所有文件--而这正是沙盒所不允许的动作。

虽然我不知道MPlayerX的作者到底和苹果的审核人员在什么问题上没有谈妥。但是我猜测是,MPlayerX的作者希望获得家目录的任意读取权限--因为这样电影文件就能放在家目录的任意位置了--但是苹果怎么都无法理解你一个播放器为什么要这么大的权限。

因为审核者可能并不知道,我们中国的用户经常会下载影视剧“全集”,对于国外的剧集还需要字幕,我们不用iTunes买电影,我们会把电视剧放在任何目录下,等等。。。我猜测,这种认知上的差异,导致了MPlayerX一次次的被拒,最终作者怒而退出MAS。

沙盒化可能带来的另一个问题就是不同的程序之间可能无法共享配置数据了。举个简单的例子。Office套件中的几个组件,在没有沙盒化的时候,可以共享“作者”,“组织”,甚至是序列号信息。但是假如Office套件沙盒化,用户就要为Word,Excel,等单独设置“作者”,“组织”信息了。

当然,Office套件可以简单的读取地址簿中的当前用户的信息,而不是傻乎乎的让用户自己填。而沙盒化之后的程序肯定是走MAS发布,也就无需自有的激活机制了。

沙盒对于码农这边,就悲剧多了。码农调用NSHomeDirectory()访问到的不再是用户的家目录,而是沙盒目录;程序要请求文件,只能弹对话框问用户要--或者请求获得更高的权限--比如,访问读写家目录,读写音乐目录,读写下载目录等。但是这要向苹果说明,你这个程序为什么要这个权限。

沙盒通过限制程序的权限,来保障用户数据的安全。因为即便沙盒化的程序有致命漏洞,所造成的破坏也只是程序创建的文件;对于系统的其他部分是不会有影响的。综上,沙盒机制,会很束缚开发者的手脚,有一些非沙盒化的程序能够简单实现的功能,在沙盒下要麻烦很多。而沙盒对于用户实际上是透明的。

所以在喷沙盒限制自由前,先确定一下自己的身份。如果你是码农,欢迎来喷;如果你是终端用户,你应该做的是喷码农:赶快把程序给我沙盒化去。

然后来说说GateKeeper。GateKeeper是什么?GateKeeper说白了就是程序白名单。要进入白名单的条件是,开发人员要用苹果签发的数字签名来签署程序。GateKeeper很严厉,所有不是白名单的程序都会被操作系统拒绝执行。GateKeeper确实会影响终端用户的日常使用。

很多人会问一个问题:GateKeeper和沙盒有关系吗?答案是:没有。沙盒化的程序一般都来自MAS--大约没有几个开发者会把不提交给MAS的程序沙盒化。而GateKeeper对MAS的程序是自动放行的。GateKeeper主要是限制那些非沙盒化的程序的--因为他们并不能通过MAS发布,苹果也就无法保证程序的安全性了。

苹果通过给开发人员发“良民证”(Developer ID)来控制白名单。获得“良民证”的开发人员,用“良民证”签发程序,表明这是来自“良民”的程序,请系统放行。一旦“良民”做了某些“非法”的事情,比如,用“良民证”签署了一个恶意软件,苹果会撤回该开发人员的“良民证”,以保证系统安全。

GateKeeper实际上会定期从苹果更新数据,以保证那些被撤销的“良民证”不再被系统所允许。从某种意义上来说,GateKeeper是用户和苹果一起来监督开发人员的行为。但是现在的问题来了。有很多开源的软件,并没有用Developer ID签署程序。对于开源软件的重度用户,GateKeeper非常影响使用。

用户可以选择关闭GateKeeper。这样,所有程序都会允许执行;但是对于之前的“Flashback”这样的恶意程序也就能够乘虚而入了。或者用户可以在必要的时候关闭GateKeeper。比如,你下载了一个LibreOffice,但是被GateKeeper阻止了,你可以临时关闭GateKeeper。运行LibreOffice之后再次打开GateKeeper。

只要程序运行过一次,不管有没有通过GateKeeper,系统也不会再阻止它运行了。相信随着时间的推移,会有越来越多的不通过MAS发布的程序能够用Developer ID签发。GateKeeper对于完全使用盗版程序的用户绝对是噩梦。他们能做的是只有禁用GateKeeper;或者不厌其烦的关闭再打开。

总结一下:沙盒是好东西,对用户没有影响; GateKeeper和沙盒没有任何关系;GateKeeper也是好东西,需要时间来解决很多开源软件没有Developer ID数字签名的问题。(事实上很多开源软件已经有Developer ID签名了,比如Adium。)

另外,我觉得,苹果还是过早的推广GateKeeper了。很多用户几乎都是直接禁用的。当然这么做的理由可能是催促开发人员早日使用Developer ID数字签名。

有人可能会拿GateKeeper跟Windows的UAC做对比。简单地说,GateKeeper和微软的UAC的区别在于,UAC是无差别弹出权限对话框;而GateKeeper是有差别对待的,因此GateKeeper会随着时间的推移越来越透明,而UAC不会。

2012年7月16日星期一

OS X 10.8 Mountain Lion里的Autoproxy.pac

注:本文是这篇旧文章的补充。 

背景不再赘述。起因是OS X Mountain Lion删除了Web共享,这给我们使用pac带来了一定的困难。我曾经试图把pac放到我的虚拟主机上,但是这有两个问题: 

1. 可能导致虚拟主机被墙;
2. 虚拟主机的访问速度可能会严重拖慢网页的加载速度。 

关于问题1, 虽然我用了base64加密了pac,但是还是有点担心;而关于问题2,设置了远程pac文件之后,Safari似乎会每次打开网页都要请求一次pac文件。在主机速度比较慢的时候,这个等待时间几乎是不可忍受的。所以,我们还是需要使用本地的http服务器提供pac文件的解决方案。 

我们不太可能为了要一个易用的http服务器配置界面而去装Mountain Lion Server。事实上,虽然OS X Mountain Lion的系统偏好设置里删除了Web共享,但是http服务器依然在系统里。 

你可以在Safari中访问http://localhost,看看有没有打开“It works”的网页。如果有的话,你的http服务器已经打开了。(如果你在http服务器打开的状态下升级安装了Mountain Lion,那么服务器默认就是打开的状态。)如果没有打开,你可以在终端使用如下命令打开:

sudo apachectl start

在http服务打开之后,把autoproxy.pac复制到/Library/WebServer/Documents/下:

sudo cp /path/to/autoproxy.pac /Library/WebServer/Documents/autoproxy.pac

你可以在浏览器中打开http://localhost/autoproxy.pac来检验有没有成功。 剩下来的事情就是和这篇旧文章一样了,你懂的。 :)

 废话不多说了,祝你翻墙愉快。

2012年4月16日星期一

解决iTunes里下载iBooks Textbooks之后变成download的问题

这个问题具体是这样的。在iTunes里下载iBooks Textbooks的时候,有些人会遇到书籍下载之后,眼睁睁的看着书变成download,而无计可施,这样的download文件是无法同步到iPad上的。过程我截了图,大致如下。你看着下载完的文件处理中:


然后看到进度变成100%的时候,到图书下去看,它就变成了悲催的download了,在磁盘上的文件也是download.ibooks。特别是书籍比较大的时候,你甚至连封面都看不到。。。。

然后查看书本详细信息的时候,看不到购买者信息:

这个问题最早是我的一个朋友跟我反映的,是在大家都在下载那本Biology的时候。我一开始没有办法重现这个问题,所以也没有帮我朋友解决这个问题。后来,我买了一本DK Natural History系列的Insects的电子书的时候,我遇到了同样的情况。然后我当场就思密达了。研究了很久,也没有解决。好在iPad上直接下载之后可以看,我也就没特别在意这个事情。

今天,在翻阅iTunes的时候,发现TextBooks里又多了一些新书,然后心痒痒,又下了一对免费书。下载之后发现20多兆的小书处理之后居然是好的!但是70多兆的书就思密达了,当然更大的书也一样的杯具。惨状你已经在上面的截图里看到了。。。

我在Apple Support Communities里搜索了一大圈之后无果。而且这个问题Google的时候也找不到合适的关键词。正当我要放弃的时候,突然灵光一闪,是不是英文用户根本就不存在这个问题,所以才搜索不到结果的呢?

然后我就祭出Language Switcher,用英文Locale打开iTunes。然后。。。然后问题就解决了!!!

后来我又想到,当时我在下载Biology的时候系统语言是日文!看来这个问题只有在中文版iTunes里才有!Fuck it!

虽然这个问题似乎不太好描述,但是我还是一会儿去向水果提交一个Bug Report,希望水果能在以后的版本里修正这个令人头疼的问题。

2012年2月12日星期日

【更新】面对苹果App Store中国店乱象,拒绝上当,八类程序不要买!

本来我并不准备写这篇文章,因为时不时来阅读我的Blog的读者大都是Geek,对我将要说的内容肯定了如指掌。但是我希望本文能够通过搜索引擎,被那些需要的读者读到。

之所以想到要写这篇文章,是因为最近360公司所有程序被苹果下线的事情。我并不想对事件本身做任何评论,不过这个由事件引出的App Store刷排行榜的问题,值得大家了解一下。 App Store的国外店也有刷排行榜的现象,但是中国店的刷榜和骗子软件现象尤其严重。这两天我App Store的排行榜看得比较多,因为实在是看不下去了,所以就简单的讲讲App Store里有哪些程序是不能买的。

1. 内存释放程序

App Store里能混到排行榜前列的内存释放程序都是假的。我之所以这么说,是因为确实有部分逃过苹果审核而混进App Store,能够真正杀进程的程序。然而,这些程序往往都是很短命的,通常两三天就被苹果下架,基本没啥机会混进排行榜。

不过,搞笑的是,那些宣称能够优化内存,但实际上啥都做不了的内存管理程序居然能够靠榜刷堂而皇之的进入排行榜前列。(为了政治正确,我隐去了软件的全称,下同。但是骗子开发者们,请自重!)


既然提到了内存释放的问题,我就多废话两句。

iOS是不需要手动杀进程释放内存的。甚至你双击Home键,从下方的抽屉里删掉程序历史其实也不是杀进程。虽然我不确信删掉程序历史会不会导致程序被系统加速终止,但是实际上,所有退到后台的程序都会很快被系统杀掉。至于快到什么程度,这没有定论。不过这个速度通常是和可用内存的数量有关。在可用内存比较小的时候,程序通常是保存完运行状态,就立刻被系统杀掉了-- 特别是程序运行在内存比较小的iOS设备上的时候。

手动杀进程往往会导致那些退到后台、正在保存程序运行状态的程序意外中止或崩溃,结果可能会导致你的文档丢失、损坏,或游戏进度丢失。所以,即便你抢到了那些被苹果秒速下架的,能够真正杀进程的程序,也不要随意使用它。

2. 来电归属地查询程序

iPhone的电话程序是很封闭的,第三方程序是无法截获来电,并显示来电信息。所谓的来电归属地查询,最多就是在程序里读取通话记录,显示归属地。至于去电归属地,那肯定是在程序自带的拨号盘上显示的。

3. 来电黑名单,白名单

理由同上,不赘述。还有那些什么来电超级追踪什么的,也是骗子程序。


4. 锁屏软件

iPhone的屏幕锁上之后,所有的第三方程序都会转入后台,保存状态,并退出。系统默认的锁屏是无法被第三方程序代替的。所以,这些程序无论它们吹嘘的多厉害,评论里刷了多少5星,肯定是假的。

5. 宣称能够换铃声的软件

iPhone的曲库对第三方程度是只读的。而铃声也属于曲库的一部分,因此第三方程序是无法修改系统的铃声的。

App Store里很多铃声相关软件可能是为了推销,所以宣称能够换铃声。其实最多就是打包了一些铃声,让你复制到电脑上的iTunes曲库里,然后再同步到iPhone上。



6. 电池管理工具

在iPhone上,第三方程序能够访问的电池的API,大致也就只有电池电量,以及是否在充电这样的信息。显示一下电池状态倒是真的,但是管理和优化充电那就是扯淡了。关于电池的保养和维护,建议读者去阅读一下苹果的用户文档,免费的哦!


7. 相机增强(像素增强,夜视)

iPhone 4S的后置摄像头是800万像素;iPhone 4的后置摄像头是500万像素;iPhone 3GS的后置摄像头是300万像素。如果某软件宣称它能够拍出超越硬件限制的高像素照片,要么纯属扯淡,要么就是用插值放大的“假”高像素。你最终得到的照片并不会比自带的相机拍的照片更清晰的,基本上,你得到的只是一个更加模糊,体积更大的照片。

至于夜视什么的,就更扯蛋了。如果你想要夜视功能是为了盗O,那么,建议你下载东洋盗O片,释放你的盗O渴望。


8. 网络提速

这样的软件在电脑上就有很多。特别是几年前网速普遍都是 < 1M的ADSL或拨号的时代,这类软件曾经非常流行。但是这样的软件除了给你推送广告和占用你的CPU和内存资源之外一无是处。如今,当很多iPhone用户依然因为种种原因而爬行在移动龟速的2.5G EDGE网络网络上,或是恨铁不成钢的联通3G抽风的时候,这样的软件又开始进入大伙儿的视线了。

别说iPhone不允许第三方程序干涉系统的网络设置;就算允许,这样的程序也是没有任何作用的。要网络提速,换有高速互联网接入的WiFi网络或3G网络,或者打电话到工信部投诉联通3G网络渣渣才是正途。
另外,还有一些靠程序名字和图标仿知名程序的“假”程序,或者靠性感的名字或图标来吸引眼球的图书程序,也要注意甄别,避免上当。

令人痛心的是,iPhone的工具类软件的排行榜中,排行前列的程序中绝大多数(我写文章的时候,排行前8的工具类收费程序中有7个)是骗子程序。苹果的App Store虽然有着非常严格的审核条款,但是实际上,开发者自我约束的成分还是很高的。而骗子们正是利用了苹果对开发者的信任来欺骗用户,实在是可耻至极。

在结束本文之前,我总结几点鉴别骗子软件的方法吧,希望对你选择程序有所参考:

1. 记住iPhone程序都是运行在一个“沙盒”中,是无法干预其他程序的运行(包括系统设置)的。所以,那些功能“越权”的软件通常都是虚假描述。
2. 性感的软件名字通常是毫不性感的内容。
3. 选程序的时候,要多看1,2星评论的内容,而不是看有多少条5星评论 -- 当然这条建议并不绝对。
4. 记住,软件能力的发挥,是无法突破硬件的限制的。

最后,我要提醒所有能够坚持使用正版软件的iPhone用户,一定要擦亮眼睛,拒绝被骗。

【更新】

因为@ray和@cyfdecyf的留言,我发现上文中有部分内容值得商榷,因此我划掉了那些不太准确的内容。在阅读了苹果的文档之后,我特别更新本文,修正关于iOS程序是否具备系统设置的能力的问题。

根据苹果的文档,第三方程序是具备一定的修改系统设置的能力的,但是这必须通过“配置描述文件”来实现。你可以在“设置” - “通用” - “描述文件”部分查看已安装的配置描述文件(你可能并没有安装任何描述文件,所以没有找到也别紧张)。

配置描述文件存在的意图其实是为了方便iOS设备在企业内大面积快速部署的。但是有很少量的第三方用户程序采用了这种方法修改系统设置:比如第三方VPN提供商用它来完成用户端VPN的快速设置。

根据苹果的文档,利用配置描述文件可以修改以下这些系统设置:


  • 密码策略
  • 限制设备功能(比如禁用相机)
  • 无线网络设置
  • VPN设置
  • 邮件服务设置
  • Exchange服务设置
  • LDAP目录服务设置
  • CalDAV日程表服务设置
  • 网页片段?(Web clips)
  • 身份信息和密钥
  • 高级蜂窝网络设置(APN设置)


我们可以看到,基本都是在企业部署中才会用到的东西。因此配置描述文件所能做的系统设置是非常有限的,也并没有打破iOS的沙盒模型。

基于上述内容,@cyfdecyf解释的关于onavo省流量的原理应该是很准确的。

Onavo 使用时需要安装系统描述文件,里面指定了代理服务器。可能是通过这种方式让 iOS 与代理服务器传输压缩过的数据,同时图片质量的会通过降低质量来减小大小。
Onavo 只能压缩接受的数据,不能压缩发送的数据。

解释中提到不能发送压缩数据也再次说明,第三方程序是无法越权突破iOS的限制的。