Linux搭建git服务器gitolite

动机 一直想有个Git代码服务器来同步代码。之前用的Github,但是只有付费账号才能创建私有仓库。开了2年的付费Micro账号,真心很贵,而且速度比较慢,又不稳定,之后就不再续费了。 然后又用国内的Git服务器什么GitCafe,后来这个挂了。还用过OSChina的Git,这个速度很快,目前还存活着。但是心里对国内的服务不太放心,会泄露我重要的代码,总觉得不靠谱,所以在国内的Git服务只是存放一些不重要的代码仓库。 最后一条路是自己买个VPS搭建一个Git代码服务器。最先想到的是Gitlab,它跟Github很类似。但是它使用Ruby语言写的,又慢又占用资源,最低的硬件要求居然是2GB内存。用过一段时间,最后还是放弃。 然后公司使用的是Gerrit,我对这个也比较熟悉,准备再搭一个Gerrit,网上一查,这货居然比较Github还占用资源。稍后还折腾过Gitblit,Gitweb,功能太弱,都不满意。 最后决定使用Gitolite来搭建一个Git服务器了,一是占用资源少,二是ssh协议,安全快速,三是搭建、管理简单方便,四是功能强大。 Gitolite功能很强大,但是https://github.com/sitaramc/gitolite... Read More | Share it now!

chromium中使用scoped_ptr

之前也总结过chromium中scoped_ptr的用法,我又看了下代码,chromium43对scoped_ptr又做了一些修改。我再写篇博客总结一下。写博客如果像代码管理系统一样有版本号,那就可以持续对一篇博客维护更新了。 scoped_ptr顾名思义,就是作用域中的智能指针。scoped_ptr获得一个指针指向对象的管理权,然后在scoped_ptr超出自己的作用域的时候自动销毁这个对象。 比如这个类: scoped_ptr不能拷贝或者赋值,所以只能用在它的构造函数或者调用reset方法去接管一个对象的指针。 调用reset方法,scoped_ptr会销毁现有指针指向的对象,然后再管理新的对象的指针。可以用get获得对象的原始指针。 scoped_ptr可以通过release的方法返回自己管理的指针,之后自己不再管理这个指针了。这种情形下用户需要自己管理对象的生命周期,返回的指针需要用户自己管理,或者交给其他智能指针管理。 其实scoped_ptr跟c++11中的unique_ptr是非常类似的,scoped_ptr也实现了“移动但不能拷贝”的属性。你可以通过移动来转移对象,从而可以避免构造临时对象。 你可以通过Pass方法把一个scoped_ptr“转移”给另一个scoped_ptr,之前说scoped_ptr是不能拷贝或者赋值的。 get,release,Pass三者区别是: get是获得原始指针,scoped_ptr还是继续管理着指针 release是获得原始指针,scoped_ptr不再管理指针 Pass是转移指针管理权到另外一个scoped_ptr,自己不再管理指针 Pass()可以正确的处理向上的类型转换,比如: 另外scoped_ptr还支持数组: base库还提供了make_scoped_ptr的函数从原始指针中创建并返回一个scoped_ptr。 此外chromium中还有个ScopedVector。这个是对vector容器的封装,使其可以存放并管理对象指针,在ScopedVector超出作用域的时候销毁指针所指向的对象。 ... Read More | Share it now!

c++中的智能指针

内存管理是c++中比较棘手的问题。轻则是内存泄漏,重则是野指针、访问越界而崩溃,我们必须小心翼翼的对待指针。c++写多了,有时候会怀念java,c#这种有垃圾回收机制的语言,它们写出的代码是多么的干净优雅。 以前c++标准库里只有一个auto_ptr的智能指针,它的出现让我眼睛为之一亮,原来c++代码还可以这样管理指针啊。但是auto_ptr适应的场景有限,还有自己本身管理权转移晦涩的问题。 c++的准标准库boost为此准备了一组智能指针,scoped_ptr、socped_array、shared_ptr、shared_array、weak_ptr、intrusive_ptr。开源的浏览器chromium也有自己的智能指针解决方案linked_ptr、scoped_ptr、scoped_refptr、WeakPtr。c++... Read More | Share it now!

Graphviz教程

Graphviz教程 Graphviz是大名鼎鼎的AT&T实验室开发的一个画图工具。它的理念和一般的“所见即所得”的画图工具不一样,是“所想即所得”。就是你想画出怎样的图,用语言定义和描述出来,Graphviz会自动用最合理的方式去渲染布局出这个图。 绘制简单的图 digraph是有向图,graph是无向图。在有向图中->表示连接的一条边,无向图中–表示连接的一条边,不能混用。 第一行给出了图的类型和名字。当某个节点的的名称第一次出现,它就被创建。可以在一行里创建多个相连节点的连接。 设置图、节点、边的属性 Graphviz节点默认的属性是shape... Read More | Share it now!