分類彙整: 電腦資訊

File handle is always global in Perl

Perl 的 file handle 及 directory handle 一定是 global 的,無法宣告成 local

一般使用上沒有大問題,但是當用在遞迴式呼叫時,就會產生錯誤了,下面是一個把目錄下包含子目錄中所有檔案列出來的 perl 程式,採用遞迴式呼叫。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl
die "Usage: $0 [directory]\n" unless @ARGV == 1;
die "ERROR: $ARGV[0] is not a directory\n" unless -d $ARGV[0];
&show_dir($ARGV[0]);
exit;
sub show_dir
{
        my( $dir ) = @_;
        my( $fname );
        opendir( DIR, $dir );
        while( $fname = readdir(DIR) )
        {
                next if $fname eq '.' || $fname eq '..';
                if( -d "$dir/$fname" ) {
                        &show_dir("$dir/$fname");
                }
                else {
                        print "$dir/$fname\n";
                }
        }
        closedir(DIR);
}

由於 DIR 這個 directory-handle 會被當成 global 變數,因此這段程式會出錯,無法列出所有檔案。

解決方法是把 DIR 這一個 directory-handle 直接用 $dir 來代替,這樣在遞迴的時候就不會因為重複使用而造成錯誤了,下面是改過的程式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl
die "Usage: $0 [directory]\n" unless @ARGV == 1;
die "ERROR: $ARGV[0] is not a directory\n" unless -d $ARGV[0];
&show_dir($ARGV[0]);
exit;
sub show_dir
{
        my( $dir ) = @_;
        my( $fname );
        opendir( $dir, $dir );
        while( $fname = readdir($dir) )
        {
                next if $fname eq '.' || $fname eq '..';
                if( -d "$dir/$fname" ) {
                        &show_dir("$dir/$fname");
                }
                else {
                        print "$dir/$fname\n";
                }
        }
        closedir($dir);
}

MSN Messenger 7.5 強迫升級

一早起來發現 MSN Messenger 7.5 無法登入了…

不升級就無法登入了!

我還是比較喜歡用 7.5 的介面,尤其 Messenger Plus!自訂暱稱的功能只支援 7.5,而我又不想用 8.0 以後內建但殘廢的自訂暱稱功能… 而且我的聯絡人已經上百個了,懶得一個一個還要作轉換,所以能撐多久就撐多久…

要讓 7.5 免除升級困擾,請先把 MSN Messenger 關閉,然後開啟我的電腦,打開 C:\Program Files\MSN Messenger\ 資料夾,在 msnmsgr.exe上面按滑鼠右鍵選內容:

選擇「相容性」,然後把「以相容性模式執行這個程式」打勾,再從選單中選擇「Windows 2000」後按「確定」即可

然後執行 MSN Messenger 後,就可以正常登入了

這方法不曉得可以用多久就是了…

目前唯一的缺點是,系統列上面的圖示變得有點難看,只能裝作看不見了…

[破解] 打開 La Fonera 的 SSH 封印

去年底買了兩台 La Fonera,幸運的是兩台都是用 165元就買到了,但不幸的是當了白老鼠,這兩台 La Fonera 都跟我的 ADSL 不合,每隔一段時間 WAN 就會莫名其妙斷線,找不出原因,經過半年多也沒有任何修正

所以只好自力救濟了

首先是破解 Fonera 打開 SSH 的封印,詳細的說明可參考這裡,簡單的說就是把 Fonera 的DNS 設為 88.198.165.155 就好了,重開機後就自動會開啟 SSH 了

用 SSH Client 連線到 192.168.10.1,用 root 登入,密碼就是 Web 介面的密碼

但總不能把 DNS 一直設為這個吧,既然已經打開 SSH,就想辦法讓這件事變成理所當然吧

首先先讓 SSH Daemon 在開機時自動跑起來,執行:

mv /etc/init.d/dropbear /etc/init.d/S50dropbear

然後編輯 /etc/firewall.user 把 firewall 打開,把下面兩行前面井字號刪除

iptables -t nat -A prerouting_rule -i $WAN -p tcp –dport 22 -j ACCEPT
iptables -A input_rule -i $WAN -p tcp –dport 22 -j ACCEPT

最後一個步驟就是修改/bin/thinclient,讓 La Fonera 不會再自動更新,把最後一行加上井字號即可:

#. /tmp/.thinclient.sh

接下來就可以把 DNS 改回你喜歡的,重開機也不會有影響了

破解 La Fonera 之後,其實我的目的只是希望能更容易 reset La Fonera 的 WAN port 而已,因為每次我的網路不能動了,我只要用 SSH 連進去 La Fonera,執行下列命令

ifconfig eth0 up
ifconfig eth0 down
ifup wan

一瞬間我的網路就恢復正常了 orz

最後,如果忘記 La Fonera 的密碼或者想要讓 La Fonera 恢復原狀,就拿根原子筆,戳 La Fonera 底部的 reset 孔 30 秒,然後重新開機即可

