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

11五/090

10 种为 GNOME 作出贡献的方法

之前提到过 GNOME 基金会正在募集捐款,其实这只是做出贡献的方法之一。作为一个 的爱好者或者用户,如果你自觉没有经济实力捐助,那么何不试试下面其他的方法,为之作出贡献呢?


GNOME 是一个强有力的桌面环境,她使世界认识到开源软件是怎样帮助用户建立起与系统的联系,并且做出扩展和延伸。如果你希望为 GNOME 作出贡献,下面就是作贡献的一些方法。

1. GNOME 无障碍(Accessibility)小组

这个小组让残疾人也参加进工作,使用服务、产品和信息等活动中来,这真是一个很棒的概念。

2. GNOME Bugsquad 小组

如果你能测试程序和软件,你可以通过加入 GNOME Bugsquad 来做出贡献,这个小组与 GNOME 的 QA(Quality Assurance,质量保证)配合工作。

3. GnomeLove 计划

如果你想为 GNOME 开发点东西,欢迎加入开发小组来作贡献。

4. GNOME 文档计划

文档对于任何软件都意义重大,如果能够撰写或者管理这些内容,那么这里就是你能作出巨大贡献的地方。

5. GNOME 翻译计划

用不同的语言传播 GNOME 的消息实在是独一无二的贡献,如果你除了英语之外还掌握其他语言,这里就是你该去的地方。

6. GNOME 可用性计划

可用性,顾名思义,是一个使 GNOME 桌面对用户来说更加易用、更有吸引力的小组。如果你能够帮忙创作设计和详细模型,这是属于你的地方。

7. GNOME Webhackers 小组

如果你是个网页开发者,那没有比这更让人兴奋的了。GNOME Webhackers 小组致力于重建各种 GNOME 网站,你可以作出很多贡献。

8. GNOME 系统管理小组

你可以加入 GNOME 系统管理小组,通过管理服务器和上面运行的服务来贡献力量。

9. GNOME 美工小组

GNOME 美工小组主要是一个制作更有创造性和动人的美工的小组。

10. GNOME 之友

用行动来传播 GNOME 也是一个伟大的贡献,这什么特别的技术都不需要。

via: 10 Ways to Contribute to GNOME

9五/0910

Finit-ARC: 让你的 Arch Linux 4 秒启动!

感谢 YCF 兄在 twitter 上的推荐。


