前言
在合并分支时(如合并develop分支到master分支),我们可以有以下命令的选择:
git merge // 等同于 git merge --ff
git merge --no-ff
git rebase
那么,这三者之间有哪些区别呢?对此,我将会通过下面的实验进行比较说明:
为了安全性,个人的github和公司的gitlab需要配置不同的SSH-Key。具体如下:
切换到系统的SSH目录
1 | cd ~/.ssh |
为个人的github生成SSH-Key(若还没有)
1 | ssh-keygen -t rsa -C "your_mail@example.com" -f github_rsa |
然后,前往github添加SSH公钥。
为公司的gitlab生成SSH-Key(若还没有)
1 | ssh-keygen -t rsa -C "your_mail@company.com" -f company_rsa |
然后,前往gitlab添加SSH公钥。
添加配置文件(若还没有)
1 | touch config |
为配置文件config
添加如下内容
1 | # github.com |
测试
1 | ssh -T git@github.com |
输出:
Hi YK-Unit! You’ve successfully authenticated, but GitHub does not provide shell access.
以上表示成功连接到了个人的github。
然后可以用同样方式测试公司的gitlab。
1 | //代码片段摘自苹果开源的runtime代码(objc4-208版本) |
这是Objective-C 2.0中的类的代码,相信做iOS开发的同学都很熟悉的了。有天在查资料又看到它的时候,想到了一个好奇的问题:
methodLists
是一个二级指针,在内存中,它指向的是什么呢?(或者说,其指向的数据结构到底是怎么样的?)
在 Mac 下写 C 的时候,如果程序并不复杂,其实蛮不愿意打开 Xcode 这个庞然大物的。为此,特意找时间解决了这个事情:Atom
+ Atom 插件
= C 轻量级 IDE
。
下面将会列出所用到的主要插件:
autocomplete-clang
autocomplete for C/C++/ObjC using clang
build
Build your current project, directly from Atom
linter
A Base Linter with Cow Powers to visualize errors and other kind-of messages, easily
linter-clang
A linter plugin for Linter provides an interface to clang
script
Run code in Atom!
在 Mac 下,按 cmd-i ,该插件就会调用 clang 编译并运行当前的 c 程序
安装完毕后,开始你的 C 旅程吧~
YKPageControllerScrollView 是一个 UIViewController
容器类的滚动视图,支持 UIViewController
重用机制。YKPageControllerScrollView
类的设计参考了 UICollectionView
类,所以你会发现,其接口以及代理方法和 UICollectionView
的是很相似的,使用上也是相似的。
在 iOS 开发中,你应该会碰到以下这个问题:
如何实现 APP 内的 web 页面和 Native 页面的交互功能?
该问题的本质是:实现 JS 和 OC 的相互调用。
YKWebViewJavascriptBridge 是我针对上述问题实现的库。下面将会具体介绍该库的设计思路和具体实现。
由于项目的正式网络环境的 host 是走域名,能支持 https ,测试网络环境的 host 是走 IP ,无法支持 https ,导致在做 ATS 支持的时候,遇到一个问题:在 debug 过程需要切换网络环境的时候,也需要手动去开启或者关闭 ATS 。为了节省这些时间,写了一个脚本去解决这个问题,让 ATS 根据网络环境的值自动去开启或者关闭。下面将会列出具体步骤。
在为『掌拍』iOS 客户端设计数据库的时候,大幅度使用了 CoreData 中的『Entity Inheritance』这个特性,由此很好地解决了多个实体有共同 property 的问题,而特别借助实体类化(由实体生成对应的类)后的动态性,解决了数据动态传递的问题。这之后,对『Entity Inheritance』算是有了经验,但是还没有归纳总结,现在总结如下:
从2013.6月中旬到2013.12月,连续参与设计和开发了两个产品(一个是掌拍,另一个是网球圈),并独立完成了这两个产品的 iOS 客户端开发,期间可谓获益良多,一番反省总结归纳,得益主要在『沟通』『产品设计』『技术』这三方面。
如何才能有效地沟通呢?
就事论事,理性讨论,拒绝个人情绪,特别是不良情绪。
以『发现问题,解决问题』为沟通目的。
坚决把讨论的问题限定在指定范围内,拒绝越界、跑题!
准备充分,准备好:『问题』、『论据』、『解决方案』(至少得清楚自己想讨论的是什么问题)。
以上就是我在参与第一个产品开发时,和负责人『吵架』n 次,失败 n 次后得到的经验和教训。此人是搞营销运维的,口头能力甚强,好几次和他讨论问题的时候,就被他用『偷换概念』+『跑题』这两招击败o(╯□╰)o;然后有几次是被他的市场经验打败(这招『扬长避短』甚是好用的,→_→)。。。
而最重要的教训就是发现一旦带着个人情绪进行讨论的时候,很容易擦枪走火,问题不但没解决,还让彼此都不爽。影响工作~~囧rz
产品设计方面的感悟主要是:
从『问题』本身出发(由于想解决一个这么样的问题,所以才做了这么样的一个产品)。
做你需要的而不是做你想要的(focus on what you need rather than what you want)。
为产品设计一套完整的(最好是完善甚至是完美的)『游戏规则』。
如果规则模糊不清晰,一来会导致业务流程上产生 bug,二来不利于开发人员的开发。
PS:但是规则对用户而言应该是是友善的、简单可行的。
先确定业务,再确定功能,继而确定界面,最后根据业务、功能、界面UI等需求确定技术方案。
『和谐』
。产品(主要指客户端)应该有统一的风格,一是 UI 的风格一致,如 颜色、色调、背景图、指示器、文字字体等各种元素应该有一致的风格;二是交互方式的风格一致,如统一使用一种方式(点击或者滑动)来切换视图,各种交互语言(UI 中的文本语言以及提示用户操作、网络超时、任务失败等各种提示语)的风格要一致。
『理所当然』
。让用户使用你的产品的时候会觉得『理所当然,就该如此』,像在网速快的时候,一些交互操作应该可以考虑不提示用户交互的进度吧?