亚洲av色香蕉一区二区三区蜜桃,亚洲伊人久久精品,亚洲国产模特在线播放http://m.tkk7.com/conans/category/32372.html你越掙扎我就越興奮zh-cnSun, 25 Oct 2009 05:43:44 GMTSun, 25 Oct 2009 05:43:44 GMT60web會話狀態維持http://m.tkk7.com/conans/articles/299650.htmlCONANCONANSun, 25 Oct 2009 02:59:00 GMThttp://m.tkk7.com/conans/articles/299650.html 1.Session是什么?
2.Cookie又是什么?
3.如果完全禁用了Cookies,Session還起作用嗎?
4.為什么有的網站登錄一次以后就不用再登錄?
5.ASP中的Session是否依賴Cookie?
6.JSP中的Session是否依賴Cookie?
7.ASP.NET中的Session又是怎么回事?

下面將詳細的講述會話狀態的維持,看完之后你應該可以回答上面的幾個問題了
1.Session和Cookie的由來
這里我不區分Cookie和Cookies,只是一個復數形式而已.我們都知道http是無狀態的協議,就是說每次請求都是分開的,服務器根本不 知道兩次請求是否是同一個人,如果我們的內容是完全公開的,也就是所有內容誰都可以看(比如sina的新聞),這種情況呀根本就沒有必要知道兩次請求是不 是同一個.但是大部分情況下我們不希望這樣,我們希望只有會員登錄之后才能訪問(所有的論壇幾乎都是這樣).而其他人不允許他們反問,于是便要知道每次請 求的是不是同一個人,這就是會話,也就是一個Session,而且這個Session是以Cookie為基礎的,Cookie最才是網景公司提出的,也叫 小甜餅.
服務器端對每個請求維持一個會話,并且有一個唯一的SessionID.如果客戶端沒有禁用Cookie的話,客戶第一次請求的時候這個ID會 寫到客戶端的硬盤上(不相信?看一下文件夾C:\Documents and Settings\UserName\Local Settings\Temporary Internet Files 下的Cookie文件,都是文本文件).以后你每次請求的時候都會加上這個ID值,服務器端就可以知道是不是同一個請求了.如果還不相信的話,你可以這樣 做個試驗:
1.選擇一個你要用用戶名登錄的網站(最好是ASP的,如論壇).
2.先正常登錄一遍,確定可以登錄,再把瀏覽器關了)
3.選擇Internet選項(IE屬性頁),選擇隱藏選項卡,把設置調到最高,確定.
4.重新開IE,登錄你剛才登錄過的站點,怎么登都等不上去的.

2.Session和Cookie的關系
當前維持會話狀態的途徑有且只有兩種種
第一種:Cookie,最常見的,95%以上的會話都是Cookie的功勞.
第二種:URL重寫,把SessionID附加到URL中,JSP實現了但用的不多.
如果你用過session,你可能很奇怪:我們一般都是用session維持會話,這里怎么沒有?
答案很簡單:上面兩種都是途徑,Session是我們的目的.一句話概括Session和Cookie的關系:Cookie是維持Session最常見的一種途徑.

3.Cookie的過期和Session的超時
你可以自己設置Cookie的過期(其實是服務器替你設置的),如果你設置為用不過期,
以后就都不用再重新登陸了,如果這臺機器就你一個人用完全可以這樣設置,否則
最好不要這樣設置.如果你很長時間沒有反應,就是沒有新的請求,Session就有可能
過期,你可能遇到這樣的情況:明明已經登錄了,過了一會兒回來卻說我沒有登錄
提示重新登錄.就是因為Session過期了,服務器可以設置過期的時間.

4.禁用了Cookie如何實現會話
如果客戶端完全禁用Cookie,將會發生什么現象:
對于ASP,無法跟蹤會話,也就是每個請求都當作新的請求.
對于JSP,可以通過重寫URL實現會話,session.encodeURL(String path)
session.encodeURL("index.jsp")=index.jsp;jsessionid=431D980051204FC8DC3
                                                            BF75840F7AF71
可以看到后面的sessionid并沒有包括在QueryString中(在?后面)
對于ASP.NET 同樣支持重寫URL,學習JSP的,不過JSP并不是所有的WebServer都支持重寫URL
5.QueryString和HiddenForm
你可能覺得他們也可以維持會話,但是事實上是不可以的,他們只能傳遞參數。不過在ASP.NET中的服務器事件模型廣泛了使用了Hidden來表示控件的viewState(這個也是ASP.NET比ASP,JSP先進的地方,是一種全新的技術)
為什么他們只能傳遞參數而不能實現會話呢?大致過程是這樣的:
服務器接收到一個請求,如果沒有獲得SessionID,就產生一個新的會話.可能你認為這樣可以保持會話 url?sessionid=234234234234.
這是一個誤區,因為服務器已經處在一個新的會話中了,只不過可以獲得上次會話的ID號而已.

6.QueryString和HiddenForm的區別
QueryString是URL中問號后面的?querystring.一般瀏覽器都把URL限制在255個字符以內所以沒辦法傳遞大量的數據,方法必須為get.HiddenForm是表單數據,方法為可以是get或者post(一般用post)

7.誤區
我看到有人在論壇上說在自己的Web服務器上構建一個Session,然后鏈接到別人的程序這樣可以越過驗證.Session只在同一個 Application中才有效,所以這個設想是徒勞的,不過如果你們的程序是同一個Application中的(比如一些個人主頁空間就有可能)是可以 這樣做的.

8.題外話
利用Cookie攻擊,因為客戶端完全禁用Cookie之后,每次請求服務器都要產生一個會話.如果會話超時時間是15分鐘的話,我們通過完全禁用Cookie的方法在15分鐘內不停的請求讓服務器產生大量的會話,實行DOS攻擊(前提是大量的請求和服務器不做過濾)

CONAN 2009-10-25 10:59 發表評論
]]>
各大型網站架構分析收集http://m.tkk7.com/conans/articles/293370.htmlCONANCONANMon, 31 Aug 2009 12:57:00 GMThttp://m.tkk7.com/conans/articles/293370.html http://www.dbanotes.net/arch/plentyoffish_arch.html

采取 Windows 技術路線的 Web 2.0 站點并不多,除了 MySpace ,另外就是這個 PlentyOfFish。這個站點提供 “Online Dating” 服務。一個令人津津樂道的、驚人的數據是這個只有一個人(創建人Markus Frind)的站點價值 10 億,估計要讓很多人眼熱,更何況 Markus Frind 每天只用兩個小時打理網站–可操作性很強嘛。

2. 從LiveJournal后臺發展看 大型網站系統架構以及性能優化方法
http://www.example.net.cn/archives/2006/03/olivejournaloio.html

LiveJournal是99年始于校園中的項目,幾個人出于愛好做了這樣一個應用,以實現以下功能:
* 博客,論壇
* 社會性網絡,找到朋友
* 聚合,把朋友的文章聚合在一起

LiveJournal采用了大量的開源軟件,甚至它本身也是一個開源軟件。

在上線后,LiveJournal實現了非常快速的增長:
* 2004年4月份:280萬注冊用戶。
* 2005年4月份:680萬注冊用戶。
* 2005年8月份:790萬注冊用戶。
* 達到了每秒鐘上千次的頁面請求及處理。
* 使用了大量MySQL服務器。
* 使用了大量通用組件。

3. YouTube 的架構擴展
http://www.dbanotes.net/opensource/youtube_web_arch.html

在西雅圖擴展性的技術研討會上,YouTube 的 Cuong Do 做了關于 YouTube Scalability 的報告。視頻內容在 Google Video 上有(地址),可惜國內用戶看不到。
Kyle Cordes 對這個視頻中的內容做了介紹。里面有不少技術性的內容。值得分享一下。(Kyle Cordes 的介紹是本文的主要來源)

4. WikiPedia 技術架構學習分享
http://www.dbanotes.net/opensource/wikipedia_arch.html

維基百科(WikiPedia.org)位列世界十大網站,目前排名第八位。這是開放的力量。

來點直接的數據:

* 峰值每秒鐘3萬個 HTTP 請求
* 每秒鐘 3Gbit 流量, 近乎375MB
* 350 臺 PC 服務器

5. Tailrank 網站架構
http://www.dbanotes.net/review/tailrank_arch.html

每天數以千萬計的 Blog 內容中,實時的熱點是什么? Tailrank 這個 Web 2.0 Startup 致力于回答這個問題。

專門爆料網站架構的 Todd Hoff 對 Kevin Burton 進行了采訪。于是我們能了解一下 Tailrank 架構的一些信息。每小時索引 2400 萬的 Blog 與 Feed,內容處理能力為 160-200Mbps,IO 寫入大約在10-15MBps。每個月要處理 52T 之多的原始數據。Tailrank 所用的爬蟲現在已經成為一個獨立產品:spinn3r。

6. LinkedIn 架構筆記
http://www.dbanotes.net/arch/linkedin.html

LinkedIn 雇員有 180 個,在 Web 2.0 公司中算是比較多的,不過人家自從 2006 年就盈利了,這在 Web 2.0 站點中可算少的。用戶超過 1600 萬,現在每月新增 100 萬,50% 會員來自海外(中國用戶不少,也包括我).

7. Yahoo!社區架構
http://www.dbanotes.net/arch/yahoo_arch.html

舊金山舉行的 QCon 會議帶給我們很多新鮮的信息。雖然沒機會參加,但是看看各個網站”曬架構”也是個比較過癮的事情。請參觀并收藏這個頁面:Architectures you’ve always wondered about。

8. Craigslist 的數據庫架構
http://www.dbanotes.net/database/craigslist_database_arch.html

Craigslist 絕對是互聯網的一個傳奇公司。根據以前的一則報道:

每月超過 1000 萬人使用該站服務,月瀏覽量超過 30 億次,(Craigslist每月新增的帖子近 10 億條??)網站的網頁數量在以每年近百倍的速度增長。Craigslist 至今卻只有 18 名員工(現在可能會多一些了)。

9. Fotolog.com 的技術信息拾零
http://www.dbanotes.net/review/fotolog_arch.html

盡管是世界上最大的圖片服務網站, Fotolog.com 在國內的名氣并不是很響亮, 每當提到圖片服務, 很多人第一個會想起 Flickr. 但實際上 Fotolog 也的確是很猛的, Alexa 上的排名一直在 Flickr 前面, 目前注冊用戶超過 1100 萬. 而前不久也賣了一個好價錢, 9000 萬美金. 算下來的話, 1 個注冊用戶大約 9 美金. Yupoo 的劉平陽可以偷著算算自己的網站如果賣給老外是怎樣一個價格了.

10. Digg 網站架構
http://www.dbanotes.net/arch/digg_arch_cache_and_shard.html

Digg 工程師采用 LAMP (Linux, Apache, MySQL and PHP) 模式。這個 Alexa 排名在 100 左右的、自我估價 1.5 億美金的站點目前有超過 100 臺的 PC 服務器(足夠少了),可以粗略分成三個部分:數據庫服務器,Web 服務器,搜索服務器。

11. Amazon 的 Dynamo 架構
http://www.dbanotes.net/techmemo/amazon_dynamo.html

我在 DBAnotes.net 上記錄過不少比較大的網站架構分析(eg: eBay [1], eBay [2]) ,Amazon 一直找不到太多的資料。國慶期間讀到了一篇關于 Amazon Dynamo 的論文,非常精彩。Amazon Dynamo 這個高可用、可擴展存儲體系支撐了Amazon 不少核心服務.

12. 財幫子(caibangzi.com)網站架構
http://www.dbanotes.net/arch/caibangzi_web_arch.html

財幫子(caibangzi.com) 定位在”基金理財社區”。是國內訪問量最大的基于 Ruby on rails 的 startup 項目。“理財”這個詞據說是光大銀行發明的,且不去管,不可否認的是,目前國內”理財”是個很有潛力的切入點。財幫子網站潛在用戶群還是很大的。

13. 了解一下 Technorati 的后臺數據庫架構
http://www.dbanotes.net/web/technorati_db_arch.html

目前處理著大約 10Tb 核心數據, 分布在大約 20 臺機器上.通過復制, 多增加了 100Tb 數據, 分布在 200 臺機器上. 每天增長的數據 1TB. 通過 SOA 的運用, 物理與邏輯的訪問相隔離, 似乎消除了數據庫的瓶頸. 值得一提的是, 該擴展過程始終是利用普通的硬件與開源軟件來完成的. 畢竟 , Web 2.0 站點都不是燒錢的主. 從數據量來看,這絕對是一個相對比較大的 Web 2.0 應用.

14. 說說大型高并發高負載網站的系統架構
http://www.toplee.com/blog/?p=71

我在CERNET做過撥號接入平臺的搭建,而后在Yahoo&3721從事過搜索引擎前端開發,又在MOP處理過大型社區貓撲大雜燴的架構升級等 工作,同時自己接觸和開發過不少大中型網站的模塊,因此在大型網站應對高負載和并發的解決方案上有一些積累和經驗,可以和大家一起探討一下。

15. 大型高負載網站架構 的感想
http://atman.memoab.com/articles/194

轉自:http://blog.csdn.net/lovingprince/archive/2008/11/26/3379710.aspx


CONAN 2009-08-31 20:57 發表評論
]]>
Memcached在大型網站中應用http://m.tkk7.com/conans/articles/292623.htmlCONANCONANWed, 26 Aug 2009 03:47:00 GMThttp://m.tkk7.com/conans/articles/292623.html 1、 memcached 協議理解
memcache是為了加快http://www.livejournal.com/訪問速度而誕生的一個項目。
它的官方主頁是:http://www.danga.com/memcached/
目前在網站開發中應用較少,主要的應用有:
http://www.danga.com/memcached/users.bml
在國內的網站開發中,還很少沒見到有應用的,中文資料十分匱乏。
工作機制:通過在內存中開辟一塊區域來維持一個大的hash表來加快頁面訪問速度,和數據庫是獨立的。但是目前主要用來緩存數據庫的數據。允許多 個server通過網絡形成一個大的hash,用戶不必關心數據存放在哪,只調用相關接口就可。存放在內存的數據通過LRU算法進行淘汰出內存。同時可以 通過刪除和設置失效時間來淘汰存放在內存的數據。
2、 memcached 使用入門
2.1 memcached的安裝
  ?<1>memcached服務的安裝
  先檢查linux內核版本,建議將memcached 安裝在2.6以上。
  因為memcached 需要用到libevent和 epoll 。
