分类
dev

Objective-C编码规范

Objective-C Coding Standard | Objective-C编码规范

Version 1.0.0
Author Luo Yu
Date Friday, June 24, 2016

本标准的制定参考了Apple官方文档Cocoa Programming Guidelines,Raywenderlich.com Objective-C style guide,Google's Objective-C Coding Standard。

空格

对齐

关于对齐方式,请永远使用Tab,而非空格。

页宽

Page Guide设置为120。
Objective-C的常用长命名方式,再加之当今显示器有更宽的显示范围,这里将页宽调整为120。
可以在Xcode->Preferences->Text Editing->Editing中修改。

请移除行尾多余的空格。

变量

对象类型与*号之间空格,其他不空格。如:
NSString *oneString;

属性声明时,@property后空格,)后空格,对象类型与*号之间空格,其他不空格。如:
@property (nonatomic, strong) NSString *aString;

方法声明

方法类型符号后空一格,返回类型的括号后与方法名之间不空格。如:
- (void)someMethod;
+ (void)someClassMethod;

方法命名时,传参冒号前后都不空格。如:
- (void)someMethod:(NSString *)aString andColor:(UIColor *)aColor;

方法名较长,或参数过多而需换行显示时,优先采取冒号对齐方式。例如:
- (void)someMethodWithParameterOne:(int)paramOne
andParameterTwo:(int)paramTwo;

如冒号对齐无法对齐时,可采用左对齐。

方法调用

空格的采用方式和方法声明时保持一致,冒号前后都无空格。如:
[theObject someMethodWithParameter:1 andParameterTwo:2];

多行调用也与声明的对齐规则一样,优先采用冒号对齐。如:
[theObject someMethodWithParameter:1
          andParameterTwo:2];

关于调用方法时,语法空格的理解。

这是一条最简单Objective-C调用方法时的语法,
[object callMethod];
对象 调用 方法,中间有一个空格。

所以一个连环调用:
[[object callMethodOne] callMethodTwo];
相当于object2 = [object callMehtodOne];
然后有[object2 callMethodTwo];

所以一个不合规范的写法:
[[object callMethodOne]callMethodTwo];
无异于[object2callMethodTwo];
这种不规范的空格简直不能忍。

代码组织

方法分类

使用#pragma mark来分类方法,该标记能在Xcode的代码编辑器中梳理展示。
- 会产生水平分割线
| 可退一格

命名

沿用Objective-C的长命名方式,不推荐缩写。如:
UIImage *caseIconImage;
而不推荐:
UIImage *caseIcoImg;

使用全大写的Prefix。
类名,常量名都应该使用此种Prefix开头。如:
LYObject

常用语法格式

条件语句

if后空格,)后也空格,{不换行。如:
if (!error) {
    // do something ...
}

if语句总是使用{},即使只有一行代码。

else和while遵循同样的规则,在同一行起始{,在新一行结束}。

三元判断时,条件部分使用括号包括。如:
(val == NO) ? case1 : case2;
三元判断语句请勿嵌套使用。

switch语句

switch语句总包含default情况。
switch的case中,总是使用{}包含。

枚举

使用SDK推荐的NS_ENUM()创建枚举类型。避免在Cocoa/Cocoa Touch中使用CF C风格的enum。例如:
typedef NS_ENUM(NSInteger, LYCellType) {
    LYCellTypeHeader,
    LYCellTypeNormal,
    LYCellTypeDisabled,
    LYCellTypeFooter,
};

常量

推荐使用FOUNDATION_EXPORT配合const指定常量,或是static配合const。

尽量避免使用#define的方式。

注释

推荐必要的注释。

注释根据项目要求添加。

为了防止文本文件的编码解码导致的乱码,注释推荐使用英文,但不强制。

分类
dev

Take Ownership REG TEXT

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\takeownership]
@="Take ownership"
"HasLUAShield"=""
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT\*\shell\takeownership\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"

[HKEY_CLASSES_ROOT\exefile\shell\takeownership]
@="Take ownership"
"HasLUAShield"=""
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT\exefile\shell\takeownership\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"

