设置标签 ‘技巧’

一行命令提速 iPhoto

用了几年苹果系统了iPhoto的图片库一直在增大, 现在已经有几十G大小了, 每次打开都非常(极其)慢!

屏幕快照 2010-07-03 下午06.44.09.png

研究了一下, iPhoto的数据库是SQLite的,优化一下数据库,果然! 打开和关闭的速度都有了质的飞跃

原出处: http://www.macosxhints.com/article.php?story=20090227072825458 (谢谢 Eric Cheng)

步骤:

  1. 打开命令行 cd到iPhoto的数据库文件夹, 一般的如果没有改变的话 直接运行这个就可以 cd ~Pictures/iPhoto\ Library/
  2. 如果没有报任何错误, 运行 for dbase in *.db; do sqlite3 $dbase “vacuum;”; done

就这么简单, 试试吧

[转原文]Gmail 过滤器的20个巧妙用途

不是太喜欢转载别人的文章, 但是这篇文章确实翻译的非常不错, 非常实用 分享给Googler 原文地址: http://rpsh.net/archives/20-ways-to-use-gmail-filters/

  1. Killfile。如果有人给我发送很多 的垃圾邮件(恶作剧邮件、多链接的邮件),他们就会被加入我的KillFile。看一下发件人处的Email地址是否已经存在于我的Killfile过滤规则中,如果已存在,就删除这封邮件;如果没有,那么就把这个Email地址加入Killfile的过滤规则中。
  2. 逻辑命令。过滤器的工作机理类似于与Gmail的搜索功能,所以,你可以使用一些搜索指令如 AND OR NOT。当我要找一些人的地址时,我可以使用OR;当邮件中都包含一系列的关联词汇时我可以用AND。使用搜索运算符会使这个过程更简便:”|”表示OR;”-”表示NOT;空格表示AND;圆括号用来把你的搜索语句中的不同条件组合起来。
  3. 其他的搜索命令。除了上述一般的过滤命令外,Gmail过滤器还可以使用如“from:”, “to:”, “has:”, “is:”, “filename:” 及 “label:”, 使用这些搜索命令会使你的Gmail过滤器更加强大。
  4. 发送提醒邮件。我希望Google能对Gmail增加的其中一个功能就是定时发送邮件。这可以使我能够按规定时间发送提醒邮件给别人。而目前,作为替代我注册了一个可以发送提醒邮件到我Gmail的服务,然后依据邮件标题或内容的不同建立过滤规则以使提醒邮件转发至不同的人。这不是非常的完美,但却容许我根据一定的规则发送提醒邮件给不同的人。
  5. 日程和日志。设置Google Calendar发送事件提醒。你可以创建一个名为事件(Event)的标签,创建一个过滤器使Calendar发送的提醒跳过收件箱放在这个标签下。现在,你不仅可以把你的项目事件放在一处(不再像以前一样分散在收件箱里),而且当你完成这个项目或工作后也不必去给它们添加标记,并且你还有了一个项目全过程进度的日志。
  6. 要做的事(To-dos)。这是一个普通的应用,你可以给自己发送一封需要做的工作的邮件,然后创建一个过滤规则:收件人和发件人都是你的信箱地址,并且使邮件都直接发送到To-dos标签下。这样你就可以在一个标签内看你的所有的“要做的事”。或许,你是个GTD爱好者,你可以为每个内容创建To-dos(如@工作,@家庭,@出差,@电话,等),通过创建不同的标签,发送邮件到 yourname+work@gmail.com(通过使用+号,你的Gmail可以有无限个地址),然后创建过滤规则让这些邮件转移到@work标签内,其他的同上。(注:GDT=Getting Things Done)
  7. 会话式邮件(Follow up)。如果你不是GTD爱好者,那么创建一个会话标签将是非常必要的。建立一个“包含字词”部分为“yourname+follow”的过滤器,并设置这里的邮件跳过收件夹直接存入“@follow”标签下。以后当你发送需要跟随后续内容的邮件时,在抄送地址里输入yourname+follow,这样这些邮件就会放入“@folow”标签中了。注意,你要每天检查一下这个标签,这样才能看到你的会话式邮件。
  8. 将垃圾邮件直接删除到已删除邮件。作为替代Gmail自身的垃圾邮件过滤功能(我们讨厌看到在垃圾邮件这个文件夹后跟着一个很大的数字),创建一个过滤器:在“包含字词”部分输入”is:spam”(点击下一步,Gmail会弹出一个警告,选择“是”即可),在选择操作部分,选择“删除”。以后垃圾邮件就会自动放到“已删除邮件”中了。
  9. 存档书签。如果你正在使用del.icio.us或其他的书签服务,你可以把它们存档在Gmail的一个标签下(如”Bokmarks”)。在像rssfwd.com这样的将Feed内容转发至Email服务的网站,输入你的书签的Feed地址,为它们创建一个过滤规则并存入“Bookmark”标签下。这样在Gmail强大的搜索过滤功能下,你的所有书签就都存放在一起了。
  10. 清理附件。你是不是跟我一样喜欢集中一次性删除旧邮件?在这个过程中我通常使用一些搜索命令,如“has:attachment”, 这样我可以方便地找到所有的大容量的邮件并删除他们。要让这个过程更加简单化,那就创建一个类似的过滤器吧。
  11. 多媒体文件。如果你收到大量的附有如音乐、视频、照片的多媒体文件的邮件,此时也可以创建一个过滤器来方便地找到它们。
    视频文件:”filename:wmv | filename:mov”;
    音乐文件:”filename:mp3″。
    图片文件:”filename:jpg | filename:gif”
    文档文件:”filename:pdf | filename:doc”
  12. 备份。注册一个新的用来储存文件的Gmail帐号,使用”has:attachments”的过滤规则将所有含有附件的邮件都自动转发到你的第二个Gmail信箱里。这样下次再删除旧邮件时就不用担心后悔了。
  13. 新闻组和Feed。你可以为你订阅的新闻组创建一个过滤器,这样它们就不会塞满你的收件箱了。也可以把你订阅的Feeds更新转发到你的Gmail,当你阅读后这些内容会自动标记并存档。如今,你不但在任何地方都可以阅读它们,而且还可以搜索它们。
  14. Bloggers。如果你正在经营一个博客,你可以通过过滤器将你博客的评论和Pingback自动存档于”blog”标签,这样你的收件夹就不会很快被这些邮件填满了。再把你博客统计报告自动归档在这个标签下,你博客的成功在这里就一收眼底了。
  15. 删除旧的已发送邮件。大多数情况下,没有理由要保留那些旧的已发送邮件。使用 “before:2006/06/01 label:sent” ,动作为删除的过滤规则,删掉这些旧邮件。每个月的时候,记得更新这个过滤规则中的日期。
  16. 禁止删除。有些邮件是不希望被删除的,比如那些来自孩子或老板的邮件,通过添加这些联系人的邮件地址创建一个过滤规则将它们移到“Nodelete”标签下。以后删除旧邮件或含有附件的邮件时就不必担心这些重要的邮件随那些垃圾一块被删掉了。
  17. Flickr。创建一个过滤器将转发到Gmail的你的Flickr Feed自动存入一个标签内。现在,通过Gmail你的照片变得可以搜索了。你也可以创建过滤器接收来自某些tags或联系人Flickr更新提醒。
  18. 便签。给自己发送封邮件及时记下你在互联网上的发现、会议上的所得、书本上的感悟或者班级的讨论。使用过滤器将这些内容自动归档在一个标签下。如今,你可以搜索、存档并且在任何地方方便地取得这些内容。
  19. Twitter。使用手机或聊天工具发送信息给Twitter,在每条信息的开始加上一些关键字,如NOTE,TODO,BLOG,FOLLOW,等。转发你的Twitter Feed到Gmail,给每个类型的关键字创建一个过滤器(如,给note twitter创建标签为”Note”的过滤器)。这样通过twitter你可以使用手机发送你的便条,要做的事,提醒以及更多的内容给你的Gmail。
  20. 使用通配符。使用通配符(*)可以用来来找出那些来自某些公司的使用同一域名的的邮件。一个很好的利用就是使用通配符来跟踪自己在Amazon、eBay等网上商店的购物邮件。只需创建一个发件人如”*@amazon.com|*@ebay.com|*@paypal.com|*@barnesandnoble.com“的过滤规则即可。