memcached安裝前首先確定你的服務器上面安裝了libevent庫,
libevent下載地址( http://www.monkey.org/~provos/libevent/)。
下載memcached的源碼( http://www.danga.com/memcached/download.bml)。
Memcached最初是用perl寫的,現在的版本是用c寫的。
下載后拷貝到一個目錄,安裝需要root用戶來執行
tar -zxvf memcached-1.1.12.tar.gz
cd memcached-1.1.12
./configure
這里必須先要configure, 它會檢測你的系統情況,然后生成一個config.h文件和其它的幾個文件,另外和其它的configure一樣,你可以配置它的安裝路徑等等。默認應用程序安裝在/usr/local/bin目錄下。
make //編譯
make install //安裝
<2>memcached客戶端的安裝
根據memcached協議,用戶可以自己寫出符合自己要求的客戶端程序。目前http://www.danga.com/memcached/download.bml
提供perl,c,java,python,php等客戶端程序供下載和參考。下面我就以perl客戶端程序為例說明客戶端的安裝:
下載后拷貝到一個目錄,安裝需要root用戶來執行
Java代碼
  1. tar -zxvf Cache-Memcached-1.14.tar.gz  
  2. cd Cache-Memcached-1.14  
  3. perl makefile.pl  
  4. make  
  5. make install  
  6. make test  
這樣就安裝好了memcahced, 啟動memcached就可使用分布式緩存系統了!
2.2 快速入門
<1> memcached服務的啟動
memcached的啟動非常簡單,它沒有配置文件,只要配置好幾個參數就可以使用了。下面我以一個實際應用的例子,具體說明一下:
memcached ?d ?m 500  -l 64.128.191.151 -p 11211 -vv >>/var/www/kelly/test/logs/memcached_$$.log
啟動的這個memcached為一個后臺守護進程模式(-d), 然后緩存的空間為500M(-m), 監聽(-l)服務器64.128.191.15的11211號端口(-p).,將日志寫道/var/www/kelly/test/logs /memcached_$$.log(-vv)。
其實memcached的參數也非常的有限,就下面這幾個:
Java代碼
  1. ?  -p port number to listen on   
  2. ?  -l interface to listen on, default is INDRR_ANY   
  3. ?  -d run as a daemon   
  4. ?  -r maximize core file limit   
  5. ?  -u assume identity of (only when run as root)   
  6. ?  -m max memory to use for items in megabytes, default is 64 MB   
  7. ?  -M return error on memory exhausted (rather than removing items)   
  8. ?  -c max simultaneous connections, default is 1024   
  9.           ?  -k lock down all paged memory   
  10. ?  -v verbose (print errors/warnings while in event loop)   
  11. ?  -vv very verbose (also print client commands/reponses)   
  12. ?  -h print this help and exit   
  13. ?  -i print memcached and libevent license   

我們也可以將這個啟動腳本寫道/etc/rc.d或者/erc/rc.local,這樣可以在服務器啟動時候執行。
<2> memcached客戶端的連接
下面我就以perl客戶端程序為例說明客戶端的連接:
啟動兩個memcached server
Java代碼
  1. memcached ?d ?m 500  -l 64.128.191.151 -p 11211 -vv >>/var/www/kelly/test/logs/memcached_$$.log  
  2. memcached ?d ?m 500  -l 64.128.191.151 -p 11212 -vv >>/var/www/kelly/test/logs/memcached_$$.log  

perl客戶端程序
Java代碼
  1. #!/usr/bin/perl  
  2. use Cache::Memcached;  
  3. my $memd = new Cache::Memcached {  
  4.     'servers' => [ "64.128.191.15:11211" , "64.128.191.15:11212"],  
  5.   };  
  6. my $val = $memd->get( "my_key" );  
  7. if ( $val )  
  8. {  
  9.    print "Value is '$val'\n";  
  10. }  
  11. # Set a value  
  12. $memd->set("my_key""123");  
  13. $memd->disconnect_all();  
?運行測試
$ perl test-memcache.pl
$ perl test-memcache.pl
Value is '123'
可以看到,第一次沒有取得my_key,第二次從memcached中得到my_key的值。
同時通過查看日志,可以發現的確存儲在兩個memcache  server中。
這個簡單的例子,解釋了如何在memcached中存取數據,以及memcache是真正的分布式緩存系統。
當然,這還只是很簡單的例子,體現不出memcache的優勢,下面將通過一個很具體的例子,給出詳細的應用。
3、 memcached在Zorpia的應用
http://www.zorpia.com 是一個網頁相冊,博客,交友,論壇的大型網站公司。現在已有超過140萬活躍使用者遍布美國,香港,東南亞,歐洲,澳洲,亞洲等其它地區。每天的訪問量都在增長,已成為全世界排名第五的社會生活關系網。
Memcached也采用了memcached來提高網站的訪問速度,并且取得了很好的效果,我在負責zorpia的memcached項目時候積累了一些經驗,主要的做法如下:
1) 通過對memcache的perl客戶端進行包裝,定制自己的客戶端。
2) 通過制定符合zorpia規范的hash key命名規范
?  ? memcache中需要存儲的內容的key均由string組成。
這個string統一由一個memcache.pm的subroutine來實現。(假設這個subroutine是 get_key() )
?  ? memcache中存放兩種形式的數據
  (1) result of SQL query :
  (2) 普通變量(variable)
  這兩種數據的key的組合方式是不相同的,由get_key進行判斷和完成
?  ? 關于get_key 和 naming rule
  get_key subroutine完成所有memcache key的命名,naming rule也是在它里邊體現:
  (1)輸入參數 -- hash結構,里邊定義了當前需要存放的數據的信息
      結構
  (2)返回值 -- string,返回數據的key_name
?必須確定 get_key 的傳入hash的結構,
      hash中主要有兩個元素
      type --- 定義當前數據結構的類型 ,有 'var' , 'sql'兩種值
      object --- 存放當前數據結構的詳細信息,
      當 type eq 'var'時,object表示變量的名字,該名字由程序員指定
      當 type eq 'sql'時,object包含所存放sql的主要基本信息,hash結構,也由程序員按照規則制定
     ## 當variable 數據類型,比較簡單
     $var_hash = {
             type => 'var',      ## var表示當前類型是 variable  
             object => 'language',  ##  language代表variable的名字
     };
生成的key是Zorpia::var| language
     ## sql 數據
     比如select first_name from user where user_id =2那么hash為
     $sql_hash = {
             type => 'sql',
             object => {
                 table => {table2=>"user",},         ## sql 查詢的表
                 column => {column1=>"first_name",},  ## sql所要查詢的column
                 condition => { user_id =>"2",},  ## sql條件
             },
     };
生成的key是Zorpia::sql|user|first_name| user_id =2
     get_key subroutine必須對傳入hash進行判斷,對不同類型的數據按照不同的方式組合,形成key,返回給使用者。這個key,必須保證其唯一性:
比如:所有字母小寫,一些數組在組合成key之前必須首先排序
? ? get_key函數
Java代碼
  1. sub get_key{  
  2. my $hash = shift;  
  3. return undef unless $hash && ref $hash eq "HASH";  
  4. my $type = $hash->{type};  
  5. my $key_name;  
  6. if ($type eq 'sql') {  
  7. my ($table_key,$column_key,$condition_key);  
  8. $table_key=_get_key($hash->{object}->{table});  
  9. $column_key=_get_key($hash->{object}->{column});  
  10. $condition_key=_get_key($hash->{object}->{condition});  
  11. $key_name = join('|',$type,$table_key,$column_key,$condition_key);  
  12. #Currently the length limit of a key is set at 250 characters  
  13. if (length($key_name)>250)  
  14. {  
  15. $key_name=substr(0,250,$key_name);   
  16. }  
  17. }  
  18. elsif($type eq 'var')  
  19. {  
  20. $key_name = join('|',$type,$hash->{object});  
  21. }  
  22. return $key_name;  
  23. }  
  24. sub _get_key  
  25. {  
  26. my $hash=shift;  
  27. return undef unless $hash && ref $hash eq "HASH";  
  28. my ($t,$ret,$i);  
  29. foreach $i (sort keys %$hash)  
  30. {  
  31.   $i=~s/^\s+|\s+$//g;  
  32.   $hash->{$i}=~s/^\s+|\s+$//g;  
  33.    push(@$t,lc("$i=$hash->{$i}"));  
  34. }  
  35. $ret=join(':',sort { $a cmp $b } @$t);  
  36. return $ret;      
  37. }  
3) 制定需要應用memcached的規則
?經常訪問的表user,user_details
?合理設定變量在memcached的生存周期
?將活躍用戶的信息預先導入到memcached
?分別在多臺機器上啟動多個memcached服務
?編寫腳本監控memcached服務是否活動
4) User表的具體應用舉例
? 在 select時候
先查詢memcahce里有沒有,有的話,返回;否則從數據庫select,在memcache里設置,返回。
Java代碼
  1. my $sql_hash = {  
  2.          type => 'sql',  
  3.          object => {  
  4.        table => {table1=>"user",},  
  5.        column => {column1=>"user_id",},  
  6.        condition => {email=>$user_id,},  
  7.         },  
  8.          };  
  9.         my $key=Zorpia::MemCache::get_key($sql_hash);    
  10.         my $user_id_by_email=Zorpia::MemCache::get($key);  
  11.        if(!$user_id_by_email)  
  12.         {  
  13.         my $sth;  
  14.         my $query ="select user_id from user where email=?";  
  15.         $sth = $dbh->prepare($query);  
  16.         $sth->execute($user_id);  
  17.         my $user1 = $sth->fetchrow_hashref();  
  18.         $user_id_by_email=$user1->{'user_id'};  
  19.         Zorpia::MemCache::set($key,$user_id_by_email,1800);  
  20.         }  
?在 update,insert,delete時候
先在數據庫update,insert,delete,在memcache里設置,返回。
Java代碼
  1. &Zorpia::DB::data_entry_no_return($dbh,"user","COUNT(*)","$account_information_insert_statement user_id=$current_user_id""user_id=$current_user_id");  
  2.  #add by kelly  
  3.  my $sql_hash = {  
  4.          type => 'sql',  
  5.          object => {  
  6.        table => {table1=>"user",},  
  7.        column => {column1=>"user_id",},  
  8.        condition => {user_id=>$current_user_id,},  
  9.         },  
  10.          };  
  11.   my $key=Zorpia::MemCache::get_key($sql_hash);  
  12.   my $query = "SELECT *, user_id AS id  FROM   user  WHERE user_id=?";  
  13.   my $sth_memc = $dbh->prepare($query);  
  14.   $sth_memc->execute($current_user_id);  
  15.   my $user_memc = $sth_memc->fetchrow_hashref();  
  16.   &Zorpia::MemCache::set($key,$user_memc,21600);  
4、 memcached的應用展望
使用了memcached以后, 我發現以前做過的很多的項目都可以應用它提高效率,包括最近做的“大單追蹤”, “數碼搜索”等等。當然既然memcahced是分布式的緩存系統,那么它就是建立了一個分布式的平臺, 我們可以用它來進行分布式的記數, 因為對于一個鍵值key我們可以設置它的數值以及有效期在參數中,另外還可以重新設置這個鍵值的數值。 所以我總結了一下目前可以應用到的地方:
<1>.數據庫檢索結果的緩存,也就是說可以有機的和數據庫結合起來應用,提高效率。
    這也是目前memcached用到的最多的地方,比如用于大型網站等。
可以這樣來實現:
打開memcached服務器連接
編寫sql語句, 同時算出它的一個hash key值
獲取這個hash值的memcached保存數據(get)
如果獲取的這個hash值的數據存在。返回
否則連接數據庫查找
把這個查找結果保存在memcached中(set),可以設置有效期
返回查找結果
<2>.分布式計算
<3>.分布式共享數據
總之,memcached的機制比較靈活,可以適用于一切需要分布式緩存數據的地方,隨著memcached逐漸為人所知,必將在更多的分布式應用領域大放異彩。

http://nio.infor96.com/php-memcached/

一、memcached 簡介

在很多場合,我們都會聽到 memcached 這個名字,但很多同學只是聽過,并沒有用過或實際了解過,只知道它是一個很不錯的東東。這里簡單介紹一下,memcached 是高效、快速的分布式內存對象緩存系統,主要用于加速 WEB 動態應用程序。

二、memcached 安裝

首先是下載 memcached 了,目前最新版本是 1.1.12,直接從官方網站即可下載到 memcached-1.1.12.tar.gz。除此之外,memcached 用到了 libevent,我下載的是 libevent-1.1a.tar.gz。

接下來是分別將 libevent-1.1a.tar.gz 和 memcached-1.1.12.tar.gz 解開包、編譯、安裝:

Java代碼
  1. # tar -xzf libevent-1.1a.tar.gz# cd libevent-1.1a# ./configure --prefix=/usr# make# make install# cd ..# tar -xzf memcached-1.1.12.tar.gz# cd memcached-1.1.12# ./configure --prefix=/usr# make#   
make install安裝完成之后,memcached 應該在 /usr/bin/memcached。

三、運行 memcached 守護程序

運行 memcached 守護程序很簡單,只需一個命令行即可,不需要修改任何配置文件(也沒有配置文件給你修改  ):

Java代碼
  1. /usr/bin/memcached -d -m 128 -l 192.168.1.1 -p 11211 -u httpd  
參數解釋:

-d 以守護程序(daemon)方式運行 memcached;-m 設置 memcached 可以使用的內存大小,單位為 M;-l 設置監聽的 IP 地址,如果是本機的話,通常可以不設置此參數;-p 設置監聽的端口,默認為 11211,所以也可以不設置此參數;-u 指定用戶,如果當前為 root 的話,需要使用此參數指定用戶。當然,還有其它參數可以用,man memcached 一下就可以看到了。

四、memcached 的工作原理

首先 memcached 是以守護程序方式運行于一個或多個服務器中,隨時接受客戶端的連接操作,客戶端可以由各種語言編寫,目前已知的客戶端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。PHP 等客戶端在與 memcached 服務建立連接之后,接下來的事情就是存取對象了,每個被存取的對象都有一個唯一的標識符 key,存取操作均通過這個 key 進行,保存到 memcached 中的對象實際上是放置內存中的,并不是保存在 cache 文件中的,這也是為什么 memcached 能夠如此高效快速的原因。注意,這些對象并不是持久的,服務停止之后,里邊的數據就會丟失。

三、PHP 如何作為 memcached 客戶端

有兩種方法可以使 PHP 作為 memcached 客戶端,調用 memcached 的服務進行對象存取操作。

第一種,PHP 有一個叫做 memcache 的擴展,Linux 下編譯時需要帶上 ?enable-memcache[=DIR] 選項,Window 下則在 php.ini 中去掉 php_memcache.dll 前邊的注釋符,使其可用。

除此之外,還有一種方法,可以避開擴展、重新編譯所帶來的麻煩,那就是直接使用 php-memcached-client。

本文選用第二種方式,雖然效率會比擴展庫稍差一些,但問題不大。

四、PHP memcached 應用示例

首先 下載 memcached-client.php,在下載了 memcached-client.php 之后,就可以通過這個文件中的類“memcached”對 memcached 服務進行操作了。其實代碼調用非常簡單,主要會用到的方法有 add()、get()、replace() 和 delete(),方法說明如下:

add ($key, $val, $exp = 0)
往 memcached 中寫入對象,$key 是對象的唯一標識符,$val 是寫入的對象數據,$exp 為過期時間,單位為秒,默認為不限時間;

get ($key)
從 memcached 中獲取對象數據,通過對象的唯一標識符 $key 獲取;

replace ($key, $value, $exp=0)
使用 $value 替換 memcached 中標識符為 $key 的對象內容,參數與 add() 方法一樣,只有 $key 對象存在的情況下才會起作用;

delete ($key, $time = 0)
刪除 memcached 中標識符為 $key 的對象,$time 為可選參數,表示刪除之前需要等待多長時間。

下面是一段簡單的測試代碼,代碼中對標識符為 ‘mykey’ 的對象數據進行存取操作:

//  包含 memcached 類文件require_once(‘memcached-client.php’);//  選項設置$options = array(    ’servers’ => array(‘192.168.1.1:11211′), //memcached 服務的地址、端口,可用多個數組元素表示多個 memcached 服務    ‘debug’ => true,  //是否打開 debug    ‘compress_threshold’ => 10240,  //超過多少字節的數據時進行壓縮    ‘persistant’ => false  //是否使用持久連接    );//  創建 memcached 對象實例$mc = new memcached($options);//  設置此腳本使用的唯一標識符$key = ‘mykey’;//  往 memcached 中寫入對象$mc->add($key, ’some random strings’);$val = $mc->get($key);echo “n”.str_pad(‘$mc->add() ’, 60, ‘_’).“n”;var_dump($val);//  替換已寫入的對象數據值$mc->replace($key, array(’some’=>‘haha’, ‘array’=>‘xxx’));$val = $mc->get($key);echo “n”.str_pad(‘$mc->replace() ’, 60, ‘_’).“n”;var_dump($val);//  刪除 memcached 中的對象$mc->delete($key);$val = $mc->get($key);echo “n”.str_pad(‘$mc->delete() ’, 60, ‘_’).“n”;var_dump($val);?>
是不是很簡單,在實際應用中,通常會把數據庫查詢的結果集保存到 memcached 中,下次訪問時直接從 memcached 中獲取,而不再做數據庫查詢操作,這樣可以在很大程度上減輕數據庫的負擔。通常會將 SQL 語句 md5() 之后的值作為唯一標識符 key。下邊是一個利用 memcached 來緩存數據庫查詢結果集的示例(此代碼片段緊接上邊的示例代碼):

