Jon

Jon

SSL

用 Let's Encrypt 给博客加 SSL 证书

Update: 腾讯云推出了免费 SSL 证书服务。期限一年,签发速度快。 趁周末给自己的博客配置了 SSL 证书,配置过程比较顺利。使用的服务与工具有: * CentOS 7.1 * SSL 证书由 Let's Encrypt 生成 * 通过 Nginx 配置反向代理与 SSL 证书 1. 为什么要添加 SSL 证书 个人博客为什么要添加 SSL 证书呢?有下面几个好处 * 提升逼格~ * 练习 Nginx 反向代理的配置与使用 * 在国内的网络环境下,SSL 可以有效地防止运营商劫持,避免访问博客时出现莫名其妙的广告(update:现在 https 貌似也有可能被劫持了,看看这里的讨论) 另外,在 Chrome

By Jon

《Effective Objective-C》笔记

1 了解 Objective-C 的起源 该语言使用“消息结构”(messaging structure)而非“函数调用”(function calling)。 2 在类的头文件中尽量少引入其他头文件 注意使用 @class 关键字。 3 多用字面量语法 使用字面量语法创建数组、字典,具有更高的可读性,代码也更简洁。 数值 NSNumber *intNumber = @1; NSNumber *floatNumber = @2.5f; 数组 NSArray *animals = @[@"cat", @"dog", @"mouse", @"badger"]; 字典 NSDictionary *personData = @{@"

By Jon

iTerm 2

iTerm 2、Terminal 启动加速

采用默认设置时,iTerm 2 启动速度较慢,主窗口出现后还需要等待5-6秒才可以输入命令。Terminal 也有这个问题。 原因是 iTerm 2 默认的 startup shell 是 /usr/bin/login,login 启动时需要首先读取所有的系统日志,导致启动速度慢。可以通过下面两种方式加速 iTerm 2 的启动。 方法一:清空 Apple System Log 删除 /var/log/asl/ 下的所有系统日志(asl 是 Apple System Log 的缩写): sudo rm /var/log/asl/*.asl 方法二:替换 startup shell

By Jon

iOS

XcodeGhost 代码分析

最近几天 Xcode Ghost 事件炸开了锅。 事情源自知名 iOS 开发者唐巧的一条微博(2015-09-17 09:45,周四): 临近周末,自称是原作者的微博用户发表了公告,表示这只是一次没有恶意的试验,同时还将源代码放到了 GitHub 上。微博发送的时间是凌晨04:40,看来原作者这段时间过得并不轻松。 随后(早晨08:47),唐巧对这条微博进行了转发,并对照逆向工程的结果,给出了自己的结论: 从“原作者”的公告来看,这段代码做了两件事: 1. 搜集设备信息,并发到指定的服务器 2. 广告功能(这是怎么实现的?) 膜拜大牛们第一时间做出的精准分析的同时,我们也可以尝试一下阅读 XcodeGhost 的源代码,看看原作者到底搜集了哪些设备信息、公告里说的广告功能是怎么回事。 设备信息 XcodeGhost 的代码实际上是两个 Category,UIDevice(AppleIncReservedDevice) 和 UIWindow

By Jon

Mac

为 iTerms 2 配置 Color Scheme

什么是 iTerm 2 我们的目标是——干掉系统原生终端! -- iTerm 2 官网 iTerm 2 是 Max OS 下的一款终端仿真器。与原生终端相比,iTerm 2 有多标签、快捷键快速唤出、窗口内搜索、自动补全等实用的 feature,使用更加方便。 选择并导入一个色彩主题 默认的 iTerm 2 主题是黑底白字,看久了不免单调。为了用上丰富多彩的终端,可以在色彩设置中一项项进行配置,也可以下载预先设置好的色彩主题配置文件,直接导入到 iTerm 2 中。 Iterm2-color-schemes 列出了大量 iTerm 2 色彩主题,并提供了各个背景色下的效果预览图。下载主题包到本地并解压即可。 * 打开 iTerm 2 * 按 CMD + i

By Jon

iOS

Xcode 插件推荐

Xcode 是一个不完美的 IDE,需要安装插件来进行功能扩展,方便日常开发。 安装下面的插件前,需要首先安装 Xcode 的插件管理工具:Alcatraz。 VVDocumenter 规范注释生成器。输入三个斜线 ///,快速生成规范注释。配合 Doxygen,可以省去绝大部分文档撰写工作。 SCXcodeMiniMap 提供类似 SublimeText 中的代码“小地图”,方便快速定位到文件中的某一块代码。 update: SCXcodeMiniMap 会导致 Xcode 7 崩溃,截至 Xcode 7.2 版本仍未修复。使用需谨慎。 update 2: 目前已可以兼容 XCode 7.3。 KSImageNamed 扫描工程文件下的所有图片,为 imageNamed:@"" 提供自动补全。 XcodeColors 更改调试控制台配色

By Jon

git-svn

git-svn 工作流

Mac 下好用的 SVN 客户端只有 Versions、Cornerstone 两款,但都是付费软件,使用体验也都一般。最近 Version 试用期限已到,于是换用 SourceTree 来做版本控制。 SourceTree 原生支持 Git 与 Mercury,然而内置的 git-svn 使得这款软件也可以用来管理 SVN 版本库。SourceTree 在本地使用 Git 对 SVN 库做版本控制,需要与远程 SVN 库交互,拉取或推送代码时会自动调用 git-svn 命令,既可以在日常开发中发挥 git 拉分支带来的便利,又可以方便地与远程 SVN 库保持同步。 典型的 Git 工作流包括下面几个步骤: 1. clone 版本库到本地 2.

By Jon

Objective-C

Objecive-C 如何判断 NSString 为空

写 Objective-C 代码时常需要判断字符串是否为空,最简洁的代码是 if ([string length] == 0) { // ... } 上面的条件可以正确判断长度为0的字段串(@""),以及空字符串(string 为 nil 或 [NSNull null])。因为对 nil 调用 length 同样会返回0。 实际上,对 nil 发任何消息,返回值都为0。这一行为在下面的第二条参考资料中有详细说明。这种约定是出于方便使用的考虑,但牺牲了一定的安全性。 参考 * How do I test if a string is empty in Objective-C * Sending a message to nil?

By Jon

iOS

去掉 UITableView 顶部的多余空间

将 UITableView 的 style 设为 grouped 后发现顶部出现了大约有35px的额外空白。 原因是 group 样式的 UITableView 顶部会生成自带初始高度的 tableHeaderView。解决方案将 tableHeaderView 替换成一个高度为0的 UIView。首先尝试将高度设为 CGRectZero: // 这种写法有问题 UIView *tableViewHeaderView = [[UIView alloc] initWithFrame:CGRectZero]; self.tableView.tableHeaderView = tableViewHeaderView; 另外,如果 UITableView 充满了整个 ViewController 的垂直空间,还需要添加下面这行代码,禁止 ViewController 自动调整 ScrollView Insets: self.automaticallyAdjustsScrollViewInsets = NO; 使用上面这种写法,视图初始化之后看似正常,但由于实际上

By Jon

iOS

Objective-C 单例模式

注:这里的代码使用自动引用计数(ARC),不涉及非 ARC 下的实现。 代码 // singleton.h @interface Singleton : NSObject @property (nonatomic, retain) NSString *string; + (id)sharedInstance; @end // singleton.m #import "singleton.h" @implementation Singleton @synthesize someProperty; #pragma mark Singleton Methods + (id)sharedInstance { static Singleton *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken,

By Jon

一些可以提高开发效率的 Xcode 快捷键

这不是一份键位大全,只是列出了一些使用频率最高的快捷键。 1. 项目导航 Cmd + 1 切换到 Project Navigator。相当于点了下面这个按钮: Cmd + 0 / Cmd + Option + 0 Cmd + 0 是显示/隐藏左边栏(Navigator)。相当于点了窗口右上角的 “Hide or show Navigator”: Cmd + Option + 0 显示/隐藏右边栏(Utilities)。效果和右上角的 “Hide or show the Utilities” 相同: 这两个快捷键对于解放屏幕空间十分有用。 2. 搜索、文件切换 Cmd + Option + F 在项目中搜索,相当于在菜单中选择 Find->Find

By Jon