顯示具有 IT挨踢 標籤的文章。 顯示所有文章
顯示具有 IT挨踢 標籤的文章。 顯示所有文章

2010年11月11日 星期四

HTTP

HTTP Headers for Dummies
http://net.tutsplus.com/tutorials/other/http-headers-for-dummies/

當你輸入一個網址的時後, 實際會發生什麼?
http://article.yeeyan.org/view/54517/91367

2010年6月25日 星期五

Certification Resource.

CareerCert
http://www.careercert.info/
這裡有很多Cisco的官方教材文件

2010年5月19日 星期三

Introduction to Python - Part Three

Check out this SlideShare Presentation:

Introduction to Python - Part Two

Check out this SlideShare Presentation:

Introduction to Python

Check out this SlideShare Presentation:

Brief intro to Python

A good intro slides for Python

2010年3月13日 星期六

去除 Vista ipconfig 訊息中的通道介面卡

建立兩個登錄檔:

停用IPV6_Vista.reg


[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters] 
"DisabledComponents"=dword:000000ff


啟用IPV6_Vista .reg


[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters] 
"DisabledComponents"=dword:00000000


執行完「停用IPv6_Vista.reg」再重開機,就不會再出現這些煩人的東西。

2010年3月5日 星期五

讓我們看雲去

昨天下午聽了中華電信研究所的介紹,

才對這近大家很瘋的 Cloud Computing(雲端運算)有一點點概念,

看來它不是如李家同北杯,和公司一些自以很IT(挨踢)的主管所理解的那種簡單且粗淺。


談到 cloud computing  一定不脫三個核心技術:

1.GFS(Google File System),
    參考文件 Google File System Paper 

2.MapReduce

3.BigTable

以及上述技術實作出來的 open source project Hadoop,

其實雲端只是個應用結果,少了這三項核心技術便什麼都不是,

只能回到Client-Server 或Terminal 的年代,

今年也該花些時間了研究一下這個主題。

2010年3月2日 星期二

1000BASE-LX、1000BASE-SX、1000BASE-CX、1000BASE-T


1000BASE有四种传输介质标准:1000BASE-LX、1000BASE-SX、1000BASE-CX、1000BASE-T。
1000BASE-LX对应于802.11z标准,既可以使用单模光纤也可以使用多模光纤。1000BASE-LX所使用的光纤主要有:62.5μm多模光纤、50μm多模光纤和9μm单模光纤。其中使用多模光纤的最大传输距离为550m,使用单模光纤的最大传输距离为3千米。1000BASE-LX采用8B/10B编码方式。1000BASE-LX使用长波激光信号源,波长为1270nm-1355nm。
1000Base-LX,是定义在 IEEE 802.3z 中的针对光纤布线吉比特以太网的一个物理层规范。LX 代表长波长,与 1000Base-SX 相反,1000Base-LX 使用长波长激光(1310nm)越过多模式和单模式光纤,1000Base-SX 使用短波长激光越过多模式光纤。多模式光纤的最大距离是 550m,单模式是 5km。
 1000BASE-SX也对应于802.11z标准,只能使用多模光纤。1000BASE-SX所使用的光纤有:62.5μm多模光纤、50μm多模光纤。其中使用62.5μm多模光纤的最大传输距离为275m,使用50μm多模光纤的最大传输距离为550米。1000BASE-SX采用8B/10B编码方式。
 1000BASE-CX对应于802.11z标准,使用的是铜缆。最大传输距离25米,使用9芯D型连接器连接电缆。1000BASE-CX采用8B/10B编码方式。1000BASE-CX适用于交换机之间的连接,尤其适用于主干交换机和主服务器之间的短距离连接。

 1000base-t : 是最新的以太网技术 , 它是 1999 年 6 月被 ieee 标准化委员会批准的 . 这项技术是设计用来在现有的 5 类铜线 , 这种目前被最广泛安装的 lan 结构上提供 1000mbps 的速度 . 它是为了在现有的网络上满足对带宽急剧膨胀的需求而提出的 , 这种需求是实现新的网络应用和在网络边缘 增加交换机的结果 .

1000BASE-T使用非屏蔽双绞线作为传输介质传输的最长距离是100米。1000BASE-T不支持8B/10B编码方式,而是采用更加复杂的编码方式。1000BASE-T的优点是用户可以在原来100BASE-T的基础上进行平滑升级到1000BASE-T。

2010年2月6日 星期六

Python: OptionParser的使用

Python 很好用的 Option module....


==================================================================