= ‘SELECT * FROM users’;$key = md5($sql);   //memcached 對象標識符if ( !($datas = $mc->get($key)) ) {    //  在 memcached 中未獲取到緩存數據,則使用數據庫查詢獲取記錄集。    echo “n”.str_pad(‘Read datas from MySQL.’, 60, ‘_’).“n”;    $conn = mysql_connect(‘localhost’, ‘test’, ‘test’);    mysql_select_db(‘test’);    $result = mysql_query($sql);    while ($row = mysql_fetch_object($result))        $datas[] = $row;    //  將數據庫中獲取到的結果集數據保存到 memcached 中,以供下次訪問時使用。    $mc->add($key, $datas);} else {    echo “n”.str_pad(‘Read datas from memcached.’, 60, ‘_’).“n”;}var_dump($datas);?>可以看出,使用 memcached 之后,可以減少數據庫連接、查詢操作,數據庫負載下來了,腳本的運行速度也提高了。

之前我曾經寫過一篇名為《PHP 實現多服務器共享 SESSION 數據》文章,文中的 SESSION 是使用數據庫保存的,在并發訪問量大的時候,服務器的負載會很大,經常會超出 MySQL 最大連接數,利用 memcached,我們可以很好地解決這個問題,工作原理如下:

用戶訪問網頁時,查看 memcached 中是否有當前用戶的 SESSION 數據,使用 session_id() 作為唯一標識符;如果數據存在,則直接返回,如果不存在,再進行數據庫連接,獲取 SESSION 數據,并將此數據保存到 memcached 中,供下次使用;
當前的 PHP 運行結束(或使用了 session_write_close())時,會調用 My_Sess::write() 方法,將數據寫入數據庫,這樣的話,每次仍然會有數據庫操作,對于這個方法,也需要進行優化。使用一個全局變量,記錄用戶進入頁面時的 SESSION 數據,然后在 write() 方法內比較此數據與想要寫入的 SESSION 數據是否相同,不同才進行數據庫連接、寫入數據庫,同時將 memcached 中對應的對象刪除,如果相同的話,則表示 SESSION 數據未改變,那么就可以不做任何操作,直接返回了;
那么用戶 SESSION 過期時間怎么解決呢?記得 memcached 的 add() 方法有個過期時間參數 $exp 嗎?把這個參數值設置成小于 SESSION 最大存活時間即可。另外別忘了給那些一直在線的用戶延續 SESSION 時長,這個可以在 write() 方法中解決,通過判斷時間,符合條件則更新數據庫數據。
五、相關資源

memcached 官方網站
PHP memcached client
下載 memcached-client.php
http://www.dirk.sh/diary/216
Memcached 是一個非常優秀的緩存加速系統,和 Squid 的前端緩存加速不同,它是通過基于內存緩存對象來減少數據庫查詢的方式改善網站系統的反應,而其中最吸引人的一個特性就是支持分布式部署;也就是說可以在 一群機器上建立一堆 Memcached 服務,每個服務可以根據具體服務器的硬件配置使用不同大小的內存塊,這樣一來,理論上可以建立一個無限巨大的基于內存的 cache storage 系統。

Php 下的 Memcached 官方 API 是 memcache 這個包,前不久發布 2.0.0 stable 版本,關鍵的更新是增加了 addServer() 函數用于支持 Multiple servers with loadbalancing and failover,在 FreeBSD 下安裝:
[root@trinity ~]# cd /usr/ports/databases/memcached/[root@trinity ~]# make install clean[root@trinity ~]# cd /usr/ports/databases/pecl-memcache[root@trinity ~]# make install clean另外一個號稱更快的 API 包是 mcache,看作者的說明,是直接使用了 libmemcache,但在 FreeBSD 下目前還沒有 Ports,需要源代碼方式安裝,具體可以參考 mcache 的說明。

一個簡單的 PHP 腳本示例:
addServer('localhost', 11211);$memcache->addServer('localhost', 11212);if ($memcache) {  $count = intval($memcache->get('static_count'));  $count ++;  $memcache->set('static_count', $count, 0, 30);  var_dump($memcache->get('static_count'));} else {  echo "Connection to memcached failed";}?>但不管 Memcached 是一個多么優秀的東西,在沒有合理的緩存策略(緩存什么東西?如何緩存?緩存時機?過期策略?)的情況下,只會被濫用,發揮不了真正的作用。構思 中…...

CONAN 2009-08-26 11:47 發表評論
]]>
Memcached使用點滴http://m.tkk7.com/conans/articles/292622.htmlCONANCONANWed, 26 Aug 2009 03:43:00 GMThttp://m.tkk7.com/conans/articles/292622.html閱讀全文

CONAN 2009-08-26 11:43 發表評論
]]>
善用Google日歷,讓事情做得更高效http://m.tkk7.com/conans/articles/251400.htmlCONANCONANThu, 15 Jan 2009 02:53:00 GMThttp://m.tkk7.com/conans/articles/251400.html以前我總是以為腦袋夠用,從來不用備忘、日程等工具。但事實上我太高估自己的能力,一個日程表、一個事項提醒,或者一個todo list都是十分有用的。在Lifehacker的投票里,人們認為最有用的GTD(Getting Things Done)工具是:筆和紙。除了筆和紙之外,Google日歷是我認為目前最好一個日程管理服務,或許你正在用,如果你了解下面的一些小技巧,你會用的更舒服。

 

昨天在twitter里做了個小小的調查,使用Google日歷的朋友不少,大多數人都會用到其中一個功能:短信提醒

這是個非常有效的事項提醒方式。

一、連接與外觀

1、https加密訪問

Google日歷支持https方式連接,建議大家都使用這種方式。當你在Google因搜索低俗內容被斷開連接后,使用http方式是無法連接Google日歷的。Gmail也有https方式

事實上,能用https的服務都建議大家使用這種方式,這個互聯網不可靠,你永遠不知道什么時候會被低俗。

2、拖曳選擇日期區間

你可以使用拖曳日期的方式選擇日程顯示區間:

3、設定個性化日期區間

當然,除了拖曳選擇日期區間外,你還可以在設置里設置“自定義視圖”顯示的日期數目。

4、給Google日歷換個皮膚

覺得Google日歷太丑了?有時我也有這樣的感覺,你可以使用Better GCal Firefox擴展使其變得漂亮,總體外觀如下:

二、同步日歷

一個好的日程表應該具有導出功能,也就是能與其它日程管理軟件/服務同步。

1、與電腦軟件同步

你可以在這里看到將Google日歷導出到Outlook等軟件和導入日歷到Google日歷的步驟。

如果你使用的是MS Outlook,你還可以使用專用的軟件來同步:Google Calendar Sync

2、同步到手機

(1)S60系列

如果你在用S60系列手機,你可以用GcalSync來將手機日程與Google日歷同步,首先你需要在手機上安裝GcalSync軟件。

安裝軟件后設置好用戶名和密碼即可。

(2)iPhone

對于iPhone來說,可以使用一款名為NemusSync的軟件,我目前正在使用,同步效果很理想。

(3)其它手機

如果你的手機既不是S60也不是iPhone,可以考慮使用GooSync服務

首先你需要在GooSync注冊賬戶,導入你的賬戶信息,然后再在手機上安裝GooSync的軟件。

GooSync不但能同步日程表,還可以同步Email聯系人等。

3、結合Remember the Milk

Remember the Milk是最好的Todo List服務之一,你可以在Google日歷里將RTM導入,方法是:

將下面URL的日歷添加到Google日歷,接著輸入RTM的用戶信息:

http://www.rememberthemilk.com/services/modules/googlecalendar/ics.rtm

三、日歷通知

1、短信通知

大多數人都會使用這種通知方式。Google日歷的短信通知方式是免費的,支持大多數手機號,你可以在Google日歷設置里添加手機號,在添加事項后設置短信提醒。

讓我好奇的是,每次SMS通知的SP號都是不一樣的。

2、團隊日程群發短信

如果你在為一個團隊管理日程,你希望每個人都收到短信提醒,可以用以下的方法:

(1)讓每個人注冊Google日歷,并設置好手機號

(2)添加一個團隊日歷,同時邀請所有團隊成員(Email方式)

(3)將事項設置為短信提醒

這主要是用于團隊事物提醒,最好別濫用在群發短信上。

3、免費天氣預報短信

既然Google日歷支持導入日歷又支持短信提醒,那是否可以導入一個天氣日歷,然后我們就可以接收免費的天氣預報短信呢?

能,具體請移步:免費接收天氣預報短信的兩種方式

四、操作技巧

1、快捷鍵

或許你不知道,Google日歷是支持快捷鍵操作的,英文版的Google日歷比中文版有更多的快捷鍵。和在Google Reader和Gmail的快捷鍵一樣,J,K分別是上下操作。C(compose)是新建日程。

當你忘記快捷鍵時,同樣可以輸入?(Ctrl+/)來查看快捷鍵提示。

2、拖曳日程

Google日歷支持拖曳日程,你可以將某個日程拖到另外一天或另一時段(月視圖不可拖曳改變時間):

五、日程共享

1、日歷分享

事實上在說到“團隊短信提醒”時已提到日歷分享,你可以與特定的人分享這個日歷(通過email),也可以將這個日歷設置為公開,這樣所有人都可以導入你的日歷。

2、嵌入到網頁

這是個十分有用的功能,之前我做的奧運日程表就是使用了Google日歷的網頁嵌入功能,具體操作可以參考嵌入奧運日程的文章。

3、訂閱日歷

既然日歷可以分享給別人導入,你同樣也可以導入別人的日歷。你可以直接從URL里添加一個新日歷,也可以在日歷搜索里搜索日歷。

比如我,搜索到了F1 2009年的賽歷,這樣我就不會錯過今年的F1比賽了。

六、其它

1、RSS訂閱日歷

和前面提到的“訂閱日歷”不一樣,這里的訂閱是用RSS閱讀器來訂閱日歷。如果你是一個天天只生活在閱讀器里的人,你可以訂閱任何公開的日歷。

每個公開的日歷都有唯一的RSS訂閱地址。這種方式會導致日程滯后,因為閱讀器抓取頻率是固定的,不是無間斷掃描。

2、作為日記使用

將Google日歷當做日記來使用是個不錯的想法,你可以新建一個“日記”日歷,然后每天在這個日歷里寫上日記。

有什么比這樣寫私人日記更方便?

3、使用Twitter更新日程

Twitter進階手冊里應該添加這個項目,這實在太有用了。

打開http://twittercal.com,注冊賬號后在twitter follow twittercal機器人,以后將日程信息以私信的形式發給twittercal機器人,日程就會被添加到Google日歷。

七、關于GTD

GTD是一門高深的學問,如何將事情以最高效并且不遺漏地做好是一件不容易的事。不要盲目地認為大腦可以記錄下一切,這是很難的,尤其是一些突如其來的想法。

我的做法是,隨身帶備筆和紙,外加使用Google日歷與手機日程同步。

有時我會有突然的想法,如果當時我在線,我會用Gtalk將它發送到我一個備用郵箱;如果不在線,如果沒有圖像或公式,我會記在手機上,然后同步到日歷;如果有圖的話,那筆和紙是必須的。

一旦有什么事情要在半天后做,我一定會添加到Google日歷,我已經不再相信我的大腦了,在這個信息過載的世界,我無法依靠大腦去記住一切。我認為,凡是能快速查詢到的信息,都不必記在大腦里。

我很少使用軟件來記錄日程,一般都使用在線服務



CONAN 2009-01-15 10:53 發表評論
]]>
KITE: Keynote的互聯網測試環境http://m.tkk7.com/conans/articles/210937.htmlCONANCONANThu, 26 Jun 2008 11:57:00 GMThttp://m.tkk7.com/conans/articles/210937.html聲明:JavaEye新聞文章的版權屬于JavaEye網站所有,嚴禁任何網站轉載本文,否則必將追究法律責任!
Keynote發布了名叫KITE的互聯網測試環境。



KITE是一款免費使用的軟件,在http://kite.keynote.com注冊,可在這里下載使用。KITE是一個新的基于桌面的測試軟件,編輯和分析網站的性能,給出可視化分析結果,能提供性能標準給整個web應用生命周期組,包括開發者,QA,性能分析和Web操作部門。

優勢包括:

1。測試Scripts操作基于DOM動作,比如創建DOM元素,創建符合某種特殊格式的DOM元素。

2。客戶端程序展示可視的HTTP屬性鏈接

3。基于Keynote支持,測試能夠在全球5個城市同時進行。

4。完全免費。



CONAN 2008-06-26 19:57 發表評論
]]>
系統構建網絡安全體系(轉)http://m.tkk7.com/conans/articles/210932.htmlCONANCONANThu, 26 Jun 2008 11:54:00 GMThttp://m.tkk7.com/conans/articles/210932.html

據最新的互聯網安全威脅報告顯示,混合式網絡威脅日益增多。目前全球每20秒就發生一次計算機入侵事件,Windows系統和組件的漏洞增多以及嚴重信息系統漏洞的不斷涌現,使得網絡安全 成為亟待解決的問題。如何保護企業的機密信息不受黑客和工業間諜的入侵,已成為政府機構、電信運營商 、企事業單位信息化健康發展需首要考慮的問題。

    由于層出不窮的病毒攻擊著網絡系統 中的各級設備,而各種病毒、CIH、沖擊波等更是侵犯著網絡中的基礎設施,這些情況迫使安全問題 解決策略不能再局限于某一節點、某一設備上,而是要從系統的高度出發,全面考慮全網的設施,全新認識安全防護 。對于電信運營商而言,不僅要從物理層保證傳輸安全,而且還要站在網絡層次的高度,重新看待和分析網絡安全,在全網架構中確定重點的防范區域,分層次、分階段的布設安全措施。

    一、傳統電信網的安全

    傳統電信網是基于連接的物理通信網絡,且是封閉的網絡。同時,傳統用戶終端也是模擬終端,如電話機、傳真機等是不帶智能的,這就使得相應業務完全由運營商控制,即控制和承載不分離,網絡面臨的安全的復雜性也就大大低于現有網絡。

 傳統電信網解決通信安全的主要目的是在物理傳輸上防止竊聽及數據傳輸問題,對數據傳輸其主要的安全保護措施是密碼技術,不涉及OSI或TCP/IP 的上層協議

    二、現有網絡的安全

    近年來由于互聯網的快速發展,電信網的分組數據業務呈爆炸性增長,基于TDM的PSTN話音網和分組交換數據網呈現融合趨勢,即電信網與互聯網的融合,形成可以傳遞話音和數據等綜合業務的新一代網絡。

    由于互聯網是一個IP網絡,它是開放且無連接性的,具有邊界和路徑不確定性:從用戶源主機到另一個目的主機可能存在多條路徑,一個主機可能是兩個不同網絡中的一個中轉點。因此,一個網絡中的資源可由另一網中的用戶訪問。這樣,一些未經授權的非法用戶可能就會給網絡安全構成嚴重的威脅。

    網絡安全已經成為互聯網發展過程中不容忽視的問題。尤其是為了減緩IP地址 匱乏,引進了NAT 技術,現在大部分諸如企業網、校園網 等的局域網 都采用了這種NAT技術,這種技術破壞了端到端的基本原則,在很大程度上破壞了互聯網的授權和鑒定機制。

    三、網絡安全體系結構

    這里針對互聯網絡系統實際運行TCP/IP協議模型來分析。TCP/IP 協議模型網絡安全貫穿于信息系統的四個層次,即網絡接口 層、網絡層、傳輸層、應用層。為此基于TCP/IP分層模型的網絡安全服務也是分層的,相應的不同層次的網絡服務也是不同的,需要分層進行配置 。下表是TCP/IP分層模型中提供的的網絡安全服務 (Y表示服務選項并入該層的標準之中,空格表示不提供)。

