Sunday, October 19, 2008

关于Arch的二三事 (续)

没想到居然拖了这么久才继续写, 难道现在静下来写下日志都成了一种奢侈...

安装完以后配置X还是比较方便的, 毕竟有工具可以自动生成配置文件, 我是用的hwd来配置xorg.conf的. 比较麻烦的地方可能就是显卡了, 毕竟我的是ATI的显卡, 不像NVIDIA的用官方工具来自动配置就好了. 我选择安装的是开源的驱动, 然后参考这篇Wiki稍微修改了一下xorg.conf, 不然进X就是黑屏. 不过我感觉我现在的配置还没有完全发挥显卡的效果, 看以后再仔细研究下.

然后是SCIM的配置, 安装很简单啦, 主要是配置, 详情请参考这篇Wiki.

对于经常使用bash的人来说, 自动补全肯定会是一个有用的功能. 强烈建议安装bash-completion这个包, 可以增强bash的自动补全, 比如说可以实现在sudo之后的命令自动补全. 安装好以后, 再修改.bashrc使得一直都生效:
. /etc/bash_completion

在我刚安装好GVIM之后, 打开却发现和以前的很不一样. 首先没有菜单, 然后它也没有按照我选的颜色方案正确显示, 而是什么灰色背景的颜色配置, 显得很难看. 菜单问题在网上找到了解答, 是通过修改.gvimrc解决:
$ cat ~/.gvimrc
set encoding=utf8
set langmenu=zh_CN.UTF-8
set imcmdline
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
而颜色问题则困扰了我一段时间, 后来无意中发现Vim的一个全局配置文件/etc/gvimrc, 才找到了问题的根源. 原来是这个文件修改了颜色的配置, 遂注释掉相应部分, 于是我熟悉的界面又全部回来了.

还有一些杂感. 为了看chm文件安装了CHM Reader, 不过却什么都显示不了, 不知道是不是又是因为64位的缘故, 现在在用kchmviewer, 说实话, qt的界面不是很喜欢就是了. 为了能够听到我心爱的CD们, 开始我还去手动挂载光驱呢, 结果失败, 普通CD就可以顺利挂载, 音频CD却不行, 最后还是依靠强大的Rhythmbox搞定了, 这软件听CD必备啊.

由于课程的缘故, 现在的配置还不能完全调整到和以前一样, 我也在一点一点地完善中, 不过还是能够从中学到很多的, 让这个系统慢慢地符合我的习惯就行了.

Wednesday, October 8, 2008

关于Arch的二三事

已经把Ubuntu格了, 现在的系统已经基本上满足我的应用了, 配置是痛苦的, 不过配置好了是幸福的, 呵呵~

困扰我最久的是挂载U盘、移动硬盘的问题, 首先你可以根据这篇Wiki配置hal. 不过手动mount很烦的, 刚好在LinuxSir上找到了一个可以实现自动挂载并且支持热插拔的方法:
$ cat /etc/udev/rules.d/10-automount.rules
KERNEL=="sd[b-z]", NAME="%k", SYMLINK+="usbhd-%k", GROUP="users", OPTIONS="last_rule"
ACTION=="add", KERNEL=="sd[b-z][0-9]", SYMLINK+="usbhd-%k", GROUP="users", NAME="%k"
ACTION=="add", KERNEL=="sd[b-z][0-9]", RUN+="/bin/mkdir -p /media/usbhd-%k"
ACTION=="add", KERNEL=="sd[b-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat",
RUN+="/bin/mount -t vfat -o rw,utf8=true,codepage=936,noauto,flush,quiet,nodev,
nosuid,noexec,noatime,dmask=000,fmask=111 /dev/%k /media/usbhd-%k", OPTIONS="last_rule"
ACTION=="add", KERNEL=="sd[b-z][0-9]", RUN+="/bin/mount -t auto -o rw,locale=zh_CN.UTF-8,noauto,
sync,dirsync,noexec,nodev,noatime /dev/%k /media/usbhd-%k", OPTIONS="last_rule"
ACTION=="remove", KERNEL=="sd[b-z][0-9]", RUN+="/bin/umount -l /media/usbhd-%k"
ACTION=="remove", KERNEL=="sd[b-z][0-9]", RUN+="/bin/rm -rf /media/usbhd-%k", OPTIONS="last_rule"
我觉得这个还不错, 很方便, 那个文件是我自己建的, 本来是没有的. 如果你要手动挂载的话, 那么推荐你用pmount, 这个可以允许非root用户挂载可移动设备, 而且没有乱码, 也没有权限问题.

