2013年12月15日星期日

ld: framework not found IOKit

http://stackoverflow.com/questions/17542092/iokit-not-found


ios7 里面 在使用io.kit时 报错


ld: framework not found IOKit


Best thing to do is this until Apple issues a fix.
cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/IOKit.framework
sudo ln -s Versions/A/IOKit .


2013年12月3日星期二

邮件沟通的十八般武艺

http://www.geekpark.net/read/view/168314

之前我们讨论过一篇《你写邮件真的是在有效沟通吗?》。我们已经从沟通的基本模型和模式当中了解到。邮件沟通的形式是推式沟通,它带来的最大问题就是,它有可能没办法发展成互动式沟通,因为你并不能保障对方一定能收到,并总能给你提供反馈。
同时,因为邮件沟通本身的特点,它也只能做一个不靠谱的 EDM,我们没有办法去改变它。而如果真的想要有效沟通,我们则必须借助其他沟通方式,或者为邮件寻找一些最佳拍档来改进它。今天我们介绍的这些工具。

一个设置

前面提到用邮件来做「沟通」并不完整。是因为它没办法确保对方真的收到并发送给你反馈。而如果你经常通过邮件来获取你的 Next Action,那只是将诸多邮件「回复」了,并不是算处理完邮件了。
如果你使用 Mac 并使用 Mail 客户端,你需要修改一个设置,即「编写」下的「自动密送给自己」。这样即使是你回复给别人的邮件,在你发送以后,它们也还是会出现在你「收件箱」里。
这相当于是一种提醒,提醒你对方并没有确认收到你的消息,也就是「反馈信息」,如果时间太长,你就必须通过电话或再发邮件等方式直接询问沟通效果。避免对方的技术遗漏或者粗心遗忘。
一开始你的收件箱会因此而变得更加壮观,但是它的两大好处是,你可以点完发送后,确保网络有将邮件确实发出。因为发出后,它会立刻出现在你的收件箱,而不用再去「已发出邮件」里查看。还不会因为网络问题,迟迟没有发出,你也不知道,因为这很容易发现。第二个好处,它时刻提醒着你,对方给出反馈后,沟通才算完成。可以避免你叫对方 Follow up 以后,对方却迟迟没有动静,而你已经把它做为已处理完的邮件放了非收件箱里,而错过了再次沟通提醒的时间,而导致项目延误。

利用公告板来分担邮件的工作