系統構建網絡安全體系 點擊查看大圖

    1.網絡接口層安全

    網絡接口層是TCP/IP的最低層,包括OSI的物理層、數據鏈路層 。網絡接口層有兩種類型:第一種是設備驅動程序(如局域網的網絡接口);第二種是含自身數據鏈路協議的復雜子系統(如X.25中的網絡接口)。為保證通過網絡鏈路傳送的數據不被竊聽,主要采用劃分VLAN 、加密通信(遠程網)等手段進行加密。

    對于通過使用VPN 業務連接多個私有地點的組織應該使用NAT、防火墻數據加密 技術。在VPN拓撲結構中,私有數據在公共網絡上傳送,因此加密是必須的。第2層隧道協議(L2TP)就是互聯網工程任務組(IETF)針對在公共網絡上用隧道傳送私有數據而制定的標準。作為VPN業務中的一種,光虛擬專用網 (OVPN)是下一代光傳送網-智能光網絡最有潛力的增值業務。OVPN的關鍵技術包括:安全隧道與信息加密技術 ,即使用加密與封裝相結合的技術對用戶數據進行安全保護;在VPN用戶訪問網絡資源 及管理員對VPN系統進行管理之前,采用用戶認證技術進行身份認證訪問控制 技術提供細粒度的訪問控制功能以實現對用戶信息資源的保護。

    使用光虛擬專用網不僅具有共享的經濟性、靈活性、可靠性和可擴展性等特點,更重要的是它在光層的安全性受到電信運營商的重視,這對于客戶來說支出更少,而對于運營商來說則有更多的收入、更安全的網絡。可以說,OVPN服務對于用戶和運營商來說是一種雙贏的選擇方案,在將來的智能光網絡領域有著廣泛的應用前景。

    2.網絡層安全

    網絡層安全即IP層安全性,它的主要優點是其透明性,也就是說,安全服務的提供不需要應用程序,也不需要對其他通信層次和網絡部件做任何改動。最主要缺點的是IP層一般對屬于不同進程 的包不作區別。對所有去往同一地址的包,它將按照同樣的加密密鑰和訪問控制策略來處理,這將使得網絡安全性能下降。針對面向主機密鑰分配的這些問題,RFCl825推薦使用面向用戶的密鑰分配,其中,不同的連接會得到不同的加密密鑰。但是,面向用戶的密鑰分配需要對相應的操作系統 內核作比較大的改動。

    IP層非常適合提供基于主機的安全服務,相應的安全協議可以用來在互聯網上建立安全的IP通道和虛擬專網 。例如,利用它對IP包的加密和解密功能,可以簡捷地強化防火墻系統的防衛能力。

    網絡層的安全性問題核心在于網絡是否能得到控制,目標網站通過對來源IP進行分析,便能夠初步判斷來自這一IP的數據是否安全,是否會對本網絡系統造成危害,來自這一IP的用戶是否有權使用本網絡的數據。一旦發現某些數據來自不可信任的IP地址,系統便會自動將這些數據阻擋在系統之外,并且大多數系統能夠自動記錄那些曾經造成過危害的IP地址,使它們的數據無法造成第二次危害。網絡層主要的安全技術 包括:

    (1)防火墻

    防火墻是建立在內外網絡邊界上的過濾封鎖機制。內部網絡被認為是安全和可信賴的,而外部網絡(通常是互聯網)被認為是不安全和不可信賴的。防火墻的作用是防止不希望的、未經授權的通信進入被保護的內部網絡,通過邊界控制強化內部網絡的安全策略

    防火墻對于解決一些機構網絡邊界安全問題起到了比較好的效果,應用很廣泛,但它只能是網絡安全措施的一個組成部分,而不能解決所有的網絡安全問題。

    (2)IP安全協議(IPSec)

    IP安全協議(IPSec)是一組提供數據保密性、數據完整性和對IP層的參與各方進行身份驗證 的公開標準。IPSec已經獲得行業的認可,客戶也要求所購買的互聯網產品中包含對它的支持。IPSec使用認證頭部(AH)和安全內容封裝(ESP)兩種機制,前者提供認證和數據完整性,后者實現通信保密。

    IPSec使得一個系統能夠選擇安全協議和算法,并且建立密鑰。互聯網密鑰交換(IKE)協議提供了對IPSec同等各方的身份驗證。使用IKE還可以對IPSec密鑰和其他安全性相關措施進行協商。IKE主要使用以下技術:

    ① DES——用來對數據包數據進行加密;

    ② Diffie-Hellman——用來建立一個共享的、保密的會話密鑰;

    ③ Message Digest 5(MD5)——一個對數據包數據進行身份驗證的哈希算法;

    ④ Secure Hash Algorithm(SHA) ——一個對數據包數據進行身份驗證的哈希算法;

    ⑤ RSA encryptednonces——提供否認功能;

    ⑥RSA簽名——提供認可功能。

    (3) 入侵檢測 技術

    ICSA(入侵檢測系統論壇)對入侵檢測技術的定義是:通過從計算機網絡 或計算機系統中的若干關鍵點收集信息并對其進行分析,從中發現網絡或系統中是否有違反安全策略的行為和遭到襲擊跡象的一種安全技術。

    入侵檢測技術是動態安全技術中最為核心的技術之一。傳統的操作系統加固技術和防火墻隔離技術等都是靜態安全防御技術,對網絡環境下日新月異的攻擊手段缺乏主動的反應。入侵檢測作為一種積極主動的安全防護技術,從網絡安全立體縱深、多層次防御的角度出發,在不影響網絡性能 的情況下能對網絡進行監測,提供了對內部攻擊、外部攻擊和誤操作的實時保護,在網絡系統受到危害之前攔截和響應入侵。

    目前,利用最新的可適應網絡安全技術 和 P2DR(PolicyProtectionDetectionResvonse)安全模型,已經可以深入地研究入侵事件、入侵手段本身及被入侵目標的漏洞等。入侵檢測技術通過對入侵行為的過程與特征的研究,使安全系統對入侵事件和入侵過程能做出實時響應。入侵檢測技術的一個發展趨勢是將它集成到路由器或三層交換機 中,在實現網絡安全的過程中入侵檢測技術執行的任務包括:監視、分析用戶及系統活動;系統構造和弱點的審計;識別、反映已知進攻的活動模式并向相關人士報警;異常行為模式的統計分析;評估重要系統和數據文件的完整性;操作系統的審計跟蹤管理,并識別用戶違反安全策略的行為。

    3.傳輸層安全

    傳輸層的脆弱性已經成為網絡協議 攻擊的主要突破口之一,其漏洞如下:

    ① TCP連接 的建立與終止。TCP連接的建立與斷開機制保證了傳輸的可靠性與速度,但是在連接建立過程完成之后,服務器端 不再驗證連接的另一方是不是合法的用戶,這種脆弱性的直接后果是連接可能被竊取。

    ② TCP連接請求對隊列的處理方法看起來很適用于連接的實際情況,但是很容易出現以下現象:如果某一用戶不斷地向服務器某一端口發送申請TCP連接的SYN 請求包,但不對服務器的SYN包發回ACK確認信息,則無法完成連接。當未完成的連接填滿傳輸層的隊列時,它不再接受任何連接請求,包括合法的連接請求,這樣就可能使服務器端口服務掛起。

    ③TCP連接的堅持。TCP連接仍舊能保持的特性會造成當TCP連接上很長時間內無數據被傳送時TCP連接資源的浪費。畢竟服務器某個端口可以存在的最大連接數有限,保持著大量不傳輸數據 的連接將極大地降低服務器性能,而且在服務器的兩次探測之間,可能導致TCP連接被竊取,使得原來與服務器連接的機器死機或重啟。

    由于TCP/IP協議本身非常簡單,沒有加密、身份認證等安全特性,因此要向上層應用提供安全通信的機制就必須在TCP之上建立一個安全通信層次。傳輸層網關就是在兩個通信節點之間代為傳遞TCP連接并進行控制,這個層次一般稱作傳輸層安全。最常見的傳輸層安全技術有SSL (安全套接層協議)、SOCKS和安全RPC等。同網絡層安全機制相比,傳輸層安全機制的主要優點是它提供基于進程對進程(而不是主機對主機)的安全服務和加密傳輸信道,利用公鑰體系進行身份認證、安全強度高、支持用戶選擇的加密算法。這一成就如果再加上應用級的安全服務,就可以提供更加安全可靠的安全性能。

    4.應用層安全

    應用層的缺陷主要集中在R系列命令中(rcp、rsh、rlogin等),這些命令是基于可信任主機之間的關系而設置的方便用戶登錄的一種方法,可信任主機不需要口令也可以通過R系列命令登錄進入目標系統。

    一般說來,在應用層提供安全服務有下面幾種可能的做法。首先是對每個應用(及應用協議)分別進行修改和擴展,加入新的安全功能。一些重要的TCP/IP應用已經這樣做了。例如,在RFCl421~1424中,IETF規定了私用強化郵件(PEM)來為基于SMTP的電子郵件 系統提供安全服務,應用層對防止系統遭病毒侵入和黑客攻擊 都有極其重要的作用。另外,應用層還可以使用應用平臺提供的安全服務,如采用通信內容安全保護、通信雙方的認證、審計等手段來保證基本安全。

    四、結束語

 在安全性設計中包含的任務與網絡總體設計所包含的任務是一致的:分析網絡安全需求 和目標,對其復雜性作出折中,因為任何網絡都不會有絕對的安全,安全的保護和策略越復雜,則投入的網絡運營成本越高。因此,找到兩者的平衡點,制定出一種合適的安全策略是非常必要的。



CONAN 2008-06-26 19:54 發表評論
]]>
DVD轉AVIhttp://m.tkk7.com/conans/articles/210683.htmlCONANCONANWed, 25 Jun 2008 13:40:00 GMThttp://m.tkk7.com/conans/articles/210683.html 它是一個免費的通用音頻/視頻批量轉碼工具,它將眾多來自開源社區的優秀音頻視頻編解碼器和工具整合為一個通用的解決方案,它可以將音頻、視頻文件在各種格式之間進行轉換。
特點聚焦
直接、批量地在眾多音頻視頻壓縮格式和容器格式之間進行轉換
完全控制轉碼過程和目標文件的各個參數
針對各種目標設備的專用界面(插件機制)
純綠色軟件,無需安裝任何媒體播放器或編碼器,不在系統中注冊任何組件
典型應用
提高壓縮率/減小文件尺寸
轉換至可在各種影音設備上播放的文件,如MP3播放器、MP4播放器、手機、PDA、PSP、VCD/DVD播放機
提取視頻文件中的音軌
壓縮和保存影音光碟

http://mediacoder.sourceforge.net/download_zh.htm
網站里有 教程
http://www.mediacoder.cn/wiki/index.php?title=%E9%A6%96%E9%A1%B5#MediaCoder.E7.94.A8.E6.88.B7.E6.96.87.E6.A1.A3

推薦使用 穩定版




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

1. RM to AVI MPEG WMV VCD SVCD DVD Converter V2.8

功能強大,易于使用的用來轉換RM格式文件到AVI、WMV、
www.skycn.com/soft/17254.html


2. Aare AVI to VCD DVD SVCD MPEG Converter 6.1

AareAVItoVCD/DVD/SVCDConverter是一個基于Windows的視頻轉換程序,程序可以幫助你將AV
www.onlinedown.net/soft/11787.htm


3. RM to AVI MPEG WMV VCD SVCD DVD Converter V2.80 漢化版

功能強大,易于使用的用來轉換RM格式文件到AVI、WMV、
www.skycn.com/soft/17253.html


4. Flash轉換王 6.55 Build 590

將Flash的SWF動畫轉換為VCD/SVCD/DVD/AVI等視頻格式的轉換工具
download.pchome.net/multimedia/video/18838.html


5. RM轉換精靈 7.1.2

RM和RMVB文件轉換到AVI、DVD、VCD、SVCD、MPEG格式的工具
download.pchome.net/multimedia/video/19129.html


6. Zealot AVI to VCD SVCD DVD Converter 2.8.0

一款功能強大的視頻文件格式轉換工具
download.pchome.net/multimedia/video/15889.html


7. #1 DVD Ripper 2.2.0

輕松將DVD影片備份為VCD(MPEG1)或SVCD格式(MPEG2),也可以轉換為AVI
download.pchome.net/multimedia/dvd/dvdripper/2895.html


8. RM to AVI MPEG WMV VCD SVCD DVD Converter 2.8.0

轉換RM格式到AVI、MPEG、WMV、VCD、SVCD和DVD格式的工具
download.pchome.net/multimedia/video/16469.html


9. Avi2Dvd 0.4.3 beta

一款免費的將avi/mkv/ogm轉換為vcd/svcd/dvd格式的工具
download.pchome.net/multimedia/video/19517.html


10. Flash轉換王 5.92 Build 410

將Flash的SWF動畫轉換為VCD/SVCD/DVD/AVI等視頻格式的轉換工具
download.pchome.net/design/animation/18838.html


11. AVOne - RM to AVI/DVD/VCD/SVCD/MPEG Converter V3.49

是一款視頻轉換工具,能將RM/RAM/RMVB文件轉變為AVI,
www.skycn.com/soft/13998.html


12. Aare AVI to VCD/DVD/SVCD Converter 5.0 漢化補丁

AareAVItoVCD/DVD/SVCDConverter是一個基于Windows的視頻轉換程序,程序可以幫助你將AV
www.onlinedown.net/soft/23247.htm


13. RM to AVI VCD SVCD DVD MPEG Converter V3.2

Rm to AVI VCD SVCD DVD Converter是影片轉檔的工具,
www.skycn.com/soft/15306.html


14. 1Click DVD to DivX AVI 1.21

1ClickDVDtoDivxxVidAvi是一個將DVD轉換成Divx,xVid和Avi文件的工具,可以對整個DVD或
www.onlinedown.net/soft/23708.htm


15. WMV to AVI MPEG WMV VCD SVCD DVD Converter 2.8.0

功能強大的視頻文件轉換工具
download.pchome.net/multimedia/video/17914.html


16. Aurora Video VCD/SVCD/DVD Converter&Creator V5.01

一款視頻文件轉換工具,可以把avi, divx, mpeg文件轉換
www.skycn.com/soft/20289.html


17. Xilisoft Video Converter V2.1.58.0111b

視頻轉換工具,可以在DVD、VCD、SVCD、MOV、RM、AVI、
www.skycn.com/soft/22751.html


18. AVI MPEG to VCD SVCD DVD V4.3

AVI MPEG to VCD SVCD DVD 轉換是一款功能強大的國產視
www.skycn.com/soft/20187.html


19. AVOne - RM to AVI/DVD/VCD/SVCD/MPEG Converter 3.46

是一款視頻轉換工具,能將RM/RAM/RMVB文件轉變為AVI,DVD,VCD,SVCD,MPEG1,MPEG2等視頻
www.onlinedown.net/soft/23293.htm


20. Allok MOV Converter 1.6.2

將MOV格式文件轉換為AVI, MPEG, WMV, DVD, VCD, SVCD的工具
download.pchome.net/multimedia/video/20241.html


21. 寬網多媒體MP3轉換器 1.01

實現MPEG1、VCD轉MP3;MPEG2(含PS、TS流)、DVD轉MP3;AVI(含DIVXXDIV等MPEG4文件)
www.onlinedown.net/soft/40750.htm


22. Super DVD Creator V9.10

DVD/VCD/SVCD制作軟件,可以將Avi/Divx影片轉換刻錄為
www.skycn.com/soft/13309.html


23. Cucusoft AVI to DVD VCD SVCD MPEG Converter Pro 7.07

CucusoftAVItoDVD/VCD/SVCD/MPEGConverterPro是一個功能強大的視頻文件轉換工具,程序
www.onlinedown.net/soft/17552.htm


24. Rm To AVI VCD SVCD DVD MPEG Converter 3.2

RMtoAVIVCDSVCDDVDMPEGConverter是一款將RM或RAM文件轉換成AVI、DVD、VCD、SVCD和MPEG
www.onlinedown.net/soft/25880.htm


25. DVD2AVI V1.86 漢化版

DVD2AVI 可以迅速的把 DVD 轉成 AVI 文件。
www.skycn.com/soft/3107.html