轉自:http://www.javaworld.com.tw
dummycat edited on 2005-01-13 23:58

簡介:
optparse 是一個能夠讓程式設計人員輕鬆設計出簡單明瞭、易於使用、符合標準的 Unix 命令列程式的 Python 套件。開始學習 Python 之後,我常常會寫一些小程式來處理日常的工作;漸漸地,我發現無法處理參數的程式的彈性有限,於是就開始為我的程式加上解讀命令列參數的功能。在發現這個 套件之前,我總是覺得解讀命令列不難,但是要做到像標準 Unix 命令那樣完善的使用者互動和錯誤處置,可就不是一件簡單的事了!某天在 Python Library Reference 中發現這個套件,真是如獲至寶!從此不用再為解讀參數煩惱,可以更專注在解決問題上了!

如果對於 optparse 套件有興趣,想快速入門的話,可以直接看"基本使用流程"小節,然後再看後面的一些介紹與說明;當然啦!想獲得最詳細的資訊,就只有自己去看 Python Library Reference 囉~

就以下列命令來解釋一些術語,myprog 是命令的名字, $ 是命令列提示符號:

$myprog -f thefile.txt -s xyz a1 a2 a3


●argument:
使 用者在命令後面所輸入的字串。以本例來說,"-f", "thefile.txt", "-s", "xyz", "a1", "a2", "a3" 都是 argument。在 Python 中,可以使用 sys.argv[1:] 來得到命令列傳進來的 argument。為什麼是 sys.argv[1:] ,而不是 sys.argv 呢?因為命令列收到完整的參數還要加上一個命令本身的檔名,以本例來說, sys.argv 應該是:

["myprog", "-f", "thefile.txt", "-s", "xyz", "a1", "a2", "a3"]


所以如果要得到去除命令本身的檔名以後的參數列,就要靠 sys.argv[1:] 了。

●option:
一些傳遞給命令的額外 argument,以改變程式的行為。以本例來說, "-f", "-s" 就是 option。
有 幾種 option 的寫法,在 Unix 系統上的傳統寫法是 "-" 後跟著一個字母,例如 "-f", "-s";以及 "-f -s", 和 "-fs", 在 Unix 系統上都可以被接受。 GNU project 使用另一種方式,以 "--" 後面跟著一串由 "-" 分開的字串,例如 "--file-for-log"。Python 的 optparse 套件只接受以上所提的兩種 option 格式。

顧名思義, option 應該是可有可無的,即使命令中沒有任何的 option,程式也應該能夠正確地執行。如果程式需要使用者輸入某些資料才能運作,那麼也應該是使用 positional argument 才對。

●option argument:
緊 跟隨在 option 後的 argument,就是 option argument。以本例來說, "thefile.txt", "xyz" 都是 option argument。指定 option argument 有兩種寫法, "-f thefile" 和 "-fthefile", optparse 套件都接受。

option 亦可以沒有 option argument,意即 option 單獨存在。這樣的 option 通常做為旗標 (flag) 用,代表某個功能的開啟或是關閉。

●positional argument:
當一個 argument list 被解讀完後,剩下的就是 positional argument 了!以本例來說, "a1", "a2", "a3" 就是 positional argument。通常被用在"使用者必須輸入"的資訊上。

●required option:
一 個有點讓人覺得矛盾的名詞:既然是 "option" (選擇),又怎麼會是 "required" (必須)的呢? optparse 套件不對這種 option 做出任何的限制或是協助。詳情可以參閱 Python Library Reference 6.20.5 的範例程式。

基本使用流程:

》1.產生一個 optparse.OptionParser 的物件。可以在產生時將"程式的命令列說明" (usage) 做為參數,交給 OptionParser 的建構子:

from optparse import OptionParser
MSG_USAGE = "myprog[ -f ][ -s ] arg1[, arg2...]" 
optParser = OptionParser(MSG_USAGE)


》2.呼叫 OptionParser.add_option() 加入接受的 option:

optParser.add_option("-f","--file",action = "store",type = "string",dest = "fileName")


參數 action 有許多種類,預設是 "store",所以即使省略也無妨,其它的 action 種類在下面會繼續說明。

若有一個以上的 option,重覆上述的方式加入(注意:以下省略了 action 參數):

optParser.add_option("-s","--someopt",type = "string",dest = "someopt")

》3. 呼叫 OptionParser.parse_args() 進行解讀。如果沒有傳入參數, OptionParser 預設會以 sys.argv[1:] 為對象進行解讀。OptionParser.parse_args() 會傳回一個 tuple,由 optparse.Values 和 一個 list 所組成。下例傳入一個假造的參數列:

fakeArgs = ['-f', 'thefile.txt', '-s', 'xyz', 'arg1', 'arg2', 'arge']


options, args = optParser.parse_args(fakeArgs)


print options.fileName
print options.someopt
print args


最後會得到的輸出結果:

thefile.txt
xyz
['arg1', 'arg2', 'arge']


這 是一個簡單的範例,說明了 OptionParser 的一般使用方式。透過這個例子,可以看到如果為程式加入 option, 並且在程式中取得 option argument 和 positional argument。OptionParser.parse_args() 還有許多用法,下面會說明一部份。

為程式加入 flag option:

許多的 Unix 命令擁有 "-v", "-q" 的 option,代表"提供詳細訊息"或是"不顯示訊息"。要做到這一點,只要在程式中加入下列的 option :

parser.add_option("-v", action="store_true", dest="verbose")
parser.add_option("-q", action="store_false", dest="verbose")
opts, args = parser.parse_args()


第 一個 add_option() 加入了一個 "-v" 的 option;如果命令列參數中出現了 "-v",則 opts.verbose 將會是 True;相反的,第二個 add_option() 加入了一個 "-q" option;如果命令列參數中出現了 "-q",則 opts.verbose 將會是 False,這兩者並不相悖,程式可以設計成:當收到 "-v" 時,顯示詳細訊息;當收到 "-q" 時,顯示概略訊息,或完全不顯示;當兩者都沒有收到,則顯示一般的訊息。

設定 option 的預設值:

上述的例 子都假設命令例會收到預期中的 option,那麼如果沒有 option 時,接收到的 option 值會是什麼呢?答案是 None!如果想為 option 提供預設值,只要在 OptionParser.parse_args()中指定參數 default 就行了:

parser.add_option("-v", action="store_true", dest="verbose", default = True)
parser.add_option("-q", action="store_false", dest="verbose")
opts, args = parser.parse_args()


上述的程式碼為程式加入了兩個 option,當 "-v" 沒有出現時, opts.verbose 預設值為 True;當 "-q" 被指定時, opts.verbose 被設定為 False,和上一個例子有點不同。再看下一個例子:

parser.add_option("-v", action="store_true", dest="verbose", default=False)
parser.add_option("-q", action="store_false", dest="verbose", default=True)

opts.verbose 的預設值會是什麼?答案是 True,最後一個指定到同一個目標的 option 預設值會被採用。

一般的 option 亦可加入預設值:

parser.add_option("-f", action="store", dest="fileName", default = "defaultConfig.txt")


為程式加入說明:

標準的 Unix 命令大多有著 "-h", "--help" 的 option,會將使用說明印出來。在 OptionParser.parse_args() 中指定 "help" 參數,並指定說明的字串,就可以為這個 option 加入說明了:


parser.add_option("-v",action="store_true",dest="verbose",default=False,help="make lots of noise [default]")


當程式收到 "-h" 或 "--help",交給 OptionParser 解讀時,會自動印出說明內容,而忽略其它的 argument:

usage: [options] arg1 arg2 