前面提到,电子邮件是一个非常好的推式沟通方式。主动发起投向特定人群,但信息却可能因为多次回复和不断加入的沟通对象而出现损耗。因此你可能需要借助第三方工具来辅助完善沟通。对于创业公司,利用 Evernote (国际版)来做这个公告板或许是个不错的选择。
Evernote 的共享功能是个非常不错的「公告板」。它可以放置类似规章制度、项目进度等图文混排的内容。它的好处是,内容的主体是放置在独立在邮件之外的地方,不会因为转发或回复的变长出现损耗,只有有链接能链到它,它始终能够保持自己的完整。
另一个好处就是,它始终都是最新版,有权限人可以对它随时更新。如果你用邮件公布一件事情,可能公告内容引发讨论,发现确实有错误,而在这时还没有加入进讨论的人,可能会因为邮件里出现过多个版本,而导致信息出现损耗。
所以利用邮件,你需要做的是发起话题的时候,就已经将 Evernote 的共享页面建立好,一次性将所有人导入到这里查看,要求所有人在书签保存此页面,并在出现信息冲突时,始终以此页面信息为准。
这样做的好处是《彻底清空你的收件箱》里提到的,信息被迅速归档和被处理了(被加为了书签,而不是还趟在邮箱里在需要的时候等待检索)。
用这种方法来发布项目相关邮件时,它的可查阅性远比邮件友好。比如,你几乎每周发送一个项目汇总进度的报告,每次抄送你认为的项目相关的所有人。结果最后出现了两个糟糕的结果,原本你认定跟项目无关的公司同事,在项目进展后期,表示并不知情项目,而这对他很重要。另一情况是,明明你每次都有抄送在内的人,却表示对其中某一个进度和决策情况并不了解。
所以利用邮件,你需要做的是发起话题,并以「【项目启动】XXX」为标题先给全公司发送一个邮件,告诉你识别和没识别出来的所有干系人一次通知,在 Evernote 的共享页面里,你介绍了项目开始和结束的时间,执行的主要内容,寻求的哪些资源,和如果需要对接可以找到项目中的谁,并要求有需要的所有人,并将该页都保存成书签,如需要了解项目进度时,可以「自主」地到这里查看。虽然前面全公司群发,给一些人带来了「骚扰」,但可以最大限度地避免干系人的遗漏,这样的骚扰只有一次。
之后项目每取到一个里程碑或者时间段的汇总,项目经理都应该抄送所有识别出的项目干系人,以及用 Evernote 共享页的形式来公告内容。因为公告内容是允许更新的,所以你每次都是增量更新,除了这次个阶段成果,之前每阶段取得的成果,都可以在页面的下方保留着。原本散落在邮件里多处的报道,在这里变成「日志」。所有可能某一次错过了邮件的项目干系人,可以在查看这一次项目进度,随便看看上一次的进度报告自己是否有遗漏。
另,在不是审核汇报时间点的时候,你可以将已确定,但并不需要群发邮件的事情,先增量更新进来。如,上次汇报时,某人员还未确定。而现在人员已经确定下来了,但在你下次汇报之前,他都并不会加入到项目,又有几个人关心此事的进度。则项目经理只需要在公告板里用一句话更新此内容就可以了。避免了需要了解这一情况的人,分别给你发邮件询问进度浪费了时间。而在下次汇总更新时,将其间的各种增量统一更新到一起,再发一个邮件。
整个 Evernote 共享页是由你整理更新,最新最准的项目内容,同时查看和检索起来,它都比邮件友好。邮件和它配合的沟通过程中,最重要的作用就是定期发送的 EDM。需要持续渐进并存在权威发布人的信息都应该尝试用此方法。

利用知识中心来管理文档

知识中心可以是很多心态,wiki、共享服务器、日历等。这里主要指的是组织过程资产。它主要是在项目组织、执行过程中收集、产生、制作的所有文档。对于创业公司,利用 Dropbox 来做这个中心或许是不错的选择。
我们可能会发现很多创业公司对邮件太多的依赖,并不太习惯将合同和协议以外的任何内容打印出来存档。而多数的文件内容甚至没有在一块硬盘里。只是你问他要时,他可以从邮件里面检索出来。当然首先要这个人回想得起合适的关键词,其次还要这个人还在公司工作。
文档存在邮件里,并不能算是存档了。因为特殊原因,员工使用了自己的私人邮箱来处理了相关文件,这时候如果其他员工在他离职时没有获得相关拷贝,将可能带来很多不可考的问题。而有的公司是在员工离职时,注销员工的公司邮箱,里面的未被处理的相关信息也有可能就此消失。
知识中心除了存档共享以外,它其实也是帮助我们沟通的重要工具。试想我们多少次沟通的低效,都是因为对方缺乏背景知识,或者对新技术的了解,以及项目的最新进展的懵懂而导致的呢?
因此你团队的 Dropbox 或公司的共享服务器里,至少得有这些东西:适合于员工了解公司技术的培训资料、之前所有项目归档的文件(图片、视频、文档)、可用调用的公司资源联络方式以及一些术语表。
发邮件的目的是为了沟通,而共享 Dropbox 就是消除信息不对称,使得所有应该被相关人清楚的事情,已经出现在他自己的电脑里,从而降低沟通门槛。
Dropbox 的另一个好处就是共建。获得分享权限的所有人,都可以拖入自己觉得跟项目相关的文档内容。使用它来做为头脑风暴的素材收集、分别制作文件的汇总分发以及文稿版本更新都是非常有用的。
值得注意的是,虽然 Dropbox 能够将你拖入的文件自动同步到对方的共享文件夹,但有重要文件的收集完成和紧急文件的制作同步完成以后,一定还是要发一个邮件通知对方。因为 Dropbox 的通知可能在对方不在桌面前的时候错过,他也不可能随时看文件夹检查。因此,一封带时间戳的电子邮件以 EDM 的功效通知对方绝对是提高效率的。

