顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。


文章 - 被騎上班的老

頁: 1 2 [3] 4 5 ... 12
61
很痛,對吧. 四處碰壁、找不到答案。逛遍了書店,查遍了 Google, Yahoo 還是沒辦法解決你的疑問。別灰心,我也是一樣。更慘的是,我唸書的時候還是網路剛剛起飛的 1994 年。我畢業後一年中華電信才開放個人申請撥接上網,或許現在已經沒有人知道什麼叫做撥接上網了。

寫這篇文章主要是給初學者一個概念,有了概念之後才能知道力氣要出在什麼地方,或者說有了目標之後才不會往空氣上揮空拳,最後落得精疲力盡、意興闌珊然後絕口不再提 C。

1. 什麼要在 Linux 或 UNIX 下寫程式?

這個網路上很多討論我也不在這裡多做解釋。我只是提一點我自己的理由;那就是程式的壽命很長,十年前的程式拿出來在新機器上重新編譯後,幾乎不需修改就可以用了。像 ls 這個指令已經 30 幾歲,從1970 UNIX 誕生時這個指令就存在了,到今天還可以用。

2. C 的範疇

UNIX 就是用 C 寫的,所以 UNIX 系統上的範圍幾乎就是 C 的範圍。我簡單分成下面幾塊: 基本程式、系統程式 和 硬體程式(例如 核心、驅動程式)這三個大類。

3. 學習路程 ROADMAP 第一步

所謂 基本程式 指的是使用到標準函式庫的程式。例如印出 99 乘法表,最常見就是列印出 Hello, C 這個初學者第一個程式。

所以初學者第一步就是找一本初學者的書然後照書打程式、編譯、除錯。

這個階段主要目的有幾個;熟悉 關鍵字、程式架構、語法、輸/出入以及編譯器的使用。當然最重要就是除錯,除錯除了需要經驗的累積之外,錯誤訊息 100% 是英文。所以英文能力不好的,會遇到很多挫折。不過以我的經驗,不要怕那些英文訊息,咬著牙,翻翻字典了解它的意思之後,編譯器會說的就是那幾句,不會比鸚鵡說的還多

4. 學習路程 ROADMAP 第二步

當你可以編譯程式成功之後,你需要熟悉有哪些工具可以用,也就是需要一本 標準 C 函式庫。想要什麼功能的時候,先翻翻看函式庫有沒有。像我上廁所的時候就是我看函式庫的時候。所以有人說上網看就好了,但是如果你有心要學程式不妨買一本放在身邊。當然,要切忌一開始就買這本書,這是第二步才需要買的書。

5. 學習路程 ROADMAP 第三步

用大學教育來看,前面所說的就像是 共同科。不管你是哪個系所,都要修的。從現在開始就是 專業科目,也就是看你的興趣或者目標在什麼地方。但是你知道的,專業科目就是原文書比較多,所以基本上英文不好的只能參考中文的書籍。要是你有興趣的那個科目沒有中文書的話,就是請你加強你的英文能力。以我的經驗,如果對一個主題很有興趣的話,語言通常不是問題。

如果你是想寫一些 UNIX 或 LINUX 系統程式,我那時代用的是 Advanced Programing in UNIX Environment,簡稱 APUE。如果想寫網路程式,我們用的是unix network programing。這兩本書都有個特色;就是循序漸進的介紹各個函數然後搭配小程式,只要照著打就可編譯成功。我強烈建議學的人自己打範例程式,不過有時候我也偷懶,去 APUE 的網站下載原始碼以縮短時間。

這兩本是程式設計的書,至於函式庫的書我是直接跟 GNU 買的,就是 GNU C Library Application Fundamentals, GNU C Library System & Network Application.

至於硬體嘛,我個人沒有接觸過,所以也不能做什麼建議。

6. 結論

我覺得老外真的有一套,對於學習的路程非常清楚,相對的在寫書的時候定位也非常清楚。對程式設計這個領域而言會有三種書 tutorial, programming guide, reference manual。 tutorial 用來協助初學者 step by step 迅速的入門。programing guide 用來全方位指導如何撰寫程式,而 reference mannual 用來查詢所有的函數。

但是中文書都是厚厚的一本,叫人望而生畏。有沒有人要依照上面的分類推薦一些書籍?特別是 tutorial 的書,因為對初學者來說這是最重要的一本書。

末了,我不是很有時間編排,如果有人可以編排的好看一些,重新編排或轉載都很歡迎。

62
LDAP 討論區 / LDAP 帳號管理 LAM
« 於: 2006-09-11 15:46 »
值得推薦, 這是一個 php 的套件, 用來管理 LDAP 帳號, 不只維護 posix 用的帳號, 連 SAMBA 用的帳號也可以處理

