K.I.S.S. – 简单哲学 Linux, Freedom, Arch, Python, Gtk+, C … Keep It Simple, Stupid!

22一/119

编译最新 Git 版本 GNOME Shell(附视频)

相信很多人都知道, 3 最早今年 4 月份就会正式发布了,甚至 GNOME 3 的官方网站都已经上线,那么 GNOME 3 的重头戏,GNOME Shell,现在已经发展到什么程度了呢?

如果你注意 GNOME 3 官网的最下面,可能已经发现官方提供的方法了,那就是 jhbuild!之前也曾经试用 jhbuild 编译过 GNOME Shell,不过最后都不能启动,这次克服了点小困难,终于成功了,简单说一下:

  1. 首先你要有至少 1.9.2 版本的 xulrunner,这个根据各个发行版自己解决吧~ Linux 下直接安装 xulrunner 这个包即可。
  2. 依次运行下面的命令:
    sudo rm -rf /usr/lib*/*.la
    curl -O http://.gnome.org/browse//plain/tools/build/-build-setup.sh
    /bin/bash -build-setup.sh
    ~/bin/jhbuild build
  3. 如果是在 Arch 下,由于 python 3 为默认,编译 gjs 的时候,可能要修改一下一个脚本,将 python 改为 python2。
  4. 编译成功后,使用下面的命令运行:
    cd ~/gnome-shell/source/gnome-shell/src
    ./gnome-shell --replace
  5. 如果出现下面的错误:
    mutter: symbol lookup error: /home/iven/gnome-shell/install/lib64/gtk-3.0/modules/libcanberra-gtk-module.so: undefined symbol: gtk_quit_ad

    可能是 API 变动导致的,删除那个文件即可,毫无危险:

    rm /home/iven/gnome-shell/install/lib64/gtk-3.0/modules/libcanberra-gtk-module.so/pre>

基本上这样就可以执行了,这里录制了一段 GNOME Shell 的演示视频,不妨边编译边看(请自备犯罪工具):

3十/1010

Arch Linux 下 Android 源码下载与编译

最近工程实践的老师让我把 环境搭建起来,并且将界面换成黑白的,算是一个考验,这里就记录一下具体的做法。

Android 源码以前没有注意过,一直以为是 管理,看了一下文档,才知道 Google 在 上面又加了一个叫做 repo 的工具,用来管理大量的 仓库。

repo 这个工具在 AUR 里面有,叫做“repo-git”,首先要把这个工具安好。

按照官网的下载说明,安装下面几个包:gperf sdl esound wxgtk valgrind,当然 base-devel 这个 group 也肯定都要装的了。64 位系统还要装 lib32-readline 和一些其他 32 位包,不过因为我装了 wine,所以所有依赖包都已经装好了。

官网说只能用 jdk5,不过我克服万难从 AUR 上安装好老掉牙没人管的 jdk5 之后,编译时提示我 jdk 版本不对,请使用 jdk6 ……同学们引以为戒,官网说明已经过时了。安装好 jdk 后重启一下系统更新环境变量,当然你也可以:

$ source /etc/profile

然后随便建个目录,比如我是 ~/Workspace/mydroid,进入这个目录后:

$ repo init -u git://android.git.kernel.org/platform/manifest.git

这是获得最新的 git stable 源码,或者你仅仅想要 Android 2.2.1,那么:

$ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.2.1_r1

其实就是 git branch 的封装,manifest 是一个 git 的仓库目录,里面就一个 xml 文件,记录了各个仓库的信息,repo 根据这些信息来 clone 源码。

这条命令会问你的名字和 E-mail,其实就是 ~/.gitconfig 中的信息,如果你以前常用 git,直接回车即可。

下面就是同步源代码了:

$ repo sync

Android 的源代码大约有 2G,在我令人发指的网络环境下,同步了 2 天才完事,所以速度在 200K 以下的同学就不要凑热闹了,找个地方画圈圈吧……

这个过程中就是一堆的 git clone、git rebase,如果中断了,会从第一个开始慢慢扫描,直到之前中断的那个仓库,按照 git clone 不支持断点续传的习性,这个被中断的项目会被重新 clone。要知道,Google 这个脑残最恶名昭彰的一点就是把二进制文件往 git 里面放了,第 252 个仓库 prebuild 就是这么个地方,700M,我就在这里中断过……

闲话少说,下面是两个针对 Linux 的 Fix,一个是 Make,目前 testing 中的 make 是 3.82 版本,这个版本在编译 Android 的时候开始会出错,见这个帖子,所以要降级成 core/make,也就是 3.81。

另外,如果用的是 64 位系统,那么要安装 multilib 源中的 gcc-multilib,否则会出现 libgcc.a 不兼容的错误。

全部完成之后,直接执行 make 就可以编译源代码了,当然 Makefile 有很多规则,比如只想编译计算器这个程序,make Calculator 即可。

最后就是用模拟器执行啦,建个脚本执行即可:

#!/bin/bash
export ANDROID_PRODUCT_OUT=~/Workspace/mydroid/out/target/product/generic
# PATH for Android emulator
export PATH=$PATH:~/Workspace/mydroid/out/host/linux-x86/bin
export ANDROID_JAVA_HOME=$JAVA_HOME
# start the emulator with debug info
emulator -debug-init

最后是几张模拟器的图片,是我改成黑白之后的:

android-locked.png

android-main.png

android-browser.png

android-calculator.png

19九/102

加快 git clone 速度的方法

呵呵,不知道我是不是火星了, clone 原来可以不全部克隆的,而是可以只克隆当前的 commit,使用下面的命令即可:

git clone git://... --depth 1

也就是指定克隆深度为 1。
当然,通过这样克隆的代码就不能进行管理、提交什么的了。
学校的网络不知为何把 git 封了,只好用 proxychains 代理进行克隆,速度慢死,有了这个命令,安装个软件就快多了~

标签: 2 评论
16六/106

giggle – 来自 GNOME 的 git 图形界面

以前介绍过 两款 图形界面工具,并对它们进行了简单的对比,最近,又发现另一款工具,, 在此介绍给大家,希望有此需要的同学多个选择。

giggle 将用于浏览仓库内容的 gitk 和用于执行各种操作的 git-gui 融合在一起,成为一款集 git 所有功能于一身的管理工具。

giggle 有两种模式,一种是浏览模式,可以浏览目录中的所有文件,并指出它们在哪次提交中被修改,做了哪些修改,并且能够据此产生补丁。

另外,浏览模式本身也是个简单的编辑器,可以对文件即时进行修改,并对修改进行提交。如果你仅仅需要少量修改,或者不需要一些编辑器的高级功能,那么一个 giggle 足以完成 git + 编辑器的功能了。

giggle-browse.png

另一种模式是历史模式,这种模式下比较容易从总体上把握每次提交后项目的修改状况,以及提交的详细信息。当然创建分支、标签和补丁的功能是必不可少的。

giggle-history.png

另外,giggle 还可以修改 .gitconfig、.gitignore 等文件的设置,同时提供了嵌入的终端,以及打开外部编辑器编辑文件等功能,确实具有一个完善的 git 图形界面的潜力。

giggle 现在已经成为 的组件,开发比较活跃,有兴趣的同学可以一试。

标签: , , 6 评论
23九/093

快来使用 Git 翻译《Pro Git》

的中文教程和书籍比较少,大多已经陈旧不堪,前段时间 Linuxtoy 介绍了一本《Pro Git》,读了一下,写得很不错,可惜是英文的。

偶然间,在页面下面看到了 Chinese 的字样,原来《Pro Git》的翻译已经在进行中了,居然是用 Git 进行管理的!仔细想想,Git 的分布式开发的确非常适合翻译的情况,只能说 Git 功能太过强大了吧……

目前中文版的翻译已经到了第四章,看了一下,提交者主要是 chunzi 和 DaNmarner,已经翻译了一个多月了……看了前三章,翻译得很好,很容易理解,不过两个人翻译的话,可能会很辛苦……

各位正在学习和使用 Git 的各位同学,有英语比较好的能够帮助翻译么?既锻炼英语,又实践 Git 技能,好机会哦~

项目地址:http://github.com/progit/progit/

chunzi 的 fork:http://github.com/chunzi/progit/

DaNmarner 的 fork:http://github.com/DaNmarner/progit

PS:考研中没时间翻译,只能来号召大家一下了……羡慕 shellex 兄……

标签: 3 评论
30四/090

使用 gitk 跟踪 git 项目源代码

看源代码是学习编程最快、最有效的方法之一,在 Linux 开源的大环境下,研究源代码就更加容易了。面对一个大一点的项目,我们可能无从下手,那么,何不从其雏形阶段开始研究呢?
我现在就在研究 Tualatrix 兄的 ubuntu-tweak 的源代码,以前 ubuntu-tweak 托管于 Google Code 的时候,Google Code 对各版本差异分析得很清楚,然而转向 github 之后,限于网速,看起来很不方便。
有什么跟踪本地 项目源代码的工具呢?diff 显然不是最好的方法,尤其涉及到文件移位之类的问题时。
Tualatrix 兄用的是 gitg,可是我用起来总是感觉缺点什么的样子,而且经常会莫名其妙的崩溃。偶然看 git 官方文档时,认识了 ,似乎是官方提供的工具,用起来真是越来越顺手。
先看一下两个软件的对比图:

gitg.pnggitk.png

gitk 基于 tk/tcl,所以用之前要安装这两个包,由于是官方软件,安装 git 时就会自动安装,不必另行安装。

从图中可以看出,基于 Gtk+ 的 界面更加漂亮,代码差异的彩色背景更加显眼,相比之下,基于 tk 的 gitk 显然简陋许多,大概 的作者也就是想写个 gitk 的 Gtk+ 版本吧。
不过,仔细看的话,就可以看出很多不同来,比如,中间的横条空间,gitg 是用作显示 Commit 的详情,这显然是浪费了宝贵的屏幕空间,尤其对于宽屏用户来说。

相对地,gitk 虽然中间的空间也用了,不过放置的却是实用的搜索功能。千万不要小看这个搜索条,它不但可以搜索 Headline、Comments、Author、Committer,还可以搜索哪些 Commit 对某些文件进行了修改,并且支持正则表达式、大小写匹配。

再来看一下 diff 功能,gitk 也比 gitg 强上很多,不但可以选择查看差异、新版、旧版的代码,还支持忽略空白符,设定 diff 周边行数。不要小看这个功能,在查看源代码的时候,这个功能对于理解上下文是很重要的。

如果这么强大的差异功能你还不满意,或者觉得视野空间太小的话,还可以右击文件,选择 External diff 来调用 meld 查看,当然前提是你安装了 meld。

右击文件,还可以对该文件加上高亮,这样标记已经读懂的文件比较方便。

通过这些介绍,可以看出,相比 gitg,gitk 更加成熟,功能更加强大。

默认启动 gitk 是打开 master 分支,如果想要查看其他分支,使用 gitk 分支名 即可,比如:

gitk origin

gitk 的命令行还有很多用法,详见 git 相关文档。

其实,gitk 只是 git gui 中的一个小工具,在命令行输入:

git gui

可以发现更多功能,当然,有些功能就不如终端下方便了。下面是 git gui 的效果:

git-gui.png

9四/092

试试用 C++ 实现数字图像处理

看到同寝的在学数字图像处理,好像很好玩啊……
正好正在学 ++,决定用 ++ 实现一下(他原来用的是 、C++ 混编,代码惨不忍睹……)。
C++ 真的是个很麻烦的东西啊,定义一个类要费那么长时间,读写文件也没有 C 那么轻松,真怀疑它的用处了……
还是 Python 最简洁,C 我也很喜欢,真不明白那些自己用 C++ 写程序的人,怎么受得了这种笨重的搭建速度……现在做 C++ 作业,一个没什么用的小程序都要写一下午……
不说了,代码在 http://github.com/iven/dip/

标签: , , 2 评论
16三/090

SourceForge 增加了新的版本控制系统支持

SourceForge 已经增加了对目前三种最为流行的分布式版本控制系统 ,Bazaar,和 的支持。网站同时增加了一个吸引人的托管程序特性——允许用户使用 的基础设施来开启多种开源软件管理和协作的服务(包括 ,和 )。
via: http://arstechnica.com/open-source/news/2009/03/sourceforge-adds-support-for-new-version-control-systems.ars

23一/090

git中修改commit的message的方法

一不小心commit时message写错了,找了好长时间,走了不少弯路,才找到方法……

 rebase -i master~5

这个是找出master分支最近5次的commit,看见那个写错的了吧?把pick改成edit,保存退出。
此时工作目录已经变成这次commit的样子了,不要慌,然后:

git commit --amend -m "message"

修改这次的message。最后:

git rebase --continue

怎么样,成功了吧?
利用这个方法也可以修改commit的文件。

标签: 没有评论