顯示具有 軟體 標籤的文章。 顯示所有文章
顯示具有 軟體 標籤的文章。 顯示所有文章

2008/07/11

Eee PC 901安裝Ubuntu-eee筆記

前陣子在華碩員購網上買了 Eee PC 901,只有 Windows 版,沒有 Linux 版。
但是又不想裝 Xandros 的作業系統,於是改裝專為 Eee PC 打造的 Ubuntu-eee。
安裝完 Ubuntu-eee 後,必須再安裝一些 driver,和修改很多設定,才能正常運作。
安裝網路卡驅動程式:


  1. 這裡下載驅動程式

  2. 解開 LinuxDrivers.zip。

  3. cd L1e_Lan,解開 l1e-l2e-linux-v1.0.0.4.rar,cd l1e-l2e-linux-v1.0.0.4/src。

  4. sudo KBUILD_NOPEDANTIC=1 make

  5. sudo KBUILD_NOPEDANTIC=1 make install

  6. 將產生的 atl1e.ko 複製到 /lib/modules/2.6.24-16-generic/kernel/drivers/net/atl1e 目錄下。

  7. 到剛才的目錄,sudo insmod atl1e.ko 即可。


安裝 WiFi 驅動程式:

  1. [8/22 刪除]下載驅動程式

  2. [8/22 新增]下載驅動程式

  3. [8/22 刪除]解開 2008_0325_RT2860_Linux_STA_v1.6.1.0.tar.bz2,cd 2008_0325_RT2860_Linux_STA_v1.6.1.0。

  4. [8/22 新增]解開 DPO_RT28xx_60_LinuxSTA_V1.7.0.0_2008_07_15.tgz,cd DPR_RT28xx_60_LinuxSTA_V1.7.0.0。

  5. sudo make

  6. sudo make install

  7. 重新開機即可。

  8. 若要掃瞄附近的基地台,用 iwlist scan 指令。若已在 network manager 設定好 ESSID,可用 sudo dhclient ra0 取得 IP。

  9. 另外可安裝 wifi-radar,編輯 /etc/wifi-radar.conf,將 interface 改成 ra0。

  10. [8/22 新增]或安裝 Wicd,比較好用。


解決隨身碟無法使用的問題:
將 /etc/fstab 的 /dev/sdc1 那一行註解掉。
設定 ACPI:

  1. sudo apt-get install module-assistant eeepc-acpi-source

  2. sudo m-a a-i eeepc-acpi

  3. 在 /etc/modules 加一行 eeepc-acpi


