2008年4月24日星期四

网摘: 数学模型


建立一个简单的数学模型:http://hi.baidu.com/ic_layout/blog/item/a190870af01f351a95ca6b9f.html

一个社会中有三个人abc,共有300单位的资源。

a的暴力最强大,获得了统治地位。由于某种原因,它承诺这300单位的资源是公产,而且在它的治下,abc都平等。

有一天,政治路线发生了变化,要发展私有制,因此需要分配公产。

a迟迟不肯分配,因为按照它作出的那个平权承诺,它能公开提出的分配方案只能是每人100,实际上它却想暗地全部贪污。

但是a害怕这样bc会造反。因此他决定分肥,让bc也参与到贪污过程中来,以确保自己能安全得到最大的份额。当然,分肥的比例由他决定。

如果bc联合起来造反的话,有0.3的胜算;如果c单独造反的话,有0.1的胜算。

bc联合造反b可能的收益是300/2*0.3=45单位
因此,a决定给b分50单位,这样b不会造反。

c在b不造反情况下自己造反可能的收益就是300*0.1=30单位

因此,a决定给c35单位,这样c也不会造反。

最后a得到了剩余的215单位。

这个统治结构就很稳定。

bc知道自己即使参加分肥跟平等分配相比还是吃亏么?知道。
bc会不参加分肥么?不会,否则自己一个子儿都得不到。
bc心里反对这种公有+分肥的体制么?反对。
它们会行动起来反对么?不会。
bc会对这种分肥羞耻么?理智上说,会的,毕竟是在贪污公产。但在现实中分肥是常态,自己也参与了,屡屡折磨这个道德标准,最后不得已放弃操守,也不说贪污是可耻的了。
bc最倒霉了,道德上又堕落,利益上还吃亏。
当然,我们还可以设想一个人d,它毫无力量,a甚至一点也不给它分肥的机会(虽然名义上d也是这个社会的公民,也享有平等的权利)。跟d比起来,bc还不算最倒霉的。但是,bc因此对d又在道义上生出一种歉疚感。因此bc残存的良心又受到折磨。

a是什么角色?闷声发大财。
a心里乐意bc参与分肥么?不乐意,如果没有bc,我就全得了,多美。可是,该死的bc偏偏都存在,逼急了还有力量造反。
a反对贪污么?它怎么会反对!但是,如果bc能不参与贪污,它更高兴。如果能通过思想教育,教导bc安贫乐道,那就最好了。

这样,有一个问题,a和bc都参与了分肥,它们的角色和态度相同么?显然不同。bc虽然参与分肥,但实际上它们并不是既得利益者,是反对这种制度的,但是力不从心,所以不会行动反对。a则绝对是维护这种制度的。即使都参加了分肥,五十步和百步也不能视作一丘之貉。

这个格局在什么情况下可以被打破?a失去统治权力,这一套公有+分肥的规则被三方共和后的平均分配取代。a当然极力防止出现这种局面,除了不断巩固自己的实力,还经常打压bc可能形成的实力。

a统治的成功在什么地方?它一手制造的这种利益格局,让bc既吃了亏,还成了不道德的同谋,陷入了道德困境。

附注:对于a b c是谁,大家可以根据自己对社会的理解对号入座
 
 
 

--
海阔天空,做什么就记什么。主要是 Ubuntu Linux 和 Latex 及编程相关的东东: http://hai-kuo.blogspot.com/ 


--
6G免费网络U盘: http://www.orbitfiles.com/signup/rleon

软件设置: urxvt和xterm启动慢


 Ubuntu7.10, fcitx,UTF-8下,urxvt和xterm启动慢,而mlterm则没问题,google后,改动后 ~/.Xresource如下:

XTerm*preeditType: Root
URxvt*imFont: -misc-simsun-medium-r-normal-0-0-0-0-p-0-iso10646-1



--
海阔天空,做什么就记什么。主要是 Ubuntu Linux 和 Latex 及编程相关的东东: http://hai-kuo.blogspot.com/ 

--
6G免费网络U盘: http://www.orbitfiles.com/signup/rleon

2008年4月16日星期三

应用: git常用命令速查

参考: http://git.or.cz/gitwiki/GitCheatSheet

--
6G免费网络U盘: http://www.orbitfiles.com/signup/rleon

应用: 用Grub引导光盘


Howto: Boot CD/DVD Using Grub

To avoid using the bios option to set boot from CD/DVD, or to help get incalcitrant bootable CDs or DVDs to boot, you can add Smart Boot Manager/MemDisk to your boot options in Grub and boot from Grub instead of using your bios.

You need a working grub loader installed.

First off, download these files attached:
sbm.tar
and untar

then copy them to your boot directory:
Code:
 sudo cp memdisk sbm.bin /boot
then open up menu.lst in your editor (I have used nano here)
Code:
 sudo nano /boot/grub/menu.lst
and add this to the bootable options (not in the magic section)
Code:
title=SBM-Boot a CD
kernel /boot/memdisk
initrd /boot/sbm.bin
Next time you reboot into grub, you will see a new entry "SBM-Boot a CD"