Reset 之後無線的 SSID 會變回 My Place,加密方式會變回 WPA,密碼則變成印在底部的序號(SN)。Web 介面的帳號及密碼都會回復成 admin

2007/10/25 updated: This method works for 0.7.2 r2 too 🙂

OpenBSD 4.1 – Unofficial ISO Image

OpenBSD 4.1 released!

關於 OpenBSD 4.1 的相關資訊請參考: http://www.openbsd.org/41.html

照例製作了兩份安裝光碟 (包含 i386 與 amd64 兩種平台),想用的人可以到以下網址抓取

OpenBSD 4.1 Unofficial Images: http://ftp.giga.net.tw/#openbsd

這份光碟是從 OpenBSD 4.1-RELEASE 製作的… 也有用 VMware 裝過沒問題了

同樣的還是要聲明一點,以上可以下載的安裝光碟都是 OpenBSD 官方的安裝光碟,官方的安裝光碟是要賣錢的,如果你想幫助 OpenBSD 的開發團隊,請考慮購買一份官方的安裝光碟,訂購的資訊請詳閱:

http://www.openbsd.org/orders.html

FON – $99 的無「限」網路基地台開賣囉!

如果你沒聽過 FON,到中文 Wikipedia 上面看看吧:http://zh.wikipedia.org/wiki/FON

FON Taiwan 正在發送以優惠價台幣 $99 外加 $165 物流費,合計 $264 即可獲得的無「限」網路基地台,只有十天喔,以後大概不會有這麼優惠的價格了,12月18日前,有興趣的可以到這個網站購買:

http://fonshop.seed.net.tw/

要購買前請弄清楚 FON 的遊戲規則,網站上有說明以優惠價購買有下列責任:

我鄭重宣示將以所獲得的優惠價購買一台 FON 無限網路基地台「La Fonera」,如果使用這個好康額度後沒有在收到設備後的兩週內進行註冊上線,
我將把設備原封不動退回給 FON Taiwan,或者改以原價NTD 1200元購買,讓優惠的折扣額度能轉給真正對社群有幫助的人

簡單的說,擁有 FON 的基地台你有兩種選擇:

  • 你可以把無線網路免費分享給別人,這樣你也可以使用別人免費分享出來的無線網路。(Linus)
  • 你可以收費,但相對而言你到別人的地盤使用也要付費。(Bill)

如果你沒有 FON 的基地台,你也可以使用,但是需要付費,每天費用約為台幣80元

總之,要使用 FON 網路,你會有三種身份(摘錄自 Wikipedia):

  • Linus
    如果你願意免費分享你的頻寬,讓其他 fonero 的使用者也能使用,則為「Linus」。
    這麼一來,在別的 fonero 訊號範圍內你也可以免費使用無線網路。
  • Bill
    又或者你可以選擇「Bill」身分,一樣分享自己的頻寬,但可從 FON 那裡收取單日使用費的一半。
    不過這麼一來,就不能免費使用其他 fonero 的網路,而須像「Alien」一樣付費使用。
  • Alien (也就是沒有 FON 基地台的人)
    不是 fonero 的使用者稱為 Alien,他們需要付費使用 FON 網路。
    以此方式,沒有路由器的人依然可以透過你的路由器使用無線網路,而你是否能有收益則端視你選用的身分。

拿到基地台後,自己選擇看看要當 Linus 或者 Bill Gates 吧 🙂

另外一個訊息,如果您在 2006/11/30 前曾經在 http://moztw.org/ 上面的討論區註冊過,請參考 這篇訊息,就可以獲得優惠碼以免除 99 元,也就是只要 165 元就可以獲得一台無線網路基地台

OpenBSD 4.0 – Unofficial ISO Image

OpenBSD 4.0 released!

關於 OpenBSD 4.0 的相關資訊請參考: http://www.openbsd.org/40.html

昨天下午把檔案 mirror 回來後(ftp.giga.net.tw ~當然 packages 沒有全抓,硬碟空間不夠^^||),就照例製作了兩份安裝光碟 (包含 i386 與 amd64 兩種平台),想用的人可以到以下網址抓取

OpenBSD 4.0 Unofficial Images: http://ftp.giga.net.tw/#openbsd

這份光碟是從 OpenBSD 4.0-RELEASE 製作的…
昨天還嘗試用 VMware 裝過沒問題,或許應該把裝好的 VMware Image 也丟上來,可能會造福更多人…

同樣的還是要聲明一點,以上可以下載的安裝光碟都是 OpenBSD 官方的安裝光碟,官方的安裝光碟是要賣錢的,如果你想幫助 OpenBSD 的開發團隊,請考慮購買一份官方的安裝光碟,訂購的資訊請詳閱:

http://www.openbsd.org/orders.html

其實 OpenBSD 4.0 早在九月底十月初就 Ready 了,mirror 的時候就可以發現很多檔案的日期都是一個月前的,隔一個月才把 binary 放出來大概是希望留點時間可以製作官方光碟吧… 有能力的人(或者有辦法決定公司採購預算的人^^)可以考慮贊助個幾張光碟吧