設定熱鍵:

  1. 在 /etc/acpi 新增 eeepc-hotkeys.sh 檔案,內容如下:

    #!/bin/sh
    code=$3
    case $code in
    # Fn+F5 -- toggle vga output
    0000003[012])
    /etc/acpi/eeepc-vga-toggle.sh
    ;;
    # Fn+F7 -- mute/unmute speakers
    00000013)
    acpi_fakekey 113
    ;;
    # Fn+F8 -- decrease volume
    00000014)
    acpi_fakekey 114
    ;;
    # Fn+F9 -- increase volume
    00000015)
    acpi_fakekey 115
    ;;
    esac


  2. sudo chmod +x eeepc-hotkeys.sh

  3. [8/22 新增]若要用到上面四個 hard key,用 0000001a~0000001d。

  4. 在 /etc/acpi 新增 eeepc-vga-toggle.sh 檔案,內容如下:

    #!/bin/bash

    getXuser() {
    user=`finger| grep -m1 ":$displaynum " | awk '{print $1}'`
    if [ x"$user" = x"" ]; then
    user=`finger| grep -m1 ":$displaynum" | awk '{print $1}'`
    fi
    if [ x"$user" != x"" ]; then
    userhome=`getent passwd $user | cut -d: -f6`
    export XAUTHORITY=$userhome/.Xauthority
    else
    export XAUTHORITY=""
    fi
    }
    # end of getXuser from /usr/share/acpi-support/power-funcs
    #

    checkVGAStatus()
    {
    status=`xrandr -q`

    if [ $(echo $status | grep -q "VGA connected (" ; echo $?) -eq 0 ]
    then
    return 0
    else
    if [ $(echo $status | grep -q "LVDS connected (" ; echo $?) -eq 0 ]
    then
    return 1
    else
    if [ $(echo $status | grep -q "VGA connected" ; echo $?) -eq 0 ]
    then
    return 2
    fi
    fi
    fi
    }

    for x in /tmp/.X11-unix/*; do
    displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
    getXuser;
    if [ x"$XAUTHORITY" != x"" ]; then
    export DISPLAY=":$displaynum"
    checkVGAStatus;

    case $? in
    0 ) xrandr --output VGA --mode 1024x768;; # VGA on
    1 ) xrandr --output LVDS --mode 1024x600; xrandr --output VGA --off;; # LCD on, VGA off
    2 ) xrandr --output LVDS --off;; # LCD off
    esac
    fi
    done


  5. sudo chmod +x eeepc-vga-toggle.sh

  6. 取消 Fn+F1 功能

    1. 到 System->Preferences->Power Management->General。

    2. 將 When the suspend button is pressed 設成 Do nothing。




將 tmp 目錄改成 tmpfs:

  1. 在 /etc/fstab 加一行
    tmpfs /tmp tmpfs size=64M 0 0

  2. 在 Firefox 輸入 about:config。

  3. 新增字串名稱為 browser.cache.disk.parent_directory,值為 /tmp。


解決 Netbook Remix 速度很慢的問題:
這個比較麻煩,花了很多時間在網路上卻找不到完整的方法,最後總算成功了。

  1. 下載新的Intel driver

  2. 解開後,cd xf86-video-intel-2.3.2。

  3. ./configure --prefix=/usr。如果有缺啥 package,另外裝上去。

  4. make

  5. sudo make install

  6. 這時用 glxinfo 看,會發現 DRI 被 disable 了,必須再編譯 DRM kernel module。

  7. 下載 DRM:git-clone git://anongit.freedesktop.org/git/mesa/drm。

  8. cd drm/linux-core

  9. make

  10. sudo cp *.ko /lib/modules/VERSION/kernel/driver/char/drm
    其中 VERSION 代表 kernel 版本。

  11. 編輯 /etc/X11/xorg.conf

    • 把 Device section 的 Driver 改成 "intel"。

    • 加上

      Section "Module"
      Load "glx"
      Load "dri"
      Load "drm"
      Load "dbe"
      EndSection
      Section "DRI"
      Mode 0666
      EndSection




解決插上電源時會執行evolution的問題:
原因請參考這裡
把 /etc/acpi/mailbtn.sh 刪掉,或把 /etc/acpi/events/asus-mail 的內容註解掉即可。
解決麥克風不能錄音的問題:
工作中......

[8/22 新增]Array.org 收集了很多 Eee PC 的 package 跟 hacking,可以去瞧瞧。

2007/04/01

比加搜beta上線

做了一個比加搜網站,可以用來比較東西。
請大家多捧捧場,也請手下留情不要攻擊或入侵。
因為沒啥時間寫,所以還缺一些功能,但是主要功能已經可用了。
所以先掛個beta上線,以後有時間再補上。

2006/12/13

Constructor 裡呼叫 virtual function

猜猜看下面這段程式會輸出啥?


#include <stdio.h>

class A
{
public:
A()
{
f();
}

virtual void f(void)
{
printf("A\n");
}
};

class B : public A
{
public:
B() : A()
{
}

void f(void)
{
printf("B\n");
}
};

int main(int argc, char *argv[])
{
B b;
return 0;
}




答案是 A。
我的結論是,constructor 裡呼叫的函式會是自己或 parent 的,即使它被 overwrite,而且被呼叫的函式不能宣告成 pure virtual。

2006/09/04

費爾個人防火牆與Apache HTTP server

費爾個人防火牆是我覺得免費的防火牆當中最好用的,介面簡單、設定容易。
Apache HTTP server 不用我介紹,大家都知道。
偏偏當這兩者遇在一起時,Apache 就執行不起來了,即使關閉防火牆也是一樣,唯一的辦法就是改用別的。
人家說 Jetico、Outpost 很不錯,可是我覺得很難用。
試來試去,最後只好用 ZoneAlarm 免費版。
優點也是介面簡單、設定容易,缺點就是看不出來它擋掉了啥。

2006/05/19

char [] 與 char * 的不同


char str[] = "string";
char *p = "string";
str[0] = 'S';
printf("%s %d\n", str, sizeof(str));
p[0] = 'H';
printf(p);


猜猜上面的程式執行結果為何?

答案是印出String 7,接著就crash了。

2005/10/28

有人詢問 WinNFSd

昨天突然收到一封外國人的 e-mail,不知道是哪一國人。
他說他對 NFS 有興趣,所以拿我的 WinNFSd 程式碼來研究。
但他在執行時遇到了一些問題,所以問我如何解決。
真是令我感動啊~~,沒想到竟然有人對這個 project 有興趣。
我當然馬上回了信,盡可能去解決他的問題。

2005/09/23

既生WinNFSd,何生Samba

之前為了工作需要而寫了 WinNFSd,讓 Linux 可以 mount Windows 上的目錄。
最近才發現原來 Samba 就有這樣的功能了,枉費我當初花那麼多時間在開發 WinNFSd,覺得自己很豬頭。
不過開發過程中還是學到不少東西啦,例如在 Windows 上用 C++ 開發網路程式、如何在 SourceForge 上開發一個專案、NFSRPC
在 Linux 上安裝 Samba 時必須安裝 smbfs 才會有 smbmount 指令。

2005/09/13

WinNFSd v2.0 在 SourceForge 發表了

今天將 WinNFSd 2.0 版上傳到 SourceForge 了。
這個版本增加了對 NFS 3 的支援,大幅修改程式架構,也改進了效能和穩定度。
但很奇怪的是,當我在 Linux 上用 g++ 編譯或連結 Windows 上的檔案時,讀寫的請求常常會 timeout,而且要過 60 秒才會重送請求,所以每次用 g++ 或 make 就要等好久才會完成。
但是這個 bug 我怎麼樣也修不了,所以拖了很久才將 2.0 版上傳,看有沒有善心人士可以幫我改進一下。

2005/07/28

有趣的程式問題之解答

上次那題有趣的程式問題,已經從 Shardad 那裡得到解答了。
#define DbgShowf(format, ...) printf("%s(%d): "format, __FUNCTION__, __LINE__, ##__VA_ARGS__)
這只是一個很接近的答案,還有一些問題沒有解決。
例如該死的 M$ VC 不支援這樣的 variable length arguments 寫法,還有怎麼印出 class 名字(如果用 __PRETTY_FUNCTION__ 會印出太多東西)。
原來 C/C++ 已經定義好一些 macro,以前完全不知道,現在又讓我學到一些密技了。
另外還有 __FILE__ 代表檔名,__DATE____TIME__ 代表 compile 的日期時間等等。

2005/07/27

有趣的程式問題

在別人的 Blog 裡看到一則有趣的程式問題,沒想到 C/C++ 還可以這樣玩。
我怎麼想也想不出解答,竟然可以印出函式名稱和行號。
這世界上的高手還真是不少。

2005/07/14

指向成員函式的指標

宣告方法:
typedef void (C::*PFUNC)(void);
PFUNC pf = &C::f;


呼叫方法:
(this->*pf)();

2005/07/08

Component 設計之道

我認為 component 應該要
1. 精簡獨立:不該有的功能就不要加進來,免得只需要其中一部份功能的人還得把不需要的 library 都放進來,做出來的程式會太肥。就好像生物從單細胞生物演化成分功很細的細胞一樣,才容易把不需要的功能拿掉,而不會牽一髮動全身。
2. 有彈性:component 是要給很多程式共享使用的,不能只為某一支程式量身打造。所以很多參數設定要從上面傳下來,不應該寫死在 component 裡頭。甚至可以在不太增加程式複雜度的情況下,設計成多用途。你不會希望一個 component 只會算 1+2,而不會算 2+1 吧。
3. 穩定易用:讓人家隨便呼叫、亂傳參數也不至於 crash。要在 component 裡加入預防的功能,和自動化的功能。例如一個一定要先呼叫它的 open,再呼叫 close 的 component,跟一個會在 open 裡自動呼叫 close 的 component,我會比較喜歡後者。
4. 跨平台:盡量用標準的函式,少用 OS dependent 的 API。因為你不知道你的 component 何時會被拿到其他平台上使用,到時你還得去做移植的工作,何苦呢?

2005/05/23

IE 看不到我的 blog

我一直都用 Firefox 看網頁,最近才發現原來 IE 看不到我的 blog。
但是我把網頁原始碼存成檔案,再用 IE 看,卻又看得到畫面,讓我覺得非常神奇。
後來同事發現原來是因為 IE 誤判 charset 為 big5。
但是 head 標籤裡有註明 charset 啊,難道 IE 判斷的方法不對?
<title>綿羊看世界</title>
<meta equiv="Content-Type" content="text/html; charset=UTF-8" />


於是我把上面兩行對調一下,該死的 IE 終於能正常顯示我的 blog 了。

2005/05/09

WinNFSd v1.0 在 SourceForge 發表了

之前為了工作需要而寫了一個 NFS server for Windows,WinNFSd v1.0 今天在 SourceForge 上發表了。
這是我第一個公開發表的 open source 的計畫,以 GPL 發表,雖然不是一個多了不起的計畫,但總算跨出了第一步。
之前我有提到我電腦裡的軟體幾乎都是自由軟體或免費軟體,今天我總算能貢獻一下了。
類似的自由軟體我只有找到 SOSSNT,但它似乎不允許 client 做寫入的動作,而且很久沒更新了。
所以我才動手寫了一個,不但允許 client 寫入,也有簡單的文字介面。

2005/05/04

Compare signed and unsigned integer expression

在 compile C 程式碼的時候可能會出現這個 warning,代表什麼意思呢?
讓我們來看一個例子:

unsigned int big = 0x90909090;
int small = -1;
printf("big %c small", big > small? '>' : '<');

你猜會輸出什麼?答案是 big < small。
這是因為 small 轉成 unsigned int 之後變成 0xFFFFFFFF,而大於 0x90909090。

那如果把 big 換成 unsigned shortsmall 換成 short,結果又是如何?

unsigned short big = 0x9090;
short small = -1;

答案是 big > small。
這是因為 bigsmall 都被轉成 int 了,所以 big 仍然大於 small

2005/05/02

如何寫一個能編輯大檔案的軟體

除非沒有合用的,不然我一定盡量使用 freeware 或自由軟體。
由於最近想找合用的 hex editor,找到了 hexploreXVI32,但是它們在編輯大檔案時都吃掉很多記憶體。
後來我找到了 HexEdit,特別的是,作者還在網頁分享了如何寫一個能編輯大檔案的軟體,這樣就不用把整個檔案載入記憶體囉。
可惜它還不是百分之百合我用,也不是 open source 的,所以我也沒辦法改。

ftell 超出檔案大小

以前總以為 C 函式裡頭的 ftell 回傳值不會超出檔案大小的範圍。
但是在一次意外中,竟讓我發現我錯了。
寫個小程式研究一下,原來是因為 fseek 導致的。

f = fopen("small", "rb"); //開啟一個小檔案
fseek(f, 100000, SEEK_SET); //故意fseek到超出檔案大小
printf("%dn", ftell(f)); //結果竟然顯示100000

雖然 fseek 會回傳成功或失敗,但是失敗時卻不會做任何處理,和我想像中的不一樣啊。