26. DVD to VCD AVI DivX Converter V3.2.69 漢化補丁

DVD to VCD AVI DivX Converter 是一款 DVD 剪輯轉換和
www.skycn.com/soft/19753.html


27. DVD2SVCD 1.2.2 Build 2

全自動DVD轉SVCD工具,能把DVD、PVA(DVB抓取文件)和AVI文件轉成SVCD
download.pchome.net/multimedia/dvd/dvdripper/11145.html


28. Super DVD Creator 8.5

可以將AVI、DIVX和MPEG轉換生成VCD、SVCD和DVD的軟件。
download.pchome.net/multimedia/video/15579.html


29. DVD to VCD AVI DivX Converter V3.2.69

是一個DVD剪輯和備份工具。它可以將DVD拷貝以及轉換成
www.skycn.com/soft/14498.html


30. DVDx 2.0

DVDx能讓您用一個步驟把DVD轉換成VCD2.0、SCVD1.0或AVI
download.pchome.net/multimedia/dvd/dvdripper/11146.html


31. All to AVI VCD SVCD DVD Converter V3.3

All to AVI VCD SVCD DVD Converter 是影片轉檔的工具
www.skycn.com/soft/15305.html


32. AVOne Gold - DVD/VCD/SVCD/MPEG/AVI/ASF/MP3 Converter V3.36

一個功能強大的視頻文件轉換器,主要的特點包括:AVI文
www.skycn.com/soft/16002.html


33. 龍騰紫雪(MediaFactory) V2.2.400

該軟件可以把常見的VCD/DVD/MPG/MPEG/AVI/ASF文件轉換
www.skycn.com/soft/15677.html


34. Ultra RM Converter 1.76

UltraRMConverter是一款可以幫助你將RM,RMVB分割、結合、轉換成AVI,MPEG,VCD,SVCD,DVD
www.onlinedown.net/soft/36587.htm


35. AVI MPEG to VCD SVCD DVD 4.3

AVIMPEGtoVCDSVCDDVD轉換是一款功能強大的國產視頻文件格式轉換工具。程序支持AVI/MPE
www.onlinedown.net/soft/35209.htm


36. MainConcept MPEG Encoder 1.42 漢化補丁

本軟件是一個將AVI或QuickTime格式的文件轉換為Mpeg文件的工具,是制作DVD、VCD和SVCD
www.onlinedown.net/soft/37770.htm


37. AVOne - AVI to DVD/VCD/SVCD/MPEG Converter 3.46

SuperAVItoDVD-VCD-SVCDconverter,一個功能強大的視頻文件轉換器,主要的特點包括:A
www.onlinedown.net/soft/8339.htm


38. WMV to AVI MPEG VCD SVCD DVD Converter 1.3.4 漢化版

WMVtoAVIMPEGVCDSVCDDVDConverter是一款功能強大的視頻文件轉換工具,程序可以將WMV視
www.onlinedown.net/soft/28809.htm


39. Avi2Dvd V0.4.3 beta

Avi2Dvd 是一款將avi/mkv/ogm轉換為vcd/svcd/dvd的工具
www.skycn.com/soft/22951.html


40. AVI DivX to DVD SVCD VCD Converter V1.4.4 漢化版

一款強大的視頻轉換工具,能將AVI, DivX, MPEG1/2, WM
www.skycn.com/soft/24021.html
http://www.soft8.net/soft8.php?page=2&word=DVD轉AVI&site=all&by=js&num=280


CONAN 2008-06-25 21:40 發表評論
]]>
DVD轉成DVDRIPhttp://m.tkk7.com/conans/articles/210681.htmlCONANCONANWed, 25 Jun 2008 13:39:00 GMThttp://m.tkk7.com/conans/articles/210681.html
由于制作DVDrip的流程較為復雜,需要用到的工具軟件也較多,因此事先應該做好準備工作,以免正式開工時手忙腳亂。

1、電腦硬件及工具軟件的準備

制作DVDrip是一項對電腦配置要求較高的工作,你最好要擁有一顆強力的CPU,以下為建議配置:

CPU——至少700MHz,越高越好。

硬盤——至少要有5GB左右的剩余空間。

內存——最低128MB,256MB以上尤佳。

光驅——8倍速以上DVD-ROM。

制作DVDrip需要的工具軟件:

文件拷貝軟件——SmartRipper

計算視頻流碼率軟件——Advanced DivX Bitrate Calc!

視頻部分制作軟件——FlasK MPEG或Xmpeg

音頻分離及制作軟件——DVD2AVI

最終合成軟件——NanDUB

字幕制作軟件——VobSub
2、復制VOB文件至硬盤

從DVD盤片中復制.vob文件至硬盤,是最為關鍵的準備工作,復制質量的好壞將直接影響到最終輸出的DVDrip效果。

打開DVD根目錄,可以看到這里面有兩個子目錄:AUDIO_TS與VIDEO_TS。AUDIO_TS中沒有任何內容,DVD的所有信息都存放在VIDEO_TS目錄中。這個目錄包含了.vob、.ifo和.bup等三種類型的文件。

其中VOB文件用來保存MPEG-2格式的影音數據,這些數據不僅包含影片本身內容,還包含了菜單和按鈕等畫面,以及多種字幕的子畫面流。而IFO則用于控制VOB文件的播放。由于IFO文件關系到光盤能否正常播放,因此所有的IFO文件都有一個備份——即相應同名的BUP文件。要制作DVDrip,只要將記錄正片數據的VOB文件和IFO文件復制到硬盤就可以了。

專門用于復制VOB文件的軟件有很多,如CladDVD、DVD Decypter、DeCSS、Vstrip GUI等,筆者在這里推薦使用SmartRipper。它只有幾百KB大,使用方便,非常適合新手。

將DVD盤片放入光驅,運行SmartRipper,自動彈出操作界面,在“Movie”界面的“Input”→“Chapters”中選擇要復制的片段(如圖1),在Target處選擇保存路徑;點擊“Stream Processing”標簽選取音軌。


而后點擊左方的“Files”按鈕,勾選要復制的VOB文件。回到“Movie”界面,點擊左下方的“Start”鍵,開始復制。
3、從VOB主文件中分離音頻文件

由于DVDrip是合成壓縮出的文件,因此DVDrip的視頻和音頻部分要分開制作,此時我們就要從VOB主文件中將音頻文件分離出來。推薦使用軟件DVD2AVI。它也可將DVD直接轉為AVI文件,但效果不太理想,因此在此只用它來分離AC3音軌。

運行DVD2AVI,點擊“文件→打開”,導入剛剛得到的Godfather.vob源文件。然后選擇“音軌”,每個音軌上的語種都是不同的,因此要事先確認你所需的語種在哪個音軌上。例如所需的英語在音軌1上,就在“音軌編號”處選擇“音軌1”,在“MPEG音頻”處選擇“分離混合的所有音軌”。

接著進入“視頻”選項,在“視頻→區域操作”處選“無”,而后在“色彩空間”處選“YUV 4∶2∶2”,其他都保持為默認設置。最后點擊“文件”→“保存工程”即開始音軌分離,分離完畢后得到一個后綴名為.d2v的工程文件,同時得到分離出來的AC3文件。

此時有兩種選擇,一種是將AC3音軌轉換為MP3音軌后再與視頻部分整合成AVI文件;另一種是直接將AC3音頻文件保留下來,與視頻部分整合。為保留DVD特有的環繞立體音效,建議還是使用AC3音軌。文件雖然大了一些,但是絕對值得!

4、計算視頻流的碼率

要想讓做好的DVDrip便利于網絡間的傳遞交流,并且能夠放進一兩張刻錄光盤中收藏,保持較小的個頭非常重要。而DVDrip的大小則取決于影片的長度、視頻流的碼率、音頻流的碼率等因素。所謂碼率,就是指每秒時間內的數據流量。碼率越高,對畫面的描述就越精細,就越接近于原始畫面,但同時也需要更大的存貯空間。


圖2計算出視頻流的碼率

筆者推薦使用Advanced DivX Bitrate Calc!來計算視頻流的最佳碼率。它個頭雖小,功能卻不弱,可根據影片的長度、視頻及音頻的格式結合CD的數量與容量,計算出視頻流的最佳碼率,或者算出DVDrip所要占用的硬盤空間。其設定十分簡單,“Input Length Video”表示“輸入影片長度”,“Input Sound Rate”表示“輸入聲音比率”,“Input HDD Space”表示選擇CD盤數量,其中“Custom”為自定義容量。以上選項都妥當后,軟件就會自動給出最精確的視頻流碼率了(如圖2)。

視頻部分制作

FlasK MPEG和Xmpeg是兩個相當優秀的多媒體轉換軟件,不但能將MPEG-1和MPEG-2影音文件轉換成其他常見的多媒體影音格式,還能夠在已安裝DivX解碼器的電腦上快速制作AVI文件。實際上Xmpeg就是在FlasK MPEG的基礎上改良而來的,它修正了FlasK MPEG的一些BUG,并增加了較多的功能,最新版已能支持中文操作界面。因此筆者推薦使用Xmpeg來制作DVDrip的視頻部分。

運行Xmpeg,軟件會自動要求選擇語言環境,選“中文(簡體)”后即進入操作主界面

點擊“文件→打開文件”,導入事先拷貝好的Godfather.vob文件,導入時間可能會稍長,請耐心等候。由于許多影片至少有兩個以上的音軌(DD2.0 / DD5.1),導入成功后,會跳出一個提示窗口,要你先選擇音軌,其中0x80表示杜比5.1音軌,選它即可。

選完后按右下角綠箭頭,主界面將會顯示影片的預覽畫面,同時帶有一個名為“Video Player”的進度調諧器

接下來,我們就該對參數進行設置了。請選擇“選項”→“輸出格式選項”,此時會彈出名為“AVIPlugin”的設置面板,先設置“Audio Codec”(音頻編碼)部分,如想保留AC3音效,可設定為“DivX Audio”;下面的“Available formats for audio codec”(音頻編碼可用格式)相應設置為128kbit/s,48,000Hz,Stereo格式。

接著設置“Video Codec”部分,“Video Codec”部分可供選擇的“Codec(編碼)”很多,應根據你所使用的DivX解碼器的類型進行選擇,筆者使用的是DivX Codec 4.12,選定后會彈跳出Divx Video Codec設置窗口,由于DivX Codec 4.x版新增了“2-pass”功能,使得畫質及動態效果更上一層樓,雖然要比“1-pass”多花上一倍的時間處理,但為了優異的效果,還是建議采用“2-pass”模式,請在這個畫面選擇“2-pass,first pass”。下面的數據速率設定,按照我們在準備工作時算好的視頻流碼率來決定。其余設定根據實際需求設定,完畢后按“OK”回到上一個畫面,并按下右下角的綠色箭頭回到主界面。

在主界面選擇“選項→全局項目選項”,彈出“Option”窗口,對其他重要選項進行設定:

視頻標簽:“畫面幀尺寸”和“時間基準”通常無須改變,保持默認即可。“iDCT選項”關系到影片譯碼的速度,你可根據自身電腦CPU的速度按“Next”選擇一種較快的模式。“視頻構建”中的“重建優質圖像”和“Deinterlace”(消除隔行掃描)應予勾選,這樣可以改善畫質、消除隔行掃描的DVD中出現的拉絲現象,從而更流暢地播放影片。

音頻標簽:音頻設置較為簡單。如果想保留AC3音效,請在“音頻模式”中選擇“直接數據流復制”;如果選擇“音頻解碼”,那么在下面的“采樣頻率”中請勾選“同輸入一致”,并選擇48000Hz即可。

執行處理標簽:經過筆者測試,該處的設置大多只需按默認值設定即可。只有“Aspect ratio”(畫面比例設定)部分應根據影片本身所采用的銀幕格式,如寬銀幕、全銀幕、歐式銀幕等來設定最正確的比例。

文件標簽:在此處設定輸出文件的保存路徑。

常規標簽:“編碼時間”是用來分割影片的,如不想分割的話,直接勾選“編碼整個文件”即可。若想把影片分割成兩部分,只要將框內的數字除以二就行了,不過有小數點的話要無條件進位。在之前設置Divx Video Codec時,如果我們采用了“2-pass”模式,那么“2nd Pass Enabled”這地方就要打勾。

以上一切設置就緒后,回到主界面窗口,進入“運行”選擇“開始轉換”,Xmpeg就會對VOB文件進行編碼,并輸出后綴名為.avi的MPEG-4視頻文件。DVDrip的視頻部分制作到此完工
音頻部分制作

實際上,AC3音頻部分的制作在以上介紹的用DVD2AVI軟件單獨提取,或是用Xmpeg壓制視頻的過程中就已完成。之所以將這部分獨立出來,是因為DVDrip的音頻部分分為AC3音頻和MP3音頻兩種,有些朋友為了讓做出來的DVDrip體積能小一點,而不采用AC3音頻。MP3音頻雖然可減小DVDrip的體積,但由AC3提供的5個全頻域聲道加1個超重低音聲道組成的5.1音效也就此喪失,因此如非特別需要,筆者不推薦使用MP3音頻進行最后的壓縮合成。將AC3音頻轉換為MP3十分容易,大家可用Lame、Azid、Blaze Media Pro等軟件自行轉換,筆者在此不再贅述。

下面我們接著來看如何將制作好的視頻和音頻部分合并成一個AVI文件。

合成為AVI文件

NanDub是一款基于VirtualDUB開發的DivX編輯、制作軟件,你的電腦只需安裝有DivX 3.11或免費的Mpeg4v2兩種解碼器即可使用它。對于其他的DivX解碼器,就只能使用NanDub附帶的VirtualDub軟件進行DVDrip的最終合成了。

筆者由于安裝的是DivX 4.12解碼器,因此就以VirtualDub漢化版作為AVI文件編輯的平臺,進行最終的合成。使用NanDub大體上與此相同。

啟動VirtualDub,首先選擇“文件”→“打開視頻文件”,導入用Xmpeg生成的無聲的Godfather.avi文件,開始查看并編輯文件(如圖5)。


圖5用VirtualDub導入AVI文件

通過“文件”→“濾鏡”打開濾鏡面板,點擊“添加”,在添加面板中選擇添加“Resize”濾鏡在此你可調整畫面的大小。




調整至滿意狀態后,可以合并音頻部分了,在“音頻”中選擇“直接復制音頻流”,再在“視頻”同樣選擇“直接復制音頻流”,之后依次選擇“音頻”→“AC3音頻”,導入先前用DVD2AVI或Xmpeg分離出來的AC3音軌文件;如要導入MP3音軌文件,則選擇“音頻”→“MP3音頻”。

接著在“視頻”→“SBC選項”中選擇“位頻率計算器”,彈出位頻率計算器,在該窗口的“最終尺寸”處填入你要生成的AVI文件的大小及數量。例如輸入700MB×2,就表示最后要生成2個700M大小的AVI文件而后點擊旁邊的“計算”按鈕,軟件就會自動計算出合適的碼流。



OK,終于到了最激動人心的時刻,請選擇“文件”→“另存為AVI”,在彈出的窗口中選擇保存路徑并填入相關信息等內容,最后按“保存”,就會生成最終的音頻-視頻交錯文件。AVI文件的合成至此大功告成。

現在,只要再加上外掛字幕,一部完整意義上的DVDrip就制成了。
外掛字幕制作

欣賞外語電影,字幕的重要性是不言而喻的。如果沒有字幕而你的英文又欠佳的話,那看著精彩的外語大片可就是一件痛苦的事情了。因此字幕是構成DVDrip的重要組成部分。目前網絡上提供下載的DVDrip字幕分為兩大類,一類是基于圖形格式的如.idx和.sub字幕;另一類是基于文本格式的如.srt、

.sub、.ssa、.smi等字幕。我們現在就以VobSub這款優秀的DVDrip字幕文件制作和輔助播放軟件為平臺,分別介紹這兩種字幕的制作方法:

1、圖形字幕的制作

從VobSub的程序組中啟動VobSub Configure命令,點擊“Open”按鈕(如圖8),在對話框中選擇“文件類型”為“IFO and Vobs”,然后選擇DVD中包含正片信息的IFO文件,并選擇一個存放字幕文件的文件夾。