其他工具

电子邮箱如果想提高沟通的效率,是有诸多禁忌的。我们应该让我们的邮件中的信息被迅速整理之后,然后离开邮件,而不是沉迷在邮件的往来过程中。
虽然现在类似项目管理工具 Basecamp 以及 Google 群组的终极形态都是邮件。但是里面提及的内容,我们还是在让团队的所有人建立起一个共享性质的东西让大家查阅,从而让推式沟通变成拉式沟通,减少骚扰。
因此 Dropbox 存项目文件、用自己的 GTD 工具管理邮件里获取的待办事项、用共享的日历获取项目里程碑和 Deadline、用 Exchange 或者 Base 来管理团队共享的联络簿并要求大家对共享的保存浏览器书签。
想象一下,如果这些渠道都能保持畅通,那么你的邮箱清净不少,沟通也会高效很多。
如果你团队的邮件很大一部分的邮件内容,都是有些成员试图分享一些有价值的文章、图片或视频。我想,只要不是原创的,他们几乎都来自于互联网,你何在 点点网 或者是 新浪轻博客建立立一个 link blog 呢?它只需要你将文章的链接发给它对应的地址,就可以将所有的「文摘」整理进一个博客。
这样你即可以防止在别人工作的时候,发送该邮件带来了骚扰;或许还可以因为这个轻博客的建立,为团队建立一个副产品,形成一个独特的「行业精选」。大家只要养成没时间,我就忙工作,有时间我就去逛文摘的习惯,邮件就可以更清静了。
总之,想要写出一封高效、专业的电子邮件,首先要对沟通的目的和效果有所预见,然后选择合适的沟通方式,最后才采用邮件这个方式「通知」大家。好邮件的真功夫,其实是花在邮件之外的。

你写邮件真的是在有效沟通


http://www.geekpark.net/read/view/168310

电子邮件是现在创业团队以及互联网公司最常用的沟通方式。但是它的沟通效果到底如何?有什么禁忌和技巧,你又是否真的了解了?如何做到有效沟通,如何通过发送有效的电子邮件,确保你的沟通达到预期呢?
要想有效沟通,我们不妨先看看,到底什么是沟通,它的基本模型是怎样的?
「沟通」的定义:人与人之间、人与群体之间思想与感情的传递和反馈的过程,以求思想达成一致和感情的通畅。
如图中所示,发送者通过编码将信息传达给接受者,中间穿过噪声后被接收方解码并理解,然后接收方再通过编码将反馈信息穿过噪声发给原本的发送方等待解码。
它的前半段看起来很像电视的工作方式,电视台发送编码信号,电视天线接受信号,通过将信号从噪声当中的剥离以及放大器的解码,最终在电视上显示画面。而我们从来不说,你跟电视做沟通,是因为它缺少了后半段这个必需的过程,也就是确认收到信息。
发邮件并不是沟通,除非对方有回复,否则就只是「EDM」。
在工作中发送邮件,总是默认对方能够及时并真的能够收到还理解我们的邮件,而事实往往不是这样。

有效对付沟通噪声——距离

最好的邮件就是不发邮件,因为邮件拉长了沟通的距离,而距离是沟通最大的「噪声」。「距离」可以理解成物理的,也可以理解成链条的。
物理距离可能是真的站得比较远,而导致现实的声音传递有误,最终沟通失败。也可能是因为灵活的办公制度,使一些原本可以面对面的沟通,变成了电话或电子邮件的沟通。
紧密型集中办公显然有助于缓解这一问题。你写超长邮件的事情,可能一句话就能表达清楚,因为团队成员时刻和你保持着信息同步,你的沟通只需要每次做「增量更新」。
而当我们不得不发邮件时,一定要避免沟通链条长过(长)远而导致出错。比如团队外部有人寻求合作,你做为第一个接触的人,跟对方来回了你几个邮件最终判定事情靠谱,然后你将邮件抄送了对应的市场人员。而这种抄送,只是在让情况立即变复杂,除非你在邮件中有直接的分工。因为你抄送邮件,邮件的下端是你跟对方多次交流分散的信息,冗余的信息加剧了阅读的「距离」(长度),信息再一次出现损耗。
这时最准确的作法是,跟对方沟通到一个阶段以后,新拟一封邮件,花时间介绍背景和已有交流成果。一次只抄送一个人,并相互介绍对方,委派这个人继续分发任务给团队内部(如有),然后始终汇总信息并与外部人员沟通。让外部人员尽量只跟我们一个员工沟通一件事,如果跟自己没关系,也可以直接表明后面的邮件不用抄送自己。因为外部沟通不同于内部沟通,对方很可能不了解这边人员的具体职责,而多抄送或漏抄送,最终带来沟通失效。
规划沟通最重要的工作就是,确定和限定谁应该与谁沟通,以及谁将接受何种信息。