不過好像沒有看到其他人貼, 所以貼來看看

http://lam.sourceforge.net/

63
KaLUG 討論版 / KaLUG 七月份聚會
« 於: 2006-07-23 21:48 »
20060729 聚會

節錄自網站,全文請看 kalug.linux.org.tw
----
介紹:這天的活動會稍微多一點,因為來自台北的jserv要來跟我們湊熱鬧... 當然為了歡迎台北的朋友,我們就來點特別的... 不過因為場地的關係要找可以喝酒,又要能topic的場地不好找所以我們topic歸topic喝酒歸喝酒

另外7/2  --- 這裡好像少個 9 --- Arne跟Andrew 辛辛苦苦從台北下來推廣台語輸入法身為台灣人,看到熱血德國人,不出點力不行的呀....:) 所以呢? 我們也會稍微介紹一下,想出力的就過來吧

不用全參加啦,有興趣的再去就好...

---

64
KaLUG 討論版 / 七月的聚會在哪呢?
« 於: 2006-07-03 22:03 »
好像還沒看到有人貼出來。

我可以講 RCS - 版本控制系統,也就是個人版的 CVS。

適用於懶得架、不會架、又要用 CVS 的人來聽

65
KaLUG 討論版 / 在高雄的人來交個朋友吧?
« 於: 2006-06-30 17:36 »
歡迎

也歡迎你參加下次的活動

66
KaLUG 討論版 / KaLUG 網站
« 於: 2006-06-27 22:22 »

67
KaLUG 討論版 / 六月聚會記錄
« 於: 2006-06-24 16:06 »
Tsung - screen 的應用

shawn - LVM Tutor

michael - 報告 SA KaLUG 開版事宜

...

恭賀 shawn 考上成大電通所, 並感謝他請的咖啡.

KaLUG 就是這個好處 有錢的出錢 有力的出力

68
KaLUG 討論版 / 有人要請喝咖啡
« 於: 2006-06-22 19:16 »
最新消息是:

因為有人考上研究所, 想要狂賀一下. 所以要請人喝咖啡.

不過這樣不知道會不會害事主破產?

69
KaLUG 討論版 / KaLUG 六月份聚會
« 於: 2006-06-22 19:09 »
歡迎參加我們的聚會,Topic題目不限 好玩就好.

20060624 聚會地點位於 MOCA MONA Cafe' (摩卡摩娜咖啡)

時間: 20060624 pm 2:00

詳情請洽
http://kalug.linux.org.tw/pmwiki/pmwiki.php

70
KaLUG 討論版 / 開版宣言
« 於: 2006-06-22 19:05 »
謝謝酷學園慷慨借版,  :D 提供 KaLUG 一個可以溝通的平台

本版的主題為提供 Linux 使用者組織一個連誼, 聯絡, 溝通的留言板, 特別是高雄Linux使用者協會.

本版留言只限於發布 KaLUG 或其他使用者協會的活動或人員交流. 至於技術問題請移駕學園或其他合適的版面.

71
上面是我啦,不知道為什麼原本 login 了,等到貼上卻沒有 id

72
data.txt

代碼: [選擇]
\xB6\xD7\xB3\xF8        \xB7\x4A\xB3\xF8
\xB6\xD7\xBD\x73        \xB7\x4A\xBD\x73
\xB6\xD7\xA5\x5A        \xB7\x4A\xA5\x5A
\xB6\xD7\xB6\xB0        \xB7\x4A\xB6\xB0
\xB4\xE5\xBF\xB3        \xB9\x43\xBF\xB3
\xB4\xE5\xBE\xC7        \xB9\x43\xBE\xC7
\xAA\xED\xB5\xFD        \xAA\xED\xC3\xD2
\xBF\xEB\xB5\xFD        \xBF\xEB\xC3\xD2
\xC5\x47\xB5\xFD        \xC5\x47\xC3\xD2

以 tab 分離,前面的是 key 也就是需要轉換的 pattern 後面是 value 也就是需要轉換成的文字。

a.pl

將文字檔轉換成一個 dbfile (data.db) 也就是說將程式與資料分開。你可以將資料存在另外一個文字檔,一方面增加資料的時候不必去修改程式另一方面可以縮小程式。

轉換文字檔成資料庫(data.db)只需要作一次,如果 data.txt 沒有異動不需要重做這個轉換。此外這個資料庫是一個排序過的資料庫,搜尋時間應該會縮短。

代碼: [選擇]
#!/usr/bin/perl

