2008-03
03

首先安装前端 scim:

# emerge scim

常见的日文输入法是服务器/客户端模型的,Canna就不错(可内嵌在SCIM中)。安装方法也很简单:

# emerge canna
# /etc/init.d/canna start
# rc-update add canna default

然后安装scim的Canna支持:

# emerge scim-canna

最后启动scim,从输入法语言中选择日语即可。

注意:当初我认为要装FreeWnn,装上后发现关机时老是死掉,查了半天发现原来是 /etc/init.d/freewnn stop时死掉了。 后来发现不要freewnn也能正常输入日文。



2008-03
02

最近重新安装了一遍gentoo,发现第一次安装时好多调查过的经验都没有记录下来,这次还得重新去找,麻烦…… 记下来供下次安装时使用吧。

按照手册上安装时,按照以下方法设置网卡(/etc/conf.d/net):

config_eth0=( "192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255" )
routes_eth0=( "default via 192.168.0.1" )
dns_servers_eth0=( "DNS1的IP地址" "DNS2的IP地址" )

chroot之后首先上ccache以提高编译速度:

# emerge ccache

然后编辑 /etc/make.conf 加上:

FEATURES="ccache parallel-fetch"
CCACHE_SIZE="2G"

接下来安装必要的软件:

# emerge vim

升级portage:

# emerge portage

编译内核时别忘了打开framebuffer(高分辨率命令行用),还有Device Drivers->Sound->Advanced Linux Sound Architecture(声音驱动,参考 这里)。 当然也别忘了在 PCI Devices中选择你声卡的型号。

如果你使用SATA硬盘,注意设置grub.conf时别弄错了硬盘编号

如何mount Windows XP的硬盘分区:首先保证内核中编译了ntfs支持,然后参考下面的结果来写mount参数:

/dev/sda6 on /mnt/wine type ntfs (ro,noexec,nosuid,nodev,nls=utf8,umask=0)
/dev/sda5 on /mnt/wind type vfat (ro,noexec,nosuid,nodev,codepage=936,iocharset=utf8,umask=0)

重新起动后安装xorg,修改make.conf:

USE="alsa bash-completion bzip2 gtk jpeg opengl ruby xscreensaver X -gnome -ipv6 -kde -qt3 -qt4"
INPUT_DEVICES="keyboard mouse"
VIDEO_CARDS="nvidia"

然后运行:

# emerge xorg-x11

装好后运行 xorgconfig 配置图形界面:

# xorgconfig

接下来是xfce4。修改/etc/make.conf:

LINGUAS="zh_CN ja"        # for xfdesktop

然后:

# emerge xfce4

还有中文输入法:

# emerge scim scim-pinyin

安装好后退回普通用户,编辑.xinitrc设置启动xfce4:

exec scim &
exec startxfce4

最后别忘了将语言设置为中文:

$ vi .bashrc
export LANG=zh_CN.UTF-8

启动之后应该能看到小老鼠的桌面,按Ctrl+Space应该能出输入法了。

装firefox:

# emerge mozilla-firefox
# emerge netscape-flash

装完后自己上网找插件去。

另外,Firefox默认安装之后,在快速滚动滚轮时页面会沿着历史记录前进/后退,十分不爽。 在about:config将mousewheel.horizscroll.withnokey.action改成0即可解决该问题。

即时通讯,使用pidgin,基于gtk,支持GTalk和MSN:

# emerge pidgin

默认的字体比较难看,从微软那里借用一些过来吧。

# emerge mkfontdir mkfontscale
# mkdir /mnt/winc
# mount -t vfat /dev/sda1 /mnt/winc
# cd /mnt/winc/windows/Fonts
# mkdir /usr/share/fonts/TTF
# cp sim* msgothic.ttc msmincho.ttc msyh* meiryo* verdana* tahoma* /usr/share/fonts/TTF
# cd /usr/share/fonts/TTF
# mkfontdir
# mkfontscale

然后重启xfce4后即可设置字体。

另外,在编译xfwm4时加上USE=xcomposite,即可打开窗口混色开关,这样就可以在窗口管理器中设置窗口的透明度了。 另外 http://www.xfce-look.org/ 这个网站不错,可以下载到许多xfce4用的主题。