了解沟通方法的分类

因为不同的沟通需求,我们需要不同的沟通方式。
交互式沟通:这指的是沟通的双方或者多方之间进行多向信息交换。目的是确保全体参与者对某一话题达成公识的最有效的方法,包括会谈、电话会议、视频会议等。
这一类的沟通方式号称效果具佳,但其实损失也越多。一个人开2个小时的会,则损失2个小时的产能,如果10个人都参加了这个会就损失了20个小时的工作绩效。同时确保这10个人的同时出席或空闲,可能还有更多成本。所以关于团队内部的一些分享会,除非它真的值得,否则它就只是在浪费宝贵的时间。
推式沟通:也就是平级沟通当中最常提到的[Push!Push!]。是信息发送给了解信息的特定接收方。这种方法能确保信息发布,但目标确保信息到达目标受众,或信息已被目标所理解。推式沟通包括了,上面提到的电子邮件以及书信、备忘录、报告、传真、QQ留言、短信、微信、新闻稿等。
上面已提过,这种沟通的方式,不能算是完整的「沟通」行为。除非你能够确切得到对方理解后的反馈或成果,沟通才算完成。但,你其实当你采用推式沟通时,你并未想和每个人都「完成这次沟通」,比如,你发公告号召一个活动,只有最终响应了你的才能算是沟通,但你也并没有在期望每一个人都回复。可见,这种沟通方式的保险系数没有「交互式沟通」的高,但如果你的对方都采用「推式沟通」,那其实你只要从言谈中了解对方的理解程度和反馈,那它也就是一个成功的「交互式沟通」了。
拉式沟通:在信息量很大或受众很多的情况下使用。它要求接收方自主自行地获取信息内容。包括企业内网、电子在线课程、知识库等。
其实除了概念中的这些信息,前面提到的给新人「单向沟通」中提到的规章制度以及组织机构图、业务分布与介绍这些,都应该属于拉式沟通的一部分。一定要确保你的团队成员,在需要知道这些信息的时候,有一个固定的地方与流程迅速获取到。前往不要饶恕一个把拉式信息发邮件的讨厌鬼,他是在浪费所有人的效率。

做一个邮件终结者

已经到了你下班约会的时间,iPhone 还持续推送了 48 封邮件的团队是不可饶恕的。沟通的目的是确认沟通信息大家已经知道,并采取了有效行动,而不是一味的增加邮件的未读数字。这种情况,你需要做一个邮件终结者,立即采用以下几种解决方案。
1、一个值得来回 48 封邮件讨论的主题,假设都是有价值的,显然应该立即组织会议。
2、一个 48 封但来回都是同一个事情的 N 种作法时,他们显然是应该是头脑风暴的阶段,且他们快速回复证明了他们基本在线,你应该立刻将他们组织进即时聊天工具继续讨论。
3、一个 48 封邮件往来,每个人都是在「贡献」某种内容的时候,你应该立刻指派一个人做为「投件箱」,所有人直接向它投递,并由他统一汇总整理。
4、一个 48 封邮件往来,大家都在围绕一个主题讨论,其中最重要的讨论是因为其中两个人因为风格、习惯或关切点不同而导致的争论,应该立刻要求他们私下讨论。
5、一个 48 封邮件往来,其中规律是主题——讨论——询问主题——接着讨论。这显然是跟大家都可能相关的信息,因为沟通链条的变长,而出现了信息损耗。正确的方法应该采用拉式沟通,在一个特定的地方公布信息,发布的信息始终能够「置顶」,将所有相关人人一次性导到新地方,在下面接着讨论。
6、一个 48 封邮件往来,在讨论某个可交付成果的 N 种问题,立即核实相关活动进度安排,如果可能拖延则必须采取行动。而如果离成果交付还有时间,而现在大家在畅想可能性,再必须强调原来的需求范围,并新建一个邮件基于新的可能另做讨论。
当然,你不用真的见到了 48 封才采取行动。同时,真正有用的信息都应该被你整理和提炼出来,在极客公园之前发布过的《彻底清空你的收件箱》 里我们可以看到,邮件里面的所有信息都应该有一个归属地:项目文件夹、待办清单、流程表、地址簿、浏览器书签。如果不是这几类,显然有人把信息放错了地方。对于这点,在我们稍后的文章里为大家有详细介绍,这里不再重述。