#use warnings;
#use strict;
use DB_File;

$DB_BTREE->{'compare'} = sub {
        my ($key1, $key2) = @_;
        "\L$key1" cmp "\L$key2";
};

# Declaration
our (%hash, $key, $value);
my $DB_FILE = "data.db";
my $DATAFILE = "data.txt";
my %hash;
my $line;

# delete $DB_FILE
unlink $DB_FILE ;
#
open(DATA, $DATAFILE);
tie(%hash, "DB_File", $DB_FILE, O_RDWR|O_CREAT, 0666, $DB_BTREE)
  or die "Cannot open DB_FILE $DB_FILE : $!\n";
print "Before Sort \n\n";
while($line = <DATA>)
{
        chomp($line);
        ($key, $value) = split(/\t/, $line);
        print $key, " -> ", $value, "\n";
        $hash{$key} = $value;
}



print "\nAfter Sort\n\n";
while(my($key, $value) = each %hash)
{
        print  $key, " -> ", $value, "\n";
}

# close file
untie % hash;
close DATA;



從 dbfile 比對 c.pl

代碼: [選擇]
#!/usr/bin/perl

use warnings;
use strict;
use DB_File;
our (%hash, $key, $value);

my $DB_FILE = "data.db";

tie(%hash, "DB_File", $DB_FILE, O_RDWR, 0666, $DB_BTREE)
        or die "Cannot open file '$DB_FILE'  $!\n";

$key = $ARGV[0];
print $key,"\n";

$value = $hash{$key};

print $value, "\n";
untie %hash;



例如  ./c.pl "\xB6\xD7\xBD\x73" 會回應

代碼: [選擇]
\xB6\xD7\xBD\x73
\xB7\x4A\xBD\x73



這是一個資料庫查詢的範例,使用時要比較快的話要把螢幕輸出,如 print 之類的指令關掉。

所以你的程式在比對的時候可以改成去查詢資料庫,如果有傳回值就可以執行轉換這個傳回值。要是沒有就可以 return,這樣的話就可以只比對一次就可以。

詳情可以找 perl DB_File 的文章

73
BSD 討論版 / 請問磁碟配額為何為不準了?
« 於: 2006-05-27 22:45 »
有沒有檢查隱藏檔,就是 ls -a 。
或者用 du -sh 來檢查使用量

74
恭喜你,也感謝你的回報。其實我們有時候只是理論者,不是實作者。理論需要實作者的驗證,讓我們覺得讀的書有用。

其實這也是個良性循環,有人貢獻方法,有人貢獻實驗結論,然後大家都可以從中間學到經驗。這就是 study-area 的精神最佳應證。

這個討論真是經典,可否建請板主置頂成為這個板的好榜樣。

75
肉腳版 / /var/滿了怎麼辦
« 於: 2006-05-24 04:10 »
我覺得這是一個好問題,可以放在精華區

76
肉腳版 / /var/滿了怎麼辦
« 於: 2006-05-24 04:08 »
你掛目錄之前先掛別的目錄名稱,然後把原來 /var/spool 的東西移到新的目錄,這樣  /var 的空間才會出來。

最後一步就是把那個存 /var/spool 資料的目錄重新掛到 /var/spool 下

77
系統安全討論版 / 奇怪的連線!
« 於: 2006-05-24 03:12 »
看連線記錄很重要的一點就是看兩邊的 port number ,高於 1024 的 port 為高 port 通常是 client . server 或者說服務的 port 會在 0-1023。常見的 port 用途可以看 /etc/services 這個檔。

以你的例子來看,local 的 port 一直在變那就是 client 程式在執行
remote 端的 port 是固定 7890 可是我在 /etc/services 去找也找不到 7890 的用途。所以我上了 yahoo 打了 port 7890 我發現 這個 port 有用在網路電話上,
其他的可能性就看你自己了。

原則上,高 port 對 高 port 的連線應該禁止,那通常不是好事 -- 對網管而言啦

78
不管大貓小貓,會抓老鼠的就是好貓。

不過剛看了 hosts.allow 的 man page, 開頭就是 simple access control。

我只記得什麼事都要 kiss, keep it simple ,後面的 s 我忘記了。所以我不會去動 iptables.

純屬個人意見啦

79
演算法的確有很大的關係。

我的建議是將 pattern  存成資料庫然後排序,資料庫一 load 到記憶體就不必重新讀入,另外有排序的搜尋絕對要比從頭到尾的比對快。
目前你的程式一行一次比對,就要重新將變數 load 到記憶體,比對然後執行, I/O 的時間就拖長