圖8啟動VobSub Configure

接著進入字幕流選擇畫面(如圖9),選好字幕后確定即開始建立字幕索引。


圖9字幕流選擇

建立索引完成后,返回主窗口,選擇自己喜歡的字幕顏色與位置,最后按“OK”就會在指定存放的目錄中生成.idx和.sub兩個文件,把它們的主文件名改為與.avi的主文件名相同后,同置于一個目錄中,即可實現外掛播放了。

☆字幕切割與合并:

由于一部影片可能會分割為多個AVI文件存放,因此字幕文件也要做相應的分割。在分割字幕前要先知道AVI文件的精確長度,我們可以用VirtualDub打開AVI文件,將進度條拖到最后,就可以看到影片的精確時長了。然后調用VobSub程序組中的“VobSub Cutter”(如圖10),點擊“Open”選擇待分割的字幕文件,在“Start”處輸入開始時間,“End”處輸入結束時間。再點擊“Save as”即可將分割后的字幕文件保存下來。


圖10調用VobSub Cutter分割字幕

同理,要合并字幕,可調用VobSub程序組中的“VobSub joiner”,在兩個Input處導入要合并的字幕文件,在Output處設定輸出文件的位置和文件名,在“Beginning of”處填入兩段字幕交接處的時間碼,最后點“GO”即完成合并。

☆去除字幕中的多余語言:

用文本編輯器打開.idx文件,去掉不想要的字幕信息后保存。再使用VobSub程序組中的Subresync工具打開這個.idx文件,保存成新的字幕文件即可。

2、文本字幕的制作

所謂文本字幕,就是提取DVD中的字幕信息流,生成圖像后再進行OCR識別而獲得的一種字幕形式。它具有體積小巧、易于編輯、便于調整等優點。制作文本字幕我們要用到SubRip這個軟件。


圖11選擇字幕流的語言種類

運行SubRip,點擊“File”→“Open VOB”,彈出選擇對話框。點擊其中的“Open IFO”,打開DVD正片的.ifo文件,在Language Stream處選擇字幕流的語言種類(如圖11),其余均保持默認選項,點擊“Start”按鈕,SubRip就會自動開始識別指定文件中的字幕流,當每個字母第一次出現時軟件都會要求你進行字母驗證,之后再出現同樣的字母就會被自動識別。全文識別完畢后,SubRip還提供“Post OCR Correction”功能對文件進行校正。最后點擊“File”→“Save as”將字幕保存為.srt格式的文件即完成了文本字幕的制作。
3、著名字幕網站推介:

牛過字幕站:http://www.niuguo.com//

新視界字幕站:sn-www.com/dvd/film.asp

至此,一部完整的DVDrip就新鮮出爐了。你可以把它刻錄到光盤中,或通過網絡與你的朋友們一起分享DVDrip所帶來的視聽震撼了!

DVD小知識

D5:DVD-5的簡稱,即單面單層,最大容量4.7GB,一面數據,另一面一般印刷文字或圖案。

D9:DVD-9的簡稱,即單面雙層,最大容量8.5GB,一面數據,另一面一般印刷文字或圖案。

D10:DVD-10的簡稱,即雙面單層,最大容量9.7GB,兩面都是數據面。

D14:DVD-14的簡稱。即雙面多層,最大容量13GB。以兩面三層形式記錄數據,第一面為雙層,第二面單層。

D18:DVD-18的簡稱,即雙面雙層,最大容量17GB,兩面都是數據面。

有損壓縮:簡稱YSYS,意思是將經過解密的原汁原味的數碼信號進行壓縮,以便裝入容量較小的盤面里。有損壓縮所產生出來的DVD盤片,無論圖像還是聲音質量都會有所下降。

一、什么是 RMVB
RMVB 中的 VB,指的是 VBR,即 Variable Bit Rate 的縮寫,中文含義是可變比特率。
RMVB 打破了壓縮的平均比特率,使在靜態畫面下的比特率降低,來達到優化整個影片中比特率,提高效率,節約資源的目的,一般來說,一個700MB的 DVDrip 采用平均比特率為450Kbps的壓縮率,生成的 RMVB 大小僅為400MB,但是畫質并沒有太大變化。可種技術,早在MP3中就得以應用,現在隨著 Real 公司的 Helix Producer 9 的推出,也應用到了視頻領域。

二、如何制作 RMVB
1、制作之前的準備
由于 RMVB 是最新的編碼方式,所以現在只有使用 Real 公司的 Helix Producer 9,才可以制作 RMVB 格式的視頻文件。Helix Producer 9 分為 Basic 版和 Plus 版,Plus 版的功能比 Basic 版要更為強大,但是 Basic 版是免費的,可以在http:/www.real.com下載到。

2、制作 RMVB
如果我們把700MB的 DVDrip 文件轉成平均比特率為450Kbps的 RMVB 文件,大概需要4-10小時(依CPU性能決定),在制作過程中,電腦不能干其他事情,制作必須一氣呵成,如果中途停止,那么只有重新來過了。
* 導入文件。運行主程序(圖一),點擊 Browse 選擇待轉換的 DVDrip 文件。如果你的電腦可以正常播放 DVDrip 電影并且字幕正常,那么 Helix Producer 會自動將字幕轉入 RMVB 文件。
* 轉換細節設置。點擊 Audiences 調整壓縮參數,在 Helix Producer 中,已經為用戶提供了很多內置的參數模板(圖二),要制作 RMVB 文件,必須把設置對話框右邊以有的的模板刪除,因為 RMVB 不支持多速率。然后在左邊的模板窗口選擇適當的 VBR 模板,這里我們使用 S-450K Surround VBR Download 模板,雙擊這個模板,我們可以看到該模板的更為詳細的設置,其中里面最高比特率為900Kbps,這已經足夠滿足現在所有清晰影片的要求了。下面我們對模板進行細微調整(這個功能只有 Plus 版具備)。
在圖三中,平均比特率決定了靜態畫面的清晰度,對最后生成的文件大小起決定作用;而最大比特率決定了動態畫面的品質,避免了馬賽克的產生。如果你的影片是動作影片的話,那么你需要把最大比特率設置到1500Kbps以上,這樣才會得到更好的效果。
另外在圖三中的 Target frame rate 處,可以對影片的FPS進行調整,FPS調整并不影響影片的清晰度,但是會影響影片的流暢程度,同時也對生成文件大小起作用。默認設置為30FPS,如果生成文件過大,你也可以設置成24FPS,因為人眼幾乎無法分辨24FPS和30FPS的差別,設置完成之后,點擊 Ok ,回到圖二的界面中。
* 設置視頻過濾器和版權信息。設置視頻過濾器可以通過點擊 Video Filters 來調整,視頻過濾器用于調整影片畫面的一些設置,推薦選上 Black Level Correction 選項,他可以提高影片的亮度和對比度,其他設置使用默認值即可。在 Clip Information 里面可以設置影片的版權信息(大片出自你手)。
* 開始生成 RMVB 文件。雙擊圖一右下表中的文件項,你可以改變文件的存儲位置。然后按下紅色的 Encode 按鈕,壓縮就開始了。

CONAN 2008-06-25 21:39 發表評論
]]>
用 Firebug 動態調試和優化應用程序http://m.tkk7.com/conans/articles/209619.htmlCONANCONANFri, 20 Jun 2008 15:26:00 GMThttp://m.tkk7.com/conans/articles/209619.html簡介

Firebug 是 Mozilla Firefox 瀏覽器的開源擴展,提供了很多工具,可以監視、編輯和調試任何 Web 站點的級聯樣式表(CSS)、HTML、文檔對象模型(DOM)和 JavaScript。Firebug 包括一個 JavaScript 控制臺、一個日志記錄 API 以及一種有用的網絡監視器。借助 Firebug,可以很輕松地調試和優化 Web 和 Ajax 應用程序。

本文將幫助您熟悉所如下的 Firebug 特性:

  • 編輯活動 Web 頁面的 HTML、CSS 和 JavaScript
  • 調試和剖析報告
  • 進行日志記錄以測試執行時間
  • 使用 Network Monitor 分析 Web 頁面的加載時間
  • 錯誤報告

 





立即開始

使用 Firefox,下載 Firebug。通過單擊頁面右側的橙色按鈕 Install Firebug 安裝此擴展。

Firefox 安裝了此擴展后,重啟瀏覽器。要使用 Firebug:

  1. 轉到任何一個 Web 頁面并按 F12 在瀏覽器窗口打開 Firebug。
  2. CTRL-F12 在另一個窗口打開 Firebug(如果有兩個監視器,這是一個很好的特性)。

    本文使用了第一種方法在相同的瀏覽器窗口中打開 Firebug,如圖 1 所示:

 


圖 1. 安裝后的 Firebug
安裝后的 Firebug

安裝后,Firebug 是禁用的。單擊 Enable Firebug 啟用它,如圖 2 所示:


圖 2. Firebug 顯示了 developerWorks 的首頁
Firebug 顯示了 developerWorks 的首頁

本文的后面的內容將討論 Firebug 的特性。





HTML 和 CSS 工具

HTML 和 CSS 工具包括:HTML 檢查和編輯、CSS 編輯和 CSS 可視化。

檢查和編輯 HTML

可以使用 HTML 檢查特性在源代碼中定位可視 HTML。

  1. 在 Firebug 窗口,單擊 Inspect
  2. 將鼠標移到任何一個 HTML 組件之上。這樣就可以在 Firebug 窗口上看到該 HTML 元素(被藍色方框圍繞)和 HTML 源代碼。如圖 3 的示例:

    圖 3. 在 Firebug 檢查 HTML
    在 Firebug 檢查 HTML

  3. 單擊選中的 HTML 元素。有趣的是這會使此次檢查“鎖定”到所選定的元素。
  4. 可以轉到 Firebug 窗口并單擊 Edit 編輯選定的元素。

    圖 4 給出了 Firebug 編輯窗口以及瀏覽器窗口中已編輯的文本。“Editing with Firebug” 已經代替了原先的 Ajax 標題。



    圖 4. 編輯 HTML
    編輯 HTML

在檢查元素時,將會看到 Firebug 窗口內的元素嵌套,如圖 5 所示:


圖 5. 元素嵌套
元素嵌套

編輯 CSS

還可以通過檢查這個 Web 頁面進行 CSS 編輯。Inspection 視圖會顯示相關的 CSS 條目,包括繼承樣式。如圖 6 的示例:


圖 6. CSS 檢查
CSS 檢查

CSS 工具還可用來編輯 CSS 即時屬性、禁用屬性、自動完成和圖片預覽,如圖 7 所示:


圖 7. CSS 圖片預覽
CSS 圖片預覽

CSS 的可視化

CSS 的可視化在檢查 HTML(回顧 圖 3 中的藍色邊框)已經展示過了。Firebug Layout 選項卡顯示了更多的信息,比如間隙、 偏移和其他相關的量度。圖 8 中的布局窗口則顯示了一個導航元素的量度:


圖 8. CSS 盒的量度
CSS 盒的量度

圖 9 展示了能即時編輯 CSS 盒的奇妙的 Firebug 特性:


圖 9. CSS 盒編輯
CSS 盒編輯




JavaScript 工具

現在,JavaScript 工具是 Web 開發中最有用的工具之一。Firebug 提供了調試、剖析、日志記錄和命令行控制臺特性。

調試和剖析

Firebug JavaScript 工具包括斷點、監視表達式和典型調試器中常見的其他一些工具。圖 10 展示了斷點和逐步調試的實際例子。請注意作為工具提示的主機變量的值。


圖 10. JavaScript 調試器
JavaScript 調試器

有用的調試工具能:

  • 直接導航到 JavaScript 中的特定行
  • 監視表達式(可以是任意的 JavaScript 表達式)
  • 以可視格式調用堆棧
  • 條件斷點
  • 錯誤后進行調試的能力

 

JavaScript 剖析非常有用。如 Firebug 中的其他特性一樣,剖析也很容易使用。單擊 Console 選項卡上的 Profile 啟動剖析器,如圖 11 所示:


圖 11. 啟動 JavaScript 剖析器
JavaScript 剖析器

剖析開始后,可以瀏覽一下此站點。單擊 Profile 獲得剖析報告,如圖 12 所示:


圖 12. JavaScript 剖析器報告
JavaScript 剖析器報告

該報告顯示了花在函數上的時間和平均時間等等。

JavaScript 日志記錄

對于更愿意使用老的日志記錄(而非調試)方式的開發人員,Firebug 提供了日志記錄功能。日志記錄使用的是一種 Firebug JavaScript API。最簡單的一種日志條目是 console.log("logging");

Console API 包含其他一些功能,如清單 1 所示:


清單 1. Firebug Console API 示例
            console.time("test timer");
            console.log("Hello from ",document.title);
            console.info("This is info");
            console.warn("This is warning");
            console.error("This is error");
            console.timeEnd("test timer");
            

可以使用 console.timeconsole.timeEnd 來測量執行時間。在詳細報告中顯示結果的 console.profile()console.profileEnd() (見清單 1)也可用來測量執行時間。

圖 13 顯示了這些結果。JavaScript 控制臺日志測試功能被添加到由 Web 服務器提供服務的頁面中。


圖 13. Console 日志
Console 日志

Console API 內其他有用的特性還有堆棧跟蹤、對象檢查和字符串格式化。

JavaScript 命令行

Firebug 最為強大特性之一就是 JavaScript 命令行。這種命令行的使用方式與其他命令行一樣;它執行您編寫的所有 JavaScript 代碼,好像它們就是頁面的一部分一樣。通過命令行,可以檢查 DOM、獲得屬性等等。所有返回值都顯示在控制臺上。

命令行具有自動完成功能(使用 Tab 鍵)以及完善的文本編輯器(能夠編寫完整的函數而不僅僅是幾行代碼)等等。圖 14 給出了一個簡單的控制臺會話。請注意 Web 頁面左上角的徽標。這里也可以進行即時編輯。


圖 14. 命令行 JavaScript
命令行 JavaScript

與控制臺類似,命令行也有一個 API,它包含可用于 Firebug 的特殊函數,比如 $(id)。該函數能夠返回帶有給定 id 的元素。





網絡監控

Firebug Network Monitor 特性可用來監視加載 Web 頁面所花費的時間。使用 Net 選項卡可以看到進度欄,該進度欄顯示了一個文件相對所有其他文件開始和停止加載的時間。Network Monitor 分開每個文件的流量,因此就可以查看加載圖像、JavaScript、HTML 等各占用了多少時間。此外,還可以查看資源是否從瀏覽器緩存中加載。

對于本例中的 Ajax 開發,Firebug 在 Net 選項卡和 Console 選項卡中均顯示了每個 XMLHttpRequest。

圖 15 顯示了如何利用 Network Monitor 查看 HTTP 請求和響應頭。要查看 HTTP 頭,只需單擊每個請求左側的箭頭將其展開。全部請求、已用時間和內容的大小均顯示在 Firebug 窗口底部。


圖 15. Network Monitor
Network Monitor




其他特性

Firebug 的其他特性包括:

錯誤報告

一旦錯誤發生,Firebug 能夠提供有用的:

  • 狀態欄指示器
  • 行號、文件和堆棧跟蹤
  • 調試器集成
  • 搜索和過濾器

Firebug 還會顯示只與所查看的頁面相關的錯誤。

DOM

Document Object Model 是 Web 頁面中的對象和函數的等級結構。Firebug DOM 包括所有定制的和標準的對象,而且 DOM explorer 能夠分辨它們。這里同樣可以進行 JavaScript 代碼導航、自動完成和即時編輯。

定制

Firebug 定制特性包括黑名單和白名單以及依據個人需要更改字體大小的功能。