是什么呢?这是一个加快 Linux 系统启动的程序,它的前身是大名鼎鼎的 fast-init。
我们知道,通常 Linux 启动是靠脚本来控制的,这可能是 /etc/rc.sysinit,大家知道, 脚本是解释性的,速度很慢(相对编译性的语言来说),那么,何不用一种编译性的语言来操纵系统的启动呢?
Finit_ARC 就是基于这一原理,它采用纯 C 语言写成,设置环境变量等等操作所调用的都是系统的 API,还有一些使用 system() 函数执行的程序,并且处理的时候还用了多进程,这样效率岂不是有很大的提高?
是的,经过实验,使用 Finit_ARC 启动的电脑,从 GRUB 到 Shell 登录,可能达到只需要 3-5 秒!
请注意:Finit-ARC 目前还是 Beta 版本,并且只能用于 Linux!
那么,怎样安装 Finit-ARC 呢?
1.从这里安装相对稳定版:
http://aur.archlinux.org/packages.php?ID=25159
或者从这里安装 git 版(仅用于测试目的!
http://aur.archlinux.org/packages.php?ID=26314
2.安装完成后务必正常启动(或重启)系统一次。
3.编辑 //grub/menu.lst,把 init=/sbin/finit-arc 作为内核参数加入进去。
重要!Finit-ARC 不支持 UUID,所以在 /boot/grub/menu.lst 和 /etc/fstab 中,应该把所有 UUID 形式改成 /dev/sd** 的格式!
更详细的介绍和一些注意事项,可以参考 Arch Linux 官方论坛


下面说说我的情况:
我的电脑启动速度没有经过任何优化,有的话也仅仅是开机不让 NTFS 分区挂载,模块用的是 AUTOLOAD,所以比较费时间。
使用 Finit-ARC 之前,我的启动时间是 21 秒。

bootchart_old.png

使用 Finit-ARC 之后,启动时间是 13 秒。

bootchart.png

不过,很悲惨的,遇到了 hald 段错误的问题,开机后键盘鼠标都不能用……论坛上其他人也出现了此问题,所以,优化要谨慎啊……
不过其实也没啥风险,只要 fallback 那个条目的内核参数没被你改了,出了问题从 fallback 进系统改回来就行了。
有没有想要试一下的呢?召唤小白!

8五/096

Blogspot 绑定域名的方法

昨天购买了域名 kissuki.com,但是怎么跟 Blogspot 绑定起来却是个问题。
开始的想法是 301 重定向,由于 Godaddy 的重定向在国内不能用(不知道为啥,用代理也不能用),于是用了 Godaddy 的虚拟主机进行了重定向,然而费了半天劲,重定向的效果并不理想。
主要就是重定向之后,地址栏的域名还是 Blogspot 的域名,那域名不是白换了?
查了半天资料,总算找到 Blogspot 绑定域名的方法(以下内容参考自定义域发布Google Blogger):
1.登录Blogger后台,点击“设置”->“发布”

2.点击“自定义域”->“高级设置”,输入绑定的域,比如我输入的是: www.kissuki.com

3.进入域名管理后台,增加一个CNAME别名设置,使你的域指向 ghs.google.com

最后,等待域名解析生效。
至此,域名绑定就完成了,至于以后被不被 ,那就看 RP 了~

标签: , , 6 评论
7五/092

今天在 Godaddy 注册了一个域名~kissuki.com~

现在注册域名真是便宜啊,首年才 $2.19!用的是 199 这个优惠码,呵呵,本来只用 $1.99 就够了,还加了 20 cents 的税……
觉得自己的网名没什么特色,虽然 ivenvd.com 也是空着的,但是还是没有注册,最终选择了 kissuki。kiss 不用说了,这是我博客的站点名嘛。uki 是什么呢?这个是来自日语“suki“,两个连在一块,看起来还蛮顺眼的……

现在设置上还有点问题,Godaddy 的设置太繁杂了,加上全英文,对于我这样看惯英文网站的人来说都晕的要死……
好在人民的力量是伟大的,不少网友又是贴图又是翻译的成果,总算没让我出太大岔子。
现在域名重定向还有点问题,重定向之后,页面的链接还是我的,这可不好,再研究研究~

Godaddy 还提供了虚拟主机,有 FTP 可以用,虽然据说有广告,不过用来学习一下 PHP 之类的应该足够了。
唉,相比国内的域名服务,我真想说一句:资本主义真是万恶啊!!!

标签: , 2 评论
6五/090

Arch Linux 五月份的时事传报(Newsletter)

又是一个月过去了,五月的 首先回顾了四月份所发生的事,比如升级时需要注意的问题,媒体对 Linux 的看法等等,然后照旧访问了一位开发者 Hugo Doria,在社区亮点中,有一些关于 Trusted User 的信息,在最后,是一些实用的 Diff 的技巧,不容错过哦~

点击这里进入本月的 Arch Linux Newsletter

例行的是两张桌面靓图~

5五/096

Windows 7 安装好啦,秀一下~

同志们,请听本台记者从 7 发来的报道!一如 twitter 上所言,本人现在正处于另一个伟大操作系统 Windows 7 的环境下。
什么是 Windows 7?呃,这个话题跳过。
呵呵,其实上次在家的时候已经在虚拟机里面装过 Win 7 了,不过毕竟是虚拟机,性能有限,不能使用 Aero,也不能体验 Windows 7 的真实速度。
这次看到 RC 中文版来了,赶紧以 10 M/s 的速度下载下来,然后决定把硬盘上原来的 XP 干掉,安 Win 7 试试。

说实话,开始对 Win 7 不抱啥希望,或者说对我的硬件不抱希望,可能我对 Windows 一直比较守旧,思想还停留在 Vista 刚出的阶段……
结果安装好了之后,发现 Aero 不但开了,而且各种效果十分流畅,我才猛然意识到,Windows 下 ATI 显卡驱动比 Linux 下那个强上太多了……

rank.PNG

可以看到,虽然显卡仍是制约我硬件速度的瓶颈,不过差距并不是太大……
不得不说,相比 Compiz,Aero 的特效更加稳定,更加浑然天成,当然特效数量肯定是不足的……
最后,实在很喜欢这个毛玻璃特效,虽然没什么用……

Explorer.PNG

Windows 吃空间是没的说的,不管是硬盘还是内存,一共 20G 的空间在没有干任何事情的时候就被吃掉 10G,与此同时,无数莫名其妙的程序已经悄然运行……

x86.PNG

硬盘空间的占用不是没有理由的,没见 x64 比 x84 的安装盘多出 1G 多?

Avira.PNG

安装软件会自动安在 x86 文件夹下,IE 默认也是 x86 的,x64 只是为了支持更高内存?

download.PNG

这些特效已经见怪不怪,值得注意的是左下角,IE 下载、Explorer 文件操作都会体现在任务栏图标上,完成后还会闪动,这点很是人性化。

Warning.PNG

有些很傻的提示框还是会不时出现,很有娱乐效果(点下“继续”,密码都不用输就进去了……)。

Paint.PNG

为了统一界面,Win 7 重写了很多没用的程序,使之更加没用(很遗憾,新增加的截图工具根本不支持延时截取,只能依靠 PrtSc 键+画图完成……)。

Smallbar.PNG

作为 的忠实使用者,还是习惯窄式面板(任务栏),尽管开始按钮多出来那一块会让我的显卡升温……

Samsho.PNG

运行 ArcLive 一片惨象,还好 WinKawaks 可以运行……
好了,回 去了,Windows,尽管你很好,别怪我冷落你……原因?对比一下从 98 到 Win 7 的磁盘碎片整理程序就知道了……

标签: , 6 评论
3五/096

轻松建立 Ubuntu/Debian 源镜像

服务器上的源是 的,考虑到学校里面已经没有多少人使用 ,而使用 来做推广显然更加合适,同学们遇到什么问题,也可以得到更好的支持,于是决定把 Debian 源换成 的。
建立源,当然要用 rsync ,不过这里并非直接使用,而是用的 Debian 官网提供的一段脚本,叫做 anonftpsync,加上 作为定时任务做成的。
cron 是 Linux 下的计划任务工具,可以按每小时、每天、每星期、每月执行任务,支持多用户多设置,很是方便。往下看之前,确认你安装了 rsync,并且开启了 cron 守护程序。

下面说一下步骤:
首先,建立源目录。如果想放在 FTP 服务器上,应该建立在 FTP 目录里,比如:

mkdir /home/ftp/ubuntu

由于脚本的需要,最好建立一个文件夹来记录最后同步的时间:

mkdir -p /home/ftp/ubuntu/project/trace/

然后建立脚本 anonftpsync。拷贝下面的脚本存放在稳妥位置。

#! /bin/sh -pset -e

# EXCLUDE 是你要排除的文件和目录。EXCLUDE="--exclude *alpha.deb \    --exclude *alpha.udeb \    --exclude binary-alpha/ \    --exclude disks-alpha/ \    --exclude *-alpha.gz \    --exclude installer-alpha/ \    --exclude binary-arm/ \    --exclude *arm.deb \    --exclude *arm.udeb \    --exclude disks-arm/ \    --exclude *-arm.gz \    --exclude installer-arm/ \    --exclude binary-m68k/ \    --exclude *m68k.deb \    --exclude *m68k.udeb \    --exclude disks-m68k/ \    --exclude *-m68k.gz \    --exclude installer-m68k/ \    --exclude binary-hppa/ \    --exclude *hppa.deb \    --exclude *hppa.udeb \    --exclude disks-hppa/ \    --exclude *-hppa.gz \    --exclude installer-hppa/ \    --exclude binary-ia64/ \    --exclude *ia64.deb \    --exclude *ia64.udeb \    --exclude disks-ia64/ \    --exclude *-ia64.gz \    --exclude installer-ia64/ \    --exclude binary-mips/ \    --exclude *mips.deb \    --exclude *mips.udeb \    --exclude disks-mips/ \    --exclude *-mips.gz \    --exclude installer-mips/ \    --exclude binary-mipsel/ \    --exclude *mipsel.deb \    --exclude *mipsel.udeb \    --exclude disks-mipsel/ \    --exclude *-mipsel.gz \    --exclude installer-mipsel/ \    --exclude binary-s360/ \    --exclude *s360.deb \    --exclude *s360.udeb \    --exclude disks-s360/ \    --exclude *-s360.gz \    --exclude installer-s360/ \    --exclude binary-s390/ \    --exclude *s390.deb \    --exclude *s390.udeb \    --exclude disks-s390/ \    --exclude *-s390.gz \    --exclude installer-s390/ \    --exclude binary-sh/ \    --exclude *sh.deb \    --exclude *sh.udeb \    --exclude disks-sh/ \    --exclude *-sh.gz \    --exclude installer-sh/ \    --exclude binary-sparc/ \    --exclude *sparc.deb \    --exclude *sparc.udeb \    --exclude disks-sparc/ \    --exclude *-sparc.gz \    --exclude installer-sparc/ \    --exclude /Debian-1.3* \    --exclude /Debian3.1* \    --exclude local/ \    --exclude stable/ \    --exclude slink-proposed-updates/ \    --exclude slink/ \    --exclude bo/ \    --exclude bo-unstable/ \    --exclude bo-updates/ \    --exclude binary-hurd-i386/ \    --exclude *hurd-i386.deb \    --exclude *hurd-i386.udeb \    --exclude disks-hurd-i386/ \    --exclude *-hurd-i386.gz \    --exclude installer-hurd-i386/ \    --exclude binary-powerpc/ \    --exclude *powerpc.deb \    --exclude *powerpc.udeb \    --exclude disks-powerpc/ \    --exclude *-powerpc.gz \    --exclude installer-powerpc/ "#--exclude /contrib/ --exclude /non-free/ --exclude source/\#    --exclude Incoming/ \#######################################

# TO 是目标目录TO=/home/ftp/ubuntu# 以下两个合起来就是源地址: debian.ustc.edu.cn/ubuntu/# 这里设置同步的服务器域名RSYNC_HOST=debian.ustc.edu.cn# 这里是同步服务器上源所在的目录RSYNC_DIR=ubuntu/

LOCK="${TO}/Archive-Update-in-Progress-`hostname -f`"

# Get in the right directory and set the umask to be group writable# cd $HOMEumask 002

# Check to see if another sync is in progressif lockfile -! -l 43200 -r 0 "$LOCK"; then  echo `hostname` is unable to start rsync, lock file exists  exit 1fitrap "rm -f $LOCK > /dev/null 2>&1" exit  

set +e

#result=1#while (( $result != 0 )) ; dorsync -rltv --progress --delete \     --exclude "Archive-Update-in-Progress-`hostname -f`" \     --exclude "project/trace/`hostname -f`" \     $EXCLUDE \     $RSYNC_HOST::$RSYNC_DIR $TO > ${HOME}/log/rsync.log 2>&1#result=$?#done

date -u > "${TO}/project/trace/`hostname -f`"savelog ${HOME}/log/rsync.log > /dev/null 2>&1

设置权限。确定脚本可以被执行,目标目录有写权限。

chmod +x anonftpsyncchmod 755 /home/ftp/ubuntu

添加计划任务。这里使用 crontab 设置,-e 选项表示编辑设置:

crontab -e

输入下面的一行,表示每天凌晨 2:00 运行 /usr/local/bin/anonftpsync,添加完毕保存:

00 2 * * *   /usr/local/bin/anonftpsync

使用下面的命令查看是否添加成功:

crontab -l

重启 cron。更改完设置需要重启 cron,通常是:

/etc/init.d/cron restart

Linux 下是:

/etc/rc.d/crond restart

接下来就是等待咯,如果你迫不及待,可以直接运行脚本同步。
可以看到,建立一个 Ubuntu/Debian 源并没有如何麻烦,这不得不归功于 linux 下工具和脚本的强大,呵呵~
如果有教育网的同学,可以加这个源,现在还在同步中,呵呵~每天从中国科技大学同步一次。从这里下载源列表:

ftp://.org/sources.list/

如果对 cron 不够明白,可以参考:计划任务工具 cron 的配置和说明

2五/090

使用 PyGTK 和 Cairo 编写一个简单的时钟

呵呵,其实说这个是个自定义控件也不为过。
先介绍一下 Cairo:Cairo 是一套提供设备独立的矢量图形 API 的二维图形库,支持很多不同的后端,如果可能的话,还可以使用硬件加速绘图。Cairo 是用 C 语言编写的,但是提供了很多其他语言的绑定,Factor, Haskell, Lua, Perl, , Ruby, Scheme, Smalltalk 等等。Cairo 基于 LGPL 和 MPL 双许可,这意味着你可以用它开发闭源软件。Cairo 是自由软件。
关于 Cairo 的更多详情,可以参照维基百科
Cairo 的使用方法很简单,跟中学时学习的 LOGO 语言差不多,这里用 + 编写一个时钟出来。
首先,建立一个窗口。GTK+ 提供了一个专门用来画图的控件 DrawingArea,我们继承它,建立一个类 CairoDrwa,并且把一个对象加到窗口上去。虽然 GTK+ 本身提供了不少绘图功能,不过这里只说 Cairo。

import gtk, glib, math, time
class CairoDraw(gtk.DrawingArea):
   """Drawing with Cairo"""
   def __init__(self):
       super(self.__class__,self).__init__()

class MainWindow(gtk.Window):
   """Main window of the test program"""
   def __init__(self):
       super(self.__class__, self).__init__(gtk.WINDOW_TOPLEVEL)
       self.set_title("Cairo test")
       self.connect("delete-event", gtk.main_quit)

       cairo_test= CairoDraw()
       self.add(cairo_test)

   def main(self):
       self.show_all()
       gtk.main()

if __name__ == "__main__":
   window = MainWindow()
   window.main()

然后,连接事件。把这个类的 expose-event 连接到一个回调函数 on_expose 上去,expose-event 是一个“曝光”事件,在控件被显示的时候会触发此事件。

class CairoDraw(gtk.DrawingArea):
   """Drawing with Cairo"""
   def __init__(self):
       super(self.__class__,self).__init__()
       self.connect("expose-event", self.on_expose)

下面来写 on_expose 函数。首先我们要取得我们的 Cairo Context(可以理解为“画板”),这个画板是从 DrawingArea 中的 GdkWindow 中取得的。

    def on_expose(self, widget, event):
       context = widget.window.cairo_create()
       return False

我们需要设定 DrawingArea 的刷新区域。这样以后每次触发 expose-event 的时候,都会重绘这个区域。

    def on_expose(self, widget, event):
       context = widget.window.cairo_create()

       context.rectangle (event.area.x, event.area.y,
               event.area.width, event.area.height)
       context.clip()

       return False

我们把绘图的部分写在 draw 这个函数中,然后让控件每秒钟重绘一次。这样每秒时间改变的时候,图形就会刷新,指针就会动了。

    def on_expose(self, widget, event):
       context = widget.window.cairo_create()

       context.rectangle (event.area.x, event.area.y,
               event.area.width, event.area.height)
       context.clip()

       self.draw(context)

       glib.timeout_add(1000, self.queue_draw)
       return False

下面来写 draw 这个函数。
首先来画表盘,也就是一个圆。我们用 arc 函数来画一个弧线,这个弧线的角度从 0 到 2 * pi,也就是一个圆了。注意,这时候我们还没有上色,所以画板依然是空的。使用 set_source_rgb 来设定画笔颜色,fill_preserve 和 stroke 分别用于填充和描边。

clock1.png

    def draw(self, context):
       rect = self.get_allocation()
       x = rect.x + rect.width / 2
       y = rect.x + rect.height / 2
       radius = min(rect.width / 2, rect.height / 2) - 5

       context.arc(x, y, radius, 0, 2 * math.pi)
       context.set_source_rgb(1, 1, 1)
       context.fill_preserve()
       context.set_source_rgb(0, 0, 0)
       context.stroke()

接下来画刻度。很简单的算法,值得注意的是 save 和 restore 两个函数,这是一种类似堆栈的保存 Context 状态的方法,这样对线的长度修改之后,很容易就可以恢复过来。

clock2.png

        for i in xrange(12):
           context.save()

           if i % 3 == 0:
               inset = .2 * radius
           else:
               inset = .1 * radius
               line_width = context.get_line_width()
               context.set_line_width(.5 * line_width)

           context.move_to(
                   x + (radius - inset) * math.cos(i * math.pi / 6),
                   y + (radius - inset) * math.sin(i * math.pi / 6))
           context.line_to(
                   x + radius * math.cos(i * math.pi / 6),
                   y + radius * math.sin(i * math.pi / 6))
           context.stroke()
           context.restore()

最后,对指针进行绘制。和表盘差不多的算法。

clock3.png

        tm_hour, tm_min, tm_sec = time.localtime()[3:6]
       handlist = (
               (tm_hour, .3, 12, 1.5),
               (tm_min, .2, 60, 1),
               (tm_sec, .1, 60, .5),
               )
       for (hand, inset, num, width) in handlist:
           context.save()

           inset *= radius
           line_width = context.get_line_width()
           context.set_line_width(width * line_width)
           context.move_to(
                   x + (radius - inset) * math.sin(2 * hand * math.pi / num),
                   y - (radius - inset) * math.cos(2 * hand * math.pi / num))
           context.line_to(x, y)
           context.stroke()

           context.restore()

这样,一个简单的时钟程序就做好了。源代码在这里
参考:Writing a Widget Using Cairo and PyGTK 2.8
PS:晕,写完了才发现这篇文章还有下半部分……

1五/090

GNOME 基金会需要你的帮助!

亲爱的基金会成员:
2009 年的年度预算已经出来了。在过去的两年, 基金会通过获得捐款,都得到了不错的盈余。因此,我们也得以扩展 相关的活动事件。去年我们有幸通过雇用德高望重的 Stormy Peters 作为我们的行政主管,大大增加了基金会对成员们的价值。当这件事被决定时,没有人能够预见到全球性的经济危机和它给我们的产业带来的影响。

虽然 Stormy 正试图拉更多的赞助,而我们也足够在本预算周期内付给她工资,我们还是想,如果没有大量稳定的捐献的话,除非我们减少活动预算,否则我们恐怕没有办法将行政主管留在工资单上了。
经济持续的大规模动荡起伏,我们也只能逆来顺受,同时寻找最好的办法来为我们的成员们服务。比起把这段低迷时期看成勒紧要带的时期,我更愿把它看成社区为未来而赌注的机会,告诉大家,我们并不仅仅靠公司的金库来发展 GNOME。
如果你以前没有捐助过 GNOME,现在是时候开始了,赶快成为 Friend of GNOME 或者通过其他任意的捐赠级别捐赠吧。如果你正在捐助,看看你是否每月能够捐助更多一点点。每一点点都很重要。要知道这些资金是会用到 Hackfest 和本地会议上的。这些资金也被用于给那些为了 GNOME 发展更好而制定策略的兼职、全职员工支付工资。
基金会已经为我们服务很多年了,不论这次经济危机的结果如何,它也将继续服务下去。真正遗憾的事是无法没有资金留住 Stormy。Stormy 在督促我们完成现有项目、开启新项目、挖掘新的资金渠道方面贡献不凡,即使是在现在的经济氛围下也是如此。现在失去 Stormy,就像空有一架新飞机,却没有把跑道建得足够长来让它降落一样。Stormy 的至关重要已经显而易见了。可以说,没有她,基金会在行使它的职责时就没有那么大的效力。
请到 Friends of GNOME 网站 http://www.gnome.org/friends/ 进行捐助,我们现在需要您的帮助。捐助将帮助我们更快地进行 GNOME 的开发,而有了捐助,我们的付费员工也将使我们更有效力。你能捐助的任何东西都将保证 GNOME 基金会继续做出更好地工作。
via:http://permalink.gmane.org/gmane.comp.gnome.foundation.announce/351