gaosboy 发布的文章

Bash Shell 里的各种括号

今天在 SegmentFault 上看到又有人问起关于Shell里各种括号的问题。对于很多玩Shell的人,括号是个很尴尬的问题,用起来没问题,说起来不明白,我在这里总结一下Bash Shell几种括号的用法和区别,别的Shell我不会。。。

(( )) :一对圆括号有两个地方用到。

1,for循环,

for (( expr1 ; expr2 ; expr3 )) 

这里一对双括号里边的表达式,GNU的文档指出,expr1支持 Shell Arithmetic;expr2不为0时,expr3被赋值且语句执行。说的很麻烦,还要花时间搞清楚什么是Shell Arithmetic。其实一言以蔽之,支持数字条件。比如:

for (( a=0 ; a<10 ; a++ )); do echo $a; done

会输出 0 1 2 3 (带换行哦~~~)

2,数学表达

(( )) 和 $(( ))

(( )) 的用法与let一样,就不用多解释了吧~~~

$(( ))就是把计算结果拿出来,可以用在双引号里边,比如:

echo "1+2=$(( 1 + 2 ))"

会输出 1+2=3

( ):一个圆括号

在for循环里,跟C语法一样一样的。

或者是子程序,返回整个里边表达的返回值。里边的变量都是局部的,修改不会带到外边。举例子

a=1

(a=3; echo $a)

echo a

结果是 3 1

还有个就是圈数组。。。这个就没神马意思了

[ ]:一个方括号,是bash的命令,查man手册是可以查到的,跟test一样,在手册里可以看到很多用法。比如-b -c -gt -eq 什么的很多,还有用-a表示与,-o表示或等等

[[ ]]:一对方括号是一个方括号的加强版,则是Shell的保留字,里边支持了 || && 等等这些符号。一般我喜欢用这个

还有相对复杂的 { }

几个用处,区分变量,如:

var=abcd; echo ${var}EFG;

这样,Bash就不会认为变量是varEFG了

还有用来截取字符串的 ${ }语法比较灵活多变,这里不做多解释,大家有兴趣可以自己去搜搜资料,一般我脚本用到的字符串处理,这个都能搞定了。

代码块。用来区分代码的,但是跟( )有个区别,就是在末尾要加上 ;

目前看到常用的用法也就是这样,肯定不全,欢迎补充,欢迎交流。

iOS sqlite控件 Sqlight

记:上一篇文章介绍了Kache这个缓存控件,可以用来配合这次iCloud升级,这篇是关于一个sqlite的封装,Sqlight,一个很轻量级的封装,也是为了配合iCloud。模仿了PHP mysql扩展PDO的一些做法。把数据库操作封装成方法,通过NSDictionary和NSArray传递参数。源码:http://jiajun.org/g/Sqlight.zip

Sqlight真是没什么可介绍的,主要的常用方法有4个,select, update, insert和delete,还有一个create table在初始化时调用。用法示例在 Sqlite.h 文件的注释中。

简单介绍一下原理,Sqlight的数据文件是放在Documentation目录的,也就是说会被备份到iCloud。跟cache不同,我建议在数据库里存放一些比如,用户信息,登录状态等等。

以下把用法示例贴一下:

 

SqlightAdapter *sqlight = [[Sqlight alloc] initWithDatabase:@"test_database" AndTable:@"test_tb"];

if (nil == sqlight) {

sqlight = [[Sqlight alloc] initWithDatabase:@"test_database"];

 

[sqlight createTable:@"test_tb" Info:[NSArray arrayWithObjects:@"f1", @"f2", nil]];

sqlight.tableName = @"test_tb";

}

[sqlight insertData:[NSDictionary dictionaryWithObjectsAndKeys:

@"value1",@"f1",

@"value2",@"f2",

nil]];

// this is a wrong condition, there is no f0 field.

sqlight_result_t res = [sqlight selectFields:[NSArray arrayWithObjects:@"f1, f2", nil]

ByCondition:@"f0=?"

  Bind:[NSArray arrayWithObjects:@"value1", nil]]; 

NSLog(@"%d -- %@ -- %@", res.code, res.msg, res.data);// will out put 1 -- no such column: f0 -- ()