options:
-h, --help show this help message and exit
-v, --verbose make lots of noise [default]
-q, --quiet be vewwy quiet (I'm hunting wabbits)
-fFILE, --file=FILE write output to FILE
-mMODE, --mode=MODE interaction mode: one of 'novice', 'intermediate'
[default], 'expert'


還 記得一開始提到交給 OptionParser 建構子的參數 MSG_USAGE 嗎? optparse 套件對 usage 訊息也提供了一些支援。在 usage 中使用 "%prog" 關鍵字, OptionParser 會自動將其代換為程式名,即 sys.args[0]:

usage = "usage: %prog [options] arg1 arg2"


如果程式名為 "myprog",則出現在 help 訊息中的 usage 就會是:

usage = "usage: myprog [options] arg1 arg2"


如果OptionParser 建構子沒有收到任何參數,則會自動產生一個 usage 訊息:


"usage: %prog [options]"


前提是程式沒有 positional argument。甭擔心 option 在 help 訊息中排列的方式, OptionParser 會搞定一切,如同前面程式所示。

替 option 分門別類:

如果能夠在 help 訊息中,將性質相近的 option 放在一起,與其它 option 明顯區別開來,相信使用者在閱讀時,就能夠很快地查到所要的資訊了。 optparse 套件提供了將 option 以 group 分開的機制:

group = OptionGroup(parser, "Dangerous Options",
"Caution: use these options at your own risk. "
"It is believed that some of them bite.")
group.add_option("-g", action="store_true", help="Group option.")
parser.add_option_group(group)

首 先產生一個 OptionGroup 物件,將 OptionParser 和 help 訊息當做參數交給建構子,然後呼叫 OptionGroup.add_option() 加入 option,最後再呼叫 OptionParser.add_option_group() 加入此 group。如此 help 訊息中的 option 就會按 group 顯示了!

usage: [options] arg1 arg2


options:
-h, --help show this help message and exit
-v, --verbose make lots of noise [default]
-q, --quiet be vewwy quiet (I'm hunting wabbits)
-fFILE, --file=FILE write output to FILE
-mMODE, --mode=MODE interaction mode: one of 'novice', 'intermediate'
[default], 'expert'

Dangerous Options:
Caution: use of these options is at your own risk. It is believed that
some of them bite.
-g Group option.

顯示程式版本:

無論是 GUI 或是 CUI 程式,使用者都會關心目前的程式版本資訊。 optparse 套件也提供了版本資訊的支援:

parser = OptionParser(usage="%prog [-f] [-q]", version="%prog 1.0")


在 OptionParser 建構時指定 version 參數,並將提供版本訊息(先前提到的 "%prot" 關鍵字亦可用在此處)。當使用者下達的命令中帶有參數 "---version" (只有 "-v" 不行)時,程式會顯示版本資訊:

$/usr/bin/foo --version
foo 1.0

指定讀入 option argument 的個數:

add_option() 有一個參數 nargs,用以指定該 option 會從命令列上讀入幾個 option argument。舉例來說,如果 add_option(..., narg = 3, ...):

$myprog --file w x y z


則 opts.file 將會是一個 tuple,內容為 ('w', 'z', 'y')。如果 option argument 個數不足,程式會回應錯誤訊息。

type of an option:

在 加入 option 時,參數 type 代表該 option 儲存 dest 的型態。支援的型態有 string, int, long, choice, float 和 complex。若要加入其它型態,請參考 Python Library Reference 6.20.5 小節,"Extending optparse"。
對於 string 型態的 option, option argument 會被直接將結果存入 dest。

對於 int, long, float 和 complex 型態, option argument 會被轉換成相對應的型別;如果轉換的過程失敗,例如原本預期收到一個 int,卻收到一個字串,程式會結束並列印錯誤訊息。

對 於 choice 型態, 在呼叫 OptionParser.add_option() 要指定一個由字串所組成的 tuple 或 list 給 choice 參數,接著 OptionParser.check_choice() 會比對傳入的 option argument 是否和 choice tuple 或 choice list 相同,若不相同則會丟出 OptionValueError。

action of an option:

在加入 option 時,參數 action 代表對 option argument 所要進行的動作。參數 action 有下列幾種:

  • store : 預設的 action,將 option argument 存到指定的 dest。
  • store_const : 將 dest 的值設為一個給定的常數。
  • make_option("-q", "--quiet", action="store_const", const=0, dest="verbose"), make_option("-v", "--verbose", action="store_const", const=1, dest="verbose"), make_option("--noisy", action="store_const", const=2, dest="verbose"), 當 "--noisy" 出現時, opts.verbose 的值將會被設定成 2。
  • store_true : 將 dest 的值設定為 True。
  • store_false : 將 dest 的值設定為 False。
  • append : 將 option argument 增加到 dest 中,而 dest 的型態將會是 list。使用 append action 時,命令列中可以重覆出現 option 和 option argument:

    $myprog -f 1 -f 2 -f 3


    則 opts.optargs 將會是 ['1', '2', '3']。如果是 store action,那麼 opts.optargs 將只會是 3,因為每指定一次 option, dest 的值就一直被更新。

    若呼叫 add_option() 時參數 nargs 被設定,而 action = append 時,程式可以接受下列命令列參數:

    parser.add_option(dest = "optargs",action = "append",nargs = 3)
    ...
    print opts.optargs


    -----------------------------

    $myprog -f 1 2 3 -f 4 5 6 -f 7 8 9
    [('1', '2', '3'), ('4', '5', '6'), ('7', '8', '9')]



    看出其中差異了嗎? nargs 會將 option argument 包裝成 tuple,而 append 參數會將包裝好的 tuple 再"附加"到原有的 list 中。
  • count : 將 dest 的值加 1。 dest 的值會被初始會 0,該 option 每出現一次, dest 的值就增加 1。
  • callback : 請參考 Python Library Reference 6.20.4。
  • help : 列印 help 訊息。
  • version : 列印程式版本。


錯誤處置:
如果 option 預期會收到一個 int,而使用者傳入的是 string 參數時,會發生什麼事?

optParser.add_option("-n",dest = "theNumber",type = "int")


若使用者輸入的命令是:

$ /usr/bin/foo -n abc


程式會發出錯誤訊息,並告知使用者輸入的參數有誤,並且以非零的回傳值結束:

usage: foo[ -n


foo: error: option -n: invalid integer value: 'abc'


OptionParser 的一些操作方法:

在加入 option 或解讀完參數之後,可以透過 OptionParser 的一些方法來得到一些資訊(以下的 opt_str 就是 "-f", "--file" 這些在增加 option 時所用到的參數):


  • has_option(opt_str) : 檢查 OptionParser 中是否有某個 option。
  • get_option(opt_str) : 取得 OptionParser 中的某個 option。
  • remove_option(opt_str) : 刪除 OptionParser 中的某個 option。


當 option 發生碰撞(重覆)時:

option 以下列的方式加入時:

parser.add_option("-n", "--dry-run", ...)
...
parser.add_option("-n", "--noisy", ...)


就稱為"碰撞"。當 option 碰撞時, optparse 會丟出 OptionConflictError。程式設計師應該在設計期就解決掉這個問題,也就是說,不應該使用 try - except 來捕捉這個錯誤 - 畢竟這在設計期就可以被處理掉的。

當 OptionParser 的被繼承時,一些標準的 option 就很有可能被子類別覆蓋掉。這種情況下,可以設定 OptionParse 處置碰撞的方式:

parser.set_conflict_handler("resolve")
or
parser = OptionParser(..., conflict_handler="resolve")

都 可以讓後來加入的 option 覆蓋掉原有的 option。預設的 conflict_handler 值為 "error",也就是直接丟出 OptionConflictError。所謂覆蓋,也不是直接移除掉原有的 option,而是避開後來加入的 option:

parser = OptionParser(conflict_handler="resolve")


parser.add_option("-n", "--dry-run", ..., help="original dry-run option")
...
parser.add_option("-n", "--noisy", ..., help="be noisy")


在 help 訊息中,就會看到:

options:
--dry-run original dry-run option
...
-n, --noisy be noisy


第一個 option 的 "-n" 被刪去了。如果這時又加入一個 option,使用了 "--dry-run"做為名稱呢?那麼第一個 option 就會直接被移除,因為它已經完全被覆蓋掉了,程式將不認得它, help 訊息中也不會有它的蹤跡。

在這裡我省略了 Callback option 和 Extending optparse 兩個小節,如果有興趣,可以親閱 Python Library Reference;對於這篇文章若有疑問的,也可以先找找 Reference,也許我漏掉了也說不定。

程 式寫得愈多,愈覺得自己的渺小。這些設計精良的套件,若不是當初由許多無私的前輩們開發出來,我們又怎麼夠享受到它的便利性?以上是我參考 Python Library Reference, 6.19 optparse 介紹的內容,所寫的心得筆記。希望對這裡的 Python 同好有幫助,如果有錯誤也請多指正!


void optparse::OptionParser::add_option(std::string shrt_flag,


std::string lng_flag,


std::string destination,


std::string help = "",


action_t act = STORE,


type_t type = STRING,


std::string dfault = "",


std::string allowed_values""

)



Add an option to the parser.

Parameters:





shrt_flag Short option name, like e.g. "-q".

lng_flag Long option name, like e.g. "--quiet"

destination Key under which the option argument is stored in the dictionary.

help Help string for generating the usage info.

act Action, one of STORE, STORE_TRUE, STORE_FALSE.

type Type info of the expected option argument. One of INT, DOUBLE, STRING, BOOL.

dfault Default value. Value stored in the dictionary if the option is not given.

allowed_values List of possible option values. A string of comma-separated allowed values. An empty string means that any value is allowed.

2009年9月5日 星期六

Ping 好物


ping 這個很基本的指令,不管在什麼OS上都再簡單且普遍不過了,

不過如果要對1000個C網段進行掃描,那掃描的速度可就錙銖必較了,

若是要再就掃描後的結果再加工處理,則reporting的部份也要注意。

按需求以往很常用的 Angry IP scanner本是首選,

因為那同時有我要的IP active/inactive status 和 netbois information,

但是,當用程式呼叫一次,它的視窗就會被叫起來一次,

想用windows start 指令強制指定它以最小化開啟就是沒有辦法,

對以把工作站當terminal用的我而言,實在無法接受敲mail時一二秒就一個視窗閃出來。

所以只好轉向尋求非GUI的工具來達到它所俱備的功能(IP active/inactive status 和 netbois information)。

目前找到的組合是

Fast IP Scanner v1.0.0.15 => 快速進行IP網段掃描

nbtscan v1.0.35 => 著名的netbios掃描工具


2009年2月24日 星期二

新玩具 - Notepad++

常常寫 code的人,大概沒有沒聽過 Ultraedit的,
這個相對於 .net studio, eclipse這些功能強大的大型IDE而言,顯得瘦小很多,
畢竟對很多人而言,寫的往往只是一些單純的且檔案不多的 program,
用那些大傢伙還真的顯得殺雞焉牛刀,
因此 Ultraedit, Ultrastudio就自然的出現在我的開發工具之列。

只是這二者雖然佔據我的硬碟空間很久,
也誕生了數以千百計的徒子徒孫,
但是它卻始終沒有正式的名份,
隨著版權要求的執行日趨嚴格,哪天硬要我給個名份還真的蠻麻煩,
今天不小心發現一個新玩具,功能、屬性及定性幾乎跟 Ultra*家族完全重曡,
而且重點是它是 freeware,而且還有一堆 plugin,
可以用 plugin的方式持續補強它的功能,這樣的設計架構相當有彈性,
它就是 --- Notepad++。

相信它有足夠的理由讓我跟 Ultra*提出分手了~

2009年1月24日 星期六

AJAX programming reference

Dynamic web programming 中,

所有 client-side的 input postback到 server-side時,都得整個web page refresh,

以往為了避免這種 postback反覆發生,

都得預先在後端用 active web language產生 javascript的 data array,

然而代價是 page initial時,預先產生的 data array會增加傳輸量與傳輸時間,

而且當中有很多資料在操作過程中根本沒有用到。

然而依 http設計的行為模式來說,它本質上就存在著以下二個問題,

  1. postback造成很多資料的重複傳輸,畢竟很多時候要的只是擷取後端的一部份資料,

    卻無端的造成很多後端資料與 html tag的重覆傳輸

  2. portback後造成 page refresh,在操作行為上來說並不那麼 friendly,這一點在比較

    任何 application就有很明顯的感受。
這二個既有的缺點,在web 2.0中多了一個解決方案 - AJAX

以下 study ajax 時的 reference.

Python programming reference

用PHP寫了好長一段時間的script,

始終覺得以它做為command line環境下的script有些不適妥,

畢竟它的設計重點是 http的 active script language,

然而,一來已經有了現有的code,二來又沒有太充足的理由移植到別的語言,

但是,慢慢的開始有 threading功能的需求,且在Object Orient的model上,

PHP也不算是 native的設計,在上述二個條件的思索之下,

想起了多年前同事極力推薦的 script language - Python,

甚至是主張捨棄他熟悉的 perl,何以大師級的前輩會有這樣的想法呢?

這是個大哉問,現在還沒有能力答出個所以然來。

2009年1月20日 星期二

透視BT

bt的應用在網路已經廣為流傳了好幾年,有人用它來下載mp3、影片,

我則用它來下載電子書,我推薦 http://www.mininova.org/

當然它不僅是提供電子書的seed,也有軟體或影片可以下載,

只是看了一下多數的bt seed下載點不是英文,就是祖國同胞所提供,

繁體的似乎少之又少,難道台灣同胞這麼乖嗎?

另外讀原文書是很累人又花時間的事,下載可能花你一個小時時間,

但是讀它可能要花你一週的時間,所以在下想出一個方法,

就是到Amazon去查一下哪本書在它的領域是星等比較高的,

我就只下載這範圍內的書,自然是因為它是讀者投票選出來的,相對它的可讀性自然就比較高,

也減少選到爛書的機會,節省寶貴的休息時間。

------------------------------ (分隔線) ------------------------------

離題有點遠了。

我的重點是,bt即然通行這麼久了,只知道它是p2p的資料交換機制,

其它的就都莫宰美了,這豈是為學之道呢?

所以一定留篇google到的好文才行。

透視BT(一)─ BT的基本運作原理


透視BT(二)─網路的頻寬分享與BT的隨機過程模型

透視BT(三)─數字會說話, BT有什麼問題?

透視BT(四)─為什麼BT沒有內建搜尋功能?

2009年1月12日 星期一

##EasyReadMore##