时钟有可能会不正确,可以修改 /etc/conf.d/clock,将 CLOCK="UTC" 改成 CLOCK="local"。

板载AC97声卡的配置,参考官方文档即可。

安装mplayer:

USE="aac cddb dvd encode gif mmxext mp2 mp3 png \
    quicktime rar real samba srt vorbis \
    win32codecs x264 xv xvid" emerge  mplayer
   

安装Open Office:

# LINGUAS="zh_CN" emerge openoffice-bin


2008-02
21

最近一直在忙点私活,又好久没写blog了,再不写点的话二月份就又要以单篇文章结束了。 前一阵子一直在研究Unicode,索性把研究结果介绍一下吧。

可能大家都听说过 Unicode、UCS-2、UTF-8 等等词汇,但它们具体是什么意思, 是什么原理,之间有什么关系,恐怕就很少有人明白了。 下面就分别介绍一下它们。

阅读全文 »

2008-02
04

这个东西应该是很老很老很老了,不过很奇怪在国内为什么没几个人知道呢?虽然跟本blog的主题——技术——没有太大的关系,但因为实在是太常用了,就在这里贴一下吧。

原文来自Jorma Oksanen’s Origami,版权为非商用免费,但作者要求写出他的名字。另外本文的图和说明文字来自这里:A4用紙1枚で2枚収納できるCDケースをつくる。这篇文章要比原文说明得详细一些。

阅读全文 »


2008-01
29

上周偶然与fcicq讨论到一个关于perlcc的优化问题。 据说用perlcc将perl程序编译成C程序后再用gcc -O3进行优化,速度可能会快一些。 于是就测了测,顺便试了试其他语言的情况。

测试程序是Ackermann函数。 也许用它来做benchmark不太合适,但毕竟这是个纯数学+多次递归+耗时的运算,也能反映一定问题吧。

阅读全文 »

2008-01
24

在delicious上看到一篇去年的文章: How to recognise a good programmer。 正好这段时间一直在为面试发愁,看看这篇文章很有帮助。原文篇幅很长,这里就不逐字逐句地翻译了, 只把要点和看过之后的体会写出来,希望能给同样是为寻找程序员而头疼的同仁们提供帮助。

优秀程序的几个必要条件:

1. 要有热情

企业中有这样一种人:职业程序员。他们之所以做IT是因为IT是个好工作,而不是因为对技术充满热情。这些人回家后绝对不会写程序。 对于他们来说,编程是每天必须的工作,公司为他们提供技术培训也是理所应当的。 这种人缺乏热情,也不会是好的程序员。

其实这类人相当相当多,随手一抓就能抓出一大把。他们自己也有电脑,但那是用来上网看电影打游戏的,不是用来搞开发的。 开发环境、编辑器甚至连Office都没有。这样的人也很难期待他是优秀程序员。

2. 会自学,爱自学

大家都知道IT行业更新很快,不会主动学习的人很快就会被淘汰。有些人你要他们学习某项技术时他会说“公司给我培训我就学”。 当然,在找工作时他们有可能在家里学习必要的技术,但那不是主动的自学。好的程序员热爱学习新技术, 对于他们来说学技术纯粹是好玩,纯粹是个人兴趣。有些人还会制定出完善的学习计划。 这样的程序员根本不用培训。

3. 聪明

也许程序员都给人以不善交际的印象,但其实他们不是。好的程序员都是智商奇高的人, 不可能不善交际。而事实上的确在某些场合他们不善言辞,那是因为他们的兴趣不在那里。 一旦讨论到他们感兴趣的技术话题,他们就会扯开话匣子说个不停。

在招聘时可以试着去谈论一些他可能感兴趣的技术话题,看他能侃到什么程度。 如果问一句说一句或者说不出来什么,那就不用再抱希望了。

4. 隐藏的经验

优秀程序员或多或少都有些“课外活动”,如参加开源社区,为处理日常生活的事情而写的小程序, 个人网站,或者纯粹为了好玩而做的小东西。而面试时这些东西是不会写在简历上的, 因为他们觉得这些根本算不上简历要求的“经验”。