以上20个技巧够实用吧,喜欢的话赶快去试试!不要忘记告诉你的朋友哦~~

动态调用类和方法

举一个很简单的例子:

某公司的有1000名员工, 每个员工的工资都不一样. 发工资的时候, 这要是人工去发, 耗费的时间和精力是非常大的. 所以财务会打一个表格给银行, 委托银行转账.

站在银行的角度, 如果有1000个公司, 委托银行转账发工资. 它应该怎么做呢? 它需要通过电子转账系统, 输入公司名字, 每个员工的工资数, 就可以实现自动转账了.

好, 我们回到 iPhone 开发上来:

我们现在面临的情况是, 有10个类, 每个类里头都有n个方法(前提是方法名有规律可循,比如 setA0,setA1…) 如果挨个去init类, 然后挨个调用方法,这样你一天就不用干别的了.

ObjC里面,我们可以这样实现:

有数组: classNames, 存着 类的名字
方法名都是 setA 开头

for (int c=0; c<[classNames count]; c++) {

NSString *className=[classNames objectAtIndex:c];

id class=[[NSClassFromString(className) alloc] init];

for (int i=0; i<[params count]; i++) {

[class performSelector:NSSelectorFromString([NSString stringWithFormat:@"setA%i",i])];

}

}

两个重要的宏 我加大字体标出来了,然后你可以再发挥一下, 比如传参数