然后是URxvt, 以前在Ubuntu下是用.Xreources作为配置文件名的, 但到了Arch发现用这个文件名不起作用, 于是找到方法修改为.Xdefaults即可.

在启动的时候还遇到了一个诡异的问题, 错误提示如下:
clocksource tsc unstable
开始还以为是升级出现的问题, 因为我每次都是升完级重启以后就出现这个错误, 然后系统就进不了了. 为此我重装了至少两三次(真有毅力 - -), 最后无奈Google了一下, 发现居然是AMD+ATI的问题, 而且解决方法也是如此简单, 当时就想晕了... 在grub的启动菜单的kernel中加一个参数clocksource=acpi_pm就行了.

话说用64位系统就是跟自己过不去... 我算是体会到了. 最难的一个问题就是QQ, 现在流行有三种方法: Eva, 官方QQ, Pidgin. 因为Eva用习惯了, 我理所当然地去仓库中找, 好吧, 官方的没有, 那我去AUR找, OK, 找到了, 有两个, 选了最近的那个, 另外一个貌似已经过期了. 然后就提示什么什么依赖不能满足, 于是我一个一个地去安, 每个都还挺大, 真是花时间... 再安, 这次安上了, 运行起来似乎也很正常, 又看到了熟悉的登录界面, 然后我点登录, 只见什么东西一闪就关了, 然后在终端里看到一堆的错误, 我晕, 这要折腾到什么时候啊~ 于是我毅然决然地决定放弃AUR的包了, 那咱就将就用下官方的吧, 以前在Ubuntu下也是64的, 也能用上, 于是我满怀希望去下好, 解压运行, 我看到的又是一堆错误, 这次连登录界面都没看到... 很好很强大, 于是我还剩下一个Pidgin了, 这次很顺利, 安装登录都是, 然后我以为我终于可以安心的时候, 我发现Pidgin自动退出了, 我又开, 过了一会儿, 它又自动退出, 我再开, 它还是退出, 它是故意的... 为了一个QQ, 真是太难了. 就在我决定放弃, 以后安个虚拟机来运行QQ的时候, 我在LinuxSir上看到这样一个帖子, 用16楼给的链接下了一个Eva的包含PKGBUILD和gcc补丁的档案, makepkg遇到了一个小错误, 可以按照那个帖子中的办法解决, 然后应该就很顺利了, 最后我终于用上了Eva, 哈哈~

暂时想到这些, 睡了先, 明天再写.

Monday, September 22, 2008

may the source be with you

节选自《算法的力量》 李开复

给程序员的七个建议

(1)练内功。不要只花功夫学习各种流行的编程语言和工具,以及某些公司招聘广告上要求的科目。要把数据结构、算法、数据库、操作系统原理、计算机体系结构、计算机网络,离散数学等基础课程学好。大家不妨试试高德纳所著The Art of Computer Programming里的题目,如果你能够解决其中的大部分题目,就说明你在算法方面有一定的功力了。

(2)多实战。通过编程的实战积累经验、巩固知识。很多中国大学毕业生缺乏编程和调试经验;学习C语言,考试过关就算学会了;课题项目中,只要程序能够编译,运行,并且输入输出满足要求就算了事。这些做法是不行的。写程序的时候,大家必须多想想如何把程序写得更加精炼、高效、高质量。建议大家争取在大学四年中积累编写十万行代码的经验。我们必须明白的是:好程序员是写出来的,不是学出来的。

