开始学习Git

做为程序开发者,你一定绕不开的就是版本控制系统VCS (或者代码管理系统SCM),它并不仅仅是一个工具那么简单,更代表的是一种软件从开发调试到发布过程的组织哲学,不仅是工具命令更是方法论。

使用svn的经验

做软件开发很多年,但对于版本控制很长时间只用过subversion, 很久以前在windows上用TortoiseSVN, 后来转到linux下用命令行,用rabbitvcs, 在svn的圈圈内从来也没有出来过,一切都理所当然,从来也没有觉得svn有什么不好。直到Team要和在Stockholm的团队一起开发,checkout一个branch要一晚上,update前一天欧洲团队的commits要十几分钟,同步代码变成了一个很浪费时间的事,Team开始时把主要的开发branch, checkout到本地办公室的服务器,开发人员需要某个branch的时候,先拷贝到本机,做switch或update后开始工作。后来在本地建了个svn镜像,耗时的操作可以通过镜像做,再后来公司升级了网络,更改了svn部署策略,同步代码虽然依然很耗时,但是已经不再不可忍受。但是如果要做bug fixing, 定位bug, 理解bug引入的上下文,需要查看svn历史记录,简直就是不可完成的任务。查询svn log, 对比两个版本间某个文件的修改,都需要和欧洲的服务器通讯,而且定位一个bug, 往往需要多次的查log看diff, 耗费了大量时间,思路也常常被打断。为了这个,我还写了个工具,叫svn history, 有一个方便查看svn repos的GUI, 查svn log时会自动从本地svn镜像读取,提供针对commit的author, reviewer, filename, log message等信息的查询功能,用户将commits缩小范围后,可以很方便查看每次相关commit的修改内容,从而让开发者能够快速理解代码的演变,定位bug的位置。这个工具还很不成熟,但是在日常开发过程中,却帮了我很多忙。正是在写这个工具的时候,为了把代码上传到Github上,我才接触了Git, 了解到了svn以外的世界,在用Pages发布博客后,对Git的使用越来越频繁,发觉是时候深入的学习下Git了。

Read More

vim中的杀手级插件: surround

大多数编程语言的语法都用到了配对符号surrounding: (), [], {}, <>, ‘’, “”,标记语言xml html 等更是完全依赖与这种语法。正常输入时,所有的编辑器都能胜任,大部分会在你输入一个括号时帮你补全另一半。vim 也有这样的插件auto-pair, 但是这个不是重点,真正的难题是当你需要为已一些存在的代码加上括号,删除一对括号但保留其中的内容,或者把一对()改成[],又或者把<div></div>改成<p></p>

Read More

使用Octopress和Github搭建Blog

Github 对程序员来说已经越来越重要了,不仅是托管自己的开源代码(我业余时间做的小工具,自己的vim配置已经都放到了github上),针对企业用户更有一整套的解决方案,虽然没有接触过github enterprise, 但是看到一些牛人的讨论,心向往之。对个人来说,github的的Pages服务无疑更加有用。用github搭建Blog的人越来越多,网上也有很多攻略。Jekyll是一个ruby写的静态站点生成器,它的作者是github开发者之一,Github Pages 支持将Jekyll代码转换成静态站点。借助Jekyll-Bootstrap可以很方便的搭建一个基本的Blog, 中文可以参照这里。但是为了安全原因,Pages不支持第三方的Jekyll插件,所以Blog的功能受到限制。虽然基础功能已经够用,但是在折腾的几次之后,最后决定还是用更灵活的Octopress。

Read More

vim中的杀手级插件: vundle

相比sublime text2等现代编辑器,Vim缺乏默认的插件管理器,所有插件的文件都散布在~/.vim下的几个文件夹中,配置vim的过程, 就是在网上不停的搜插件,拷贝到~/.vim下,发现更新,要重新下载重新拷贝,想要删除某个不需要插件,更是要小心翼翼的不要删错。配置出顺手的Vim, 需要极大的耐心和运气。

当然vim社区的活力是不容怀疑的,没有枪没有炮大神们自己造。以前使用过tpope的pathogen,使用git submodule和pathogen, 管理插件已经大大简化。而今天介绍的vundle, 更是把git操作整合进去,用户需要做的只是去Github上找到自己想要的插件的名字,安装,更新和卸载都可有vundle来完成了。虽然去发现一个好的插件仍然是一个上下求索的过程,但是用户已经可以从安装配置的繁琐过程解脱了。
Vundle的具体介绍查看vim.org,或者github repo

Read More

为Github账户设置SSH key

什么是SSH key

一直使用SSH连接服务器,但是对它的原理却不太了解。这次设置Octopress的时候,需要使用SSH 方式连接Github, 正好对SSH的工作方式做了下了解。(好像Github推荐使用HTTPS的方式访问repo, 以前Github受到过SSH密匙攻击,之后升级了SSH key的安全措施,https方式视乎更方便安全,不过Octopress的设置文档中,我并没有找到怎么使用HTTPS连接Github)

Read More

c++11 learning circle start

本周team开始了C++11的learning circle。为了记录学习内容,将会陆续加入一系列对learning cycle的总结。 为了使本博客闲得高雅一点,这里引用古诗一首,以纪念这个我们脱了毛裤很久,春姑娘也不肯来的4月,并预祝P3圆满成功。

春日迟迟 卉木萋萋 仓庚喈喈 采蘩祁祁

《诗经·小雅·出车》

Read More

closure and c++11 lambda

##What is “Closure”
In computer science, a closure (also lexical closure or function closure) is a function or reference to a function together with a referencing environment—a table storing a reference to each of the non-local variables (also called free variables) of that function. A closure unlike a plain function pointer allows a function to access those non-local variables even when invoked outside of its immediate lexical scope.

Read More

在ubuntu 12.04 上安装ruby

在安装octogress的时候需要ruby1.9.3, ubuntu 12.04 默认的是1.8, 虽然有1.9.3的源,但是所有的库用的还是1.9.1的,运行octogress的时候出现了很多莫名其妙的错误,用ubuntu自带的rvm安装更是产生无数的问题。求助于goolge, 发现很多讲用ubuntu做ruby on rail开发的都会手动安装rvm和最新版ruby, 但是跟着做了以后,总会在某个地方出现问题。最后发现了一篇How to install Ruby (and RVM) on Ubuntu (for technotards), 终于配置成功了。

Read More