Wednesday, July 27, 2011

web.py: get auto-increment value after db.insert

This is probably too simple, so no one ever bothered to write about it. (Or I couldn't come up with the proper keywords for Google).

The situation is simple. I have a table where the primary key is some auto-incrementing ID number (in the case of postgresql, with the primary key called nid, the definition is nid serial primary key). After inserting a record into the table, I want to know what ID it has got.

Turns out it's very simple. I need only to pass a custom seqname to db.insert().

nid = db.insert("tablename", seqname="tablename_nid_seq",...)

For the serial column, postgresql creates a sequence automatically and assigns it a particularly constructed name. More details at FAQ: Using Sequences in PostgreSQL.

This is probably not the best style (I'm hard-coding the seqname in the source code), and I'm not even sure if it's the right way. But at least I can proceed with my prototyping and hacking now :)

Thursday, July 21, 2011

Resize partition

第一次成功地调整分区的大小,所以写篇文章记录一下。

我依稀记起了刚用 Linux 的时候,大概是在 06 或者 07 年吧,当时也是要调整分区大小,结果一番操作下来,启动系统,发现硬盘上啥都没有了。所以最后只能重装系统。现在再来做这件事,虽然不是轻车熟路,但也是不慌不忙了 :P

我要给一个 qemu 虚拟机调整分区,所以下文第一部分是关于 qemu 的。第二部分应该能适用于一般的在真正的硬件上的系统。

1. 调整 qemu 虚拟磁盘的大小


我现在用了一个 12G 的虚拟磁盘给虚拟机用,里边装了个 Linux,根分区大约 10G。我想把根分区扩大 4G。

所以首先要扩大虚拟磁盘的大小。Google 一下可以找到很多办法,我采取的是这里提到的,先创建一个 4G 的文件,然后把它 cat 到原磁盘文件的末尾。这个看起来比较安全 (我一直比较惧怕 dd)。

$ dd if=/dev/zero of=zeros.raw bs=1024k count=4096

$ cat foresight.img zeros.raw > new-foresight.img

cat zeros.raw >> foresight.img 估计也可以。

(如果磁盘文件不是 raw 格式的,可能需要先把磁盘文件从 qcow 等格式转换为 raw 格式;可用 qemu-img info foresight.img 查看)。

到这儿,我的虚拟磁盘文件 (foresight.img) 就从 12G 变成 16G 了。以上都是在 host 机器上做的,下一步就是在虚拟机里调整分区大小。

2. 调整分区大小


为了能够在不挂载的条件下进行操作 (以免出问题,fdisk 实际上好像也要求分区不能挂载),需要用另一个系统来启动机器。用 liveCD 光盘或者 liveUSB 都可以,我是直接用的 Foresight Linux 的安装盘,因为它支持一个 rescue 模式 (跟 liveCD 差不多,但是命令行的,速度快一点)。

普通安装的话,把光盘放光驱就可以了。用 qemu 的话,传一个 -cdrom 选项。(同时也把启动时的菜单打开,以便能选择从光驱启动。)

-cdrom /path/to/foresight/iso -boot menu=on

进入后,不用挂载机器上原来的分区。

先来点小知识。对 Linux 来说,分区 (partition) 和文件系统 (filesystem) 是分开的,前者指的是硬件,后者指的是软件。文件系统创建在分区上,它的大小可以比分区更小。我的最终目的是调整文件系统的大小,因为操作系统是安装在文件系统中的。

所以要为操作系统提供更多的可用空间,需要分两步:1,扩大硬盘分区;2,扩大文件系统。前者用 fdisk 完成,后者用 resize2fs。(有的工具比如 parted 和 gparted 把两步合在一块了)。

2.1 扩大分区


# fdisk /dev/sda

执行 fdisk。把原来的分区删掉,然后创建一个新的分区。新分区的开头要跟旧分区一样,长度要比旧分区大。

由于我当初分区的时候把根分区放在了 swap 之前,所以我要先把 swap 分区删掉,最后再创建一个新的 swap。

fdisk 不会修改分区里面的东西,所以这样就把分区扩大了。其上的文件系统没有变,还是原来的大小。

2.2 扩大文件系统


# resize2fs -f /dev/sda2

resize2fs 把 sda2 上的文件系统扩大到跟分区一样大。

至此就搞定了。执行下 sync 重启即可。

2.3 其他


由于我上边重建了 swap 分区,所以要重新格式化 swap。

$ sudo mkswap /dev/sda3

我系统中原来的 fstab 是用 label 来引用分区。由于 label 没有了,所以把它改成直接使用 /dev/sda3:

LABEL=SWAP-sda3 swap swap defaults 0 0
/dev/sda3 swap swap defaults 0 0


应该也可以重新创建 label 的,但是由于我不知道怎么做,就只好这样了。

我是在系统启动之后执行这两步的,也可以在 rescue 系统中做。

如果用的是 lvm,就更省事儿了,不过我一直不会用...

Friday, July 8, 2011

Supybot JIRA plugin

I have been working on a small project recently, a JIRA plugin for supybot. Today I feel it's feature complete (at least for its use in the Foresight Linux IRC channels). So time for a blog post :-)

Firstly the code is available at GitHub. It's easy to setup (hopefully). See JIRA/README.txt for details. I won't repeat it here in order to minimize duplication.

The main (and only) function is to monitor the chatting in the channels and detect when people mention an issue number. Then the bot queries the JIRA and posts a summary of the issue to the channel.

It supports multiple JIRA installations. For example in #foresight our bot knows about the Foresight JIRA, as well as the rPath JIRA, so that we can get information about conary issues (which is maintained outside Foresight Linux at rPath).

There are a few configuration options too. The format of the issue summary can be customized. There is also a timeout option (default to 5 minutes); the bot won't report the same issue again and again, and spam the channel.

If you want to play with it, stop by #foresight and find the bot there (it may be called foresight, flbot, fleabot or other names). Then /query the bot and give it some commands (e.g. FL-12, KDE-34, etc.)

Friday, July 1, 2011

Birthday of THE PARTY

此文没啥新意,但是党的生日来了,我觉得我们都应该写篇文章,抒发一下自己对这个事物的看法。

写这篇文章的冲动来自于:听俞正声上党课——“执政者的声音”

显然这就是很多人内心真实的想法了,抛去冠冕堂皇,这不止是他们做的秀,也是他们内心真正相信的东西。

> 怎么样在复杂的社会环境中间保持一种政治上的坚定性,“是一件不容易的事情”。

“政治上的坚定”,这种说法可真奇怪。为什么要坚定?党自身的想法都不是固定的。跟所有的党一样 (且看美国当今两党的变化历程,民主党|共和党),党的理念在不停的变化。一个人,作为一个个体,有着自己的大脑,为什么要“坚定”在一个不停变化的组织旁边?

而且现实世界中的决策从来不是非黑即白,事情的两面很难说出孰优孰劣。申纪兰确实是够坚定的。

只能说这是一种愚昧的坚定。

> 中共诞生,就是要为劳苦大众打天下,就是不能让社会、官僚们熟视无睹群众死活的状况在中国继续下去,所以才产生了共产党。

“社会、官僚们熟视无睹群众死活”。这是教科书上向来的说法。当时的生活确实不好,但也不至于这么概括吧 (其实应用于当下更合适)。从建国大业和建党伟业来看,当时的政治气氛比现在可是好多了。

至于党的目的,这么概括就更是洗脑了。毫无疑问当时一些纯洁的大学生确实是这么想的,但是要说“党”的目的是“为劳苦大众打天下”,也太没脑子了。对权力的争夺才是最根本的目的。从本质上讲,中共跟历代的农民起义没有区别,不过是提出了更新的口号而已。从陈胜吴广,到宋江,到李自成,到义和团,造反的农民们提出的口号代代在刷新。毛泽东也就配跟这些人相提并论。

而且这句口号在今天看来,就是十足的讽刺了。再过一阵,建党大业都会成为禁片。

> 解放战争的胜利...根本上是人民群众的拥护和支持。

刘邦的胜利,根本上是人民群众的拥护和支持。

> 我对毛主席是非常尊敬的,虽然他犯了这么大的错误。

40后和50后这代人很是奇怪,他们在童年一方面接受着党的教化 (洗脑),一方面眼睁睁看着党在行凶,看着自己的家人受迫害。结果他们就形成了上边这种畸形的心理。这不就是斯德哥尔摩综合征吗?与斯德哥尔摩综合征的特征和四大历程如此符合。

毛泽东既然知道自己做错了,造成了很大的破坏,为什么不引咎辞职?毫无疑问,太祖作为太祖,一个独裁者,认为天下是自己的。就跟皇帝一样,做错点事,让一些草民丢掉性命,事后自责一下就够了,他们绝对不会想到自己应该下台,受人唾弃。

当时的最高权力机构,既然认定毛泽东做错了,为什么不把他判罪?当然,原因还是跟封建王朝一样。

如今六七十岁那些人是精神上最分裂的一代。

> 党也不回避自己的问题和失误。

这。。。只能说是赤裸裸的撒谎了。

> 中国大陆要是多党,可能就会把中国大陆变成了政客权谋的竞技场。

中国大陆现在难道不是政客权谋的竞技场?而且把活跃的政治活动说成是混乱,像 CCTV-4 这种党媒整天刷黑台湾,其实只能说明党的内心虚弱到了何种程度。

> 如果党本身是软弱无力的,这个党不会有希望。

党很害怕。

> 要敢于讲真话,你敢不敢于在领导面前发表你的看法?

这一代人眼里,“领导”就是主宰一切的神。

仔细想想,什么是“党”?党不是千万党员,不是总书记,不是这个职位或那个职位。党不是一个或几个人。党是一种理念,党是一种非物质。党是人性中最邪恶的一面,是所有党员最邪恶的一面的合集。