2013年12月2日星期一

ASIHttpRequest缓存

http://my.oschina.net/openlab/blog/145832


缓存能解决的问题 
1,当没有网络连接的时候。 
2,已下载的数据再次请求时,仅当它与本地版本不样时才进行下载。 

缓存帮你解决问题时需要搞定的几个需求 
1,给谁存 
2,什么时候存 
3,存哪里 
4,怎么清理 

--------------------解释分割线------------------------ 
1,给谁存的问题,其实也叫缓存级别,全局还是局部 
有两种,一个是全局的设定,所有get都要存 
二是单一request自己搞。 
第一种,全局的get请求,要求被缓存的数据必需是成功的200请求: 
[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]]; 
第二种,单一的request自己撸 
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
[request setDownloadCache:[ASIDownloadCache sharedCache]]; 
或者像这样子 
ASIDownloadCache *cache = [[[ASIDownloadCache alloc] init] autorelease]; 
[cache setStoragePath:@"/Users/ben/Documents/Cached-Downloads"]; 
[self setMyCache:cache]; 
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
[request setDownloadCache:[self myCache]]; 


2,什么时候存,好听一点叫缓存策略 
以下是策略可选列表(可组合使用): 
ASIUseDefaultCachePolicy这是一个默认的缓存策略 
ASIDoNotReadFromCacheCachePolicy 所读数据不使用缓存 
ASIDoNotWriteToCacheCachePolicy 不对缓存数据进行写操作 
ASIAskServerIfModifiedWhenStaleCachePolicy 
默认缓存行为,request会先判断是否存在缓存数据。 
a, 如果没有再进行网络请求。  
b,如果存在缓存数据,并且数据没有过期,则使用缓存。 
c,如果存在缓存数据,但已经过期,request会先进行网络请求,判断服务器版本与本地版本是否一样,如果一样,则使用缓存。如果服务器有新版本,会进行网络请求,并更新本地缓存 
ASIAskServerIfModifiedCachePolicy与默认缓存大致一样,区别仅是每次请求都会 去服务器判断是否有更新 
ASIOnlyLoadIfNotCachedCachePolicy如果有缓存在本地,不管其过期与否,总会拿来使用 
ASIDontLoadCachePolicy仅当有缓存的时候才会被正确执行,如果没有缓存,request将被取消(没有错误信息) 
ASIFallbackToCacheIfLoadFailsCachePolicy这个选项经常被用来与其它选项组合使用。请求失败时,如果有缓存当网络则返回本地缓存信息(这个在处理异常时非常有用) 


3,存哪里的问题,官方名词:缓存存储方式 
两种,放入本地还是内存 
a, ASICacheForSessionDurationCacheStoragePolicy,默认策略,基于session的缓存数据存储。当下次运行或[ASIHTTPRequest clearSession]时,缓存将失效。 
b, ASICachePermanentlyCacheStoragePolicy,把缓存数据永久保存在本地, 


设置在单个request身上 如: 
ASIHTTPRequest *request = [ ASIHTTPRequest requestWithURL:url ]; 
[ request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy ]; 