其次,只需要執行需要的轉換。意思是說其實你轉換一次的時候,如果比對不成功。 7000 行全部白跑了,比對成功的話 也有 6999 行白跑了。

所以應該先檢查是否在 pattern 比對資料庫中,否的話就 return 。是的話就執行比對的程式。

對阿,寫到這裡突然想到,學校裡面上過,資料跟程式應該分開啊! 因為資料會異動,根本不應該放在程式裡面啊。資料放在資料庫,你的程式大小就會減少, cycle time 也就跟著減少了啊。

加油加油! 你的經驗會是我們一個重大的課題。

80
sorry 上面那篇忘記 login 了

81
Linux 討論版 / 關於x64版本linux
« 於: 2006-05-02 01:45 »
根據以前作 porting 的同事告訴我,事實上更慘,雖然硬體是 64 bits, 但是軟體是 32 bits 又不可能一夕全部改寫,所以只好在 complier 上動手腳。

例如 int 的長度是 4 bytes, 32 bits。在 64 bits的系統 就是用 short int 才是 32 bits。所以如果 header file 沒有處理,把舊的程式拿去編的話,原本一個 int 需要 4bytes 就會變成 8 bytes。所以編出來所需要的記憶體就加倍了。

所謂在 compiler 動手腳就是 看到 int 它會假裝看到 short int 這樣才能編出 64 bits 的程式又不會佔太多記憶體

82
我沒想過這個問題耶,我都寫在 crontab 裡面,每天校時依次。

83
程式討論版 / 如何製作patch file???
« 於: 2006-05-02 00:49 »
1. 核心,你要 patch 的是核心。所以你只要 patch 核心就可以了。除非那些 distribution 的年代相差久遠,否則  patch 最近的核心就可以了。

2. 核心發展工具,gcc, kernel-header, kernel source, ...

3. 我想你應該是發展一個 module ,就是核心的一個選項

4. 參考同類產品的 driver 程式就可以了,說不定已經有人寫好了。

84
語言的障礙是學習第一道障礙,所以早期中文資訊缺乏的環境下,總是需要去看國外的文件。當我們學習 Linux 需要找文件時,LINUX HOWTO 總是首先浮在眼前。當然現在有了 CLDP,Linux 文件中文化計劃。但是這只是將外國人的文件翻譯過來,並沒有我們自己原生的努力與貢獻在裡面(Chinese HOWTO 除外)。

但是我們真的沒有東西嗎? 有的,我現在遇到問題第一步就是到 酷學園 來找答案,找不到的才上 Yahoo 或 Google。不過通常在 酷學園 就可以找到答案。這真是個偉大的成就,酷學園儼然是 Linux 中文使用者的知識中心。當然這全要感謝維護的人與全體學員的貢獻。

唯一我們要省思的是:怎麼樣讓這些文章或者是 HOWTO 能夠可長可久,而不是埋在討論區的資料庫裡。 netman 寫了很多好文章,鳥哥也寫了很多好文章,其他的各地豪傑也都寫了好些好文章。但是,能不能集合大家合作同一個議題寫一份好上加好的文章?

這讓我想起 CLE , Linux 中文化延伸套件 發展的故事。我們都知道 Linux 是外國人寫的,根本就不管你中文能不能用。所以要用中文的人得自己去改軟體。改是小事,問題是下一版出來的時候又要再改一次。Linux 的套件,三天一小改五天一大改這已經是家常便飯,有時候真是讓人改到心灰意冷。

所以 CLE 的策略是:將修改的內容反映給作者,請作者將中文化修改的部分納入原始碼。如此原作者釋出新版的時候,裡面就是含有中文修正的套件,這樣出新版的時候就不用再改了,這樣是不是很爽?

這樣經過幾次良性的循環之後,不但後面的人不用作修正甚至連 Linux 安裝畫面也中文化了。 CLE 的工作越作越少,甚至不用工作,大家就可以享受到中文化 Linux 的好處。

這告訴我們什麼?工作要越作越少才是成功!

為什麼工作會越來越少呢?這就表示不必作重複的工作,你做過的工作都是後人的基石。每個人踩在前人的肩膀成就自然而然就會越來越高。

要是每個人都要萬丈高樓平地起,那也不是不可以啦,只是覺得有點可惜。

所以個人以為可以以 Linux HOWTO 為榜樣,以 HOWTO 為主題,藉由強化的組織與管理,統一文件格式,統一寫作風格以及共同創作,並且對同一主題的文件有延續性和持續的更新來取代另起爐灶。將 學園裡面的知識轉化成有系統的文件寶庫,暫且稱為 Linux C_HOWTO。其實這個工作大家都在作,只是少了一個整合運作的系統和推廣的手法罷了。