res = [sqlight selectFields:[NSArray arrayWithObjects:@"f1, f2", nil]

ByCondition:@"f1=?"

Bind:[NSArray arrayWithObjects:@"value1", nil]]; 

NSLog(@"%d -- %@", res.code, res.data);// will out put 101 -- ( value1, value2 )

[sqlight updateData:[NSDictionary dictionaryWithObjectsAndKeys:@"value_new", @"f1", nil]

ByCondition:@"f1=?"

  Bind:[NSArray arrayWithObjects:@"value1", nil]];

res = [sqlight selectFields:[NSArray arrayWithObjects:@"f1, f2", nil]

ByCondition:@"f1=?"

Bind:[NSArray arrayWithObjects:@"value1", nil]]; 

NSLog(@"%d -- %@", res.code, res.data); // will out put 101 -- ()


 

iOS缓存控件 Kache

记:昨天(Sep. 29)想必很多 iOS 开发者都收到Apple的邮件和苹果中国的工作人员的电话了,要求开发者升级应用,调整本地文件的存储位置,以适应即将发布在iOS5中启用的iCloud同步应用数据功能。恰好我这里有n久以前写的一个缓存控件(Kache的源码:http://jiajun.org/g/Kache.zip,现在再拿出来,希望在这次大规模的升级中,能给大家带来方便。

Kache 的基本思路是:用一个单例对象hold住整块内存,每次set都把数据set到这块内存里,get也从这里拿。在需要持久化的时候,例如程序退出之类的,调用一个saveToStorage方法,把这块内存持久化,存到iCloud文档中提到的Caches目录,这个目录是不会被iCloud备份的。在需要从本地存储载入时调用一个loadFromStorage方法,把整块内存load出来,照常使用。注意:Kache只能缓存 NSData, NSDictionary, NSArray, NSString等这些基本数据结构,不能缓存其他对象。

Kache提供两个基本功能:

1,普通缓存,允许设定有效时长,如果用户不指定被缓存数据的有效时长,则默认为86400秒,也就是一天过期。

2,缓存队列,Kache提供一个队列,用户可指定队列长度,默认为100,当新数据进入缓存队列导致队列长度超过100时,最先进入的数据会被删除。普通缓存不影响队列。

特殊需求:

之前提到,Kache使用的是一个单利hold住整块内存,那么一个单例中只允许有一个缓存队列。如果需要多个缓存队列,那么可以使用Kache提供的实例方法,开发者自己创建单例对象来hold住不同的内存。

基本用法:

用法非常简单,只要 #import "KCH.h"后,就可以按照 KCH.h 文件注释的例子来调用缓存了。

阅读源码:

Kache的源码非常简单,只有6个文件加1个KCH.h。

KCH.h基本上是一个README作用的文件。

KCHObject.h/KCHObject.m 定义了缓存的原子对象,这里记录了某个数据的过期时间和具体数据等内容。

KCHHolder.h/KCHHolder.m 定义了整个缓存的基本操作方法,包括对过期的处理,对队列的处理,持久化,重置等等。

Kache.h/Kache.m 是对KCHHolder的封装,提供了所有操作的实例/静态方法,以及对一直说到的单例的定义。

最后,是Kache的源码:http://jiajun.org/g/Kache.zip

【译】App Store Review Guidelines for iOS Apps

iOS应用商店审核指南


译者注:翻条款类的文档太尼玛折磨了。。。3000多字总算折腾完了,里边可能有一些不像人话的地方,请指出,我肯定虚心接受,择机改正。文档里可能有好多错别字,我会慢慢发现纠正的~~~祝大家开发快乐!

原文链接在这(需要IDP登陆):http://developer.apple.com/appstore/guidelines.html

简介

非常高兴您能付出宝贵的时间和精力来开发iOS应用。成千上万的开发者的经历表明,无论从专业技术还是经济收入上,开发iOS应用都是个不错的选择,我们将协助你你更快的成为其中一员。这篇App Store Review Guidlines主要是为了协助你弄清楚开发过程中会遇到的一些疑惑,加快你提交应用的审核过程。

我们认为应用不同于书籍和歌曲,我们不支持这些。如果你要讨论宗教信仰,那么应该去写书。如果你要谈论性,那么写书,或者去写歌,或者去做一个生理卫生的应用。看起来可能有点烦人,但我们仍然决定App Store不接受上述内容。记住下边这些原则,会对你有所帮助:

有很多小孩子会来商店下载应用,而且除非父母们设置了家长管理(事实很多人不设置),否则孩子们是不受任何限制的。所以我们要关注孩子们。

现在商店里有超过350,000个应用。我们不需要一个款差劲的应用。一款不能提供一些有用的功能,或者只是哗众取宠的恶作剧的应用,肯定通不过审核。

如果你的应用一看就是一个三两天拼凑出来的东西,或者你只是想把一个练手应用上到商店里,跟朋友秀一把,那在被拒以后一定要hold住。我们有大批严肃的开发者,不希望高质量应用与这些残次品为伍。

我们会拒掉那些,有越线内容或行为的应用。那么红线是什么呢?子曾经曰过:“等真见到的时候,我才知道”。还有,我们相信你越线的时候,你也会知道的。

我们提供一个审核版,如果你的应用被拒了,你可以在那上诉。不过你威胁我们,或者乱喷,肯定是于事无补的。

如果你试图蒙骗系统(比如:在审核过程中做手脚,盗取用户数据,剽窃其他开发者作品,或者刷评级),你的应用会被下线,开发者身份也会被取消。

这是一篇动态文档,新应用随时都会带来新的规则,你的应用可能就带来下一条规则。

最关键的是,我们非常珍视这个平台,并且尊重您的作品。我们真心要创造一个全球最好的平台,在这里你们可以大展才华,并且以此为生。看起来我们限制了太多的东西,恩,其实是因为,我们承诺用户,他们在apple的设备上享有最佳体验。就像你们也希望的那样。

目录

1.     条款与条件

2.     功能

3.     元数据,评级与分类

4.     位置

5.     提醒推送

6.     游戏中心

7.     iAds

8.     商标权与商品外观

9.     媒体内容

10.   用户接口

11.   购买与传播

12.   废弃与聚合

13.   损坏设备

14.   个人攻击

15.   暴力

16.   负面内容

17.   隐私

18.   色情

19.   宗教,文化和种族

20.   竞猜,赌博,彩券和抽奖

21.   慈善与捐助

22.   法律条件

 

1. 条款与条件

1.1 作为App Store的应用开发者,你受限于如下条款:Program License Agreement (PLA),Human Interface Guidelines (HIG),以及任何你与apple签订的协议和证书。以下规则和示例是为了协助你的应用更快通过审核上架,而不是修正或取代之前的条款。

 

2. 功能

2.1   存在崩溃的应用会被拒。

2.2   存在明显bug的应用会被拒。

2.3   不符合开发者描述的应用会被拒。

2.4   有未说明或隐藏特性或有悖描述的应用会被拒。

2.5   使用非公开API的应用会被拒。

2.6   试图读写非允许范围内的数据的应用会被拒。

2.7   试图以任何方式方法下载代码的应用会被拒。

2.8   安装或运行其他可执行代码的应用会被拒。

2.9   任何“beta”,“demo”,“trial”或“test”版本的应用会被拒。

2.10 iPhone应用必须可以无条件运行在iPad上,支持普通iPhone分辨率和2倍iPhone 3GS分辨率。

2.11 任何与App Store中上架应用重复的应用会被拒,尤其是已经有了很多的:如放屁,打嗝,照明和爱经。

2.12 没有用处的应用,web页面简单组合的应用,或任何哗众取宠,不能提供持续价值的应用会被拒。

2.13 用于市场推广或广告的应用会被拒。

2.14 有意提供隐蔽或虚假功能,却又不能明显标示的应用会被拒。

2.15 大于20MB的应用无法通过蜂窝网络下载安装(App Store自动处理)。

2.16 多任务应用只允许在后谈运行如下服务:VoIP,音频播放,地理位置,任务记录,本地提醒等。

2.17 应用只允许通过iOS WebKit框架和WebKit Javascript访问web页面。

2.18 鼓励酗酒,使用违法药物,或诱导未成年人饮酒,吸烟的应用会被拒。

2.19 提供错误的系统信息或设备数据的应用会被拒。

2.20 通过许多版本的类似应用对App Store造成干扰的开发者会被取消IDP身份。

2.21 歌曲和电影应该提交到iTunes store。书籍应该提交到iBookstore。

2.22 随意通过位置或设备限制用户使用的应用会被拒。

 

3. 元数据(名称,描述,评级,分类等)

3.1   应用或者元数据中提到其他任意移动平台会被拒。

3.2   元数据有未填写项,存留占位符文本会被拒。

3.3   描述中提到与应用内容和功能无关信息会被拒。

3.4   应用在iTunes Connect与设备上显示的名称应该类似,否则会造成混淆。

3.5   不同尺寸的icon要一致,否则会造成混淆。

3.6   图标与截屏不符合4+年龄评级的应用会被拒。

3.7   应用的内容与所选分类和风格不符会被拒。

3.8   开发者有责任把应用放到恰当的评级。不恰当的评级可能会被Apple修改,甚至删除。

3.9   开发者有责任给应用撰写恰当的关键词。不恰当的关键词可能会被Apple修改,甚至删除。

3.10 通过伪造,付费评价或其他非正规手段,获取App Store中较好的评价与星级的开发者会被取消IDP身份。

3.11 任何提示需要用户重启iOS设备来安装或运行的应用会被拒。

3.12 应用在提交审核过程中,所有涉及到的URL都要处于正常运行状态,例如保密协议,相关支持页面等。

 

4. 位置

4.1   未提示用户且获得用户允许之前手机,传输或使用位置数据的应用会被拒。

4.2   使用location-based API来自动控制车辆,飞行器或其他设备的应用会被拒。

4.3   使用location-based API进行调度,队伍管理或应急服务的而应用会被拒。

4.4   位置数据只能用于应用提供的直接相关功能或服务,或者有授权的广告。

 

5. 提醒推送

5.1   不使用APN API提供消息推送的应用会被拒。

5.2   使用APN服务却没从Apple获取一个Push Application ID的应用会被拒。

5.3   在首次推送消息之前取得的用户允许的应用会被拒。

5.4   使用提醒推送服务推送敏感的个人或机密信息的应用会被拒。

5.5   使用提醒推送发送主动消息,欺骗或干扰信息的应用会被拒。

5.6   应用不可以使用提醒推送发送广告,活动或任何形式的直接推广信息。

5.7   应用不可以提供收费的提醒推送服务。

5.8   使用APN服务过度占用网络带宽或容量或通过提醒推送大量占用系统资源的应用会被拒。

5.9   传输病毒,文件,代码或程序,导致破坏或扰乱正常的APN服务操作的应用会被拒。

 

6. 游戏中心

6.1   向终端用户或第三方展示Player ID的应用会被拒。

6.2   Player ID被用于Game Center条款款意外的用途的应用会被拒。

6.3   试图通过Game Center反查,跟踪,描述,关联,发掘,收割,或利用Player ID,别名或其他信息的开发者会被取消IDP身份。

6.4   Game Center信息,例如Leaderboard得分,只能通过Game Center用于应用中。

6.5   使用Game Center发送主动消息,欺骗或干扰信息的应用会被拒。

6.6   使用Game Center过度占用网络带宽或容量的应用会被拒。

6.7   传输病毒,文件,代码或程序,导致破坏或扰乱正常的Game Center操作,的应用会被拒。

 

7. iAds

7.1   人工刷广告浏览或点击率的应用会被拒。

7.2   带有空iAd横幅的应用会被拒。

7.3   设计主要用来展示广告的应用会被拒。

 

8. 商标权与商品外观

8.1   应用必须遵守Guidelines for Using Apple Trademarks and Copyrights 和Apple Trademark List中描述的所有条款和条件。

8.2   任何误导或暗示Apple为该应用来源或提供商,或Apple以任何形式认可其质量或功能的应用会被拒。

8.3   外观与现有Apple产品或广告主题类似或混淆的应用会被拒

8.4   应用名称中出现错误的Apple产品拼写(如,GPS for IPhone, iTunz)的应用会被拒。

8.5   使用受保护的第三方资源(商标,版权,商业机密,以及其他私有内容),请提供一份文本形式的使用授权。

8.6   在保证原有内容的商标特征不被覆盖且完全可见的前提下,应用可以通过Google Maps API调用Google Maps和Google Earth图片。任何遮盖或修改Google标志或版权人证明的应用会被拒。

 

9. 媒体内容

9.1   使用MediaPlayer框架意外的方法访问Music Library中媒体数据的应用会被拒。

9.2   用户界面模仿任何iPod界面的应用会被拒。

9.3   通过蜂窝网络传输的流媒体音频内容不得超过5MB或多余5分钟。

9.4   通过蜂窝网络传输超过10分钟流媒体视频内容,必须使用HTTP Live Streaming,并包涵一条基线64kbps的音频HTTP Live流。

 

10. 用户界面

10.1  应用必须遵守Apple iOS Human Interface Guidelines中的条款和条件。

10.2  外观与iPhone自带应用(如:App Store,iTunes Store和iBookstore)相似的应用会被拒。

10.3  不按照Apple iOS Human Interface Guidelines中的描述正确使用系统控件的应用会被拒。

10.4  试图创建多桌面/主屏环境或模拟多应用工具的应用会被拒。

10.5  修改硬件开关标准功能(例如:音量,震动)的应用会被拒。

10.6  Apple和我们的用户都界面报以很高期望,希望他设计的超级简洁,精致,充满创造力,深思熟虑。做到这些确实会消耗很多精力,但是值得。Apple在这方面要求非常高。如果你的用户界面过于复杂,甚至仅仅是不够好,都可能被拒。

 

11. 购买与流通

11.1  通过App Store以外的渠道解锁或开启附加属性或功能的应用会被拒。

11.2  使用In App Purchase API (IAP)意外的系统提供购买内容,功能或服务的应用会被拒。

11.3  使用IAP为与应用无关的实体商品或商品服务收费的应用会被拒。

11.4  应用使用IAP为信用账户或其他货币收费,必须在应用中消费。

11.5  使用IAP向过期的信用账号或货币收费的应用会被拒。

11.6  使用IAP收费订阅的内容至少要在7天内有效,而且允许在所有iOS设备间共享。

11.7  用到IAP收费项目的应用必须分派到正确的收费类目中。

11.8  使用IAP向用户收费以获取iOS内建功能(如摄像头,陀螺仪)的应用会被拒。

11.9  包涵“出租”内容或服务的应用,在有效期后会被拒。

11.10 保险类应用必须免费,遵守发布地区的法律,不允许使用IAP。

11.11 一般来说,越贵的应用审核就越彻底。

11.12 提供收费订阅的应用必须使用IAP,Apple将会按照Developer Program License Agreement中约定的70/30的比例与开发者分账。

11.13  应用中如果提供了IAP以外的收费或订阅机制,如:“buy”按钮,跳转到一个购买电子书的web页面,会被拒。

11.14  应用可以阅读或播放任何在应用以外取得授权的内容(包括指定的杂志,报纸,书籍,音频,音乐和视频),但在应用中不允许出现获取授权的收费链接或按钮。Apple不会对在应用外订阅或购买授权项目收取任何费用。

 

12. 抓取与整合

12.1  从Apple的页面(如:apple.com, iTunes Store, App Store, iTunes Connect, Apple Developer Programs, 等)抓取内容,或利用Apple页面和服务中的内容进行排名的应用会被拒。

12.2  应用可以使用授权的Apple RSS,例如iTunes Store RSS。

12.3  简单的web页面裁剪,内容整合或链接收集应用会被拒。

 

13. 设备损害

13.1  任何怂恿用户做出可能损坏Apple设备的行为的应用会被拒。

13.2  快速耗光设备电力或产生大量热量的应用会被拒。

 

14. 人身攻击

14.1  任何涉嫌诽谤,侮辱,狭隘内容或打击个人或团体的应用会被拒。

14.2  职业政治讽刺家和幽默作家不受该条款约束。

 

15. 暴力

15.1  展示人或动物被杀戮,致残,枪击,针刺或其他伤害的真实图片的应用会被拒。

15.2  描述暴力或虐待儿童的应用会被拒。

15.3  游戏中的“敌人”不能单独的设定为某特定比赛,文化,真实的政府或组织,或者任何现实事物。

15.4  含有以鼓励非法或鲁莽使用的方式描述真实武器的应用会被拒。

15.5  带有俄罗斯轮盘游戏的应用会被拒。

 

16. 三俗内容

16.1  介绍过度三俗和粗鲁内容的应用会被拒。

16.2  设计来惹怒或恶心用户的应用会被拒。

 

17. 隐私

17.1  在未获得用户事先允许,或未告知用户信息将被如何,在哪里使用的情况下,应用不可以传输用户数据。

17.2  要求用户提供个人信息,如邮箱地址,生日等,才能使用其功能的应用会被拒。

17.3  专门收集未成年人数据的应用会被拒。

 

18. 色情

18.1  含有韦氏词典中定义的色情素材(explicit descriptions or displays of sexual organs or activities intended to stimulate erotic rather than aesthetic or emotional feelings),的应用会被拒。

18.2  经常有用户提供色情内容(例如:Chat Roulette http://en.wikipedia.org/wiki/Chatroulette )的应用会被拒。

 

19. 信仰,文化和种族

19.1  带有对一种信仰,文化或种族进行诽谤,侮辱,狭隘,或以他们为目标的暴力或伤害内容的应用会被拒。

19.2  应用若带有或应用对一种信仰的文字描述,那么这个引用或翻译必须是精确,无歧义的。注释内容可以具有教育性,信息性,但不可以为煽动性。

 

20. 竞赛,赌博,彩票和抽奖

20.1  赌博和竞赛必须是由应用开发者或所有公司发起的。

20.2  应用中必须展示赌博和竞赛的官方条款,并声明Apple不是发起者,并且在任何情况下与此事无关。

20.3  开发者必须经过法律允许才能上线一款抽奖应用,而且抽奖应用必须具备以下要素:报酬,机会,和奖金。

20.4  直接允许用户在应用中购买彩票或抽奖的应用会被拒。

 

21. 慈善与捐助

21.1  含有向已认证的慈善机构捐助功能的应用必须是免费的。

21.2  慈善募捐必须通过短信息或通过Safari访问web页面完成。

 

22. 法律要求

22.1  应用必须遵守所有发布地区当地法律。开发者有义务了解和遵守各地的法律。

22.2  任何带有虚假,欺诈和带有歧义的描述的应用会被拒。

22.3  任何召集,推销和股东犯罪和鲁莽行为的应用会被拒。

22.4  非法文件共享应用会被拒。

22.5  任何设计用来非法赌博,包括算牌,的应用会被拒。

22.6  提供匿名电话或短消息/彩信功能的应用会被拒。

22.7  任何开发暗中获取用户密码和私有数据的开发者会被取消IDP身份。

22.8  任何非法律执行部门发布的带有DUI检查点信息,或鼓励且协助酒后驾车的应用会被拒。

 

动态文档

撰写这篇文档,表示我们尽全力与您分享我们是如何审核提交到App Store的应用的,而且我们希望这个指南能够对您开发和提交应用有所帮助。这是一份动态文档,我们将根据新近应用和情况定期更新这篇文档。

感谢您为iOS开发应用。尽管这是一份“禁止”列表,但请谨记那份更短的“必做”列表。最重要的是,加入我们就是要给用户带来惊喜和愉悦。把世界用最具创意的方式展示给他们,让他们以前所未有的方式生活。根据我们的经验,用户真的会对功能和界面上的改进有所反应。进一步改进你的作品。带给用户超出期望的体验。带给用户前所未有的体验。我们将协助您完成这一切。

© Apple, 2011

 

Last day @ alibaba

今天是在阿里巴巴的Last Day,好多人没来得及打招呼,在这跟大家打个招呼。

这里是我的第一份工作,大三就来到杭州,在315团队实习,后来雅虎口碑拆开了,并到淘宝,再后来又到阿里云。说来三年也换了三个公司。

在这里,学到了好多东西,结识了好多朋友,也惹了好多麻烦。

三年来,做了好多事,合作过好多同学,各个部门,感谢大家容忍我的各种不靠谱。

临走,祝阿云手机越来越牛B,同学们好好学习,天天向上。

联系我,找 gaosboy,各种gaosboy都可以找到我。

哦,对了,我还在杭州,大家别害怕,想我了给我打电话。