Le's profileSomething like a home pa...PhotosBlogListsMore ![]() | Help |
|
January 31 上周日踢球是我搞错时间了…… 犯了一连串的错误 先是记错时间,有段时间不踢,我居然忘记了起止时间都是半点 然后没带手机 我还忘记了我还可以通过vpn登录公司机器查pidgin的聊天记录,我太相信我的记忆力了 2个小时,就这么错过了 其实我还真去了,11点多一点到,看到没人我就走了 其实11点半才开始 January 28 git-push一直没用过git-push,原来以为git-push会像git-pull一样调用git-merge 不过,我忘记了,git repo只是一个.git目录而已,没有实际项目文件在里面 顺便改了改现有的几个git repo的地址 http://www.gentoo-cn.org/gitweb/ 还删掉了龙芯overlay里的mldonkey,因为不再需要单独ebuild 只需要 USE=-ocamlopt emerge net-p2p/mldonkey 即可 用了我的profile之后就连USE都不用指定了,有默认的package.use, :) PS: 不好意思,更正一下 还是要改一下,把CFLAGS里的-march=mips3改成-march=mips1才行 原来overlay里的ebuild自动做了替换,portage tree里的没有作这个替换 January 24 似乎是鲁迅的一段话 与名流学者谈,对于他之所讲,当装作偶有不懂之处。太不懂被看轻,太懂了被厌恶。 偶有不懂之处,彼此最为合宜。 ... ... 人世间真是难处的地方。说一个人“不通世故”,固然不是好话,但说他“深于世故”也不是好话。“世故”似乎也像“革命之不可不革,而亦不可太革”一样,不可不通,而亦不可太通的。 January 23 PS3 Linux Kernel Overviewhttp://www.cellperformance.com/public/linux-20061110-docs/LinuxKernelOverview.html 最值得注意的地方是这里面有个Hypervisor 所以内核访问不到整个物理硬盘,不能直接访问硬盘,也不能访问PS3甚好甚强巨的图形处理设备 January 15 Gentoo对于upstream的反馈如果论起发行版对于软件的反馈,Gentoo如果不是最多的,也是最有理由,最有可能成为最多的发行版 Gentoo portage在安装结束时会检查这个软件写的怎么样,有没有一些明显的问题 比如 C文件有没有包括头文件 有没有world writable file 有没有不安全的rpath 有没有可执行的堆栈 共享库是否缺少SONAME 共享库是否缺少NEEDED项 库目录里是否有绝对符号连接 有没有text relocation 等等 如果有问题,在emerge的最后会显示出来,这会给开发者以压力去修复这些问题 在别的系统里编译过程只在开发者那里进行,普通用户想看也看不到这些信息 但是Gentoo里用户可以看到这些信息,如果开发者放任不理,就会给用户以不好的印象。所以开发者会有动力去修复这些问题,然后反馈给upstream. 同时,这也决定了一个Gentoo开发者老手,对于这些方面的知识都了然于胸。其知识水平是一般开发者所不能比的。 January 14 Gentoo Foundation的Charter http://en.wikipedia.org/wiki/Charter 上面这个连接是Charter的定义 好像这个词还没有对应的中文 不过有人硬是给翻译成了营业执照 在加上Foundation的中文译文是基金会 结果很多就联想,是不是没钱了啊? 其实和钱边都不沾 Gentoo will remain free for ever.... 这个Charter是去年10月24号被美国新墨西哥州回收的 原因是“NONFILER RETURNED MOVED” 不过我不是一个律师,所以不知道这是啥意思 实际上如果不是Daniel捅出来,相信大家还都不知道这件事情 因为对我们没有造成什么实际影响 目前Gentoo dev们准备搞一个投票,来决定是否迎回太祖 不过从目前的讨论看,似乎太祖胜算不大,即便太祖只是做个Foundation President,不插手Council事务,哎 有人说太祖在位时,经常不和人商量的就做一些惹部分人不高兴的改动…… 我没经历过太祖在位的时代,不知道…… January 12 ambidextrous其实我还达不到ambidextrous 也就是左右手都可以用鼠标,打高尔夫而已 之前在公司里左手用鼠标,家里用右手。因为家里曾经升级到了xorg-server-1.4,触摸板和KDE里的左手鼠标都不起效了。其实也是被逼无奈,长期用一边,手和肩部都受不了。 最近,家里的笔记本降回了xorg-server-1.3,左手鼠标好用了。 但是为了平衡,公司里就不得换回右手鼠标。也省的我的同事抓狂,他们来帮我的时候,估计恨死我的鼠标设置了,想点左键时实际点了右键, and vice versa. 可是更神奇的在后面 我发现,我在家里的时候右手有时候还是会下意识的去尝试抓右边已经不存在的鼠标 而在公司的时候左手有时候还是会下意识的去尝试抓左边已经不存在的鼠标 人的习惯动作的触发条件看来是相当复杂的。。。 抢地盘还是抢娘们 http://www.douban.com/subject/discussion/1126871/ http://www.douban.com/subject/discussion/1125248/ 这个问题和很好很强大,很黄很暴力有很深的渊源.... No Lobbyists As Such and No Software Patentshttp://weblogs.asp.net/edaniel/archive/2006/06/08/Mueller_2700_s-Book-_2200_No-Lobbyists-As-Such---The-War-over-Software-Patents-in-the-European-Union_2200_-Now-Available.aspx http://www.nosoftwarepatents.com/ 最近南京某公司为从移动硬盘启动Linux的所谓“技术”申请专利,引起了国内自由软件社区的轩然大波 令我很欣喜,而又很忧伤 欣喜的是,以Linux为代表的自由软件在国内开始逐渐流行,结果就是相关的技术渐渐为人们所熟知。大家都知道这个“技术”,都会玩。所以对这种行为非常的不耻。 忧伤的是,大家的枪口没有对准正确的方向,虽然往这个方向要达到目标要费时费力的多。这个方向就是取消软件专利。只要软件专利存在,这种事情的出现是迟早的事情。所以取消软件专利是根除所有这种现象的一劳永逸的方法。 在欧盟,人们享受着没有软件专利的束缚的自由。但是在那块土地上,也有人从未放弃过建立软件专利制度的邪恶目的。于是战争就无可避免的爆发了,而且还在继续着。No Lobbyists As Such就是描述这样的一场没有硝烟的战争的文章。所有的自由软件的从业者,从提高自身修养的角度着想,应该花点时间阅读一下这篇文章。 January 09 [转贴]自由軟體在臺灣: 停止淘金美夢方能發現真正價值January 07 my perl_snippets.vimhttp://c9s.pages.googlepages.com/vim_snippet2.avi this is a video clip about vim snippet's effect http://c9s.blogspot.com/2007/06/vim-snippet.html this is a howto http://slipperysnippets.blogspot.com/2006/12/howto-try-out-latest-version-of.html an english howto I added some new triggers at the end of my perl_snippets.vim, starting from scl. if !exists('loaded_snippet') || &cp finish endif function! MyX() let st = g:snip_start_tag let et = g:snip_end_tag return 'my '.st.'x'.et.' ' endfunction let st = g:snip_start_tag let et = g:snip_end_tag let cd = g:snip_elem_delim exec "Snippet sub sub ".st."FunctionName".et." {<CR>".st.et."<CR>}<CR>".st.et."" exec "Snippet class package ".st."ClassName".et.";<CR><CR>".st.":D('use base qw(')".et.st."ParentClass".et.st.et.";<CR><CR>}sub new {<CR>my \$class = shift;<CR>\$class = ref \$class if ref \$class;<CR>my $self = bless {}, \$class;<CR>\$self;<CR>}<CR><CR>1;<CR>".st.et."" exec "Snippet xfore ".st."expression".et." foreach @".st."array".et.";".st.et."" exec "Snippet xwhile ".st."expression".et." while ".st."condition".et.";".st.et."" exec "Snippet xunless ".st."expression".et." unless ".st."condition".et.";".st.et."" exec "Snippet slurp my $".st."var".et.";<CR><CR>{ local $/ = undef; local *FILE; open FILE, \"<".st."file".et."\"; $".st."var".et." = <FILE>; close FILE }".st.et."" exec "Snippet if if (".st.et.") {<CR>".st.et."<CR>}<CR>".st.et."" exec "Snippet unless unless (".st.et.") {<CR>".st."2".et."<CR>}<CR>".st.et."" exec "Snippet ifee if (".st.et.") {<CR>".st."2".et."<CR>} elsif (".st.et.") {<CR>".st.et."<CR>} else {<CR>".st.et."}<CR>}<CR>".st.et."" exec "Snippet ife if (".st.et.") {<CR>".st.et."<CR>} else {<CR>".st.et."<CR>}<CR>".st.et."" exec "Snippet for for (my \$".st."var".et." = 0; \$".st."var".et." < ".st."expression".et."; \$".st."var".et."++) {<CR>".st.et."<CR>}<CR>".st.et."" exec "Snippet fore foreach my \$".st."var".et." (@".st."array".et.") {<CR>".st.et."<CR>}<CR>".st.et."" exec "Snippet eval eval {<CR>".st.et."<CR>};<CR>if ($@) {<CR>".st.et."<CR>}<CR>".st.et."" exec "Snippet while while (".st.et.") {<CR>".st.et."<CR>}<CR>".st.et."" exec "Snippet xif ".st."expression".et." if ".st."condition".et.";".st.et."" exec "Snippet scl my $".st."scalar".et." = ".st."undef".et.";<CR>".st.et."" exec "Snippet arr my @".st."array".et." = (".st.et.");<CR>".st.et."" exec "Snippet hash my %".st."hash".et." = (".st.et.");<CR>".st.et."" exec "Snippet aref my $".st."arrayref".et." = [".st.et."];<CR>".st.et."" exec "Snippet href my $".st."hashref".et." = {".st.et."};<CR>".st.et."" exec "Snippet udp use Data::Dumper;<CR>".st.et."" exec "Snippet dp warn Dumper ".st.et.";<CR>".st.et."" exec "Snippet pln print ".st."STDOUT".et." ".st.et.".\"\\n\";<CR>".st.et."" exec "Snippet wln warn ".st.et.".\"\\n\";<CR>".st.et."" January 06 emacs style vim command line editingadd this to your ~/.vimrc "emacs-style cnoremap <C-A> <Home> cnoremap <C-B> <Left> cnoremap <C-D> <Del> cnoremap <C-E> <End> cnoremap <C-F> <Right> cnoremap <C-N> <Down> cnoremap <C-P> <Up> cnoremap <A-B> <S-Left> cnoremap <A-F> <S-Right> [Gentoo portage internals series] Portage constsPortage const variables are defined in pym/portage/const.py e.g. VDB_PATH = "var/db/pkg" PRIVATE_PATH = "var/lib/portage" CACHE_PATH = "/var/cache/edb" ... WORLD_FILE = PRIVATE_PATH + "/world" ... INCREMENTALS = ["USE", "USE_EXPAND", "USE_EXPAND_HIDDEN", "FEATURES", "ACCEPT_KEYWORDS", "ACCEPT_LICENSE", "CONFIG_PROTECT_MASK", "CONFIG_PROTECT", "PRELINK_PATH", "PRELINK_PATH_MASK", "PROFILE_ONLY_VARIABLES"] INCREMENTALS defines a set of variables whose value will not be reset when it is re-defined, instead its value will be incremented. [Gentoo portage internals series] cp_all, cp_list of porttree dbapicp_all method is used to list all the category/package in the tree cp_list is used to list all category/package-version for a particular category/package This script only works if you have portage source, since you need _emerge module which is not shipped with portage but exists in portage source. And unfortunately, portage source svn repo is open only to gentoo developers. _emerge module magically becomes part of /usr/bin/emerge when portage is released. I have tried but didn't find the script used to transform _emerge module and source form bin/emerge to release form bin/emerge. There must exist some mechanism to accomplish this automatically, even if it is not a standalone script. #!/usr/bin/python import sys sys.path.insert(0, "/home/zhangle/portage-source/pym/") sys.path.insert(0, "/home/zhangle/portage-source/pym/portage") import _emerge settings, trees, mtimedb = _emerge.load_emerge_config() portdb = trees[settings["ROOT"]]["porttree"].dbapi for item in portdb.cp_all(): for cpv in portdb.cp_list(item): print cpv January 03 phrack.org居然还在搞 http://www.phrack.org/ 刚刚一位初中同学问我有关黑客的事情 当然他所说的黑客应该是一般人眼里的黑客,为了节省时间我也没给他解释自由软件世界里黑客的定义 于是我给他讲了我这几年是怎么学的 提到了phrack.org,于是上去看看 没有想到它居然在筹备发布第65期,截稿时间是1月底 |
|
|