CONAN 2008-06-20 23:26 發表評論
]]>
收發網易,雅虎,hotmail,gmail郵件可能遇到的問題的解答http://m.tkk7.com/conans/articles/209595.htmlCONANCONANFri, 20 Jun 2008 15:07:00 GMThttp://m.tkk7.com/conans/articles/209595.html一、我使用新申請的網易的126/163郵件箱,能在網頁上收郵件,但是通過FOXMAIL無法收信,錯誤提示:沒有權限使用POP3 ,但是我以前的126/163郵箱是可以正常使用的, 錯誤如下圖提示,網友貼圖

二、我使用新申請的網易的126/163郵件箱,能在網頁上發郵件,但是通過FOXMAIL無法發信,錯誤提示: 550 用戶被鎖定。但是我以前的126/163郵箱是可以正常使用的, 如下圖提示:網友貼圖

答:對于這兩類問題,常見于網易的126和163免費郵箱, 原因與解決辦法如下:
1)對于@126.com
   126對免費用戶不支持pop3和smtp,只對使用了126增值服務的用戶提供使用POP客戶端軟件收取郵件的功能,因此如果您是新申請的126郵箱,您將不能使用客戶端軟件來收發郵件, 除非您購買了126的增值服務。網友貼圖
來源請參考網易客戶幫助:
http://www.126.com/help/client_04.htm
2)對于@ 163.com
   如果您是新注冊的免費郵箱用戶,在沒有升級為3G郵箱空間后是無法使用pop3郵件客戶端軟件的,建議您在進入郵箱后,根據提示手動操作免費升級為3G郵箱后,再進行相關的客戶端軟件設置來收發郵件和管理您的免費郵箱。
   您可以在126郵箱免費升級(http://uinfo.mail.163.com/enlarge3g/index.htm)的頁面,根據提示免費將郵箱升級為3G。
   注意:一些用戶沒有看清楚FOXMAIL的提示, 只看到FOXMAIL詢問是否要重新輸入密碼, 但是沒有看到上面的錯誤提示,因此反復輸入密碼,但是反復不通過。此類問題也可以參照上面的方式來解決。

三、我用FOXMAIL無法收取/發送 yahoo的郵件,錯誤情況如下:
   1)能收信, 但是發信出去后對方接收不到;
   2)在收/發信時候進度窗口一直停住直到超時;
   3)發信時還可能提示:
網友貼圖
答 :
1) 對于雅虎中國(@yahoo.com.cn)
首先在網頁上要設置:
 如果你使用的是yahoo的測試版,首先要換回原來的郵箱。
網友貼圖
 選擇“郵件選項”,然后點擊“賬戶信息”
網友貼圖
 編輯用戶信息
網友貼圖
選擇”Send to my Yahoo!Mail”網友貼圖

在FOXMAIL中配置如下(來源: http://help.cn.yahoo.com/answerpage.html?id=861 )
請您按照下面步驟,在Foxmail上添加一個雅虎郵箱帳戶。
    1、請您首先查看是否已經訂制了雅虎郵箱POP3+來信提醒;
    2、如果您已經訂制,則請您打開foxmail并點擊工具欄中的“郵箱”,選擇“新建郵箱帳戶”;
網友貼圖
    3、隨后請按照下圖所示填寫郵箱名稱及密碼,然后點擊下一步;
網友貼圖
    4、隨后點擊完成;
網友貼圖
    5、然后點擊工具欄中的“郵箱”—“修改郵箱帳戶屬性”;
網友貼圖
    6、如下圖所示填寫您的姓名和電子郵件地址,并點擊確定;
網友貼圖
    7、然后選擇“郵件服務器”并填寫SMTP和POP3服務器的地址;
網友貼圖
注意: 經過FOXMAIL組測試, 目前 填寫smtp服務器時,不要填寫.cn后綴
    8、然后點擊“高級”并勾選“此服務器要求安全連接(SSL)”,同時修改端口為“465”和“995”;
網友貼圖
    9、設置完之后,點擊“確定”即可成功收發;
網友貼圖
即可對雅虎中國郵箱進行收發郵件。

注意:
   1、“POP3郵箱帳號”, 只能填寫帳號名,不要在后面填寫@yahoo.com.cn;
   2、不要選擇”自動啟動Foxmail-Hotmail Proxy”項。


2) 對于@yahoo.com
   原因:Yahoo.com郵件服務不再對免費用戶開放,而只對使用了Yahoo! Mail Plus service的用戶開放。 請參考yahoo官方說明:
  http://help.yahoo.com/l/us/yahoo/mail/original/mailplus/pop/pop-35.html
  如果您已經在使用Yahoo!Mail Plus service,您可以按如下方式設置FOXMAIL:網友貼圖

四、我用FOXMAIL無法連接到 @hotmail.com收發郵件了,但是我周圍有些朋友又能夠收發hotmail。 如果是服務器有限制,但是為什么目前有一些第三方軟件又號稱能收發hotmail郵件呢?是不是FOXMAIL不支持hotmail呢?連接到hotmail時出現下圖提示:
網友貼圖
答 :
  Hotmail.com的郵件服務已經不再對用戶免費開放了. 除了個別活躍老用戶仍然可以繼續使用外,其他用戶,包括新用戶(2004年以后注冊的)必須到http://join.msn.com/general/email 去購買服務.
  目前一些其他的共享軟件使用一些第三方的免費服務器或者模擬了網頁的提交方式來收取hotmail郵件. 但是這些方式都不穩定, 因此如果想正常使用hotmail, 建議直接購買郵件服務.

五、我申請了gmail,能夠登錄網頁進行郵件收發,但是無法使用FOXMAIL來對@gmail.com的POP收郵件.
出現下圖提示:

網友貼圖
答:按官方設置,在webmail的option里選擇支持pop即可收信



           (2007-5-14 FOXMAIL開發組整理)  

CONAN 2008-06-20 23:07 發表評論
]]>
五種開源協議的比較(BSD,Apache,GPL,LGPL,MIT) - 整理http://m.tkk7.com/conans/articles/209589.htmlCONANCONANFri, 20 Jun 2008 15:03:00 GMThttp://m.tkk7.com/conans/articles/209589.html當Adobe、Microsoft、Sun等一系列巨頭開始表現出對"開源"的青睞時,"開源"的時代即將到來!

出處:http://www.sinoprise.com/read.php?tid-662-page-e-fpage-1.html,我沒有改動原文,只是進行了一些排版和整理。
參考文獻:http://www.fsf.org/licensing/licenses/