我经常看到有些应聘者的简历上把大学时做的小学期作业都写在上面。这种人就不必考虑了—— 连作业都自认为是“经验”的人可以想到他的水平有多高。

所以,优秀程序员的简历通常都很简短,不过你可以去问问他们,除了简历上写的东西之外, 工作之外有无技术经验,即使完全和工作无关也行。如果他答不出,那即使简历有20页长,他也不会是优秀程序员。

5. 广博的技术知识

这一点很简单,学得技术越多水平越高。不一定要完全精通,但了解许多毫不相关的知识对个人水平有很大帮助。 但同样,优秀程序员不会把他知道的东西全都写上,那些他不精通的东西会认为不值得一写。

不过有一点要注意。如果简历上写到“精通Java、J2EE、Ant、XML、SQL、Hibernate、Spring、Struts、EJB”, 就要小心了,这个人不一定优秀。因为这些技术都属同一个领域,关联性太强。 但当你对这些技术一无所知时,如何分辨呢?你可以让他讲讲这些技术有什么联系。 精通一个领域的技术的人经验丰富,但他很可能不是个优秀程序员。

为什么需要有广博的技术知识?我个人认为,即使是毫不相关的技术,其实也是能融会贯通的。 学得技术多了、杂了,看到不懂的问题自然而然地就能想出最合适的解决办法来。

不过有一点要注意,如果他关心的技术中有尖端技术,如今天的AIR、Flex之类, 那你就可以考虑录用他。

另外优秀的程序员对技术很敏感,他能判断出某项技术是否适合于完成工作。 如果被迫使用一种他认为不适合的技术去工作,他会觉得很不爽的。

6. 资格证书

资格证书、学位等不是优秀程序员的必要条件,但至少不是个反面信号。优秀程序员大都有计算机科学的学位。 也有很多人没有,但这并不能说明他不优秀。专业资格认证如MCSE、CCNA等也是, 这些只是用来证明这个人已经学会了相关知识,企业在招聘的时候就可以省去考核的麻烦, 并不能证明程序员有多么优秀。如果你的企业确确实实需要非常优秀的程序员, 那就别去理会这些认证,而是把精力花在实际能力的考察上吧。

总结

如果将优秀程序员的条件按条列出的话,可以得到如下内容:

正面信号

  • 对技术有热情
  • 以编程为乐
  • 对感兴趣的技术话题会滔滔不绝
  • 工作之外自己做过某些项目
  • 主动自学技术,但不是为工作而学习
  • 对技术的好坏、是否合适有自己的看法
  • 使用自认为不合适的技术完成工作时会很不爽
  • 聪明,很多话题都能侃侃而谈
  • 在上大学或工作之前就写过程序
  • 有许多简历上没写出来的经验
  • 知道许多毫不相关的技术(一般不会写在简历上)

负面信号

  • 把编程当作每天的工作
  • 不喜欢谈论技术,即使受到鼓励也不会说
  • 只通过公司的培训来学新技术
  • 愿意使用你选择的任何技术来完成工作,认为“所有技术都是好的”
  • 看起来不怎么聪明
  • 在大学时才开始学编程
  • 简历上写出自己的所有经验
  • 仅专注于一个或两个领域


2008-01
23

很短很好用,不过自己老是忘,干脆写下来吧。

当你有一大篇文字,没有换行(或者行宽太宽、太窄),并且段落之间用空行分开, 那么可以使用以下的技巧来重新分行。

:set tw=100         " textwidth,设置文本行宽度
:set fo+=mM         " formatoptions,设置自动换行的条件
gggqG


2008-01
15

exaile是一个基于GTK+的媒体播放器, 类似于KDE下的Amarok。在gentoo下可以很方便地安装:

# emerge exaile

但试图播放mp3时,会报告这样的错误:

You do not have the appropriate Gstreamer plugin installed to play this file:

google之后才知道,播放mp3需要安装gstreamer的插件 gst-plugins-mad。 你可以用下面的命令查看已经装了哪些插件:

# emerge -s gst-plugins

安装完 exaile 之后,gst-plugins-base、gst-plugins-bad、gst-plugins-good三项 应该是已安装好的。执行下面的命令:

# emerge gst-plugins-mad

装好后重新启动exaile,这样就可以播放mp3了。



2008-01
14

gentoo xeffects项目主要是研究如何在gentoo下使用compiz和compiz fusion,xgl的ebuild文件就来自xeffects layout。 但是最近(2008/1/6前后),xeffects项目的开发者声明他们决定中止该项目的开发。(文章末尾引用了他们的官方声明。)

官方网站gentoo-xeffects.org的域名也已经停止使用,在gentoo下通过 layman -a xeffects 会说找不到域名。 不过好在xeffects作者公开了他们的开发成果,你可以通过git下载。

# emerge dev-util/git
$ git clone git://git.overlays.gentoo.org/dev/jmbsvicetto.git

最后附上开发者的官方声明。

lex (nesl247) and I decided we no longer were interested in keep running the gentoo-xeffects server and agreed to not renew its subscription after the end of December. Thus, the gentoo-xeffects overlay is no longer available. I've put all the ebuilds in the xeffects overlay under my git dev overlay on http://git.overlays.gentoo.org/gitweb/ where I plan to keep them for at least the next 15 days. If you want to get any of the ebuilds, you can use the gitweb interface to get it or you can clone the overlay with git clone git://git.overlays.gentoo.org/dev/jmbsvicetto.git. I have a local copy of all files that were available under http://distfiles.gentoo-xeffects.org so if someone is interested, drop me a note here, on IRC or through any of my contacts.

So, what's next? I didn't wanted to keep the server running because I wasn't available to keep the financial commitment, but I'm still interested in compiz, compiz-fusion and related packages. As such, I'm starting a new overlay with Ingmar Vanhassel (ingmar/ingmarv) and Wulf C. Krueger (philantrop) that will be named desktop-effects and will also be available from http://git.overlays.gentoo.org/. As indicated by its new name, this overlay will have a different scope and will start with a subset of the xeffects ebuilds. Expect more details to follow in the US forum and or in the #gentoo-xeffects irc channel.

I want to thank everyone that worked on the coffee_buzz / gentoo-xeffects overlay for their hard work. In particular, I want to thank coffee_buzz, nesl247 and roderick. Without you and your work, the rest of us wouldn't had / be having so much fun with compiz / compiz-quinnstorm / beryl / compcomm / compiz-fusion and friends.



2008-01
13

昨天在fcicq的推荐下安装了gentoo。安装过程没什么好说的,按照gentoo手册一步步来, 都挺顺利,但在最后安装grub时出了点问题。

我的机器有两块硬盘,一块是SATA的(/dev/sda), 一块是IDE的(/dev/hdb),gentoo的/boot装在了 /dev/sda8,/装在了/dev/sda10上。 grub使用hd0、hd1等方式来指定硬盘,但同时有SATA和IDE的情况下就很难分辨谁是hd0谁是hd1了。 所以我先启动grub然后通过它的命令行补齐功能,查明hdb -> hd0, sda -> hd1, 于是就按照这个设置写好了grub.conf,并加上了splashimage。

但是重新起动后grub说找不到分区,并且屏幕变花,几乎什么都看不见。 在菜单里按e然后c进入命令行,想通过命令行补齐来启动系统,但由于看不见显示而失败了。

没办法再次使用gentoo安装盘启动系统。猜测可能是由于splashimage找不到导致花屏, 于是编辑grub.conf去掉了splash,重启,这次能看到错误信息了。进入grub的命令行尝试补齐, 发现sda居然是hd0

这下情况明朗了,通过命令行指定好正确的root和kernel,启动系统后修改grub.conf,重启,成功。

为什么安装时和启动时的硬盘编号不一致?后来看到手册上说,硬盘编号一般是先IDE再SCSI(SATA), 但当BIOS设置从SCSI启动时,SCSI设备会变成hd0。原来如此,安装时由于是从光盘启动, 所以IDE优先于SATA成了hd0;但重启系统后由于从SATA启动,所以SATA就变成了hd0。

最后建议在配置grub.conf时,不要一开始就加上splashimage,应当等全部调试通过之后再添加,避免出现花屏问题影响调试。