2008年10月25日

Python 的 self

初學 Python,有個令我很頭大的地方是 self 對 class variable 的修飾。要加不加 self,傻傻分不清楚......。原先習慣了 C++ 中的 variable scope,換個語言就躺平瞭。所幸有股溝的協助,把股來的結果整理一下;依我目前為止的理解,下面是 C++ 和 Python 2.5 等價的程式碼:

C++

int globalVar = 5;

class Class
{
public:
    Class() { attribute = 30; }
    void func() {
        int localVar = 20;
        localVar = attribute;
    }

    int attribute;
    static int staticVar;
};

int Class::staticVar = 10;

Python

globalVar = 5

class Class:
    staticVar = 10

    def __init__(self):
        self.attribute = 30
    
    def func(self):
        localVar = 20
        localVar = self.attribute

Class.staticVar = 10

總之,變數若加了 self,就成了 instance 的 attribute,可以在同一個 instance 內跨 method 存取。如果沒加的話,就被限制在定義時的 scope 裡。

至於 member function 的 self argument,和 C++ 的 this 一樣,是用來區別呼叫的 instatnce 的。

寫了一天的 Python,有股衝動想從 C/C++ 跳槽,永世不再返......

2008年10月9日

ArchLinux + LXDE 安裝筆記

( 更新:這篇文章已經有點久遠了...... 新文在這裡。)

如題,以 FTP 方式安裝 ArchLinux 2008.06 的筆記。選擇之桌面環境為 LXDE

前言

主要參照的文章為 LinuxToy 的 打造完美的 Linux 桌面 — Arch Linux 2007.08-2 及回應們。該篇文章在對岸引領了一陣 ArchLinux 風潮,我也在閱讀後從 Ubuntu 叛逃了。2008.06 和 2007.08-2 相比,較大的區別在於 LiveCD 及以 UUID 識別硬體;不過安裝過程還是沒啥兩樣。

Desktop environment 方面,原本係嚴重期待 kdemod 4.1 的,可惜灌上後...... 終究係隆重地失望瞭。一些小小的 glitch 實在頗煩人,而且手感莫名其妙地不太順。最重要的是 KDE 貌似抗當能力差,一不小心讓 X Window freeze 掉的話,重開後很可能整個 KDE 設定就都蒸發瞭......。我在某次 X 躺掉後則是 KDM 抓無鍵盤,進都不給進。沒有能力和興致解決,盛怒之下便轉換跑道,改用 LXDE。

那麼,就開始正題吧!


正題

硬體:AthlonXP 2500+ / 512MB / GF4 Ti4200 / 固定 IP 連網
硬碟分區:/    XFS 10~15GB
/swap swap 和主記憶體同樣大
/boot ReiserFS 128MB, bootable
/home XFS 吃掉剩下的空間

開始安裝基本系統

LiveCD 開機後,以 root 登入並輸入 /arch/setup 開始安裝。core 方式是直接用光碟內的檔案安裝;但如果網路順暢的話,沒理由不選擇 FTP 方式:可直接用上最新的套件,並預先設定好網路。
固定 IP 連網的話需要 IP address、netmask、broadcast、gateway、DNS 這些資訊。( 用 core 的話,反而會在最後設定網路時少問 DNS,得自己編輯 /etc/resolv.conf 加入。)


硬碟分區與掛載

可參考上面給的主系統分區方式。( Ext3、XFS、JFS、ReiserFS ( MurderFS ) 等檔案系統有啥優劣之處,食飽撐著的話可以去股溝看看。) 其餘多的分區可掛在 /media/sda1 等掛載點。

如果從 Windows 陣營轉來,可一併在這裡掛載 FAT32 分區 ( vfat 格式 )。NTFS 磁區則別急著掛,不然 /etc/fstab 會掛掉。


安裝 base 套件

就裝預設的那些,直接下一步吧。Pacman mirror server 可以多試一些,挑個速度夠快的,不然下載會等到吐血 ( 安裝中絕大多數時間都係耗在等待下載...... )。套件下載時提示過程在 tty5,可按 Alt + F5 切過去看進度,結束後 Alt + F1 切回,開始安裝......


系統設定

作業系統安裝完成後,編輯各項系統設定。首先 /etc/rc.conf

LOCALE 的 en_US.utf8 改成 en_US.UTF-8。這個區域設定會影響 terminal 的語系,個人是覺得終端若用 zh_TW 看起來違和感極重,所以繼續用英文。
TIMEZONE="Asia/Taipei"
MODULES 那段加入 loop
HOSTNAME="localhost"
DAEMONS=(syslog-ng network netfs crond @hal @alsa)

