Le's profileSomething like a home pa...PhotosBlogListsMore Tools Help

Blog


    February 29

    zip包里含有中文文件名的处理

    刚刚同事发给我一个zip包,解开发现中文是乱码
    于是上网搜了一下,发现了解决方法
    顺便说一下,中文相关问题还是要用中文关键字搜,:-D
    http://bbs.chinaunix.net/archiver/tid-1002730.html
    不过即便是此连接里提到的第二个方法也不是这个问题的解决方法,而只是一个workaround
    但对于中文Linux用户,应该足够了
    所以过一会我会把它放到china overlay里

    PS: 我同事给我的文件用改过的unzip解压缩后,还是需要convmv,因为她用的是繁体windows,big5编码

    --
    Zhang Le, Robert
    http://r0bertz.blogspot.com
    http://zh.gentoo-wiki.com
    http://savannah.nongnu.org/projects/pgubook
    http://groups.google.com/group/gentoo-china
    http://groups.google.com/group/szlug
    February 28

    在公司听家里局域网内机器上的歌——sshfs的应用

    解决方案当然很多,讲讲我现在使用的
    实现的方式是,把家里机器硬盘上的目录挂载过来
    我用的是sshfs
    如果只是sshfs当然没有什么,网上资料很多
    这里的难点在于,歌在家里的笔记本(目标机器)上,中间需要经龙芯盒子作跳板
    其实这个方法也是搜索到的,不过忘记哪里了
     $ cat /usr/local/bin/Atunnel
    #!/bin/bash
    ssh -q gco ssh -q "$@"

    gco就是我定义(在.ssh/config里)的盒子的机器名

    在公司里机器上执行
    sshfs -o ssh_command=Atunnel nb:/mnt/d ssh
    nb是目标机器名,要确保跳板上可以用这个机器名登录目标机器
    ssh是本机上的目录
    设置好密钥对认证,ssh-agent forwarding之后,全程不必输入密码


    看了几张2008 Linux Symposium Beijing的照片

    http://foka.debian.net/gallery2/d/10670-2/dscf6172.jpg
    这里有两个我的前同事李云龙侯正鹏,中间的是陆首群
    http://foka.debian.net/gallery2/d/11045-2/dscf6295.jpg
    Amy, Andrew Morton, Anthony Wong
    找了两张同时有Alex和Anthony的
    看Alex的怪异表情:http://foka.debian.net/gallery2/d/10433-2/dscf6083.jpg
    俩人笑的多么灿烂:http://foka.debian.net/gallery2/d/10436-2/dscf6084.jpg

    哎,如果我在北京,我应该也在那里
    心痒痒的

    February 25

    当你回答别人问题的时候

    当你回答别人问题的时候
    应该铭记
    现在的他或她
    或许会成为
    未来的你
    February 24

    发布我的trads脚本git repo

    http://www.gentoo-cn.org/gitweb/?p=trads;a=summary

    使用git后,一个趋势是,你可能会把它用在任何你想应用版本控制的场合
    因为使用起来太方便了
    一个人怎么都得有10个20个git repo……
    gentoo-cn.org上我只放了4个
    其实我另外还有

    未来陈冠希们的噩梦

    假如,注意仅仅是假如,有人效仿陈冠希。
    不幸笔记本坏了,拿去修。
    不过他吸取了陈冠希的教训,用了操作系统的磁盘加密功能。他可能以为万无一失。
    他错了!
    看这个 http://citp.princeton.edu/memory/
    原理是DRAM,就是我们使用的内存条(非cache所使用的SRAM),在断电后一段时间内仍能保留数据。而且随温度的降低,数据可保留时间会越来越长。液氮的温度下,零下196摄氏度,可以保持达几个小时。
    而且更要命的是,据研究人员说,如此一来,磁盘加密程序将没有地方可以存放秘钥。

    现在简体中文Gentoo文档翻译进度表已囊括所有文档

    http://dev.gentoo.org/~r0bertz/trads-zh_cn.xml

    下一步要修改trads.rb
    使它可以找到中文翻译团队成员id对应的email
    February 23

    昨天那个部分英文文档不能显示版本号的问题之后续报道

    我加上了缺少的目录之后,cvs up
    结果我忘记了我的.cvsrc里有cvs up -dP
    结果那些目录又全给删掉了
    !$@#$%#$%#$^#$%#

    后来发现改脚本也可以
    虽然ruby没有学过
    不过不怕,有文档,:-D
    加了个条件判断后搞定
    if File.exist?("#{@ttrad.localcvs}/#{dd.path}/#{dd.ttrad.langto}/#{dd.subdir}#{dd.filename}") then
       lstf << "#{dd.path}/#{dd.ttrad.langto}/#{dd.subdir}#{dd.filename}"
    end

    另外加上了除安装手册外所有的手册
    http://dev.gentoo.org/~r0bertz/trads-zh_cn.xml


    xargs的-I参数

    真是相见恨“晚”
    如果没有它,可以for i in `find xxx`; do yyyyyyyy; done
    但这样的话,如果find的结果过长,会导致发生错误,Argument list too long——命令行参数保存在进程堆栈顶端,空间有限,其上方还有环境变量和auxiliary vector,再往上就到 0xc0000000了。

    之前也看过xargs的manpage,不过没有仔细看
    想想也是,这么好的功能,实现起来又不麻烦,肯定应该早被人实现了

    修正了几个有关新进度表的问题

    首先,有很多英文文档里没有<!-- $Header$ -->,所以不能直接从文档里获得CVS版本号,所以我改了获取英文版本号的函数,加入了通过cvs命令获得版本号的功能。
        # get version from cvs command
        open( FH, "cvs status $file |" );
        while (<FH>) {
            if ( $_ =~ /Working/) {
                $_ =~ s/.*(\d+\.\d+)/$1/;
                chomp;
                return $_ ;
            }
        }
    其实,发现有些英文文档不能显示出版本号,debug了一下发现竟然是因为对应的中文目录不存在。所以就都给加上。http://cia.vc/stats/author/r0bertz

    还有,有的文档id(就是表格里第一列的内容)过长,所以就裁减了一下,不影响文档的识别。
    February 22

    写了个脚本,把所有非手册的gentoo文档都弄到进度表里了

    现在还在生成中
    http://dev.gentoo.org/~r0bertz/trads-zh_cn.xml
    等我睡醒应该好了
    哎,本来想早睡的,可是一开了头,就停不下来了
    下一步再整理手册,所有的gentoo手册,安装手册,安全手册,嵌入式手册,开发者手册。。。

    #!/usr/bin/perl
    #===============================================================================
    #
    #         FILE:  trads.pl
    #
    #        USAGE:  ./trads.pl
    #
    #  DESCRIPTION:  update trads.xml file
    #
    #       AUTHOR:  Zhang Le <r0bert@gentoo.org>
    #      LICENSE:   GPLv3
    #      VERSION:  1.0
    #      CREATED:  02/22/2008 02:57:38 AM CST
    #     REVISION:  ---
    #===============================================================================

    use strict;
    use warnings;
    use Data::Dumper;
    use XML::Simple;

    my $ref = XMLin("metadoc.xml", ContentKey => '-content');
    my $CVSDIR = "/home/zhangle/gentoo/xml/htdocs";

    my $top_cat = ();
    my $cat = $ref->{categories}->{cat};
    foreach my $key (keys %$cat) {
        unless ($cat->{$key}->{parent}) {
            $top_cat->{$key} = { content => $cat->{$key}->{content}} ;
            if ( grep(/$key/, ('faq', 'install', 'upgrade', 'desktop')) ) {
                $top_cat->{$key}->{prior} = 'C';
            } elsif ( grep(/$key/, ('sysadmin', 'gentoo', 'gentoodev', 'project')) ) {
                $top_cat->{$key}->{prior} = 'I';
            } else {
                $top_cat->{$key}->{prior} = 'N';
            }
        }
    }

    sub get_group_and_prior {
        my ($leaf_cat) = @_;
       
        return { group => 'misc', prior => 'N'} unless $leaf_cat;

        if ( (ref $leaf_cat) eq 'ARRAY' ) {
            $leaf_cat = $leaf_cat->[0];
        }

        my $root_cat = $leaf_cat;
        while ( $cat->{$root_cat}->{parent} ) {
            $root_cat = $cat->{$root_cat}->{parent};
        }

        return { group => $root_cat, prior => $top_cat->{$root_cat}->{prior} };
    }

    sub get_en_ver {
        my ($file) = @_;
        open (INFILE, $CVSDIR. "/". $file) or die "Can’t open file: $!";
        while (<INFILE>) { 
            if (/Header/) {
                 s/(.*v )(\d\.\d+)(.*)/$2/;
                 chomp;
                 return $_;
            }
        }
    }

    sub get_zh_cn_ver {
        my ($file) = @_;
        return '' unless ( -f $CVSDIR. "/". $file);

        open (INFILE, $CVSDIR. "/". $file) or die "Can’t open file: $!";
        while (<INFILE>) { 
            if (/English CVS version/) {
                 s/(.*English CVS version.*)(\d\.\d+)(.*)/$2/;
                 chomp;
                 return $_;
            }
        }
    }

    my @doc_array = ();
    my $files = $ref->{files}->{file};
    my $docs = $ref->{docs}->{doc};
    foreach my $key (keys %$files) {
        unless ( $files->{$key} =~ /handbook/ || $key =~ /handbook/ ) {
            my $doc = {};
            $doc->{ID} = $key;

            my @array = split(/\//, $files->{$key});
            my $subdir = join("/", @array[3..$#array-1]);
            $doc->{files}->{name} = $array[$#array];
            $doc->{files}->{path} = "$array[1]";
            $doc->{files}->{subdir} = $subdir if $subdir;
            $doc->{info} = get_group_and_prior($docs->{$key}->{memberof});
            $doc->{info}->{nick} = '';

            $doc->{rev}->{target} = get_en_ver("$array[1]/en/$subdir/$array[$#array]");
            $doc->{rev}->{sync} = get_zh_cn_ver("$array[1]/zh_cn/$subdir/$array[$#array]");

            push @doc_array, $doc;
        }

    }

    my $output = { documents => {'doc' => \@doc_array} };
    my $xml = XMLout($output, KeepRoot => 1);
    print $xml;
    February 21

    如果xargs要执行的命令里来自xargs的stdin的部分不是最后一个参数怎么办

    举个例子,假如我要打印出当前目录下所有2级或1级目录的目录名
    一级目录下不光有目录还有文件
    目录名文件名中都含有空格

    下面这个命令可以实现这个目的
    find -maxdepth 2 -print0 | xargs -0 -I '{}' sh -c "[ -d '{}' ] && echo '{}'"
    技巧就是-I参数

    Familarity Breeds Contempt

    This phrase means the better we know people, the more likely we are to find fault with them.

    中文里类似的说法是:亲不敬,熟生蔑。而且似乎这种情况在中国人身上体现的特别明显。

    来看一段节选自这篇blog的文字 http://www.for-iris.blogbus.com/logs/10908167.html

    中国人似乎都有这么一种心理倾向,名人即完人。无论是政坛人 物,还是演艺明星,皆不惜一切在镁光灯前塑造出完美无缺的形象。看中国古代的神化人物,皆是大慈大悲十全十美,完全不似古代罗马故事里的众神们,有血有 肉,会哭会笑会嫉妒。历史舞台也似乎是善恶分明的,好人完美无瑕,坏人毫无是处。

        我自己亦是如此,当我发现我喜欢的偶像有一些负面新闻时,很快就会粉碎心中的景仰之情。我很不解,为什么我不能像西方社会一样,接受“名人也是普通人,也有缺点”的思想,我们为什么会如此自私,以自己的理想状态来约束他人?

         直到重读余杰的文章,我才恍然大悟。因为中国人总爱从道德的高度来评判一切,无法把人物本身的性格与其艺术或文学或政治水准分开而论,也就是说,我们无法 在欣赏一个人的电影时,无视他的绯闻;我们无法在享受一个人的文字时,忽略他人品的卑劣;我们无法在赞扬一个人的能力时,避开他手段的毒辣。而中国的名 人,都深知“亲不敬,熟生蔑”的道理,太注重“面子”形象,为了维护高高在上的地位,不自觉地掩饰自身的缺陷,不愿对公众坦然。日久天长,名人生活在巨大 的压力下,公众也对名人隐私有了非凡的兴趣,才使得丑闻有了毁灭性打击的力量。

    如此阿娇的遭遇便不难理解了。为了“玉女”形象,不得说一些假话。但当光环破灭后,玉女和欲女的巨大反差就会把她打入无底深渊。

    我写这篇当然不是为了写阿娇,所以——待续……
    February 20

    tianji.com也用Gentoo

    一个很偶然的机会
    看到一篇我的曾经的学生的blog
    了解到他的公司也是主要用Gentoo的
    :)

    龙芯盒子在2.6.24.2 Linux内核上的DRI问题

    http://lxr.linux.no/linux+v2.6.24/drivers/char/drm/drm_ioctl.c#L80

    目前的问题是
    (EE) [drm] Could not set DRM device bus ID.
    (EE) RADEON(0): [dri] DRIScreenInit failed.  Disabling DRI.
    最后查到内核里,应该和上面这个函数有关
    记录一下,有空详细分析一下

    BTW,如果使用我的loongson overlay,你能得到一个在2.6.24.2内核上working的X,但是还没有DRI,即硬件加速
    http://www.gentoo-cn.org/gitweb/?p=loongson;a=summary