(3)求实干。不要轻视任何实际工作,比如一些看似简单的编码或测试。要不懈追求对细节一丝不苟的实干作风与敬业精神。我发现不少程序员对于知识的掌握很肤浅,不求甚解,没有好奇心,不会刨根问底。比如,学会了C++,是否了解一个对象在编译后,在汇编代码中是如何被初始化的?这个对象的各个成员在内存中是如何存放的?当一个成员函数被调用时,编译器在汇编代码中加入了哪些额外的动作?虚函数的调用是如何实现的? 这些东西恐怕在编程语言或编译原理中都没有详细提到,只有通过踏实的实干才能真正掌握。

(4)重视数学学习。数学是思维的体操,数学无处不在。学计算机至少要学习离散数学、概率论、布尔代数、集合论和数理逻辑。这些知识并不难,但是对你未来的工作帮助会很大。 尤其当你对一些“数学密集型”的领域如视频、图像处理等有兴趣时,这些知识将成为你手中的利器。

(5)培养团队精神,学会与人合作。今天的软件工程早已经不是一个人可以单独操作的,而必须靠团队合作才能成功。不懂得合作的人是不能成大器的。大家要多去寻找可以与人一起做项目的机会。

(6)激励创新意识,培养好奇心,不要死记硬背。没有掌握某种算法技术的根本原理,就不会有应变和创新的能力。想成为一位好程序员(其实从事任何一个行业都是如此),重要的是要养成钻研,好奇,创新,动手,合作的优秀习惯,不满足于填鸭,不满足于考试交差,不满足于表象。这不是学几门课能够一蹴而就的。

(7)有策略地“打工”。在不影响学业的前提下,寻找真正有意义的暑期工作或兼职。去找一个重视技术的公司,在一个好的“老板”指导下完成真正会被用户使用的程序。

Sunday, September 21, 2008

这几天使用LaTeX的一些新感受

在学校找了个用LaTeX排版的差事, 也不知道能做多久, 不过花了3天时间排了本近60页的杂志, 还是很有成就感的, 嘿嘿~

期间也发现有一些遗忘的地方, 于是我这几天干的最多的一件事情就是在CTeX论坛上搜和在Google上搜, 对于以前的一些东西又有了新的理解.

先来说说代码显示吧, 以前用了一个很笨的方法来做出那种灰色背景的效果, 结果在排大猫的那段很长很长的代码时出现了问题. 那代码要跨页, 所以以前的表格方法不能把代码全部显示出来, 导致大量代码被丢弃了, 很显然这种方法已经行不通了. 于是上网去找解决方案, 找到一个listings的宏包, 看介绍不错, 还支持语法高亮呢. 然后就兴致勃勃地用上了, 实现灰色背景还是很简单的, 可一编译又发现了一个很严重的问题, 如果某行代码太长超过一行了, 虽然listings可以自动换行, 但那行就没有灰色背景了! 这样的效果可想而知, 于是我还很认真地花了一些时间去把listings的说明文档好好看了一遍, 想找找有没有什么解决的办法, 结果还是失败了, 不过看CTeX论坛上也是有些人遇到这种情况, 而有些人正常, 难道是人品问题 (- -)? 没办法, 为了好的代码显示效果, 只能另辟蹊径了. 恐怕我当初也不会想到, 最后的方法竟然如此简单, 仅仅是把代码放在一个shaded环境里就行了, 如下:
\usepackage{color}
\usepackage{framed}

\definecolor{shadecolor}{gray}{0.85}
放在导言区就行了, 然后像这样处理代码:
\begin{shaded}
\begin{verbatim}
...
\end{verbatim}
\end{shaded}
什么跨页, 什么换行, 一切都搞定, 哈哈~