半透明状态栏与导航条的错位

iPhone的状态栏可以设置成半透明, 这是众所周知的, 用UINavigationController,在页面切换时, 如果你的子viewController的view是全屏的(480*320) 就会出现错位, 表现是所以的子view会向下偏移了 20像素 (就是状态栏的高度).

我搜索了好长时间也没有找到答案, 于是自己去看官方文档, 结果发现了这个方法, 这是UIViewController的一个属性.

wantsFullScreenLayout

看字面意思就很好理解(苹果的方法名都很好理解, 还是带时态和语法的 很人性化), 就是”我要全屏布局” 这样错位的问题就解决了

把UIView覆盖到状态栏上的方法

Reeder

View In iTunes

最近iPhone上的一个新闻阅读软件 Reeder 更新了, 非常好用, 稳定,而且速度飞快. 用了之后 我立马就把原来的 Byline 删除了.

这个软件征服我这个吹毛求疵的人的一个地方, 其实在于一个小细节, 有了这个细节, 我觉得, 这软件值了!

这个细节就是系统状态栏图标, 从来没有一个程序在状态栏上做文章, Reeder 做到了, 新闻的刷新, 图片加载, 在系统状态栏上显示, 显得非常的苹果味道, 如图:

IMG_0177.png

当然, 本文是讨论技术, 不是软件评测.

国外好多论坛上在问这个问题,但答案都是需要Private API之类的,无法上Store的方法. 但是Reeder怎么可以? 我也得可以才行 :) ,经过一段时间的琢磨, 我知道了这个实现方法, 分享给大家.

方法的原理就是, 生成一个新的UIWindow, 把这个Window放在状态栏之上! 其实这个效果早在2.0的时候就能实现, 只是我们这些不求甚解, 学习不扎实的人没有注意到罢了.

那具体怎么做, 我先卖个关子, 大家自己根据这思路研究一下, 其实, 很简单, 很简单, 我几天后公布答案 :) 不要抢答噢 嘎嘎~~~

——————————–

公布答案:

首先 继承 UIWindow, init的方法: 关键的语句 self.windowLevel=UIWindowLevelAlert;