[HKEY_CLASSES_ROOT\dllfile\shell\takeownership]
@="Take ownership"
"HasLUAShield"=""
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT\dllfile\shell\takeownership\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"

[HKEY_CLASSES_ROOT\Directory\shell\takeownership]
@="Take ownership"
"HasLUAShield"=""
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT\Directory\shell\takeownership\command]
@="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"

分类
stuff

立夏

“这迟到的立夏”。--2010年

看了看以前写的,
想来我的'立夏'老是爱迟到呢!
比一比,
大概很久没有听歌散步,
还有画画贴纸。

倒是很巧,
买了一本A4不干胶打印纸,
现在在电脑上画,打印出来,也算是做贴纸吧。

另外,
也是同样,又是在等待工作的时节。
也是在读书,不过这次是在kindle上,
话说kindle最近有在组织一个夜读半小时的活动,
可是我读书的时间不太固定,有时是早上起床,有时是中午吃饭时。
不方便累计时间呐。

这六年过去,
工作已变成寻常事,
生活也慢慢忙碌起来。

夏至的武汉,
有阳光明媚,午后微微出汗,
也有清冷夜风穿过房间的沙沙雨夜。
渐渐步入30的我,
也开始寻找自己的节奏。
梦想还有,继续。

分类
dev

关于Homebrew 一个OS X 平台开发者所需要了解的

写在前面

Homebrew的官网 brew

Unix平台好的包管理器是必需品(官方翻译副标题“OS X 不可或缺的套件管理器”),例如ports,apt-get之类。Mac OS X/OS X 亦有MacPorts,然而Homebrew是推荐唯一使用的。

关于安装

终端粘贴如下命令:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

此命令为官方推荐的, 也是最简单的安装方式。该脚本会将Homebrew安装到/usr/local目录,所以brew install的时候不需要sudo。安装脚本是会周全处理好目录问题的。

前提:已安装Command Line Tools for Xcode
xcode-select --install
所以新电脑的安装顺序是先装Xcode,并打开程序一次以激活相关工具链。

诊断与更新

需要知道命令brew doctor。顾名思义,来诊断brew健康状态的。

会列出相关信息。

brew update以更新。

使用事项

可以先搜索想安装的软件包,使用命令brew search [TEXT|/PATTERN/]

例如,> brew search cocoapods
显示结果
cocoapods
Caskroom/cask/cocoapods

安装使用命令brew install FORMULA...
这里即是> brew install cocoapods

一点好处

比起gem install,一个明显的好处就是不用sudo。

 

分类
stuff

WASD keyboard 61键 coder键盘

看着真是心水啊!

留图:

最近已经开放自定义按键了,实在是心动,等我工作了准备淘一个带去上班。

想想自己的87键其实也几乎没用过F区还有右边的一些功能键,还不如手不离主键区的61键轻便吧~

心水啊~

分类
stuff

记:生病了