With your CD/DVD in the drive, select this option, and you will get the Smart Boot Manager menu.
Scroll down to the CD-Rom option, press "Return", and then "Return" again out of the confirmation dialogs.

Your CD/DVD should now boot.

Tested on Ubuntu Edgy 6.10
Thanks to the Gentoo Wiki for guidance
Just retrace your steps to remove this option.

Enjoy
 
 
 

--
海阔天空,做什么就记什么。主要是 Ubuntu Linux 和 Latex 及编程相关的东东: http://hai-kuo.blogspot.com/ 



蒙牛以领先责任创4年至高荣誉 权威数据为蒙牛加冕



--
6G免费网络U盘: http://www.orbitfiles.com/signup/rleon

应用: 用 git 维护 vim 代码



---------- Forwarded message ----------
From: <rleon@163.com>
Date: 2008/4/16
Subject: 应用: 用 git 维护 vim 代码
To: "my-secret-blog@googlegroups.com" <my-secret-blog@googlegroups.com>, r01ustc <r01ustc@gmail.com>


 
 

用 git 维护 vim 代码

Source: http://www.cnblogs.com/huqingyu/archive/2008/02/09...

Displaying mentions in this article, for full text please visit source.


众所周知的是,vim 的代码是 Bram 用 patch 的方式维护的,一种典型的集约式管理,虽然 edyfox 在 https://vim.svn.sourceforge.net/svnroot/vim 维护了 svn 版本,但这也只是导入 CVS 的内容而已,别人无法往里面加入代码,问题是,当你想开发一系列试验性功能时,没法直接在 vim 的 svn 仓库上工作 (比如创建分支),而只能用自己的版本管理仓库。

这便造成了一个显然的维护问题,以我自己为例,vim-cocoa 的代码原本使用 code.google.com 提供的 svn 服务进行维护,但 Subversion 是以目录为单位跟踪修改的,所以,同一个代码目录,要么来自 vim 的代码仓库,要么来自 google code 的代码仓库,二者不可兼得。

所以我原来使用了一套非常麻烦的维护方式:

$ svn co https://vim.svn.sourceforge.net/svnroot/vim/vim7
$ cp -r vim7/ vim-cocoa/
$ cd vim-cocoa; find . -name ".svn/*" -exec rm -rf {};
$ svn import src/gui_mac.m https://vim-cocoa.googlecode.com/gui_mac.m
...

也就是说,抓下一份 vim 的代码来,复制一份,去掉其 svn 的数据,然后将我修改过的部分导入 google code 的版本仓库。在我完成一部分修改,代码达到稳定之后,再返回 vim7 目录,更新原来用 svn 下载的代码,然后将我在 vim-cocoa/ 下做出的修改 back port 回最新的 vim7 代码里,生成针对最新版本的 patch,并编译,发布。

显然这里要花大量的时间在没有必要的手工操作上,而且很容易出错。这便是 git 该出现的时候了。再简单复述一下我的需求:

能够通过 svn 经常更新到最新的 vim 代码自己正在工作的 vim-cocoa 分支代码不受影响能把主干代码和分枝代码按需合并vim 的 svn 库里有些自动生成的文件,应该删除,因为 Bram 不愿意,所以我应该可以在自己的分支里删除,这样可以避免每次 commit 之前需要恢复这些自动生成的文件

下面是用 git 完成的步骤,主要就是利用了 git-svn 这套方便的工具:

$ mkdir vim; cd vim
$ git-svn init https://vim.svn.sourceforge.net/svnroot/vim/vim7
$ git-svn fetch -r 625 # 这里为了减少消耗,不复制整个 svn 版本仓库,只抓最新的 revision

这时 git-svn 会产生一个叫做 git-svn 的 remote branch,并让本地的 master 指向这个 branch。所以,我们可以从 master 分支出一个自己的版本来:

$ git checkout -b cocoa
# 下面是把所有原来 vim-cocoa 做的修改在这个最新版的 vim 代码中打上
$ git commit -m "import vim-cocoa changes into git repo"

此后,如果上游的 vim svn 库更新了,我们可以用 git fetch git-svn 把更新下载下来,然后,用 git merge git-svn 将这些更新 merge 到当前的 branch 里,当然,也可以用 git pull git-svn 把两步合在一起完成,只要你确定 merge 不会出现冲突。

那么,现在就有很好的一个的平台来做本地修改了,但 vim 的一个问题是,src/auto/ 中自动生成的文件也被放在 svn repo 里,这是一个很麻烦的问题,因为 vim 也不支持 off-directory build,所以在我们测试、调试过后,如果要生成 patch,就不得不先把这些 (configure/make 过程中) 必然会生成的文件先恢复到初始状态,无谓的增加了操作,如果在 git 里 commit,也会提示你这些文件更新了,但你显然不愿意把这些改动都算进你的 commit 里,那怎么让这些文件不烦人呢?

简单,我们不管上游的 vim svn 库怎么维护,可以在本地 git 仓库中把这些文件删除,也就是不跟踪的改动了:

# --cached 表示只删除 git 缓存,不删除实际文件
$ git rm --cached src/auto/config.h
$ git rm --cached src/auto/config.mk
$ git rm --cached src/auto/configure
...
$ git commit -m "stop tracking auto generated files"

因为就算这些文件不在跟踪中,一旦它们修改过了,git status 还是会提示你它们更新了,而且这样用 git commit -a 把所有修改过的文件加入下一次 commit 也不方便,怎么办呢?用 .gitignore 文件:

$ vi .gitignore

加入以下内容:

.*.swp
.DS_Store
src/TAGS
src/tags
src/Vim
src/auto/*
src/auto/configure
src/auto/config.h
src/auto/config.mk
src/auto/if_perl.c
src/auto/link.log
src/auto/link.sed
src/auto/osdef.h
src/auto/pathdef.c
src/config.log
src/config.status
src/objects
src/xxd/*
src/Vim.app/*

这样不管这些文件怎么变,git 都不会提示了。

现在我们需要一个用来作为参考的分支,以定期生成 patch,这个分支必须随着上游 svn 的更新而更新,但我们这里删除这些自动生成文件的记录又不应该包含在内,怎么办呢?可以用 git-svn 自动生成的 master branch 来做这件事情:

$ git checkout master
$ git rm --cached src/auto/config.h
...
$ git commit -m "blahblahblah"

这样,以后每次要生成一个独立的 vim-cocoa 分支相对 vim 主干的 patch 时,我都可以先在 master 分支上:

$ git-svn rebase
$ git pull git-svn

然后切换回 cocoa 分支:

$ git checkout cocoa
$ git diff master > vim-cocoa.patch

这样便完整了 patch 的生成。

最后,如果我们需要把现在这个 vim-cocoa 像原来 google code 的代码仓库一样,随时公布到网上该怎么办呢?http://repo.or.cz 提供了公开的代码仓库,申请以后可以获得一个 push 地址:

git+ssh://repo.or.cz/srv/git/vim-cocoa.git

push 需要添加一个用户,然后上传它的 ssh 公钥 (在本地用 ssh-keygen 生成)。然后,如果我要把本地的 cocoa 分支发布到网上,就可以执行:

$ git push git+ssh://repo.or.cz/srv/git/vim-cocoa.git cocoa:master

其中 cocoa 指的是来源 (本地) 分支,master 指的是目的 (远程) 分支,为什么要 push 到另一个名字的分支去呢?因为 master 是 git 默认 clone 下来的分支,为了方便其他用户的抓取,以及 gitweb 的信息显示,还是保持公开仓库里的 master 分支是你最常更新的那个分支为好。

This entry was written by jjgod and posted on November 3, 2007 at 1:00 am and filed under Mac, Programming, Tools. Bookmark the permalink. Follow any comments here with the RSS feed for this post. Post a comment or leave a trackback: Trackback URL.
 
 

--
海阔天空,做什么就记什么。主要是 Ubuntu Linux 和 Latex 及编程相关的东东: http://hai-kuo.blogspot.com/ 



蒙牛以领先责任创4年至高荣誉 权威数据为蒙牛加冕



--
6G免费网络U盘: http://www.orbitfiles.com/signup/rleon

2008年4月4日星期五

搞笑: 清明节


 "如果你死后,墓志铭打算写点啥?"以下是一些回复:
1.一居室,求合租,面议。
2.小事招魂,大事挖坟。
3.我觉得我还可以抢救一下!
4.提供鞭尸服务,一次100!
5.基因重组中,请稍候二十年
6.单挑冥王 迪斯中,征求组队!
7.当你看清这行字的时候:朋友,你踩到我了。
8.老子终于不用怕鬼了!
9.给爷笑一个,要不爷给你笑一个?
10.陪聊,提供夜间上门服务。
11.还看,你丫也会有这一天的
12.我從前是個胖子,現在和所有躺著的人一樣有骨感。
13.强力推荐这个给我挖坑的,电话:xxxxxxxxx
14.曾经很黄很暴力,现在很黑很安静
15.谢谢来访,改日登门回拜.呵呵
16.来客请便,无人倒茶,站累躺下一起聊聊?
17。终于解决住房问题了
18.广告位招租
19.牧师,帮我复活一下下,谢谢,坐标××.××。
20.神农氏的墓志铭:我靠!这草有毒!
21.某丧心病狂的Firefox推介:"赶紧快下载带有Google工具栏的Firefox,看女鬼洗澡不会中毒!!!"
22.墓主人不在服务区,请稍候再来;
您所挖掘的墓地以被挖过,请换挖别家;
你想打开的目的现在不方便开启,请稍候再开;
23.此地,钱多,站少,速来!
24.老子是被活埋的!曰!
 
 
 

--
海阔天空,做什么就记什么。主要是 Ubuntu Linux 和 Latex 及编程相关的东东: http://hai-kuo.blogspot.com/ 


--
6G免费网络U盘: http://www.orbitfiles.com/signup/rleon