然后还是讲讲代码, 当初我在排第一段代码的时候就遇到了困难, 因为这里面有中文注释... 以前从来没考虑过这种事情, 查了下, 是verbatim环境使用的字体Typewriter不支持显示中文的缘故, 这也是LaTeX默认用来显示代码的字体. 不过看别人用CJK的显示都是正常的, 看来CJK确实要高级些, 没办法, 谁叫咱用的是XeTeX, 毕竟现在还不是很成熟. 我想用xeCJK啊, 残念, 编译不出来就这样, 唉~ 然后在这里找到了解决办法:
\setsansfont{DejaVu Sans YuanTi Mono}
\makeatletter
\def\verbatim@font{\sffamily\small}
\makeatother
只好忍痛替换了tt字体, 用上了猪猪的强大字体, 等宽加中文都支持.

因为杂志的栏目分类不能出现编号, 所以默认的那种是不行的, 下面是解决:
\phantomsection % 让目录中的链接正确
\section*{\textcolor{darkgreen}{\textbf{本刊致谢}}} % 不显示编号, 并且不出现在目录中
\addcontentsline{toc}{section}{卷首语} % 添加到目录中
\sectionmark{卷首语} % 页眉

关于浮动环境, 这个以前真的是很头疼的, 往往它不会按照所设想的位置放置, 搞得某些图片直接占据了一整页. 然后某天在CTeX上看到一个很强大的回复, 可以把浮动环境放在任何你需要的地方, 一个字, 爽! 如下:
\usepackage{float}

\begin{figure}[H] % 就是这个神奇的H
...
\end{figure}

还有一个计数器的问题, 因为杂志有一个封面, 所以会占据掉一整页. 这样正文就是从第2页开始计数了, 虽然是个小问题, 不过还是希望能够符合习惯点. 解决也很简单的, 这还得归功于图书馆的那本强大的LaTeX书, 如下:
\setcounter{page}{0}
这句就将页码的计数器设置为0了, 所以放在第2页的代码前面就行了.

P.S. 因为杂志的缘故, 认识了joy, 牛逼的Emacs, Python, shell脚本使用者, 好好学习, 天天向上.

Wednesday, September 17, 2008

使用OO遇到的Java运行环境错误

没到Ob之前打开OO都不会有什么错误提示, 不过现在用终端了, 反而看到了一些错误提示, 也许是以前就有的, 只是看不到罢了. 错误提示如下:
javaldx: Could not find a Java Runtime Environment!
开始以为是Java的环境变量配置错误, 又按照Ubuntu Wiki上的设置重新检查了一次, 结果还是出现那个提示, 后来在Ubuntu官方论坛上找到了解决办法:
sudo apt-get install openoffice.org-java-common

Sunday, September 14, 2008

强大的终端电影

昨天在Ubuntu社区上看到的, 以前貌似听说过这么一个东西, 不过没见过, 见到了以后感觉的确很震撼. 当然, 你得要了解 Star Wars Episode IV: A New Hope 才行, 不然要理解其中的剧情还是有一定难度的, 毕竟这属于抽象派的. 话说这个有谁看完过?
telnet towel.blinkenlights.nl
下面是一些截图:

20th Fox
这个20世纪福克斯的的确很搞, - -

StarWars
Star Wars!

C-3PO & R2-D2
R2-D2 & C-3PO

Wednesday, September 10, 2008

URxvt & PyPanel & Openbox的一些配置

URxvt:
$ cat ~/.Xresources
! font
URxvt.font:xft:Bitstream Vera Sans Mono:pixelsize=13:antialias=true,
xft:WenQuanYi Zen Hei:pixelsize=13:antialias=true

! color
URxvt.foreground:#ffffff
URxvt.background:#2e3436
URxvt.color0:#2e3436
URxvt.color1:#cc0000
URxvt.color2:#4e9a06
URxvt.color3:#c4a000
URxvt.color4:#3465a4
URxvt.color5:#75507b
URxvt.color6:#06989a
URxvt.color7:#d3d7cf
URxvt.color8:#555753
URxvt.color9:#ef2929
URxvt.color10:#8ae234
URxvt.color11:#fce94f
URxvt.color12:#729fcf
URxvt.color13:#ad7fa8
URxvt.color14:#34e2e2
URxvt.color15:#eeeeec