4,如何清理的问题: 
三种 
(1),手动做:request上 clearCachedResponsesForStoragePolicy 
(2),网页做:设置是否按服务器在Header里指定的是否可被缓存或过期策略进行缓存: 
[[ ASIDownloadCache sharedCache ] setShouldRespectCacheControlHeaders:NO ]; 
(3),定时做:设置request缓存的有效时间: 
[ request setSecondsToCache:60*60*24*30];// 缓存30天 




其他: 


可以判断数据是否从缓存读取: 
[ request didUseCachedResponse ]; 


设置缓存所使用的路径: 
[ request setDownloadDestinationPath:[[ ASIDownloadCache sharedCache ] pathToStoreCachedResponseDataForRequest:request ]]; 


iOS4中,当应用后台运行时仍然请求数据: 
[ request setShouldContinueWhenAppEntersBackground:YES ]; 

2013年12月1日星期日

mac os 定期任务配置


http://www.netingcn.com/mac-os-plist.html


在linux下执行定期任务可以使用crontab,目前mac os也可以使用它,不过已不推荐使用。推荐做法是采用plist脚本,plist脚本可以设置执行的动作,时间间隔等其他一些信息。另外crontab的最小时间间隔是一分钟,使用plist脚本原则上时间间隔可以为一秒。
plist脚本存放路径为/Library/LaunchDaemons或/Library/LaunchAgents,其区别是后一个路径的脚本当用户登陆系统后才会被执行,前一个只要系统启动了,哪怕用户不登陆系统也会被执行。
可以通过两种方式来设置脚本的执行时间。一个是使用StartInterval,它指定脚本每间隔多长时间(单位:秒)执行一次;另外一个使用StartCalendarInterval,它可以指定脚本在多少分钟、小时、天、星期几、月时间上执行,类似如crontab的中的设置。
一个简单例子如下:



    Label
    com.yangyz.cron.test.plist
    ProgramArguments
    
        /Users/yangyz/plist-test.sh
    
    KeepAlive
    
    RunAtLoad
    
    StartInterval
    60

其中key是plist脚本定义的属性,紧跟着的下一行是该属性对应的值。上述脚本是每间隔60秒执行一次/Users/yangyz/plist-test.sh这个shell脚本,也可以使用StartCalendarInterval来替换StartInterval达到同样的效果,例如:
StartCalendarInterval

  Minute
  0
上述设置的意思为每天的每个小时的第0分钟执行,也即使每60秒执行一次。
plist脚本中定义的属性以及具体的含义,可以参看苹果官方网站的说明,地址为:launchd.plist(5) Mac OS X Manual Page
launchctl命令可以控制plist脚本停止或重新加载。例如:
停止脚本com.yangyz.cron.test.plist运行
launchctl unload /Library/LaunchDaemons/com.yangyz.cron.test.plist 

启动脚本com.yangyz.cron.test.plist运行
launchctl load /Library/LaunchDaemons/com.yangyz.cron.test.plist
如果执行上面命令看到launchctl: Dubious ownership on file (skipping): /Library/LaunchDaemons/com.yangyz.cron.test.plist这样的错误,其原因是该脚本的owner和当前执行操作用户不一致。使用chown修改一下即可。

Chown命令

chown 是一条在Unix系统中用于设置文件所有者和文件关联组的命令。 需要超级用户的权限才能执行此命令。只有超级用户和属于组的文件所有者才能变更文件关联组。非特权用户(非超级用户)如需要设置关联组可能需要使用chgrp命令。

使用方法

# chown root /var/run/httpd.pid
  • 把/var/run/httpd.pid的所有者设置root。
# chown rob:developers strace.log
  • 把strace.log的所有者设置为rob,文件的关联组设置为developers。
# chown :512 /home
  • 把/home的关联组设置为512(关联组ID),不改变所有者。
# chown -R us base
  • 把base以及其目录下的所有的文件的所有者设置为us。-R选项将递归的修改该目录层次结构中的所有文件的所有者和组用户。

2013年11月11日星期一

goagent 403 does not have permission to get URL /2

goagent 不用访问 blogger


403. That's an error.

Your client does not have permission to get URL /2 from this server. That's all we know.


解决方法有两个:

1、需要重新更新gogent

2、或者使用google_hk