2012年7月17日星期二

网海拾贝 2012-07 (linuxmint, git/hg, emacs, vim...)

1. LinuxMint

其实前几天写过了一篇相关的博文。这里是相关的一些链接。

2.Git/Hg

因为工作上的需要,我最近在研究GitHub以及探索内部开源的一些支撑手段,当然也就碰到了git。但在公司的Windows上使用git不太爽(其实我个人觉得还好,但我觉得在公司内推广git还是有些难度),于是又玩起了mercurial,觉得不错,回头详细写一篇对比。

2.1. 对比

2.2. 迁移/配合使用

2.3. Git

2.4. Hg

3.Emacs

3.1 org-mode

3.2 Emacs 24

3.3 CEDET

3.4 Why Emacs (& Emacs vs Vim)

这些链接其实有一半没认真看过,都是陆陆续续添加到Read It Later列表里面的,因为有一阵老想写一篇《为什么我转向了Emacs》,现在觉得其实没多大意义 :-)。

3.5 misc

4. Vim

5. Misc

5.1 Programming

5.2 Linux

5.3 Android

5.4 Wine

5.5 Misc

本文链接



(automatically copied by ifttt from http://www.cnblogs.com/bamanzi/archive/2012/07/17/various-goodies-2012-07.html)

2012年7月15日星期日

笔记: 文件比较/合并工具

5+ Best Free File Compare and Merge Software List

  • WinMerge (当前仅支持Windows,作者正在开发v3版本 ,改用Qt实现,同时支持Linux)
  • Meld (python, gtk)
  • FreeFileSync
  • Kompare
  • DiffMerge
  • KDiff3 (KDE or just Qt)

Diffuse - graphical tool for merging and comparing text files

新发现的的一个文件比较工具,只依赖于python和gtk,适合xfce下使用(比如colinux或者小内存机 器)——tkdiff/xdiff的功能太弱了。

  • 只能比较文件,不能比较目录;
  • 特色: 可以与版本控制工具相配合,与指定revision比较: diffuse -r 123 foo.C不指定revision但只给出一个 文件名时,尝试跟最后一个revision进行比较
    • 在Windows上,还考虑了使用Cygwin的情况,可以调用Cygwin里面的版本控制工具

diffuse screenshot

KDiff3

没想到KDiff3还有一个Windows版本,从Debian里有个kdiff3-qt版本 来看,这个Windows版本应该是只用了 Qt的。

简单评估(基于Windows版本):

  • 文件夹比较是WinMerge的风格(不是Beyond Compare/Meld那种清晰的左右两栏风格),我不太习惯
  • 文件内容对比时,也不能直接地将选中块复制到对面,而是要先进入merge模式,在第三个窗口中维护结果, 这样每处不同都要关注三个窗口,部分完成合并后也不能简单地直接刷新视图以便直接关注剩下的部分(需 要重新载入、再merge)。我还是喜欢BC/Meld的风格,甚至TC的文件比较和emacs的ediff都比这方便
  • UI设计不怎么样,只有工具条和繁琐的主菜单可以使用,没有右键菜单,没有meld中栏那种“直接复制到对 端”的箭头 http://kdiff3.sourceforge.net/doc/screenshots.html 倒是跟我用其它KDE程序的感受一致: 功能似乎很多,但很繁琐,用着累
  • kdiff3不支持syntax highlighting,也不打算支持 http://kdiff3.sourceforge.net/doc/faq.html#id2569879 而BC/Meld/WinMerge/Diffuse都是支持的
  • 另外有一个Windows上qt程序的共性小问题:选择语言为简体中文后,菜单字体总是比较难看的8号字,而且 我在网上搜了一圈,好像Windows上没有Linux下qtconfig那样的配置工具,网上说的办法都是修改代码重新编译

本文链接



(automatically copied by ifttt from http://www.cnblogs.com/bamanzi/archive/2012/07/11/free-compare-tools.html)

2012年7月8日星期日

RabbitVCS如何跟GNOME-3/MATE集成

在Linux下,我一直用RabbitVCS 做SVN的前端(除了Emacs之外),因为它可以和nautilus 很好地集成:通过右键菜单执行常用操作,而且文件图标上有vcs状态图标——跟在Windows下用的tortoise系列有点象(不知道作者将其取名rabbit,跟龟兔赛跑有没有关系 :-)

rabbitvcs+nautilus integration

RabbitVCS目前支持SVN和GIT(它的网站说打算下一版本0.16里添加对Mercurial的支持,那时我就看看是不是将我的主代码仓库迁移到mercurial上去)。安装很简单(如果你用的是GNOME 2):

apt-get install rabbitvcs-nautilus

(其实rabbitvcs也跟XFCE的thunar有集成,但只有右键菜单,而不能显示图标overlay,这我就觉得那还不如用Emacs或者完全命令行)

 

GNOME-3 (nautilus 3.x)

如果你在用GNOME-3作为桌面,而发行版自带的rabbitvcs又比较老(比如我的LinuxMint 12),它是不能跟nautilus 3.x集成的,得升级rabbitvcs到0.15版本以上才行。

Debian

当前的Debian testing/unstable里面的rabbitvcs已经是0.15版本了,直接安装rabbitvcs-nautilus3(注意后面的3,因为对于GNOME 2.x而言应该是rabbitvcs-nautilus包)就可以了。

如果在用stable(squeeze)版本。。。什么,你已经在用GNOME-3了? 你能搞定那个,说明你完全可以自己搞定新版本rabbitvcs的安装了 :-)    (简单地说,就是自己从源代码包进行安装,因为rabbitvcs是用python写的,也没有什么pyd模块)

Ubuntu/LinuxMint

除非你正在使用尚未发布的quantal,否则ubuntu官方提供的rabbitvcs最新也就是0.13了。不过rabbitvcs自己提供了一个apt仓库:

sudo sh -c "echo 'deb http://ppa.launchpad.net/rabbitvcs/ppa/ubuntu **DISTRIBUTION** main' > /etc/apt/sources.list.d/rabbitvcs.list"
sudo apt-get update
sudo apt-get install rabbitvcs-nautilus3

注意把**DISTRIBUTIOn**换成你系统的代号,rabbitvcs对hardy到precise都支持。LinuxMint用户从这里可以查到对应的Ubuntu版本号: Linux Mint Releases

 

MATE

如果你在用MATE作为桌面,那么有点不幸,rabbitvcs目前还不提供对mate文件管理器caja的支持。不过,如果你知道mate其实就是gnome 2.x改了一些名称而已,MATE的文件管理器caja实际就是nautilus-2.x的话,这个问题并不难,把nautilus-2.x的集成扩展简单改改就可以在caja上使用了。

1. 首先,安装rabbitvcs-core。因为,所以并不必须安装最新版本的rabbitvcs;

sudo apt-get install rabbitvcs-core

2. 然后从mate的仓库安装python-mate和python-caja

sudo apt-get install python-mate python-caja -t oneiric

(如果你在使用LinuxMint 12 (Lisa),那么它带的mate是1.0版本,LinuxMint提供的仓库里并没有python-caja这个包,建议用mate官方仓库升级到1.2版本)

3. 下载rabbitvcs-nautilus的deb包,但不用安装,我们要拿过来改改。

Debian wheezy可以从这里下载: http://packages.debian.org/wheezy/all/rabbitvcs-nautilus/download

Ubuntu/LinuxMint从这里:  http://packages.ubuntu.com/rabbitvcs-nautilus

但如果你是从rabbitvcs提供的ppa仓库安装的,那么相应地,到它的仓库去下载:

http://ppa.launchpad.net/rabbitvcs/ppa/ubuntu/pool/main/r/rabbitvcs/

然后用file-roller或者dpkg-deb -x解压rabbitvcs-nautilus...deb,修改解压出来的usr/lib/nautilus/extensions-2.0/python/RabbitVCS.py

将里面的(大约在593行):

import gnomevfs
import nautilus

改为:

import matevfs as gnomevfs
import caja as nautilus

然后将此文件安装到/usr/lib/mate/extensions-2.0/python/RabbitVCS.py(对,该deb里面的其它文件不用要了)

4. 重启caja

caja --quit
caja

 

 

类似地,rabbitvcs跟pluma(mate-text-editor)的集成,也可以通过移植rabbitvcs-gedit的代码搞定。

 
 

本文链接



(automatically copied by ifttt from http://www.cnblogs.com/bamanzi/archive/2012/07/08/rabbitvcs-gnome3-mate.html)

关于gitlab搭建方法的几点补充

我们部门想搞一些内部开源项目,但缺少一个支撑平台。都知道GitHub很火,但看了一下企业版的架构,还是有些肉痛,加上对git也存在一些争论,于是一番研究之后,决定先把gitlab/gitorious或者trac/redmine之类的都搭上,体验一下再做决定。

我是按照这篇文章来搭建的: Tutorial: setting up Gitlab on Debian 6 (下面简称gitlab-debian),不过实际上却是在一台RHEL 5.6上搭建的。由于我对RedHat系列不熟(后来才看见Installing GitLab 2.1 on Centos 6GitLab installation on Fedora 16 (with gitolite),要按照这两篇估计能省点力),加上RHEL的光盘和在线仓库都比较难找,另外自己还是个ruby/rails小白,还是比较痛苦的 ——不过后来在公司内找到了RHEL 5.6的ISO,然后又发现了一个第三方仓库EPEL——Extra Packages for Enterprise Linux,省了些力。

搭建过程中有不少收获,整理了一下,贴出来(注:内容主要针对Tutorial: setting up Gitlab on Debian 6这篇文章进行补充说明)。

Step 0: 一些准备工作

0.1 proxy设置

export http_proxy=http://username:password@proxy.mycompany.com:8080

如果要让http_proxy能透过sudo传递给apt-get或者gem install,需要在/etc/sudoers里面添加如下配置:

Defaults env_keep = "http_proxy ftp_proxy"

0.2 添加第三方仓库: EPEL (对于Debian/Ubuntu不用这一步)

cat > /etc/yum.repos.d/fedora-epel.repo <<EOF
[fedora-epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
baseurl=http://cn.archive.ubuntu.com/fedora-epel/$releasever/$basearch/
enabled=1
gpgcheck=0
gpgkey=
EOF

yum check-update

然后就可以用 yum install wget curl python-pygments 来安装EPEL上的第三方包了。

0.3 建议安装GNU screen或者tmux

因为需要来回切换用户,加上http_proxy的设置问题,还是用screen/tmux方便。

Step 3: Install Gitolite

Gitolite使得多个人通过同一个ssh账号(即不用建立多个UNIX用户)访问不同的git仓库,是GitLab/Gitorious提供 git服务的关键。推荐看看它的文档: gitolite documentation 尤其是 how gitolite uses ssh 这一节。对英文有 障碍的话,可以看看这篇 Gitolite 构建 Git 服务器 (这篇文章详细讲述了gitolite的原理和安装/升级方法)。

这里需要关注原文里如下两步:

sudo -u gitolite cat /var/lib/gitolite/.ssh/id_rsa.pub
#(now select the output in your terminal and copy it to the clipboard)
sudo dpkg-reconfigure gitolite

后面这一步到底干了啥,因为 dpkg-reconfigure 是Debian/Ubuntu系的东西,RedHat上不玩这个啊。 我从Debian下载了gitolite的安装包,看了一下里面的postinst脚本,其实上面两步等价于

sudo -u gitolite -H gl-setup /var/lib/gitolite/.ssh/id_rsa.pub
# or su -c "gl-setup /var/lib/gitolite/.ssh/id_rsa.pub" gitolite

注意,执行这一步时要保证gitolite没有被配置过,如果觉得有问题,就把 /var/lib/gitolite/ 目录下的内容全删掉 (包括 /var/lib/gitolite/.ssh, /var/lib/gitolite/.gitolite.rc ),然后重新开始这一步。 详情可参考gitolite的文档里cleaning out a botched install 这一节。

Step 4: Install Ruby 1.9

编译ruby之前要从epel安装libyaml-devel和libffi-devel包(原文没说),否则后面的 gem install bundler 会 有问题:

yum install libyaml-devel

Step 5: Install Gitlab

5.1 通过proxy访问gitlab

在公司内, 从github取代码时只能使用http链接方式,git(ssh)和https都不行,所以在取gitlabhq本身,以及取下来后用bundler安装子模块时,都需要修改(在 bundle install --without development test --deployment 这一步之前, 需要先修改 /opt/gitlabhq/Gemfile ,将所有https换成http。如果不小心先跑了这 一步,则需要再修改 Gemfile.lock )。

另外,git不使用环境变量http_proxy的值,而是需要单独设置:

git config --global http.proxy http://username:password@proxy.foobar.com:8080
git clone http://github.com/gitlabhq/gitlabhq.git

5.2 bundle install –without development test –deployment

  • 需要事先安装libicu-devel, mysql-devel, pcre-devel这几个包,这几个包在RHEL中已有
  • sqlite必须要3.6以上,否则ruby模块编译不会成功。RHEL 5.6里面的sqlite太老了,需要自己下载源代码包编译

5.3 建立数据库之前需要先安装mysql和redis(文档中没说)

  • mysql在安装光盘中有
    • mysql用这个命令设置其内root用户的密码: mysqladmin -u root password NEWPASSWD
    • config/database.yml 文件里面(仅production节)的mysql root密码必须跟上面的实际值一致
  • redis在EPEL里面: yum install redis
  • 然后 /etc/init.d/mysqld start && /etc/init.d/redis start
  • 注意: bundle exec rake db:seed_fu RAILS_ENV=production 这一步输出的是最后登录网站的管理员 用户名和密码,请记录下来

Step 6: Generate an SSL certificate

如果不是在互联网上部署,这一步并不需要。因为即使按这里所说的生成了SSL证书,也还要浏览器导入这个证书。 如果是在互联网上部署,应该到VeriSign或者StartSSL申请证书,才会被浏览器信任。可参考Nginx + https + 免费SSL证书配置指南

改用http(不用https)的方法:(注意,这里应该是在Step 7里面完成)

server {
listen 80;
server_name hadoop-slave-16;
root /opt/gitlabhq/public;

location / {
# root html;
# index index.html index.htm;
passenger_enabled on;
}
}

Step 7: Deploy to Phusion Passenger and Nginx

7.1 部署到nginx

  • 虽然EPEL仓库里有nginx,但不要安装,因为下面的 passenger-install-nginx-module 这一步会下载nginx并重新编译
  • nginx.conf里80端口的rewrite可以取消, "root /nowhere"也可以恢复成缺省配置
  • 如果nginx的配置存在问题,想要重启nginx的话,可以用 kill -QUIT $(pidof nginx) 的方法先停掉nginx, 修改完成后再用 /opt/nginx/sbin/nginx 启动

7.2 部署到apache

如果想将gitlab部署到www root的子目录(比如/gitlab/),可以改用Apache来做Web Server (我不知道在nginx上怎么搞,自己瞎试了一下,没搞定)。

用apache配置gitlab的具体方法, 可以参考如下内容:

LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.13/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.13
PassengerRuby /usr/local/bin/ruby

##Note: ln -s /opt/gitlabgq/public/ /var/www/html/gitlab

RailsBaseURI /gitlab
<Directory /var/www/html/gitlab>
# This relaxes Apache security settings.
AllowOverride all
# MultiViews must be turned off.
Options -MultiViews
</Directory>

BTW: 如果部署gitlab到子目录,另外还需要修改一下 /opt/gitlabhq/app/views/layouts/admin.html.haml 里面Resque的连接,这里是 个绝对连接,需要添加上gitlab的部署前缀(即改为 /gitlab/info/resque )。

本文链接



(automatically copied by ifttt from http://www.cnblogs.com/bamanzi/archive/2012/07/08/notes-gitlab-on-rhel.html)