- (id) init

{

CGRect f=[[UIScreen mainScreen] bounds];

CGRect s=[[UIApplication sharedApplication] statusBarFrame];

self = [super initWithFrame:CGRectMake(0, 0, f.size.width, s.size.height)];

if (self != nil) {

self.windowLevel=UIWindowLevelAlert;

self.backgroundColor=[UIColor clearColor];

[self makeKeyAndVisible];

}

return self;

}

现在 在这个window添加view 就会覆盖到状态栏上了, 你猜对了么??

防止你的iPhone程序遭盗版(入门篇)

先澄清一下, 我也是盗版用户(先自己抽两嘴巴, 但是我已经花了$200买app, 买觉得值得的程序, 而不是apple推崇的冲动式购买, 装盗版是先预览一下这个程序是不是值得买). 在中国做软件, 想不被盗版, 不太现实.
不想自己辛辛苦苦写出来的程序被盗版? 接着看.

首先简单介绍一下原理:

现在大多数的破解苹果验证安装app的办法都会动一个文件, 就是在.app文件夹下的”Info.plist”, 也就是那个程序信息文件.

代码很简单, 不再详细解释什么意思了

1. 检查Info.plist 是否存在 SignerIdentity这个键名(Key).
破解的程序是不会有这个键名的, 苹果没给你加, 你自己没有加, 如果有, 那是哪儿来的呢?? 嘻嘻….

if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @”SignerIdentity”] != nil) {

  // 这就是被破解过的app

}

2. 检查3个文件是否存在

NSString* bundlePath = [[NSBundle mainBundle] bundlePath];

BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:(@”%@/_CodeSignature”, bundlePath)];

if (!fileExists) {

// 这就是被破解过的app

}

BOOL fileExists2 = [[NSFileManager defaultManager] fileExistsAtPath:(@”%@/CodeResources”, bundlePath)];

if (!fileExists2) {

/// 这就是被破解过的app

}

BOOL fileExists3 = [[NSFileManager defaultManager] fileExistsAtPath:(@”%@/ResourceRules.plist”, bundlePath)];

if (!fileExists3) {

// 这就是被破解过的app

}

3. 对比文件修改时间是否一致, 看看你的程序是不是被二进制编辑器修改过了

NSString* bundlePath = [[NSBundle mainBundle] bundlePath];

NSString* path = [NSString stringWithFormat:@"%@/Info.plist", bundlePath];

NSString* path2 = [NSString stringWithFormat:@"%@/程序名字", bundlePath];

NSDate* infoModifiedDate = [[[NSFileManager defaultManager] fileAttributesAtPath:path traverseLink:YES] fileModificationDate];

NSDate* infoModifiedDate2 = [[[NSFileManager defaultManager] fileAttributesAtPath:path2 traverseLink:YES] fileModificationDate];

NSDate* pkgInfoModifiedDate = [[[NSFileManager defaultManager] fileAttributesAtPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@”PkgInfo”] traverseLink:YES] fileModificationDate];

if([infoModifiedDate timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) {

//Pirated

}

if([infoModifiedDate2 timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) {

//Pirated

}

如果以上3条都没挡住丫挺的步伐, 请等我出高级篇吧 :) 恭喜发财!

防止文字变模糊的小窍门

今天忽然想起来这个窍门,而且还是做Flash的时候得来的, 给大家说一下. 有时候, 我们在放置一个UILable 或者 TextView或者任何带文字的控件的时候, 很可能出现的一种情况就是, 发现文字变模糊了.

问题出在哪儿? 就是这个控件的坐标的问题, 很简单, 把控件的center的x,y值取整就解决了. 之前做过AS的应该都知道这个是文字渲染的问题, 我做iPhone后第一次遇到这个情况的时候想也不想的就取整了, 果然问题也解决了

iPhone企业版开发者申请小记

前面介绍过了 个人版的申请,开这里,我们继续企业版的申请 :)
请注意这个企业版并不是大家理解的大家一起开发用的公司帐号,不是Company,是Enterprise,或者叫 in-house, 此证书不需要经过App Store批准就可安装到用户手机上,或者说是个无限制版的AdHoc