! follow URL
URxvt.urlLauncher:firefox
URxvt.matcher.button:1
URxvt.perl-ext-common:matcher

! scrollbar
URxvt.scrollBar:True
URxvt.scrollBar_right:True
URxvt.scrollBar_floating:False
URxvt.scrollstyle:plain
URxvt.saveLines:500
PyPanel的部分配置, 只是把我修改过的贴了出来, 其它的都是默认的:
$ cat ~/.pypanelrc
#------------------------------------------------------------------------------
# Colors: Format is hex triplet - 0xrrggbb
#------------------------------------------------------------------------------
BG_COLOR = "0x000000" # Panel background and tinting color
TASK_COLOR = "0xffffff" # Normal task name color
FOCUSED_COLOR = "0x33ccff" # Focused task name color
SHADED_COLOR = "0x808080" # Shaded task name color
MINIMIZED_COLOR = "0x808080" # Minimized task name color
DESKTOP_COLOR = "0xffffff" # Desktop name color
CLOCK_COLOR = "0xffffff" # Clock text color
LINE_COLOR = "0x606060" # Vertical line color

#------------------------------------------------------------------------------
# Panel Spacing and Location Options: Measured in pixels
#------------------------------------------------------------------------------
P_LOCATION = 1 # Panel placement: 0 = top, 1 = bottom
P_WIDTH = 1400 # Panel width: 0 = Use full screen width
P_START = 20 # Starting X coordinate of the panel
P_SPACER = 0 # Spacing between panel objects
P_HEIGHT = 24 # Panel height

#------------------------------------------------------------------------------
# Panel Text Font: This option takes either a traditional or Xft font string
# Ex: "-schumacher-clean-medium-r-normal-*-12-*-*-*-*-*-*-*"
# "aquafont-8"
#------------------------------------------------------------------------------
FONT = "DejaVu Sans YuanTi-11"

#------------------------------------------------------------------------------
# Background Alpha/Shade Level: 0 (Fully Translucent) -> 255 (Fully Opaque)
# BG_COLOR is used for tinting
#------------------------------------------------------------------------------
SHADE = 255

#------------------------------------------------------------------------------
# Misc. Options: 1 = Enabled/Yes, 0 = Disabled/No
#------------------------------------------------------------------------------
ABOVE = 1 # Panel is always above other apps
APPICONS = 1 # Show application icons
AUTOHIDE = 0 # Autohide uses the CLOCK_DELAY timer above
SHADOWS = 0 # Show text shadows
SHOWLINES = 1 # Show object seperation lines
SHOWBORDER = 0 # Show a border around the panel

#------------------------------------------------------------------------------
# Panel Layout: -----------------------------------
# [ 1 ][ 2 ][ 3 ][ 4 ][ 5 ]
# -----------------------------------
#
# The panel layout is split into 5 sections numbered 1, 2, 3, 4 or 5 as shown
# in the diagram above. Each of the following objects can be enabled by
# assigning it a section number or disabled by assigning it 0:
#------------------------------------------------------------------------------
DESKTOP = 0 # Desktop name section
LAUNCHER = 0 # Application launcher section
TASKS = 3 # Task names section
TRAY = 4 # System tray section
CLOCK = 5 # Clock section
Openbox:
$ cat ~/.config/openbox/autostart.sh
#!/bin/bash

# PyPanel
if which pypanel > /dev/null; then
pypanel &
fi

# use feh to set the background
if [ -f $HOME/.fehbg ]; then
eval `cat $HOME/.fehbg` &
fi

# D-bus
if which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS"; then
eval `dbus-launch --sh-syntax --exit-with-session`
fi

# Make GTK apps look and behave how they were set up in the gnome config tools
if which gnome-settings-daemon >/dev/null; then
gnome-settings-daemon &
fi