現今存在的開源協議很多,而經過Open Source Initiative組織通過批準的開源協議目前有58種(http://www.opensource.org/licenses/alphabetical)。我們在常見的開源協議如BSD, GPL, LGPL,MIT等都是OSI批準的協議。如果要開源自己的代碼,最好也是選擇這些被批準的開源協議。

這里我們來看四種最常用的開源協議及它們的適用范圍,供那些準備開源或者使用開源產品的開發人員/廠家參考。

BSD開源協議(original BSD licenseFreeBSD licenseOriginal BSD license

BSD開源協議是一個給于使用者很大自由的協議。基本上使用者可以"為所欲為",可以自由的使用,修改源代碼,也可以將修改后的代碼作為開源或者專有軟件再發布。

但"為所欲為"的前提當你發布使用了BSD協議的代碼,或則以BSD協議代碼為基礎做二次開發自己的產品時,需要滿足三個條件:

  1. 如果再發布的產品中包含源代碼,則在源代碼中必須帶有原來代碼中的BSD協議。
  2. 如果再發布的只是二進制類庫/軟件,則需要在類庫/軟件的文檔和版權聲明中包含原來代碼中的BSD協議。
  3. 不可以用開源代碼的作者/機構名字和原來產品的名字做市場推廣。

BSD 代碼鼓勵代碼共享,但需要尊重代碼作者的著作權。BSD由于允許使用者修改和重新發布代碼,也允許使用或在BSD代碼上開發商業軟件發布和銷售,因此是對商業集成很友好的協議。而很多的公司企業在選用開源產品的時候都首選BSD協議,因為可以完全控制這些第三方的代碼,在必要的時候可以修改或者二次開發。

Apache Licence 2.0(Apache License, Version 2.0Apache License, Version 1.1Apache License, Version 1.0

Apache Licence是著名的非盈利開源組織Apache采用的協議。該協議和BSD類似,同樣鼓勵代碼共享和尊重原作者的著作權,同樣允許代碼修改,再發布(作為開源或商業軟件)。需要滿足的條件也和BSD類似:

  1. 需要給代碼的用戶一份Apache Licence
  2. 如果你修改了代碼,需要再被修改的文件中說明。
  3. 在延伸的代碼中(修改和有源代碼衍生的代碼中)需要帶有原來代碼中的協議,商標,專利聲明和其他原來作者規定需要包含的說明。
  4. 如果再發布的產品中包含一個Notice文件,則在Notice文件中需要帶有Apache Licence。你可以在Notice中增加自己的許可,但不可以表現為對Apache Licence構成更改。

Apache Licence也是對商業應用友好的許可。使用者也可以在需要的時候修改代碼來滿足需要并作為開源或商業產品發布/銷售。

GPL(GNU General Public License

我們很熟悉的Linux就是采用了GPL。GPL協議和BSD, Apache Licence等鼓勵代碼重用的許可很不一樣。GPL的出發點是代碼的開源/免費使用和引用/修改/衍生代碼的開源/免費使用,但不允許修改后和衍生的代碼做為閉源的商業軟件發布和銷售。這也就是為什么我們能用免費的各種linux,包括商業公司的linux和linux上各種各樣的由個人,組織,以及商業軟件公司開發的免費軟件了。

GPL協議的主要內容是只要在一個軟件中使用("使用"指類庫引用,修改后的代碼或者衍生代碼)GPL 協議的產品,則該軟件產品必須也采用GPL協議,既必須也是開源和免費。這就是所謂的"傳染性"。GPL協議的產品作為一個單獨的產品使用沒有任何問題,還可以享受免費的優勢。

由于GPL嚴格要求使用了GPL類庫的軟件產品必須使用GPL協議,對于使用GPL協議的開源代碼,商業軟件或者對代碼有保密要求的部門就不適合集成/采用作為類庫和二次開發的基礎。

其它細節如再發布的時候需要伴隨GPL協議等和BSD/Apache等類似。

LGPL(GNU Lesser General Public License

LGPL是GPL的一個為主要為類庫使用設計的開源協議。和GPL要求任何使用/修改/衍生之GPL類庫的的軟件必須采用GPL協議不同。LGPL允許商業軟件通過類庫引用(link)方式使用LGPL類庫而不需要開源商業軟件的代碼。這使得采用LGPL協議的開源代碼可以被商業軟件作為類庫引用并發布和銷售。

但是如果修改LGPL協議的代碼或者衍生,則所有修改的代碼,涉及修改部分的額外代碼和衍生的代碼都必須采用LGPL協議。因此LGPL協議的開源代碼很適合作為第三方類庫被商業軟件引用,但不適合希望以LGPL協議代碼為基礎,通過修改和衍生的方式做二次開發的商業軟件采用。

GPL/LGPL都保障原作者的知識產權,避免有人利用開源代碼復制并開發類似的產品

MIT(MIT

MIT是和BSD一樣寬范的許可協議,作者只想保留版權,而無任何其他了限制.也就是說,你必須在你的發行版里包含原許可協議的聲明,無論你是以二進制發布的還是以源代碼發布的.



CONAN 2008-06-20 23:03 發表評論
]]>
正則表達式之道http://m.tkk7.com/conans/articles/209563.htmlCONANCONANFri, 20 Jun 2008 14:46:00 GMThttp://m.tkk7.com/conans/articles/209563.html什么是正則表達式一個正則表達式,就是用某種模式去匹配一類字符串的一個公式。很多人因為它們看上去比較古怪而且復雜所以不敢去使用——很不幸,這篇文章也不能夠改變這一點,不過,經過一點點練習之后我就開始覺得這些復雜的表達式其實寫起來還是相當簡單的,而且,一旦你弄懂它們,你就能把數小時辛苦而且易錯的文本處理工作壓縮在幾分鐘(甚至幾秒鐘)內完成。正則表達式被各種文本編輯軟件、類庫(例如Rogue Wave的tools.h++)、腳本工具(像awk/grep/sed)廣泛的支持,而且像Microsoft的Visual C++這種交互式IDE也開始支持它了。

我們將在如下的章節中利用一些例子來解釋正則表達式的用法,絕大部分的例子是基于vi中的文本替換命令和grep文件搜索命令來書寫的,不過它們都是比較典型的例子,其中的概念可以在sed、awk、perl和其他支持正則表達式的編程語言中使用。你可以看看不同工具中的正則表達式這一節,其中有一些在別的工具中使用正則表達式的例子。還有一個關于vi中文本替換命令(s)的簡單說明附在文后供參考。

正則表達式基礎

正則表達式由一些普通字符和一些元字符(metacharacters)組成。普通字符包括大小寫的字母和數字,而元字符則具有特殊的含義,我們下面會給予解釋。

在最簡單的情況下,一個正則表達式看上去就是一個普通的查找串。例如,正則表達式"testing"中沒有包含任何元字符,,它可以匹配"testing"和"123testing"等字符串,但是不能匹配"Testing"。

要想真正的用好正則表達式,正確的理解元字符是最重要的事情。下表列出了所有的元字符和對它們的一個簡短的描述。

元字符   描述

 
.
  匹配任何單個字符。例如正則表達式r.t匹配這些字符串:ratrutr t,但是不匹配root。 
$
  匹配行結束符。例如正則表達式weasel$ 能夠匹配字符串"He's a weasel"的末尾,但是不能匹配字符串"They are a bunch of weasels."。 
^
  匹配一行的開始。例如正則表達式^When in能夠匹配字符串"When in the course of human events"的開始,但是不能匹配"What and When in the"。
*
  匹配0或多個正好在它之前的那個字符。例如正則表達式.*意味著能夠匹配任意數量的任何字符。
\
  這是引用府,用來將這里列出的這些元字符當作普通的字符來進行匹配。例如正則表達式\$被用來匹配美元符號,而不是行尾,類似的,正則表達式\.用來匹配點字符,而不是任何字符的通配符。
[ ] 
[c1-c2]
[^c1-c2]
  匹配括號中的任何一個字符。例如正則表達式r[aou]t匹配ratrotrut,但是不匹配ret。可以在括號中使用連字符-來指定字符的區間,例如正則表達式[0-9]可以匹配任何數字字符;還可以制定多個區間,例如正則表達式[A-Za-z]可以匹配任何大小寫字母。另一個重要的用法是“排除”,要想匹配除了指定區間之外的字符——也就是所謂的補集——在左邊的括號和第一個字符之間使用^字符,例如正則表達式[^269A-Z] 將匹配除了2、6、9和所有大寫字母之外的任何字符。
\< \>
  匹配詞(word)的開始(\<)和結束(\>)。例如正則表達式\<the能夠匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。注意:這個元字符不是所有的軟件都支持的。
\( \)
  將 \( 和 \) 之間的表達式定義為“組”(group),并且將匹配這個表達式的字符保存到一個臨時區域(一個正則表達式中最多可以保存9個),它們可以用 \1\9 的符號來引用。
|
  將兩個匹配條件進行邏輯“或”(Or)運算。例如正則表達式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:這個元字符不是所有的軟件都支持的。
+
  匹配1或多個正好在它之前的那個字符。例如正則表達式9+匹配9、99、999等。注意:這個元字符不是所有的軟件都支持的。
?
  匹配0或1個正好在它之前的那個字符。注意:這個元字符不是所有的軟件都支持的。
\{i\}
\{i,j\}
  匹配指定數目的字符,這些字符是在它之前的表達式定義的。例如正則表達式A[0-9]\{3\} 能夠匹配字符"A"后面跟著正好3個數字字符的串,例如A123、A348等,但是不匹配A1234。而正則表達式[0-9]\{4,6\} 匹配連續的任意4個、5個或者6個數字字符。注意:這個元字符不是所有的軟件都支持的。

最簡單的元字符是點,它能夠匹配任何單個字符(注意不包括新行符)。假定有個文件test.txt包含以下幾行內容:

he is a rat
he is in a rut
the food is Rotten
I like root beer
我們可以使用grep命令來測試我們的正則表達式,grep命令使用正則表達式去嘗試匹配指定文件的每一行,并將至少有一處匹配表達式的所有行顯示出來。命令
grep r.t test.txt
在test.txt文件中的每一行中搜索正則表達式r.t,并打印輸出匹配的行。正則表達式r.t匹配一個r接著任何一個字符再接著一個t。所以它將匹配文件中的ratrut,而不能匹配Rotten中的Rot,因為正則表達式是大小寫敏感的。要想同時匹配大寫和小寫字母,應該使用字符區間元字符(方括號)。正則表達式[Rr]能夠同時匹配Rr。所以,要想匹配一個大寫或者小寫的r接著任何一個字符再接著一個t就要使用這個表達式:[Rr].t

要想匹配行首的字符要使用抑揚字符(^)——又是也被叫做插入符。例如,想找到text.txt中行首"he"打頭的行,你可能會先用簡單表達式he,但是這會匹配第三行的the,所以要使用正則表達式^he,它只匹配在行首出現的h

有時候指定“除了×××都匹配”會比較容易達到目的,當抑揚字符(^)出現在方括號中是,它表示“排除”,例如要匹配he ,但是排除前面是t or s的情性(也就是theshe),可以使用:[^st]he

可以使用方括號來指定多個字符區間。例如正則表達式[A-Za-z]匹配任何字母,包括大寫和小寫的;正則表達式[A-Za-z][A-Za-z]* 匹配一個字母后面接著0或者多個字母(大寫或者小寫)。當然我們也可以用元字符+做到同樣的事情,也就是:[A-Za-z]+ ,和[A-Za-z][A-Za-z]*完全等價。但是要注意元字符+ 并不是所有支持正則表達式的程序都支持的。關于這一點可以參考后面的正則表達式語法支持情況

要指定特定數量的匹配,要使用大括號(注意必須使用反斜杠來轉義)。想匹配所有1001000的實例而排除1010000,可以使用:10\{2,3\},這個正則表達式匹配數字1后面跟著2或者3個0的模式。在這個元字符的使用中一個有用的變化是忽略第二個數字,例如正則表達式0\{3,\} 將匹配至少3個連續的0。

簡單的例子

這里有一些有代表性的、比較簡單的例子。

vi 命令 作用


:%s/ */ /g 把一個或者多個空格替換為一個空格。
:%s/ *$// 去掉行尾的所有空格。
:%s/^/ / 在每一行頭上加入一個空格。
:%s/^[0-9][0-9]* // 去掉行首的所有數字字符。
:%s/b[aeio]g/bug/g 將所有的bagbegbigbog改為bug。 
:%s/t\([aou]\)g/h\1t/g 將所有tagtogtug分別改為hathothug(注意用group的用法和使用\1引用前面被匹配的字符)。
   

中級的例子(神奇的咒語)

例1

將所有方法foo(a,b,c)的實例改為foo(b,a,c)。這里a、b和c可以是任何提供給方法foo()的參數。也就是說我們要實現這樣的轉換:

之前   之后
foo(10,7,2)   foo(7,10,2)
foo(x+13,y-2,10)   foo(y-2,x+13,10)
foo( bar(8), x+y+z, 5)   foo( x+y+z, bar(8), 5)

下面這條替換命令能夠實現這一魔法:

:%s/foo(\([^,]*\),\([^,]*\),\([^)]*\))/foo(\2,\1,\3)/g

現在讓我們把它打散來加以分析。寫出這個表達式的基本思路是找出foo()和它的括號中的三個參數的位置。第一個參數是用這個表達式來識別的::\([^,]*\),我們可以從里向外來分析它: 

[^,]   除了逗號之外的任何字符
[^,]*   0或者多個非逗號字符
\([^,]*\)   將這些非逗號字符標記為\1,這樣可以在之后的替換模式表達式中引用它
\([^,]*\),   我們必須找到0或者多個非逗號字符后面跟著一個逗號,并且非逗號字符那部分要標記出來以備后用。

現在正是指出一個使用正則表達式常見錯誤的最佳時機。為什么我們要使用[^,]*這樣的一個表達式,而不是更加簡單直接的寫法,例如:.*,來匹配第一個參數呢?設想我們使用模式.*來匹配字符串"10,7,2",它應該匹配"10,"還是"10,7,"?為了解決這個兩義性(ambiguity),正則表達式規定一律按照最長的串來,在上面的例子中就是"10,7,",顯然這樣就找出了兩個參數而不是我們期望的一個。所以,我們要使用[^,]*來強制取出第一個逗號之前的部分。

這個表達式我們已經分析到了:foo(\([^,]*\),這一段可以簡單的翻譯為“當你找到foo(就把其后直到第一個逗號之前的部分標記為\1”。然后我們使用同樣的辦法標記第二個參數為\2。對第三個參數的標記方法也是一樣,只是我們要搜索所有的字符直到右括號。我們并沒有必要去搜索第三個參數,因為我們不需要調整它的位置,但是這樣的模式能夠保證我們只去替換那些有三個參數的foo()方法調用,在foo()是一個重載(overoading)方法時這種明確的模式往往是比較保險的。然后,在替換部分,我們找到foo()的對應實例,然后利用標記好的部分進行替換,是的第一和第二個參數交換位置。

例2

假設有一個CSV(comma separated value)文件,里面有一些我們需要的信息,但是格式卻有問題,目前數據的列順序是:姓名,公司名,州名縮寫,郵政編碼,現在我們希望講這些數據重新組織,以便在我們的某個軟件中使用,需要的格式為:姓名,州名縮寫-郵政編碼,公司名。也就是說,我們要調整列順序,還要合并兩個列來構成一個新列。另外,我們的軟件不能接受逗號前后面有任何空格(包括空格和制表符)所以我們還必須要去掉逗號前后的所有空格。

這里有幾行我們現在的數據:

Bill Jones,     HI-TEK Corporation ,  CA, 95011
Sharon Lee Smith,  Design Works Incorporated,  CA, 95012
B. Amos   ,  Hill Street Cafe,  CA, 95013
Alexander Weatherworth,  The Crafts Store,  CA, 95014
...
我們希望把它變成這個樣子:
Bill Jones,CA 95011,HI-TEK Corporation
Sharon Lee Smith,CA 95012,Design Works Incorporated
B. Amos,CA 95013,Hill Street Cafe
Alexander Weatherworth,CA 95014,The Crafts Store
...
我們將用兩個正則表達式來解決這個問題。第一個移動列和合并列,第二個用來去掉空格。

下面就是第一個替換命令:

:%s/\([^,]*\),\([^,]*\),\([^,]*\),\(.*\)/\1,\3 \4,\2/
這里的方法跟例1基本一樣,第一個列(姓名)用這個表達式來匹配:\([^,]*\),即第一個逗號之前的所有字符,而姓名內容被用\1標記下來。公司名和州名縮寫字段用同樣的方法標記為\2\3,而最后一個字段用\(.*\)來匹配("匹配所有字符直到行末")。替換部分則引用上面標記的那些內容來進行構造。

下面這個替換命令則用來去除空格:

:%s/[ \t]*,[ \t]*/,/g
我們還是分解來看:[ \t]匹配空格/制表符,[ \t]* 匹配0或多個空格/制表符,[ \t]*,匹配0或多個空格/制表符后面再加一個逗號,最后,[ \t]*,[ \t]*匹配0或多個空格/制表符接著一個逗號再接著0或多個空格/制表符。在替換部分,我們簡單的我們找到的所有東西替換成一個逗號。這里我們使用了結尾的可選的g參數,這表示在每行中對所有匹配的串執行替換(而不是缺省的只替換第一個匹配串)。

例3

假設有一個多字符的片斷重復出現,例如:
Billy tried really hard
Sally tried really really hard
Timmy tried really really really hard
Johnny tried really really really really hard
而你想把"really"、"really really",以及任意數量連續出現的"really"字符串換成一個簡單的"very"(simple is good!),那么以下命令:
:%s/\(really \)\(really \)*/very /
就會把上述的文本變成:
Billy tried very hard
Sally tried very hard
Timmy tried very hard
Johnny tried very hard
表達式\(really \)*匹配0或多個連續的"really "(注意結尾有個空格),而\(really \)\(really \)* 匹配1個或多個連續的"really "實例。

困難的例子(不可思議的象形文字)

不同工具中的正則表達式

OK,你已經準備使用RE(regular expressions,正則表達式),但是你并準備使用vi。所以,在這里我們給出一些在其他工具中使用RE的例子。另外,我還會總結一下你在不同程序之間使用RE可能發現的區別。

當然,你也可以在Visual C++編輯器中使用RE。選擇Edit->Replace,然后選擇"Regular expression"選擇框,Find What輸入框對應上面介紹的vi命令:%s/pat1/pat2/g中的pat1部分,而Replace輸入框對應pat2部分。但是,為了得到vi的執行范圍和g選項,你要使用Replace All或者適當的手工Find Next and Replace(譯者按:知道為啥有人罵微軟弱智了吧,雖然VC中可以選中一個范圍的文本,然后在其中執行替換,但是總之不夠vi那么靈活和典雅)。

sed

Sed是Stream EDitor的縮寫,是Unix下常用的基于文件和管道的編輯工具,可以在手冊中得到關于sed的詳細信息。

這里是一些有趣的sed腳本,假定我們正在處理一個叫做price.txt的文件。注意這些編輯并不會改變源文件,sed只是處理源文件的每一行并把結果顯示在標準輸出中(當然很容易使用重定向來定制):

sed腳本   描述

 
sed 's/^$/d' price.txt   刪除所有空行
sed 's/^[ \t]*$/d' price.txt   刪除所有只包含空格或者制表符的行
sed 's/"http://g' price.txt   刪除所有引號

awk

awk是一種編程語言,可以用來對文本數據進行復雜的分析和處理。可以在手冊中得到關于awk的詳細信息。這個古怪的名字是它作者們的姓的縮寫(Aho,Weinberger和Kernighan)。

在Aho,Weinberger和Kernighan的書The AWK Programming Language中有很多很好的awk的例子,請不要讓下面這些微不足道的腳本例子限制你對awk強大能力的理解。我們同樣假定我們針對price.txt文件進行處理,跟sed一樣,awk也只是把結果顯示在終端上。 

awk腳本   描述

 
awk '$0 !~ /^$/' price.txt   刪除所有空行
awk 'NF > 0' price.txt   awk中一個更好的刪除所有行的辦法
awk '$2 ~ /^[JT]/ {print $3}' price.txt   打印所有第二個字段是'J'或者'T'打頭的行中的第三個字段
awk '$2 !~ /[Mm]isc/ {print $3 + $4}' price.txt   針對所有第二個字段不包含'Misc'或者'misc'的行,打印第3和第4列的和(假定為數字)
awk '$3 !~ /^[0-9]+\.[0-9]*$/ {print $0}' price.txt   打印所有第三個字段不是數字的行,這里數字是指d.d或者d這樣的形式,其中d是0到9的任何數字
awk '$2 ~ /John|Fred/ {print $0}' price.txt   如果第二個字段包含'John'或者'Fred'則打印整行

grep

grep是一個用來在一個或者多個文件或者輸入流中使用RE進行查找的程序。它的name編程語言可以用來針對文件和管道進行處理。可以在手冊中得到關于grep的完整信息。這個同樣古怪的名字來源于vi的一個命令,g/re/p,意思是global regular expression print。

下面的例子中我們假定在文件phone.txt中包含以下的文本,——其格式是姓加一個逗號,然后是名,然后是一個制表符,然后是電話號碼:

Francis, John           5-3871
Wong, Fred              4-4123
Jones, Thomas           1-4122
Salazar, Richard        5-2522

grep命令   描述

 
grep '\t5-...1' phone.txt   把所有電話號碼以5開頭以1結束的行打印出來,注意制表符是用\t表示的
grep '^S[^ ]* R' phone.txt   打印所有姓以S打頭和名以R打頭的行
grep '^[JW]' phone.txt   打印所有姓開頭是J或者W的行
grep ', ....\t' phone.txt   打印所有姓是4個字符的行,注意制表符是用\t表示的
grep -v '^[JW]' phone.txt   打印所有不以J或者W開頭的行
grep '^[M-Z]' phone.txt   打印所有姓的開頭是M到Z之間任一字符的行
grep '^[M-Z].*[12]' phone.txt   打印所有姓的開頭是M到Z之間任一字符,并且點號號碼結尾是1或者2的行

egrep

egrep是grep的一個擴展版本,它在它的正則表達式中支持更多的元字符。下面的例子中我們假定在文件phone.txt中包含以下的文本,——其格式是姓加一個逗號,然后是名,然后是一個制表符,然后是電話號碼:
Francis, John           5-3871
Wong, Fred              4-4123
Jones, Thomas           1-4122
Salazar, Richard        5-2522
egrep command   Description

 
egrep '(John|Fred)' phone.txt   打印所有包含名字John或者Fred的行
egrep 'John|22$|^W' phone.txt   打印所有包含John 或者以22結束或者以W的行
egrep 'net(work)?s' report.txt   從report.txt中找到所有包含networks或者nets的行

正則表達式語法支持情況

命令或環境 . [ ] ^ $ \( \) \{ \} ? + | ( )
vi  X   X   X   X   X           
Visual C++  X   X   X   X   X           
awk  X   X   X   X       X   X   X   X 
sed  X   X   X   X   X   X         
Tcl  X   X   X   X   X     X   X   X   X 
ex  X   X   X   X   X   X         
grep  X   X   X   X   X   X         
egrep  X   X  X   X   X     X   X   X   X 
fgrep  X   X   X   X   X           
perl  X  X  X  X  X    X  X  X  X

 


vi替換命令簡介

Vi的替換命令:
:ranges/pat1/pat2/g
其中
: 這是Vi的命令執行界面。
range 是命令執行范圍的指定,可以使用百分號(%)表示所有行,使用點(.)表示當前行,使用美元符號($)表示最后一行。你還可以使用行號,例如10,20表示第10到20行,.,$表示當前行到最后一行,.+2,$-5表示當前行后兩行直到全文的倒數第五行,等等。

s 表示其后是一個替換命令。

pat1 這是要查找的一個正則表達式,這篇文章中有一大堆例子。

pat2 這是希望把匹配串變成的模式的正則表達式,這篇文章中有一大堆例子。

g 可選標志,帶這個標志表示替換將針對行中每個匹配的串進行,否則則只替換行中第一個匹配串。

網上有很多vi的在線手冊,你可以訪問他們以獲得更加完整的信息。


CONAN 2008-06-20 22:46 發表評論
]]>
主站蜘蛛池模板: 婷婷亚洲综合五月天小说在线 | 中文字幕无码免费久久| 亚洲av之男人的天堂网站| 久久久久亚洲AV成人网人人网站 | 免费人妻精品一区二区三区| 亚洲av无码专区在线播放| 激情综合色五月丁香六月亚洲| 国产一卡二卡四卡免费| 老湿机一区午夜精品免费福利| 亚洲国产成人综合精品| 在线视频亚洲一区| 黄网站色视频免费看无下截| 色天使色婷婷在线影院亚洲| 色婷婷精品免费视频| 免费看黄福利app导航看一下黄色录像| 色婷婷精品免费视频| 国产精品免费看久久久香蕉| 99免费在线视频| 永久在线观看免费视频| 99免费观看视频| 亚洲免费人成在线视频观看 | 真正全免费视频a毛片| 日本高清不卡中文字幕免费| 亚洲高清免费视频| 无码日韩精品一区二区三区免费| 91视频免费网址| 亚洲免费观看视频| 国产免费一区二区三区| 日韩av无码成人无码免费| 国产精品免费_区二区三区观看 | 久9久9精品免费观看| 一个人看的www在线观看免费 | 亚洲色无码国产精品网站可下载| 亚洲JLZZJLZZ少妇| a级毛片免费观看在线| **实干一级毛片aa免费| 浮力影院第一页小视频国产在线观看免费| 免费观看国产精品| 日韩中文无码有码免费视频| 99久久99久久精品免费看蜜桃| 好爽又高潮了毛片免费下载|