/etc/locale.gen 部份,主要是開 zh_TW.UTF-8 UTF-8zh_TW BIG5 吧,我還開了 zh_CN 和 ja_JP,不過不曉得會有啥差別。

最後,別忘了設定 root 密碼。


安裝系統導引

將 GRUB 裝在 /dev/sda。瀏覽 /boot/grub/menu.lst 時可以把 timeout 調低一點。

基本系統完工,reboot 後以 root 登入繼續。

前置作業

# pacman -Syu
# pacman-optimize
# sync
# pacman -S dbus hal vim


新增用戶

新增一般用戶,以 amulet 為例:
# useradd -s /bin/bash -G audio,disk,log,network,storage,power,wheel,optical,dbus,hal -m amulet
# passwd amulet

建立用戶並加入一堆有的沒有的 group。有啥要另外添加的 group 可以下 # gpasswd -a amulet audio 這樣的指令。


開始堆積木

# pacman -S xorg nvidia-96xx
# xorgconfig
# nvidia-xconfig

安裝 X Window 和 nVIDIA 骨灰卡的驅動程式,並設定 X。需要有螢幕的水平同步率等資訊。

滑鼠有額外按鍵的話,參考這篇。簡單講,以上一頁 & 下一頁按鍵來說,/etc/X11/xorg.conf 的滑鼠那區大概長這樣:

    Identifier    "Mouse1"
    Driver        "mouse"
    Option        "Protocol" "ExplorerPS/2"
    Option        "Device" "/dev/input/mice"
    Option        "ZAxisMapping" "6 7"
    Option        "Buttons" "7"

並設定開機後自動執行這個腳本:
#!/bin/bash
xmodmap -e "pointer = 1 2 3 6 7 4 5"

顯卡那段,我的配置長這樣:

Section "Device"
    Identifier    "Ti4200"
    Driver        "nvidia"
    Option        "AddARGBGLXVisuals" "true"
    Option        "RenderAccel" "true"
    Option        "AllowGLXWithComposite" "true"
    Option        "AccelMethod" "exa"
    Option        "MigrationHeuristic" "greedy"
    Option        "AGPMode" "4"
    Option        "AGPFastWrite" "true"
    Option        "EnablePageFlip" "true"
    Option        "TexturedVideo" "on"
EndSection

Section "Extensions"
    Option        "Composite" "Enable"
EndSection

一些基本的系統套件......
# pacman -S alsa-utils alsa-oss acpid sudo gksu libstdc++5 ntfs-3g
# alsaconf
# alsamixer
# alsactl store

後 3 行設定 ALSA 音效驅動。Enabling sudo for Users 讓普通用戶比較方便做 root 權限的事。

ntfs-3g 則視有沒有掛載 NTFS 磁區的需求吧!輸入:
$ /bin/ls -lf /dev/disk/by-uuid
列出各個磁區的 UUID。其中 vfat 和 ntfs 格式的 UUID 長度較短。記下 UUID,編輯 /etc/fstab,依樣畫葫蘆掛上 NTFS 磁區:
UUID=XXXXXXXXXXXXXXXX /media/mountpoint ntfs-3g locale=zh_TW.UTF-8 0 0


安裝桌面環境 LXDE

# pacman -S lxde gamin numlockx
加上相依的 gtk2 等 package,共約需 115MB 的空間。
設定開機後自動以某用戶登入桌面環境,按照 Starting X as preferred user without logging in 所寫的來修改 /etc/inittab。然後編輯用戶目錄下的 ~/.xinitrc
/usr/bin/numlockx on
exec startlxde

可自動開啟 NumLock 並進入 LXDE。缺點係 X 若自動躺掉的話好似就完瞭。
進入桌面後查看耗用的記憶體,約 55 MB ( 雖然資源買來就是該被壓榨乾淨的...... )。

如果電腦有多個用戶,不希望自動登入而想使用 Desktop Manager 的話,可以安裝 slim 並加入 DAEMONS 中。


安裝輸入法

$ sudo pacman -S gcin
框架為 gcin。嘸蝦米用戶可以參考官方嘸蝦米完美安裝。設定自動執行,編輯 ~/.xprofile
export XMODIFIERS=@im=gcin
export LC_CTYPE=zh_TW.UTF-8
export QT_IM_MODULE=xim
gcin &

gcin 的 systray icon 不幸爆表的話,可以換用更小的圖示


安裝一般應用程式