最近照顾小盆友,结果自己也感染了。:(

去医院拍CT,说是右肺中叶少量感染,随诊治疗。

然后就是打了11天的头孢+左氧,前四天还加了地塞米松,一直喝麻杏化痰合剂。

昨天复查,CT显示感染都已经吸收。

感叹现代医学的科学性啊~ 现代人的医疗水平和过去真的是差别好大,生在这个时代真好!~

休息一段时间,然后准备开始工作啦~

分类
stuff

《黑客与画家》

这本书, 最早是在OSChina开源中国里看人提到才去看的, 也有几年了.

当时在网上找来资源, 看了前面一两篇. 感觉真是.. 好些想法, 都是我经常和身边人说的, 对作者的一些观点很是认同啊!

(..未写完)

分类
stuff

《天才在左 疯子在右》

这本书, 说来很有一段时间了.

最初是Joanna, 在我还未工作期间, 某天突然给我推荐的.

然后在网上查了查, 万能的网络有txt. 还有那段采访, 锵锵三人行.

是后来打算买书读一读.

可...在网上看起txt就没停下来. 记得当时从下午, 一直看到晚上深夜, 然后一直看一直看. 大致是快看完了. 然后停了下来.

第二天便没再继续. 也许要等买书再续读下去吧.

最近电子版出现, 就顺手买来.
cover

因为过了很长时间了, 所以又从头开始读(虽然情节基本都记得).

感觉作者的问题还是很多的, 几乎是和那些 "病人" 一样, 了解一点又纠结一点. 里面好些 "物理知识" 的故事都是这样的..

这本书大量的篇幅都是讲述作者遇到的形形色色 精神病人不同的故事. 讲好故事以后呢, 就没有叻.

还有点小期待呢, 比如心理学怎么分析之类的, 和我们常人不一样, 专业点的内容, but, 没有.

单就故事这点来说, 大致算是有趣的吧. 我们平时生活也不可能听到这些.

不过书后有句话 "这里有近20余篇是真实案例" 让我很费解, 先是这句话本身就让人想起课文《论基本属实》. 20余篇就是二十多篇, 具体是多少, 作者选择了不说, 只是大致估摸了一下, 是个浮动的数字. 而近20余篇, 那是靠近这个浮动的数字?

就如吕先生说的, "因为一老一实地说有这么回事实在有点不好意思", 四十来个故事里, "真是案例"当然是越多越好听. 所以这样勉强一下.

而通篇读下来, 每个故事的主角说话的风格, 都如此类似几乎就是一个人了. (除了那个话多的). 这个人就是作者自己啊.

那除去这些, 想想"近20余篇"之外的呢, 作者留下个疑问, 只是在紧张有读者会受到此书情节的影响..

加上之前, 读过两遍. 结论是, 这本书, 就娱乐的看看吧.

分类
stuff

“体型并不能说明一切”?

最近在思考应用程序大小&占用磁盘空间的问题,

比如我的手机, 这一个月几乎天天提醒"空间已满"blablabla~

现在把QQ等的记录都清空, 相册只剩几张照片, 连虾米的缓存音乐也删掉部分.

打开"用量":

我们稍微算一算, 如果一个程序占用空间500M, 那么实际使用空间11G左右的iPhone(16G版), 就只能装22个应用.
如果一个应用300M, 这个数字就是约37个.

那在天朝我不得不用的应用有哪些呢?

微信(345M), QQ(244M), 微博(157M),
淘宝(249M), 支付宝钱包(152M), 淘宝电影(38M), 口碑外卖(42M), 阿里巴巴(109M), 旺信(89M),
美团(94M), 猫眼电影(48M), 京东(89M), Amazon(76M), 当当(47M),
高铁管家(46M),
手机营业厅(37M),
百度地图(361M), 百度云(314M, 备份了照片, 这样还稍微减了减手机空间的压力)
虾米音乐(477M),
Argus(279M 记录步数心跳等等), Nike Running(124M),
Twitter(120M), Facebook(134M), Instagram(37M), LinkedIn(102M), Skype(96M), Pinterest(70M), Pocket(61M), 有的是自己用, 有的是开发必须, 为了测试非装不可.
iTV Shows(43M 追剧必用, 不缺不漏剧集),
Paypal(73M),
快的叫车(52M), 滴滴打车(69M), 一号专车(51M), 打个车非要搞这么多应用, 真的很烦...已合并资源缺不合并应用.
掌上银行(56M, 招行一天到晚啥都要你在App里操作...), 招商银行(50M),
Adobe Acrobat(45M, 邮件里的PDF文件, 比如面试时, 有时要偷偷喵一眼简历嘛)
...抄不下去了, 太坑太累!

个人觉得, 应用程序还是尽量限制在50M比较好, 用户的手机用户不能做主啊( ⊙ o ⊙ )!这并不是不能实现的.

那我们在项目里, 通常是什么在占用空间呢?

一朵普通的应用程序, 编译出来, 都在10M左右(还是很多很多功能的)

但是如果想有微信登录, 不好意思, 要加入WeChatSDK;
如果想有QQ登录, 不好意思, 要加入QQConnectSDK;
如果想有微博登录, 不好意思, 要加入WeiboSDK;
想分享信息到朋友圈? 加WeChatSDK;
想分享到微博? 加WeiboSDK;
想用支付宝钱包支付? 加AlipaySDK;

还有很多用户不知道的需求,
比如转化率调查, 各种SDK, Flurry等等,
还有错误跟踪, NewRelic等等,
还有很多人/公司喜欢将推送通知也加一层, 诸如Parse, 百度云推腾讯信鸽等等, 继续加!
一堆东西加下来, 程序要肥几圈...

在然后就是图片资源了, 如果适配做的不好, 直接拿几套大图的话...很容易看到程序体积成倍疯涨.
当你等待这次commit缓慢的向远端push时, 就应该坐下来认真思考这样做的必要性了.

"这么多这么大的图片, 真的有必要吗?"

就如同App本身的splash screen, 最早只是图片,
所以当iPhone进化到4代, 出现@2x时, 就需要两张图, 而后面这张, 将会拥有4倍与前者的像素.
再还有iPad与retina iPad, 在到现在的iPhone 6与6 Plus,
苹果也给出新的正确解决方案, 使用可以附上autolayout功能的 Launch视图, 来取代多张大图做到适配.

这么多大的图, 多半是没有必要的.

另外, 自定义字体, 如果使用次数十分有限, 完全可以替换成图片.
纯色/渐变的视图, 亦可以代码实现, 而不需要图片.

当用户手机临近装满时, "大裁员"即将开始.
如果无法做到让用户"非装不可", 那么体积大的程序, 就等着-- (嘿嘿)
(苹果的容量提示, 会导向用户到"用量"列表, 这里按照占用空间由大到小排着序, 所以嘛...)

精简而高效, 始终应该是我们程序开发应有的目标.

分类
stuff

Raspberry Pi II

在taobao上, 买了只树莓派2(Raspberry Pi II), 经过一两天漫长的等待, 终于盼来了拆箱.

raspi-001-20150527-1001

业余拆箱, 看看就好.

raspi-002-20150527-1001

然后这里才算开始, 毕竟这里的硬件是平台.

那么通电.

Raspberry Pi II

大致是好的...吧! (感觉现在的工艺, 电子产品不容易坏...吧 (没有什么可以很笃定...bug永远存在))

raspi-005-20150527-1001

烧写系统, 用事先准备好的TF卡(dd官方Raspbian.img到卡上)

dd bs=1m if=path_of_your_image.img of=/dev/diskn

raspi-006-20150527-1001

借来键盘, 还有鼠标, 都得是有线的.

raspi-007-20150527-1001

盲按几下回车, 第一项应该是 Expand filesystem来着

过一会儿, 估计它处理好(class 10卡, 其实比较快), 关机

那么再次接入Mac里处理它的文件

光是在Disk Utility里看到那个Linux分区已经占满整张卡, 就可以得知 文件系统 已扩展开

raspi-101-20150527-1001

EDUP免驱的迷你USB无线网卡

raspi-008-20150527-1001

把磁盘插入一个可读写它的系统(比如Linux)里, 配置一下网络连接, 配置好了以后, 放回机器开机

raspi-009-20150527-1001

这个过程中, 可以顺便把LCD的驱动放进去

raspi-011-20150527-1001

输出到小显示器

raspi-102-20150527-1001

这就可以上网了

raspi-010-20150527-1001

去瞧瞧Raspbian官网

看Logo区, 原来这货基于Debian系统

raspi-012-20150527-1001

现在可以ssh到派里(pi:raspberry), 做操作了

随时可以sudo raspi-config呼出配置, 可以在这修改默认密码等

raspi-013-20150527-1001

那么检查/安装/配置一些各种现在必需的工具

在这里编写一下当下这篇文章, 提交并推出去.

浏览一下, 好了, 致此, 小电脑已经可以用起来了. 以后要用它多多创造呢~

那么已经有电脑了, 为什么还要再买一台就为了写这种其他电脑上已经可以写的程序???

好吧, 就败了这个为环境做贡献好吗, 瞧瞧小身板的功耗 🙂

其实小电脑身后还是有一个"宏伟"的计划的(连我自己都不信)