不過個人見聞不廣,或許已經有這種組織存在。如果有的話,請努力的推廣你們的 idea 給大家知道,讓大家有機會參與及享受到共同創作的成果。

這樣的組織風格的確與現在台灣 Linux 社群的鬆散組織風格大異其趣,但是個人以為嚴謹的發展社群才能開啟 Linux 學習的另一道大門,進而將 Linux 中文發展帶到另一個層次。

85
在 C/C++ 比較麻煩,通常都用 perl , 用 perl 處理十分簡單。如果不想啟動 perl 這麼大的軟體,用 awk 跟 sed 也可以

若真的要用 C/C++ ,我記得做法是先 compile expression 然後在 link 起來。

86
我都是直接 download Fedora 光碟然後用光碟升級。

87
我想你需要的是 regular expression, 有人翻成 正規表示

88
程式討論版 / [Help]報表檔的讀取與處理?
« 於: 2005-12-16 22:46 »
你可以用 less 這個工具不費吹灰之力來達到你的目的,不過先決條件是要在 shell 下執行。

89
## /var/named/rekomi.rev

$TTL 86400
$ORIGIN 1.168.192.in-addr.arpa.
@ IN SOA rekomi.idv.tw. root.rekomi.idv.tw. (
2004122302
28800

我看我的跟你貼出來的大概只差這一行,不過這是 bind9 的設定,不知道分享器能不能用

90
系統安全討論版 / 新型態的騙密碼手法
« 於: 2004-10-30 08:41 »
今天我收到一封 mail

標題是 : WHOIS Data Confirmation for ntou.org

內容請參照後文。起初我很認真的看完信件,發現自己的資料有誤所以很熱心的點了修改的 LINK,想去修正資料 。但是點完 LINK 出現密碼對話視窗我才發現:這個畫面好像有點陌生。這時我才警覺: 這封看起來有模有樣的信件,有可能是詐騙集團的新手法

所以奉勸各位點了 LINK 之後遇到密碼輸入的對話窗時,再檢查一下連線的網址是不是正確。

請各位留意!



代碼: [選擇]
Dear Valued Customer,

ICANN, the organization responsible for the stability of the Internet,
requires that each domain name registrant be given the opportunity to
correct any inaccurate contact data (WHOIS data) associated with a domain
name registration. Our records for your domain are as follows:
 
ntou.org

Registrant:
 Reunion of National Taiwan Ocean University.
 1,Alley 1,Lane 278 ChungChing Rd.
 Tzuoying Dist.
 Kaohsiung,  81346
 TW

 Domain name: NTOU.ORG

 Administrative Contact:
    Fang, ChunChih  michael@tsungyin.com.tw
    1,Alley 1,Lane 278 ChungChing Rd.
    Tzuoying Dist.
    Kaohsiung,  81346
    TW
    +886.88673415877    Fax: +886.88673719484

 Technical Contact:
    Fang, ChunChih  michael@tsungyin.com.tw
    1,Alley 1,Lane 278 ChungChing Rd.
    Tzuoying Dist.
    Kaohsiung,  81346
    TW
    +886.88673415877    Fax: +886.88673719484

 Billing Contact:
    Fang, ChunChih  michael@tsungyin.com.tw
    1,Alley 1,Lane 278 ChungChing Rd.
    Tzuoying Dist.
    Kaohsiung,  81346
    TW
    +886.88673415877    Fax: +886.88673719484


 Registration Service Provider:
    NS.com., domreg@ns.com
    704.884.9000
    http://www.ns.com
    This company may be contacted for domain login/passwords,
    DNS/Nameserver changes, and general domain support questions.


 Record last updated on 25-Dec-2003.
 Record expires on 20-Feb-2005.
 Record created on 20-Feb-2002.

 Domain servers in listed order:
    NS.NTOU.ORG   61.70.115.23


 Domain status:
clientDeleteProhibited
clientTransferProhibited
clientUpdateProhibited
inactive


 
To review and update your WHOIS contact information, please log into
our management interface at: http://manage.opensrs.net
 
If any of the information above is inaccurate, you should correct it.
If all of the information above is accurate, you do not need to take any action.
 
Please remember that under the terms of your registration agreement,
the provision of false WHOIS information can be grounds for cancellation
of your domain name registration.
 
If you have any questions or comments regarding ICANN's policy, please contact
them directly at icann@icann.org.

Thank you for your attention.

Best regards,
Automated Services Inc.
 
 
 
NOTE: Please do NOT reply to this message.  This is an outgoing message only.
[/code]

頁: 1 2 [3] 4 5 ... 12