到這邊,系統算是已經設定完成了。不過還得灌一堆應用程式,才足以應付日常應用。挑喜歡的安裝:
$ sudo pacman -S gvim wqy-zenhei wqy-bitmapfont ttf-inconsolata codecs xvidcore mplayer mplayer-plugin smplayer unrar zip unzip p7zip cabextract dvd+rw-tools brasero jre wine firefox flashplugin opera filezilla amsn pidgin emesene file-roller comix audacious audacious-plugins exaile quodlibet scrot gcalctool xchm

進入桌面後發現,顯示的中文字看起來相當令人髮指。沒關係,安裝文泉驛正黑體便是;再到 LXDE 調校 Appearance 的地方將 Font 改為 WenQuanYi Zen Hei。經過這些日子的發展,個人覺得文泉驛看起來已經沒有違和感了,繁簡字體都相當和諧。另一個個人偏好的是 Inconsolata,為等寬字體。基本上我的電腦就用這兩種字體了,感覺不輸其它正黑 / 雅黑之類。

MSN IM 方面,屁精升上 2.5.0 時突飛猛進,形成三巨頭 Pidgin / aMSN / emesene 鼎立的情勢。這 3 款的實作都算相當完整,status msg / offline msg / send file 應有盡有,自己挑個順手的用吧!GUI 壓縮工具,感覺最完善的只有 Gnome 的 file-roller。KDE 的 arK 用起來不是一根髮指就能帶過的......

影音方面,smplayer 搞影片算是毫無懸念瞭。至於音樂播放器的選擇相當多,像是 Audacious、amaroK、Exaile、Quod Libet、Sonata...... 族繁不及備載,自己挑吧。cue sheet,基本絕望了,直接乖乖 wine + foobar2000。

另一個方便的工具,yaourt,整合 pacman 並且可以直接從 AUR 下載腳本編譯安裝未進源的軟體。編輯 /etc/pacman.conf,加入:
[archlinuxfr]
Server = http://repo.archlinux.fr/i686

然後
$ sudo pacman -Syu
$ sudo pacman -S yaourt
$ yaourt -S pcmanx-gtk2 acroread acroread8-fonts madedit gtk-kde4-oxygen-theme q7z

安裝 PCManX、Adobe Reader、MadEdit、Oxygen theme 及 p7zip GUI frontend。

yaourt 的 frontend - tupac,新的 PKGBUILD 在這裡

比較龐大的軟體:
$ sudo pacman -S gimp openoffice-base openoffice-zh_tw
如果只需要瀏覽 doc / ppt / xls 的話,M$ 官方有 Word Viewer / Powerpoint Viewer / Excel Viewer 等工具,可以 wine 來用。

編輯 /etc/xdg/lxsession/LXDE/autostart,加入一行 @xset -b,關閉吵耳至極影響情緒十惡不赦早該做古的 speaker 機乖嗶嗶聲。如果有啥想開機後自動運行的腳本路徑 ( 例如滑鼠那個 ) 或程式,也可以加進來。另一個方法是將 .desktop 檔放到 ~/.config/autostart

最後,清空 /var/cache/pacman/pkg 下的 pacman 暫存,釋出硬碟空間:
$ sudo pacman -Scc


收工!


這樣,一個很好很強大的桌面系統就完成啦!真係可喜可賀,可口可樂!


補註

幾個連結:
解决Linux下Mplayer播放Flv不同步问题
Fonts with LCD filter enabled
Tweak Your Font Rendering for Better Appearance
Pm-utils ( 休眠 )
VirtualBox
建立一个“关闭屏幕”的启动器
winetricks
Firefox 3 擴充套件
手把手教你把Vim改装成一个IDE编程环境(图文)


KDEMOD

如果比較偏好大而全的 desktop environment,我還是推薦 kdemod,可以按照官網給的步驟安裝,並在 DAEMONS 加入 kdm。KDE3 是發展較久且相當完善、流暢的版本;KDE4 則是觀念革新的明日之星。雖然現在用起來還有些許瑕疵,不過等到更加進步之後我還是會回去試它吧。順帶一提,4 的體積相當不容小覷:kdemod4 裝起來突破 750MB,而 kdemod4-complete 更超越了 1.3GB......。至於這樣算不算太超過,見仁見智吧!

LXDE 的話,乍看之下其美工係相當令人髮指的;當初也為止裹足不前 ( 何況 kdemod3 不當掉的話確實相當好用 )。後來想想,其實目光焦點在絕大多數時間裡,都係停留在網頁或應用程式的內容,美工其實就沒那麼重要了,習慣便是。而且 LXDE 是可以套用 gtk2 佈景的,用心一下也是可以拉抬到個水平;和 Compiz Fusion 也搭配得相當好。畢竟走向不同,就其輕巧程度來說,是相當不錯的桌面環境。