下面是企业应用的一些细节问题:

1. 需要证明您的企业有500名以上员工

2. AdHoc版本只能发给最多100个人,并且需要知道手机的UDID, 企业应用程序没有限制,也不需要手机ID

3. 可以用Private API !因为没人审核你,娃哈哈!!无法无天了

4. 用户安装非常简单,只需要从网络或者邮件里下载这个程序和想要的预置文件,通过iTunes软件打开后同步iPhone即可安装。任何人都可以安装运行,所以要确保此程序存放的位置安全。

5. 用户安装后,程序可以自己升级而不需要重新给每个用户发放新版本。(相当于企业自己有一个app store)

6. 申请此资格需要299美金

7. 企业DUNS编码 (在线填写)
注: 企业可通过D&B网站http://www.dnb.com进行申请,中国企业的话可直接至其中文网站进行邓氏编码注册,其中国公司为上海华夏邓白氏商业信息咨询有限公司(http://www.huaxiadnb.com/chinese)为方便起见可直接向D&B中国公司联系进行申请,需要提供一些资料,并支付费用(一千到两千RMB左右)。请注意同一企业在各地的实体应该有不同的邓氏编码,因此如果企业在各地有分公司或者不同实体厂区的话,应在申请邓氏编码时告知D&B,根据实际情况申请该编码。

iPhone个人版开发者申请小记

这是个人版的开发者申请小记,本博还有一篇兄弟篇 “iPhone企业版开发者申请小记很快已经发布。

在申请之前,我google了很多大家的申请心得和注意事项,感觉非常的麻烦。我的整个申请过程,从提交到正式开通,一共用了几个小时,非常的速度。下面是几点跟主流说法不一样的地方。

  1. 填写开发者姓名的时候,其实可以用昵称(我用的Travis),尽管官方都说必须用真是姓名,而且我还发邮件给苹果中国询问过此事。但要记住一点,账单用户的姓名必须要跟你的信用卡上印的名字一致!
  2. 有条件直接发传真的尽量直接发,别图那几块钱的便宜找个免费网站来发,因为你的传真内容包含了你的信用卡签名,有效期,卡号,这些信息就足够不轨之人用你的卡来买东西了!
  3. 如果你的apple id在自己公司的开发帐号上,并且你有权访问iTunes Connect,那你可能就麻烦了,因为你只能访问你公司的Connect了,并不像登陆的时候选择Team进入。
    更新:我给apple发邮件说明了情况,他们很快就手动给我重新配置了。邮件全文:

    “Travis 您好!

    感谢您联络苹果开发者支持。

    我们重新设置了您在 iTunes Connect 中的相应设置,目前您无法登录 iTunes Connect 的问题已经解决。请您重新尝试登录。

    如果仍然有任何问题,欢迎与我们联络。”

  4. 你会收到2份扣款记录,$1和$99,没关系,苹果不会要你的1美金的,那是用来验证你的信用卡的,很快会还给你的。
  5. 给技术支持发邮件的技巧,如果你是在白天发,那么发到中国支持部,如果你是晚上发,发到美国总部,这样能最快速的收到回复,原因你一定清楚 :)

现在想到的就这么几条,其实没有大家说的可能会十天半个月的。收钱的事儿上,他们很有效率的 :)
欢迎大家指正!

Mac删除“打开方式”里面重复的软件列表方法

安装的程序多了, 时间长了, 右键菜单的打开方式了 就堆满了, 如图:

开terminal(终端),复制粘贴(完整的一行,是一条命令)

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

Page 1 of 212
回到顶部

关于我:

  • iPhone 开发者. 自由职业者.
  • 苹果忠实用户. 完美主义者.
  • Email/iChat/MSN/GTalk: i@imi.im
  • Twitter/Sina: @TraWor
  •  

    Switch to our mobile site