Git 源码编译

#!/usr/bin/env bash if [[ -z $1 ]];then echo "请输入版本号: 2.25.1" exit 1 fi if [[ -z $2 ]];then echo "请输入命令类型:" echo "安装路径为: /usr/local/git-v版本号" echo "f: 下载最新仓库" echo "b: 重新构建" echo "c: 清理构建" echo "…

Dart 关键概念

一切皆为对象,所有对象都继承自 Object 类,任何对象实例,数字,函数和 null 都是对象。Dart 是强类型,但类型注解也不是必须的,因为 dart 可以进行类型推导(和 Swift 相同)。数字可以推导出 int 类型。可以使用特殊类型 dynamic 明确说明无指定类型。Dart 支持泛型,例如: List<int> 或者 List<dynamic>(这里 dynamic 类似于 Swift 中的 AnyClass 或者 ObjC 中的 id)Dart 支持顶级函数(例如: main(…

docker-machine 的几个实用技巧

1. 使用本地 iso 文件创建 docker 机器docker-machine create --driver virtualbox --virtualbox-boot2docker   http://.....boot2docker.iso  machine_name 但是在我大中华区, boot2docker.iso 的下载却并不轻松,我们可以借用 xunlei 预先下载好 iso 文件,放到本地某个文件夹。然后通过下面的命令快速安装 docker 机器 docker-machine create --driver virtualbox --virtualbox-boot2docker  file://$PWD/boot2docker.iso  docker0 同样的方法也可以在本地安装 rancheros 机器 2. 使用 docker-machine 连接远程 docker 机器docker-machine create --driver generic…

说说 UIView 中 frame 和 bounds 的区别和关系

UIView 中 frame 和 bounds 的区别和关系区别首先说说区别, 根据官方描述我们知道 frame 描述了该视图与父视图之间的平面坐标和大小;bounds 描述了该视图内部可见区域的坐标和大小。 但是仅仅靠这句简单的话,很难有直观的理解,我们心中会有千万个疑问,其中一定有一个 : frame 既然表示了视图的大小和坐标,还他妈要 bounds 何用? 我们下面慢慢展开,通过简单的几行代码,一步步发现其中缘由。 二者的关系这里还要交代一下,UIView 和 CALayer 的 frame 以及 bounds 是同一个概念,UIView 是 CALayer 的代理,以及几何对等体,简单说,在 frame 和 bounds的层面,我们可以认为  UIView 和 CALayer 完全相同。暂时忽略掉 CALayer 。 frame.…

Swift 之属性篇

Swift 中的属性和在 ObjC 中有所不同,具体表如下: 消除了诸如: atomic, nonatomic, readonly, weak, strong, assign, setter, getter, nullable, nonnull 等修饰符,但这些特性并未消失,而是通过其他途径简化这些特性对开发者带来的输入量。 内存管理 weak/strong/assign 取而代之的是 Swift 用自动内存管理取代了 weak, strong, assign 。 类等引用类型的变量,一律为 strong 类型,并且 Swift 自身摈除了循环引用的问题,省略了 weak。 结构,枚举,字符串,数字等值类型,传递方式为直接内存复制,考虑到效率也用到了CoW机制。 是否为空 nullable/nonnull通过 var / let…

使用 Git 命令完成 SourceTree 同样的工作

SourceTree, Gitower 等 GUI 工具在局部提交和 Review 代码的时候,作用不可小觑,GUI 工具的优势是具有良好的视觉特性,但是在批处理和效率上并不占优,同时由于 GUI 工具以 git 为基础,GUI 的开发方提供的功能也并不能完全展示 git 的强大。 为了高效的使用 Git 我们有必要了解下 Git GUI 工具的众多功能如何通过 Git 命令来完成。 以下是GUI 具有的功能Untrackgit rm --cached path Stash贮藏所有变更 git stash 以下是 GUI 所不具备的功能Stash 单个文件 贮藏单个变更,GUI 并不提供这个功能 git stash – path 提交模板全局配置 .gitconfig 或 项目配置…

解读 C 语言中复杂类型的秘诀

C 语言虽然没有强大的现代编程模型,缺少面向对象工具,也没有函数式编程。但是 C 在自定义复杂类型的能力方面,丝毫不逊色于任何其他编程语言。 我们来试水几个复杂类型的定义,看看你能不能准确的识别这是什么类型? 数组int a[3]这很简单,是一个具有三个 int 元素的数组 int (a[3])[4]第一眼能看出来吗? 没错,这就是普通的二维数组,等价于 int a[3][4] 声明,现在你可能已经看出来了,C 在自定义类型上具有意想不到的灵活性。 我们继续…… int *a[3][4] ,int *(a[3][4]) 和 int (*a[3])[4] 三者有什么区别吗?前两者是相同的,第三个表达式则有所不同,…

NSTimer 的强引用错在哪了?

iOS 开发新手,常常抱怨"计时器又导致内存泄露了",这时度娘很贴心的“送来”各种解决方案,解决了因循环引用导致的内存泄露问题。但作为工程师的我们,岂能就这样放过 NSTimer 呢? 首先,内存泄漏是个很严肃的问题,我相信 Apple 的工程师是不会能出这种低级错误的。 其次,作为  Apple 提出的 Target-Action 模式中,明确说明了 Target 是弱引用,类似于委托模式。 由于 ObjC 采用引用计数来管理内存,开发者对于引用关系具有敏感的洞察力是基本功。不过 Apple 官方对于 NSTimer 强引用 Target 这件事却没有明确的说明(符合苹果的一贯风格) 那么问题来了: NSTimer 对于 Target 模式是否符合苹果自身的规范?强引用 Target 发生的时机在何时?一旦发生,是否永久生效? 如果永久生效,…

Xcode11 与 SPM 项目的依赖和相互关系

SPM 是 Swift Package Manager 的简称,是Swift  开源组织推荐的轻量级项目管理工具。直到最近苹果 Xcode11 的发布,终于正式加入了对 SPM 的支持,为 Swift 的推广奠定了坚实的基础,Swift 官方一直维护着一个 Server side 的社区, 加上 TensorFlow 对 Swift 的支持,至此 Swift 已经具备统一移动端,服务端,机器学习三大主流应用方向的能力。 Xcode11 已经可以正式支持编辑运行 SPM 项目。Xcode11 可以为Xcode 标准项目引入 SPM 项目做为依赖。 要想有效使用 SPM 项目工具,还需要了解 SPM 的一些特性: SPM 支持 ObjC,…

Nginx 之初步认知

nginx 具有体积小巧,功能强大的特性,整个程序都是基于 C 语言开发,先天具有高性能和良好的跨平台表现,在 nginx 满天飞的当下,有必要把我在个人网站中对 nginx 的使用心得记录在此,以供有需要的人少走弯路。…