# Preload stuff for KDE apps
if which start_kdeinit >/dev/null; then
LD_BIND_NOW=true start_kdeinit --new-startup +kcminit_startup &
fi

Arch Linux & Openbox

Openbox
花了两天下午折腾了下Arch和Openbox (以下简称Ob), Arch还是比较简单的, 具体安装到一些配置可以参考这篇Wiki, 那个启动速度的确很爽, 准备有时间了就把现在的电脑格了, 装上Arch.

Ob倒是花了些时间, 主要是以前对于DE和WM的区别不是很了解. 这个一定要装上ObConf, 我主要用来更换主题和更改字体. 那些菜单什么的配置, gtk主题的配置可以参考Toy的文章. panel用的是PyPanel, 稍微花了点时间配置, 主要是颜色, 对RGB不敏感啊... 用的ROX-Filer做的file manager, 这个看ee的介绍貌似很强大, 快捷键那是一套一套的, 不过还是鼠标点习惯点. 还有URxvt, 这个刚开始觉得也太难看了吧, 然后就Google了半天, 找到一些好的配置, 自己修改了一下, 主要把颜色改成GNOME中的Tango配色方案. 差不多就这些了, 我平时用的软件少, 暂时还没有遇到什么大的问题, 毕竟那是以后的事情了. 下篇会贴一些上面提到的一些软件的配置.

Tuesday, September 9, 2008

彩色man的less替代方案

今天突然想到猫猫的回帖, 于是去试了试, 的确很棒. 以前的那个用most来显示彩色man page的文章, 用了一段时间就会发现几个问题, 首先most不支持反向搜索, 也就是不能按N来反向搜索相同的关键字, 这也是我觉得最麻烦的一个地方. 其次在使用mark标记上, most不能自定义保存位置在某个寄存器上, 它只会保留一个标记点, 而且也不支持像Vim那样的使用两个单引号来在两个最近的标记点中跳转. 所以, 我换到了less, 不过今天在IRC上看到mOo说他用less查看普通文件是彩色的, 关于这个我还没找到该怎么办. 以下是修改.bashrc的部分:
# colorful man page
export PAGER="/usr/bin/less -s"
export BROWSER="$PAGER"
export LESS_TERMCAP_mb=$'\E[01;34m'
export LESS_TERMCAP_md=$'\E[01;34m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;33m'

Saturday, September 6, 2008

珍惜

今天进行了一次很诡异的谈话, 3个人, 那2个每一个对我来说都是很熟悉的人, 可我们3个在一起的时候我就不知道该干什么了. 想起暑假时和大坏、珍妮一起的时候, 也是他们两个一直在摆, 然后我在一边喝着饮料, 会不时地插上几句. 我对他们说我已经习惯这样了, 当一个安静的聆听者, 可今天又好像有点不一样, 也许是因为是兰在和另一个男生一直在那摆, 然后我又说不上什么. 他们理所当然地谈论到我, 一致的意见是我缺乏交际能力, 我嘴上没说什么, 可不免在心里念叨着. 我觉得干嘛要每个人都那样能说会道, 或者说花言巧语, 我不愿多说, 只想在热衷的技术上倾注更多的热情. 有时我也会话多, 不过一般都是在谈论技术的时候. 都说21世纪需要复合型人才, 看来我就是典型的不合格者了, 都不知道自己有时候太geek了是否是好事. 大家都是追求了钱才去追求精神上的提升, 而我不想在精神上堕落着. 以前对小马说我活着不是为了钱, 她有点不屑, 现在的我还是可以坚定地说出这句话, 不过钱这个字在我心中的比重的确比以前大了. 我不想让兰受苦, 她已经受够了, 如果继续在我身上延续的话, 那我只会成为又一个伤害她的人. 晚上兰给我发了条短信, 她说我给了别人不能给的东西. 我应该学着怎样更好地珍惜一个人了.