Dedian  
          -- 關(guān)注搜索引擎的開(kāi)發(fā)
          日歷
          <2006年8月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789
          統(tǒng)計(jì)
          • 隨筆 - 82
          • 文章 - 2
          • 評(píng)論 - 228
          • 引用 - 0

          導(dǎo)航

          常用鏈接

          留言簿(8)

          隨筆分類(lèi)(45)

          隨筆檔案(82)

          文章檔案(2)

          Java Spaces

          搜索

          •  

          積分與排名

          • 積分 - 65573
          • 排名 - 816

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

           

          2006年8月11日

          微軟從未放棄搜索引擎的競(jìng)爭(zhēng),一直和Google暗暗較勁。盡管live search在內(nèi)部員工里像是一個(gè)joke,但老大一直毫不猶豫地往里砸錢(qián)。

          說(shuō) 實(shí)話,我盡量使用微軟的產(chǎn)品,操作系統(tǒng)放棄了linux,開(kāi)發(fā)工具放棄了perl和java,當(dāng)然這些是工作使然。但map我以前用 MapQuest,現(xiàn)在改用live map,瀏覽器也棄Firefox改用IE8,但凡能用的,我都會(huì)改用微軟的產(chǎn)品,不過(guò)對(duì)于搜索引擎,感覺(jué)實(shí)在太爛了,搜出來(lái)的東西總不是自己想要的,往 后翻了10來(lái)頁(yè)也不見(jiàn)有用的。后來(lái)就偷偷把Google設(shè)為默認(rèn)引擎。見(jiàn)到一個(gè)同事比我更過(guò)分,連outlook的搜索都改用Google Desktop來(lái)搜索。

          后來(lái),3月初的時(shí)候,內(nèi)部就發(fā)布了一個(gè)新的搜索引擎,叫Kumo(酷摸?)。據(jù)說(shuō)是因?yàn)閘ive這個(gè)名字不好,不 信把它反過(guò)來(lái)念念看看是什么?我覺(jué)得只是一個(gè)名字的更換沒(méi)有什么意義。后來(lái)還是忍不住上去試了試,發(fā)現(xiàn)確實(shí)比原來(lái)的那個(gè)好一些。沒(méi)事的時(shí)候也會(huì)用Kumo 摸一把。

          今天,鮑老大又宣布發(fā)布一個(gè)新的搜索引擎,叫Bing。感覺(jué)怎樣?我怎么讀的像有病的‘病’?還不叫Search Engine,改叫Decision Engine,夠新潮的概念。我不太清楚為什么取這樣一個(gè)名字(據(jù)鮑老大說(shuō),是因?yàn)樗绦『糜洠贿^(guò)從一個(gè)日文名字變成一個(gè)中文名字,我感覺(jué)這是陸奇上臺(tái)登 上Search老大交椅之后的一個(gè)成功。記得前兩天Search主頁(yè)的封面就開(kāi)始用上內(nèi)部某員工拍的中國(guó)陽(yáng)朔的風(fēng)景照片。不管猜測(cè)對(duì)不對(duì),新的搜索引擎還 是要試一試,結(jié)果有好事之徒一上來(lái)就搜了個(gè)“六四”,結(jié)果出來(lái)的全是大學(xué)四六級(jí)考試,讓人有些瀑布寒。還沒(méi)有公開(kāi)release,公關(guān)就已經(jīng)做得這么好 了。

          讓人更囧的是,為慶祝新的release,search組的人每人發(fā)了一件T-shirt。據(jù)說(shuō)前面是"I Bing",后面是“U Bing”。聽(tīng)起來(lái)像“我有病,你也有病”。不過(guò)Search組的人并以為然,因?yàn)樗麄優(yōu)?#8220;Bing”取了一個(gè)中文名字叫“必應(yīng)”。比“谷歌”好一點(diǎn)么?

          其他組的好事之徒可沒(méi)那么友好,測(cè)試了一段時(shí)間之后,把這個(gè)“bing”的搜索引擎親切地叫做Mr. Bean。

          當(dāng)然,面對(duì)新鮮事物,我們還應(yīng)該抱著積極的態(tài)度。我想因?yàn)樵跍y(cè)試階段,我更愿意相信這是因?yàn)闆](méi)有足夠的用戶行為數(shù)據(jù)導(dǎo)致的短暫的發(fā)育不良。這個(gè)“必應(yīng)”在下周可能就會(huì)正式發(fā)布了。讓我們?cè)嚹恳源?
          posted @ 2009-05-29 13:20 Dedian 閱讀(3640) | 評(píng)論 (14)編輯 收藏
           


          先前有說(shuō)過(guò),“很 多的軟件做成web-based是web3.0的一個(gè)趨勢(shì)”。從技術(shù)角度上說(shuō),這些web-based的應(yīng)用程序和以前裝在本地硬盤(pán)的軟件有些不一樣,確 切地可以理解那些具有服務(wù)功能的網(wǎng)站或者應(yīng)用程序?yàn)槟軌驗(yàn)g覽器所容納的對(duì)象,而瀏覽器只是一個(gè)可以支持多種對(duì)象的容器,可對(duì)象的后臺(tái)的服務(wù)應(yīng)用程序正是 deploy在各種web服務(wù)器上的軟件。

          而那些所謂的腳本語(yǔ)言只是容器與各種對(duì)象的通訊語(yǔ)言。

          一直以來(lái),容器和后臺(tái)服務(wù)應(yīng)用程序一直在改進(jìn)。但更多的是一個(gè)又一個(gè)鮮活的對(duì)象通過(guò)瀏覽器展現(xiàn)在我們眼前,默默地改變我們的生活。

          其 實(shí),說(shuō)很多的軟件做成web-based就是變成一個(gè)個(gè)可以為瀏覽器所接納的對(duì)象模型只概括了其中的一部分。它只是說(shuō)到軟件的表現(xiàn)形式。這很容易讓大家忽 略數(shù)據(jù)的存儲(chǔ)形式,而默認(rèn)這樣的web-based的服務(wù)讓我們更多的是享受網(wǎng)絡(luò)上的數(shù)據(jù)或者搜索引擎上的數(shù)據(jù)。我們不用經(jīng)常下載軟件占據(jù)自己的硬盤(pán),有 了網(wǎng)絡(luò)電視,我們也不用下載電影,甚至也無(wú)需下載音樂(lè)。我們自己的數(shù)據(jù)比如email,blog,訂閱的雜志,收藏的信息也都存放在各個(gè)網(wǎng)站的服務(wù)器上, 而無(wú)需下載下來(lái)。

          我們似乎已經(jīng)習(xí)慣了在線的狀態(tài)。淡忘了脫機(jī)的那個(gè)年代。而一向標(biāo)新立異的Google似乎又找到回歸的需求,那就是最近推出的的Google Gears。它提供人們一個(gè)瀏覽器的插件,通過(guò)這個(gè)插件我們下載數(shù)據(jù)到本地硬盤(pán),并且提供一個(gè)小型數(shù)據(jù)庫(kù)引擎(SQLite)在本地硬盤(pán)幫助存儲(chǔ),建立索引和搜索數(shù)據(jù)。另外提供接口實(shí)現(xiàn)后臺(tái)的數(shù)據(jù)同步而無(wú)需占用瀏覽器資源。

          目前Google Gears的API應(yīng)用在Google Reader上,即用戶可以下載訂閱的電子雜志到本地硬盤(pán),方便整理和收藏。

          一句話,軟件有放在網(wǎng)上的趨勢(shì),人們也同樣關(guān)注個(gè)人數(shù)據(jù)的搜集和存放。舉個(gè)例子,我一直用Del.icio.us來(lái)收藏一些技術(shù)網(wǎng)站或者文章,可有一天我查閱技術(shù)文章的時(shí)候,點(diǎn)擊鏈接過(guò)去,卻是物是人非頁(yè)已去。這時(shí)我就想當(dāng)時(shí)文章要是可以自動(dòng)下載到自己硬盤(pán)并整理好那該多好。當(dāng)然,手工的Copy+Paste就算了,我希望的是像Del.icio.us的一鍵操作。

          posted @ 2007-05-31 14:27 Dedian 閱讀(1925) | 評(píng)論 (1)編輯 收藏
           
          Got a question, when I apply sort command line in linux to sort some domain names by dictionary order, no matter which option i used, it will sort some domains like this:

          ...
          abca.com
          abc-d.com
          abce.com
          ...

          I am curious what comparison function it applys in its' sorting function. I supposed it should be a string comparison, like strcmp function, but it is not. coz strcmp will compare ascii code of characters in string one by one, thus above sorting should like this:

          abc-d.com
          abca.com
          abce.com

          one guess is that when sorting names the special characters like "." "-" will be skipped. but still got some problem when sorting following names:

          abc---d.com
          abc--d.com
          abc-d.com

          why can linux sorting keep this order? if it skips some special characters, above names should be compared equally and maybe sorted as a random order.

          confused, anybody has thought about that?

          -----
          p.s.

          Haven't got updated here for quite a long time, coz I am back to program with c under linux and I believe it is a place for Java programmers.

          -----

          update:

          Linux sorting compares unicode of strings … more about unicode is here




          posted @ 2007-02-02 07:10 Dedian 閱讀(1418) | 評(píng)論 (1)編輯 收藏
           

          隨著網(wǎng)絡(luò)上信息量的日益增加,人們的學(xué)習(xí)和工作越來(lái)越離不開(kāi)網(wǎng)絡(luò)搜索引擎(有些生活中的小例子在《Google 今天8歲》文中有提到)。

          但是,另外一方面,我們會(huì)對(duì)搜索出來(lái)的成千上萬(wàn)的結(jié)果束手無(wú)措,使得我們基本上對(duì)第一頁(yè)的搜索結(jié)果保持興趣,從而引發(fā)各種為爭(zhēng)取出現(xiàn)在搜索引擎的第一頁(yè)的各種技術(shù)(如SEO)或手段(Spamdexing)出現(xiàn),惡劣的則大打出手,甚至搜索引擎公司出現(xiàn)各種幕后黑手

          對(duì)于用戶來(lái)說(shuō),則需要一點(diǎn)智商,來(lái)迅速地達(dá)到自己的搜索目的。

          對(duì)于搜索引擎的老大Google顯然注意到這一事實(shí)以及這一事實(shí)帶來(lái)的客戶需求:即搜索引擎應(yīng)該滿足客戶自定義化(Customizable).

          最近,Google推出的產(chǎn)品 custom search service 則適應(yīng)了這一需要。

          idea很簡(jiǎn)單,就是用戶可以自己根據(jù)自己的興趣所在設(shè)置一些自己經(jīng)常去的或者感興趣的又信息量比較大的一些網(wǎng)站。這樣就可以制定Google的搜索引擎就搜索這幾個(gè)網(wǎng)站,或者以這幾個(gè)網(wǎng)站的為主。

          例外,這個(gè)簡(jiǎn)單idea的產(chǎn)品還具備web2.0的色彩。也就是可以幾個(gè)興趣相投的人一起編輯網(wǎng)站列表,從而類(lèi)似一個(gè)搜索圈(搜索社區(qū))搜索出大家共同感興趣的東西。

          有興趣的大家可以自己玩玩。我初步自定義了一個(gè)與Blog有關(guān)的搜索引擎。

          點(diǎn)擊這里。或者連接:
          http://www.google.com/coop/cse?cx=006688650489436466578%3Ac7-4rxi0jf4

          或者點(diǎn)擊這個(gè)簡(jiǎn)單的域名地址:

          http://blogdigger.info

          大家有興趣可以一起玩,只要你們有g(shù)mail的賬號(hào)。

          加入的方法很簡(jiǎn)單,就是點(diǎn)擊主頁(yè)上的鏈接:
          ?
          當(dāng)然,你需要一個(gè)Google 的賬號(hào)(沒(méi)有也沒(méi)有關(guān)系,只需要用你們的email注冊(cè)一個(gè)就可以了,很簡(jiǎn)單)
          ?
          這樣,你就可以成為這個(gè)搜索引擎的一員了,平時(shí),你覺(jué)得那個(gè)網(wǎng)站很好,里面的信息量也比較大,你可以把這個(gè)網(wǎng)站添加到Blog Digger的網(wǎng)站列表中。也可以為你感興趣的一些搜索添加搜索條目。
          ?
          如果慢慢的覺(jué)得這個(gè)自定義的Google好玩,就記住這個(gè)鏈接吧:http://blogdigger.info





          posted @ 2006-10-27 06:04 Dedian 閱讀(2396) | 評(píng)論 (3)編輯 收藏
           
          Not sure if it is a bug of (Http)URLConnection, but it hang sometimes for some URLs while calling any functions to get information from connection (includes getResponseCode, getInputStream, getContent, getContentLength, getHeaderField blabla..) after connection has been built (even I have set the read timeout and connect time out).

          the functions openConnection() and connect() are ok, curious about that problem.

          anybody has the same problem or similar problem with URLConnection?
          posted @ 2006-10-21 07:20 Dedian 閱讀(1313) | 評(píng)論 (0)編輯 收藏
           

          ---祝大家中秋愉快---

          Ajax (AsynchronousJavaScript and XML)是近年來(lái)流行的一門(mén)web 技術(shù)。在Blogjava上看到有人開(kāi)始在介紹AJAX,但仿佛流于概念或理論的東西,對(duì)于想用Ajax的初學(xué)者似乎不是很make sense。我想,學(xué)習(xí)任何一樣新的技術(shù),例子和步驟是極為make sense的兩樣?xùn)|西。

          筆者想結(jié)合過(guò)去的學(xué)習(xí)經(jīng)驗(yàn)簡(jiǎn)單講講使用Ajax的基本步驟和舉幾個(gè)實(shí)用例子。由于筆者主要在于后臺(tái)端的開(kāi)發(fā),所以很多腳本并不是很擅長(zhǎng)。Ajax也主要限于以前大學(xué)的修課和近期的一些為后臺(tái)端程序的測(cè)試的簡(jiǎn)單實(shí)現(xiàn)。所以只是一個(gè)拋磚引玉的使用Ajax版本,歡迎相互學(xué)習(xí)交流。

          0. 導(dǎo)讀

          ??? 1。使用Ajax的基本流程
          ???
          2。使用Ajax的基本步驟。(簡(jiǎn)單例子--> Demo)
          ??? 3。
          再來(lái)一個(gè)例子(Google Suggest)。(Demo)
          ??? 4。家庭作業(yè) :)


          1。使用Ajax的基本流程

          在筆者看來(lái),Ajax更像是一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)框架,它描述著如何高效地使網(wǎng)絡(luò)前端的數(shù)據(jù)展現(xiàn)和網(wǎng)絡(luò)后端的數(shù)據(jù)之間的交互。基本上,就是瀏覽器提供一個(gè)XMLHttpRequest(當(dāng)然在IE里是ActiveXObject)的對(duì)象向后臺(tái)端的腳本程序或者Servlet Classes發(fā)送http請(qǐng)求,從后臺(tái)端的回應(yīng)中獲取文本數(shù)據(jù)(如xml格式和最近有人討論的Json格式)并嵌入前臺(tái)段的網(wǎng)頁(yè)中或腳本中。

          下圖是一個(gè)簡(jiǎn)單的流程圖:



          2。使用Ajax的基本步驟。

          下面,我們結(jié)合上面的流程,以及一個(gè)簡(jiǎn)單的例子(見(jiàn)這篇文章)過(guò)一遍基本的步驟。(藍(lán)色代碼為標(biāo)準(zhǔn)寫(xiě)法)

          第一步:Form 代碼:接受前臺(tái)端的輸入,并通過(guò)Action方法(方法函數(shù)里包含創(chuàng)建XMLHttpRequest對(duì)象)把request post到后臺(tái)端。

          <input id="username" name="username" type="text"
          ? onblur="checkName(this.value,'')" />
          <span class="hidden" id="nameCheckFailed">
          ? This name is in use, please try another.
          </span>

          <script language="javascript">
          function checkName(input, response)
          {
          ? if (response != ''){
          ??? // Response mode
          ??? message?? = document.getElementById('nameCheckFailed');
          ??? if (response == '1'){
          ????? message.className = 'error';
          ??? }else{
          ????? message.className = 'hidden';
          ??? }
          ? }else{
          ??? // Input mode
          ??? url? = 'http://localhost/xml/checkUserName.php?q=' + input;
          ??? loadXMLDoc(url);
          ? }
          }

          var req;

          function loadXMLDoc(url)
          {
          ??? // branch for native XMLHttpRequest object
          ??? if (window.XMLHttpRequest) {
          ??????? req = new XMLHttpRequest();
          ??????? req.onreadystatechange = processReqChange;
          ??????? req.open("GET", url, true);
          ??????? req.send(null);
          ??? // branch for IE/Windows ActiveX version
          ??? } else if (window.ActiveXObject) {
          ??????? req = new ActiveXObject("Microsoft.XMLHTTP");
          ??????? if (req) {
          ??????????? req.onreadystatechange = processReqChange;
          ??????????? req.open("GET", url, true);
          ??????????? req.send();
          ??????? }
          ??? }
          }
          </script>


          注:
          1。 這里的form只是一個(gè)input box,action的方法是onblur,就是響應(yīng)失去焦點(diǎn)的事件,然后調(diào)用一個(gè)函數(shù)checkName, 這個(gè)函數(shù)里通過(guò)XMLHttpRequest向PHP server script 發(fā)送Post請(qǐng)求(看得出來(lái),這里的php server script的文件名叫checkUserName.php,唯一參數(shù)是q)。
          2。函數(shù)loadXMLDoc里有個(gè)通用的創(chuàng)建XMLHttpRequest對(duì)象的代碼,標(biāo)準(zhǔn)代碼整理如下:
          ??????? var req;
          ??? ??? function foo()
          ??? ??? {
          ??? ??? ??? req = false;

          ??? ??? ??? // branch for native XMLHttpRequest object
          ??? ??? ??? if(window.XMLHttpRequest)
          ??? ??? ??? {
          ??? ??? ??? ??? try
          ??? ??? ??? ??? {
          ??? ??? ??? ??? ??? req = new XMLHttpRequest();
          ??? ??? ??? ??? }
          ??? ??? ??? ??? catch(e)
          ??? ??? ??? ??? {
          ??? ??? ??? ??? ??? req = false;
          ??? ??? ??? ??? }
          ??? ??? ??? }
          ??? ??? ??? else if(window.ActiveXObject) // branch for IE/Windows ActiveX version
          ??? ??? ??? {
          ??? ??? ??? ??? try
          ??? ??? ??? ??? {
          ??? ??? ??? ??? ??? req = new ActiveXObject("Msxml2.XMLHTTP");
          ??? ??? ??? ??? }
          ??? ??? ??? ??? catch(e)
          ??? ??? ??? ??? {
          ??? ??? ??? ??? ??? try
          ??? ??? ??? ??? ??? {
          ??? ??? ??? ??? ??? ??? req = new ActiveXObject("Microsoft.XMLHTTP");
          ??? ??? ??? ??? ??? }
          ??? ??? ??? ??? ??? catch(e)
          ??? ??? ??? ??? ??? {
          ??? ??? ??? ??? ??? ??? req = false;
          ??? ??? ??? ??? ??? }
          ??? ??? ??? ??? }
          ??? ??? ??? }
          ??? ??? ??? if(req)
          ??? ??? ??? {
          ??? ?? ?? ?? ?? ??
          //do something here
          ???? ??? ??? }
          ??? ??? ???

          ??? ??? }

          第二步:響應(yīng)文本處理代碼:XMLHttpRequest對(duì)象里有個(gè)類(lèi)似消息響應(yīng)函數(shù)的屬性,即通過(guò)設(shè)置 req.onreadystatechange 來(lái)告訴XMLHttpRequest在哪個(gè)函數(shù)里處理服務(wù)端返回的文本信息。
          如在上面的例子中:
          req.onreadystatechange = processReqChange;
          那么我們接著要有一個(gè)processReqChange的函數(shù):
          function processReqChange() 
          {
          // only if req shows "complete"
          if (req.readyState == 4) {
          // only if "OK"
          if (req.status == 200)
          {
          // ...processing statements go here...
          processResponse();
          } else {
          alert("There was a problem retrieving
          the XML data:\n" + req.statusText);
          }
          }
          }


          function processResponse()
          {
          response = req.responseXML.documentElement;
          method = response.getElementsByTagName('method')[0].firstChild.data;
          result = response.getElementsByTagName('result')[0].firstChild.data;
          eval(method + '(\'\', result)');

          }
          注:
          1。 基本上processReqChange 函數(shù)是標(biāo)準(zhǔn)代碼的寫(xiě)法。
          2。這里要用到前面定義的全局變量(XMLHttpRequest對(duì)象)req

          第三步:后臺(tái)端代碼(這個(gè)例子是php server script):接受前臺(tái)端的請(qǐng)求,處理其參數(shù),并返回相應(yīng)的結(jié)果。

          文件名: checkUserName.php

          <?php
          header('Content-Type: text/xml');

          function nameInUse($q)
          {?
          ? if (isset($q)){
          ??? switch(strtolower($q))
          ??? {
          ????? case? 'drew' :
          ????????? return '1';
          ????????? break;
          ????? case? 'fred' :
          ????????? return '1';
          ????????? break;
          ????? default:
          ????????? return '0';
          ??? }
          ? }else{
          ??? return '0';
          ? }
          ?
          }
          ?>
          <?php echo '<?xml version="1.0" encoding="UTF-8"? standalone="yes"?>'; ?>
          <response>
          ? <method>checkName</method>
          ? <result><?php
          ??? echo nameInUse($_GET['q']) ?>
          ? </result>
          </response>
          注:代碼很簡(jiǎn)單,就不用解釋了。這里返回的是xml格式的字符串。

          總體效果見(jiàn)這里
          輸入"fred"或者"drew"的名字,失去焦點(diǎn)后會(huì)顯示名字已存在的信息。


          ?3。再來(lái)一個(gè)例子。

          這里再講一個(gè)實(shí)用的例子,這是以前上課的一個(gè)課堂作業(yè),也很有代表性。是關(guān)于Google Suggest(好像新的Google Toolbar上就用的這個(gè)功能)的應(yīng)用問(wèn)題。這里是寫(xiě)好的DEMO。現(xiàn)在越來(lái)越多的網(wǎng)站提供類(lèi)似Web Service的API, 我們利用他們提供的API URL可以返回一些我們用的著的數(shù)據(jù),放在我們的網(wǎng)頁(yè)上。這里就用的上Ajax。只不過(guò)有些返回來(lái)的文本數(shù)據(jù)是xml格式的,就可以利用上面的簡(jiǎn)單例子來(lái)處理,但很多像Google Suggest那樣是返回一段類(lèi)似代碼格式的文本。我們就要利用Javascript的eval函數(shù),把這些文本當(dāng)作一段代碼在嵌入自己的網(wǎng)頁(yè)中。如果嵌入的代碼中含有函數(shù),則需要自己再寫(xiě)一個(gè)同名的函數(shù)作為實(shí)現(xiàn)。(這就是流程圖中的optional的func 3)

          這里完整代碼就不貼了,貼一些關(guān)鍵代碼(原本后臺(tái)端是用Java Servlet寫(xiě)的,但做demo的空間沒(méi)有Tomcat不支持Servlet,所以改用Php實(shí)現(xiàn),大家可以自己用Java再寫(xiě)一邊作為家庭作業(yè) :) ):

          1) form 代碼:

          <form name = "QForm" method="POST" action="google_suggest.php">
          ??? <table bgcolor="8080C0" width="90%" >
          ??? <tr>
          ??? ??? <td? nowrap>Search Term:</td>
          ??? ??? <td ><input type="text" name="qtext"? onkeyup="return GetSuggestion()" size="60"></td>
          ??? </tr>
          ??? <tr>
          ??? ??? <th colspan="2" align="left" bgcolor="#A8A8FF"><DIV id=google_suggest_target>results go here . . . </DIV></th>
          ??? </tr>
          ??? </table>
          ??? </form>

          注:
          a. 看得出來(lái),要把查詢的字符串post到google_suggest.php上
          b. action的函數(shù)是GetSuggestion(),其返回的字符串會(huì)顯示在預(yù)留的網(wǎng)頁(yè)空間里。

          2) 后臺(tái)端代碼(PHP):這里主要接收前臺(tái)的請(qǐng)求,并不請(qǐng)求轉(zhuǎn)化為向Google Suggest的API URL請(qǐng)求,把接收到的文本信息返回給前端。代碼很簡(jiǎn)單,如下:

          文件名:google_suggest.php

          <?php
          function getGoogleSuggest($q)
          {

          ??? $url = "http://www.google.com/complete/search?hl=en&js=true&qu=" . $q;
          ??? return file_get_contents($url);
          }
          ?>

          <?php echo getGoogleSuggest($_POST['q']) ?>

          注:
          a。 Google Suggest API 返回的是一個(gè)代碼格式的文本信息,如下:
          sendRPCDone(frameElement, "", new Array(), new Array(), new Array(""));
          所以我們?cè)偾芭_(tái)接受到這個(gè)文本信息之后,應(yīng)該寫(xiě)一個(gè)sendRPCDone的函數(shù)來(lái)做進(jìn)一步信息處理(比如說(shuō)列表出查詢結(jié)果)。

          3) 前臺(tái)文本處理代碼:

          ??? <script type="text/javascript">
          ??? ??? var req;
          ??? ??? function GetSuggestion()
          ??? ??? {
          ??? ??? ??? req = false;
          ??? ??? ??? var f = document.QForm;

          ??? ??? ??? // branch for native XMLHttpRequest object
          ??? ??? ??? if(window.XMLHttpRequest)
          ??? ??? ??? {
          ??? ??? ??? ??? try
          ??? ??? ??? ??? {
          ??? ??? ??? ??? ??? req = new XMLHttpRequest();
          ??? ??? ??? ??? }
          ??? ??? ??? ??? catch(e)
          ??? ??? ??? ??? {
          ??? ??? ??? ??? ??? req = false;
          ??? ??? ??? ??? }
          ??? ??? ??? }
          ??? ??? ??? else if(window.ActiveXObject) // branch for IE/Windows ActiveX version
          ??? ??? ??? {
          ??? ??? ??? ??? try
          ??? ??? ??? ??? {
          ??? ??? ??? ??? ??? req = new ActiveXObject("Msxml2.XMLHTTP");
          ??? ??? ??? ??? }
          ??? ??? ??? ??? catch(e)
          ??? ??? ??? ??? {
          ??? ??? ??? ??? ??? try
          ??? ??? ??? ??? ??? {
          ??? ??? ??? ??? ??? ??? req = new ActiveXObject("Microsoft.XMLHTTP");
          ??? ??? ??? ??? ??? }
          ??? ??? ??? ??? ??? catch(e)
          ??? ??? ??? ??? ??? {
          ??? ??? ??? ??? ??? ??? req = false;
          ??? ??? ??? ??? ??? }
          ??? ??? ??? ??? }
          ??? ??? ??? }
          ??? ??? ??? if(req)
          ??? ??? ??? {
          ??? ??? ??? ??? var url = "google_suggest.php";
          ???????
          ??? ??? ??? ??? req.onreadystatechange = processReqChange;
          ??? ??? ??? ??? req.open("POST", url, true);

          ??????? ??? ??? req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
          ??? ??? ??? ??? req.setRequestHeader("Method", "POST " + url + " HTTP/1.1");
          ??? ??? ??? ??? req.send("q=" + escape(document.QForm.qtext.value));
          ??? ??? ??? }
          ??? ??? ???

          ??? ??? }
          ??? ???
          ??? ??? function processReqChange()
          ??? ??? {
          ??? ??? ??? if(req.readyState == 4) // only if req shows "loaded"
          ??? ??? ??? {
          ??? ??? ???????????????? if (req.status == 200) // only if "OK"
          ??? ??? ???????????????? {
          ??? ??? ???????????????? ??? ??? x = req.responseText;
          ??? ??? ???????????????????????? eval(x);
          ??
          ? ??? ???????????????? }
          ??? ??? ???????????????? else
          ??? ??? ???????????????? {
          ??? ??? ?????????? ??? ??? ????? alert("There was a problem retrieving the XML data:\n" + req.statusText);
          ??? ??? ???????????????? }
          ??? ??? ??? }
          ??? ??? ??? else if(req.readyState == 2)
          ??? ??? ??? {
          ??? ??? ??? }
          ??? ??? }
          ??? ???
          ??? ??? function sendRPCDone(frameElement, qString, arr1, arr2, arr3)
          ??? ??? {
          ??? ???
          ??? ??? ??? var suggest_results = eval(arr1);
          ??? ??? ??? var counts = eval(arr2);
          ??? ??? ??? var htmlstr = "<TABLE cellspacing=4 border=0>";
          ??? ??? ??? for (var i=0; i < suggest_results.length; i++)
          ??? ??? ??? {
          ??? ??? ??? ??? htmlstr += "<tr><td><a href=\"javascript:self.location=\'http://www.google.com/search?hl=en&q=" + suggest_results[i] + "&btnG=Google+Search\'\">" + suggest_results[i] + "</a></td>";
          ??? ??? ??? ??? htmlstr += "<TD width=200><font color= 228b22>" + counts[i] + "</font></TD></TR>"
          ??? ??? ?????? ??? ?
          ??? ??? ??? }
          ??? ??? ??? htmlstr += "</TABLE>";
          ??? ??? ??? document.getElementById("google_suggest_target").innerHTML = htmlstr;
          ??? ???
          ??? ??? }
          ??? ???
          ??? ??? </script>

          4。家庭作業(yè) :)

          一定要自己寫(xiě)一些代碼,才能鞏固知識(shí):)
          題目:
          我們經(jīng)常用del.icio.us來(lái)收藏我們喜歡的網(wǎng)站或者文章,并加一些類(lèi)似讀書(shū)筆記的注釋。那么我們?cè)趺蠢胐el.icio.us提供的API來(lái)訪問(wèn)我們的讀書(shū)筆記信息,并顯示在自己的Blog里呢?
          提示:
          1。你要有一個(gè)del.icio.us的賬號(hào),并且已經(jīng)有所網(wǎng)頁(yè)收藏作為實(shí)驗(yàn)數(shù)據(jù):)
          2。API URL 是 "http://del.icio.us/feeds/json/" + "你的賬號(hào)名";自己參看一下,看返回什么樣的格式文本。另外,如果要限制返回的記錄數(shù),可以加"?count=10"這樣的參數(shù)。


          最后,祝大家中秋愉快!

          ---------------------------完----------------------------




          posted @ 2006-10-07 07:05 Dedian 閱讀(2249) | 評(píng)論 (2)編輯 收藏
           
          reference: http://us3.php.net/java
          help doc: http://php-java-bridge.sourceforge.net/

          1- Make sure u have Installed Apache 2 & PHP 5 and Java J2EE 1.5
          2- download pecl-5.0.5-Win32.zip and php-java-bridge_2.0.8.zip, which will include
          extra dll(s)
          ?? - unpack pecl pkg to your extensions folder, in PHP5 its ext.
          ?? - unpack java-Bridge to root php folder, in my case its simply C:\PHP
          ??
          Note:
          1. the java-Bridge inculdes new versions of certain files like php_java.dll
          ?? so, it would be wise to rename your old files that came with PECL pkg for example
          ?? file_old, to rollback at anytime.
          2. Don't run batch file under php-java-bridge after unpacking to php root folder, just add following lines in php.ini configure file (depends on installation fold of j2ee):

          extension=php_java.dll
          extension_dir = "C:\php\ext"
          [java]
          java.java_home=C:\Program Files\Java\jre1.5.0_06
          java.java=C:\Program Files\Java\jre1.5.0_06\bin\javaw.exe
          java.log_level=2
          ;java.log_file=ext/JavaBridge.log

          posted @ 2006-10-06 09:05 Dedian 閱讀(1137) | 評(píng)論 (0)編輯 收藏
           
          http://www.apachelounge.com/forum/viewtopic.php?t=570

          http://www.webmasterstop.com/86.html
          posted @ 2006-09-29 05:44 Dedian 閱讀(1028) | 評(píng)論 (0)編輯 收藏
           

          估計(jì)大家已經(jīng)在Google的主頁(yè)上看到了新的logo。對(duì),今天是google8歲的生日。

          記不清什么時(shí)候第一次使用了Google,如今一個(gè)搜索引擎改變了人們的網(wǎng)絡(luò)生活,也帶來(lái)了互聯(lián)網(wǎng)的革命。如今人們大談網(wǎng)絡(luò)社區(qū)或社會(huì)化的同時(shí),搜索引擎又開(kāi)始一個(gè)新的臺(tái)階。

          8 年的時(shí)間,Google從一個(gè)單一的搜索產(chǎn)品已經(jīng)衍生出各種改變或影響人們生活的產(chǎn)品,并不斷推動(dòng)網(wǎng)絡(luò)概念和技術(shù)上的變革。比如我們經(jīng)常用的產(chǎn)品有 Google talk, Google Adsence, Google Gmail, Google Calendar, Google Map, Google Video, Google Store, Google Earth,Google toolbar, Google Desktop. 還有很多Google正在思考的產(chǎn)品

          總而言之,如果網(wǎng)絡(luò)成為你生活中的一部分,那么Google也越來(lái)越成為你生活的一部分。Google的文化連同它的產(chǎn)品也越來(lái)越成為很多其他網(wǎng)站公司效仿的對(duì)象。

          那讓我們看看我們普通網(wǎng)民一般用Google來(lái)搜索什么?

          1。如果你有個(gè)朋友多年未見(jiàn),不妨用Google搜搜他的名字。
          2。如果你提筆忘成語(yǔ)或古詩(shī),不妨用Google搜搜你能想起來(lái)的殘缺部分。
          3。如果你想找一張圖片,不妨也搜搜看。
          4。如果你想做作業(yè),寫(xiě)文章或?qū)懏厴I(yè)論文,最好不過(guò)了。可以搜到很多感興趣的,相關(guān)的素材。
          5。如果你不知道翻譯你的成績(jī)單,利用Google的翻譯功能吧。
          6。如果你有不認(rèn)識(shí)的單詞,句子,俚語(yǔ)或者一些文化背景的東西,用用Google,wiki的查詢結(jié)果通常在第一頁(yè)。
          7。如果你聽(tīng)到一首好歌,且不知道歌名,誰(shuí)唱的,還想知道歌詞,那就用你聽(tīng)到的幾句歌詞搜搜吧。
          8。如果你接到一個(gè)莫名其妙的電話,搜一搜,說(shuō)不定知道是哪家公司打過(guò)來(lái)的。
          9。覺(jué)得一個(gè)人或者一個(gè)網(wǎng)站或者一邊文章很cool,不妨也搜一搜,會(huì)有很多有趣的東西出現(xiàn)。
          10。大家都在談?wù)撝患拢蛘咦罱芰餍械囊粋€(gè)話題或術(shù)語(yǔ),搜一搜,看看他們到底在說(shuō)什么。
          11。有一個(gè)似乎很著名的英文縮寫(xiě),搜一搜,看看到底全稱是什么。
          12。電腦遇到問(wèn)題了,怎么辦?先不要著急,先搜一搜,看看有沒(méi)有人和你一樣的問(wèn)題,有沒(méi)有解決方案。
          13。這家伙的網(wǎng)頁(yè)做的很cool,怎么弄得?搜一搜,保證長(zhǎng)見(jiàn)識(shí)。
          14。很想問(wèn)問(wèn)題,搜一搜你的問(wèn)題,說(shuō)不定有答案。

          好了,估計(jì)還有很多,大家接著補(bǔ)充。。。
          posted @ 2006-09-28 07:55 Dedian 閱讀(1047) | 評(píng)論 (1)編輯 收藏
           

          當(dāng)你有一個(gè)很好的idea的時(shí)候,你或許會(huì)感到有一絲興奮。然而如果你發(fā)現(xiàn)你的idea以你一己之力卻無(wú)法實(shí)現(xiàn),并且還找不到志同道合的同志,你的興奮就會(huì)很快地變?yōu)橛魫灐T龠^(guò)幾天,你會(huì)發(fā)現(xiàn)網(wǎng)上已經(jīng)有人做了一件幾乎同樣的事并且比你事先的idea還要做的好的時(shí)候,那種郁悶又會(huì)升級(jí)為失落。

          其實(shí)很多普通的又有點(diǎn)智慧的IT人都要不同程度地承受這樣的一種失落。

          抓蝦就是這樣一個(gè)曾經(jīng)讓我有幾許失落的感覺(jué)。失落得我有很長(zhǎng)一段時(shí)間沒(méi)有注冊(cè)一個(gè)用戶。不過(guò)收拾收拾自己的心情,我還是很欣然的接受這樣一個(gè)優(yōu)秀的國(guó)產(chǎn)web 2.0網(wǎng)站。

          其實(shí)抓蝦的idea很簡(jiǎn)單。它是一個(gè)把web 2.0概念和目前風(fēng)行的基于RSS信息標(biāo)準(zhǔn)聚合格式很好地結(jié)合在一起的新興國(guó)產(chǎn)訂閱網(wǎng)站。盡管?chē)?guó)外很早就有像Bloglines這樣的在線RSS信息訂閱網(wǎng)站。但不如抓蝦把web 2.0的概念有機(jī)地結(jié)合在一起。前者只是一個(gè)簡(jiǎn)單的訂閱系統(tǒng)和簡(jiǎn)單的共享。

          關(guān)于web 2.0這個(gè)從上次網(wǎng)絡(luò)泡沫的廢墟上站起來(lái)的概念,目前大都的網(wǎng)民都有親密接觸。2005開(kāi)始在國(guó)內(nèi)流行至今的Blog和wiki其實(shí)就是web 2.0產(chǎn)物中的代表。

          以前的網(wǎng)站更像一個(gè)信息發(fā)布的平臺(tái)。如果說(shuō)網(wǎng)站是一個(gè)電影院的話,那我們這些網(wǎng)民充其量就是觀看電影的觀眾,即便我們可以注冊(cè)成為VIP而進(jìn)入包廂看電影亦不過(guò)如此。你甚至可以把電影帶回家看,但你不能控制電影院播放電影的內(nèi)容,也不能隨隨便便發(fā)布你自己制作的電影。

          然而,web 2.0的概念就是給網(wǎng)民提供一個(gè)享受各種web服務(wù)的平臺(tái)。

          網(wǎng)民不再是觀眾,而可以是演員,導(dǎo)演,發(fā)行商,甚至二販子。從技術(shù)角度上講,web 2.0使用戶開(kāi)始可以控制數(shù)據(jù)。從用戶角度講,web 2.0使Internet成為一個(gè)虛擬社區(qū),大家可以相互交流和共享。(從這種意義上說(shuō),早期的BBS和P2P下載軟件都是web2.0)

          關(guān)于RSS聚合,我一直認(rèn)為它只是一個(gè)基于xml的數(shù)據(jù)結(jié)構(gòu)。在很早以前開(kāi)始用.Net開(kāi)發(fā)的時(shí)候,我就接受xml schema的一個(gè)思路,就是實(shí)現(xiàn)數(shù)據(jù)與其表現(xiàn)形式相分離。這也是我克服想嘲笑xml這樣一個(gè)如此簡(jiǎn)單的網(wǎng)絡(luò)標(biāo)準(zhǔn)的沖動(dòng)。不過(guò)那時(shí),我就有用RSS作為 Internet上凌亂不堪的信息的一個(gè)標(biāo)準(zhǔn)結(jié)構(gòu)的想法,這樣搜索引擎就會(huì)變得簡(jiǎn)單(也曾經(jīng)為此寫(xiě)過(guò)一個(gè)類(lèi)似資料收集器的小程序)。尤其在選了一門(mén) Distributed Multimedia Information Management的課程后。里面大談網(wǎng)絡(luò)的Ontology和RDF技術(shù)。其實(shí)也就是用xml的數(shù)據(jù)結(jié)構(gòu)去描述網(wǎng)絡(luò)實(shí)體及其內(nèi)在聯(lián)系的一種技術(shù)。不過(guò),rdf相對(duì)于簡(jiǎn)單的rss來(lái)說(shuō),在應(yīng)用上似乎超前一些。

          有了web 2.0的概念,有了標(biāo)準(zhǔn)的數(shù)據(jù)結(jié)構(gòu),再加上一些具體的網(wǎng)站實(shí)現(xiàn)技術(shù)(比如目前流行的Ruby),你就可以自己搗鼓一個(gè)web 2.0的網(wǎng)站出來(lái)。抓蝦很顯然在這方面做的比較成功。一方面,國(guó)內(nèi)這方面成功的網(wǎng)站還比較少(經(jīng)常去的也就是抓蝦和豆瓣),另一方面,目前rss(如 blog)正在國(guó)內(nèi)大肆流行的季節(jié)。

          當(dāng)然現(xiàn)在不少web 2.0沒(méi)戲的論調(diào)。其實(shí)這沒(méi)什么新鮮。網(wǎng)絡(luò)的東西就是這樣,每個(gè)人都有idea,都可以有技術(shù)做,但要存活做大,就這能是少數(shù)。web 2.0目前還是燒錢(qián)階段,因?yàn)樘峁┑姆?wù)都是免費(fèi)的(大家已經(jīng)習(xí)慣了網(wǎng)絡(luò)的免費(fèi)午餐),只能燒錢(qián)搶用戶,最后賣(mài)流量,再搞壟斷。如果沒(méi)錢(qián),就只能做成像奇客發(fā)現(xiàn)(diglog.com)這樣子(這個(gè)網(wǎng)站的idea和著名的digg.com類(lèi)似,但顯然還在incubation階段)。這一點(diǎn),和web 1.0沒(méi)有什么區(qū)別。這也是為什么大都的IT人依然郁悶,生活在各大小不等的目前還存活的公司的庇護(hù)下做著自己各自的夢(mèng)想。

          posted @ 2006-09-26 08:51 Dedian 閱讀(1946) | 評(píng)論 (2)編輯 收藏
           
          http://www.oracle.com/technology/pub/articles/maps1.html
          posted @ 2006-09-23 02:52 Dedian 閱讀(1074) | 評(píng)論 (1)編輯 收藏
           
          When I try to get some information of http connection to some websites (say http://linuxbyte.net) by function HttpURLConnection.getResponseCode(), it seems tthat JVM hangs for quite a while. Somebody says that is maybe the problem of http server who must be a Microsoft webserver. Here and here are the bug report information for Java 1.3 or before. Though it is said that the problem has been solved after java 1.4, i still get undesirable a long time waiting before a SocketException (Connection reset) is thrown out. Btw, conn.setConnectTimeout or conn.setConnectTimeout is involved for this problem. I am not sure if there is any method that can save time to skip those bad links.
          posted @ 2006-09-21 06:32 Dedian 閱讀(1141) | 評(píng)論 (0)編輯 收藏
           
          Here is a good article to introduce Ruby ..why we choose Ruby instead of Perl and Python ?
          posted @ 2006-09-19 05:51 Dedian 閱讀(950) | 評(píng)論 (0)編輯 收藏
           
          -- Scenario:
          ??? The purpose of a reader is to interpret a low-level byte stream (ByteArrayInputStream, StringInputStream, FileInputStream and so on) as a character stream and provid character input to whatever class needs it. And it is very simple to convert an inputstream to a reader:
          Reader reader = new InputStreamReader( in ); //in is an instance of class InputStream or derived classes
          But the issue is sometimes we need convert a reader to inputstream, think about following scenaros:
          1.? the original inputstream has been filtered by certian reader, now we need save back filtered content into database by inputstream: we can not use original inputstream but filtered stream which can only get from your reader.
          2.? Given a class who contains a reader to access a streaming content after complex parsering or downloading, we want to utilize the streaming content in this class while not repeating complex operations for content analysis, so we need employ some wrapper methods to get inputstream from reader.

          -- Solution:
          1. write own InputStream implementation, such as following:

          class MyInputStream extends InputStream
          {
          private Reader rd;
          public MyInputStream(Reader rd)
          {
          super();
          this.rd = rd;
          }
          ?
          ?
          // implement the read() method to make this all work
          publicint read()
          {
          int t = rd.read();
          // you can do your processing on the inputReader here
          // fiddle with the values and return
          return t;
          ?
          }
          }
          Note: Applications that need to define a subclass of InputStream must always provide a method that returns the next byte of input.
          (refer to http://java.sun.com/j2se/1.4.2/docs/api/java/io/InputStream.html)

          -- anything else? BTW, for parsering xml-based input stream by SAX, I am glad to see that the inputSource constructor can take either InputStream or Reader (refer to http://java.sun.com/j2se/1.4.2/docs/api/org/xml/sax/InputSource.html)


          posted @ 2006-08-29 09:46 Dedian 閱讀(1339) | 評(píng)論 (0)編輯 收藏
           
          for general purpose hash function:

          http://www.partow.net/programming/hashfunctions/

          for cryptography & hash function

          http://www.x5.net/faqs/crypto/

          for a faster and better hash function (comparison of several hash function):

          http://burtleburtle.net/bob/hash/doobs.html

          ----> for further reading...
          posted @ 2006-08-19 03:01 Dedian 閱讀(983) | 評(píng)論 (0)編輯 收藏
           

          1. Getting the IP Address of a Hostname

              try 
          {
          InetAddress addr = InetAddress.getByName("yahoo.com");
          byte[] ipAddr = addr.getAddress();

          // Convert to dot representation
          String ipAddrStr = "";
          for (int i=0; i<ipAddr.length; i++) {
          if (i > 0) {
          ipAddrStr += ".";
          }
          ipAddrStr += ipAddr[i]&0xFF;
          }
          }
          catch (UnknownHostException e) {
          }


          2. Getting the Hostname of an IP Address

          This example attempts to retrieve the hostname for an IP address. Note that getHostName() may not succeed, in which case it simply returns the IP address.

          try {
          // Get hostname by textual representation of IP address
          InetAddress addr = InetAddress.getByName("127.0.0.1");

          // Get hostname by a byte array containing the IP address
          byte[] ipAddr = new byte[]{127, 0, 0, 1};
          addr = InetAddress.getByAddress(ipAddr);

          // Get the host name
          String hostname = addr.getHostName();

          // Get canonical host name
          String hostnameCanonical = addr.getCanonicalHostName();
          } catch (UnknownHostException e) {
          }

          3. Getting the IP Address and Hostname of the Local Machine

              try {
          InetAddress addr = InetAddress.getLocalHost();

          // Get IP Address
          byte[] ipAddr = addr.getAddress();

          // Get hostname
          String hostname = addr.getHostName();
          } catch (UnknownHostException e) {
          }

          posted @ 2006-08-18 06:53 Dedian 閱讀(559) | 評(píng)論 (0)編輯 收藏
           
          http://forums.seochat.com/alexa-ranking-49/how-does-alexa-work-140.html
          posted @ 2006-08-16 07:24 Dedian 閱讀(310) | 評(píng)論 (1)編輯 收藏
           
          In the last digest about Greatest software ever written, I noted a worm named Morris which is ranked 12 of greatest software by the author. Actually, after finishing my clustering searching enigne development which is based on Lucene, i am studying p2p architecture for my distributed searching engine (more precisely is webcrawler part). When I am reading some p2p loopup protocol papers such as Chord, I also noticed a guy named Morris who is one of the developers. Hmmm,? this is the same Morris, from wiki, I know that guys is now an associate professor in MIT, and was indicted because of the damage by his Morris worm. Anyway, I'd like to say that it is very interesting to know some stories about those geeks.
          posted @ 2006-08-15 05:53 Dedian 閱讀(449) | 評(píng)論 (0)編輯 收藏
           
          http://www.informationweek.com/shared/printableArticle.jhtml?articleID=191901844

          12. The Morris worm
          11. Google search rank
          10. Apollo guidance system
          9. Excel spreadsheet
          8. Macintosh OS
          7. Sabre system
          6. Mosaic browser
          5. Java language
          4. IBM System 360 OS
          3.
          gene-sequencing software at the Institute for Genomic Research
          2. IBM's System R
          1. Unix System III



          How r u thinking?
          posted @ 2006-08-15 02:22 Dedian 閱讀(346) | 評(píng)論 (0)編輯 收藏
           
          有興趣的朋友可以參見(jiàn)原文

          下面是本人的一些大致的翻譯:
          ------------------------------------------------------------

          大伙都知道,Google是運(yùn)行在很多的Linux(GNU)系統(tǒng)的服務(wù)器上的,而這只是它支持免費(fèi)軟件的一個(gè)方面。其他的比如,Summer of Code, 現(xiàn)在已成為一個(gè)生產(chǎn)很多優(yōu)秀代碼和項(xiàng)目的孵化基地,并且最近開(kāi)放的Code Repository, 大有取代sourceforge.net(筆者注:廣大開(kāi)源的據(jù)點(diǎn))之趨勢(shì)。一方面,Google貢獻(xiàn)出它的Picasa(Linux(GNU)平臺(tái))(筆者注:一個(gè)圖片管理軟件),并被Wine(筆者注:Linux/Unix上的Windows,建于x-window之上)所使用;另一方面,Google也贊助一些開(kāi)源項(xiàng)目,如Sri Lanka,大概有$25,000之多。
          ?
          當(dāng)然,Google也會(huì)秘密地進(jìn)行一些開(kāi)源的資助。比如,令我們大伙驚訝的Mozilla Foundation(筆者注:大家熟悉的另一瀏覽器Firefox)居然在去年有賺到72個(gè)million?-- 就是在Firefox上把Google的搜索引擎作為缺省的搜索引擎。

          2005年的1月份,Google把Ben Goodger招為靡下。此人乃Firefox的首席工程師,并且是幾個(gè)主要開(kāi)源編碼者之一。到了年末,Guido van Rossum, Python的始創(chuàng)人,也加入了Google。最近,Linux2.6核心的維護(hù)人,Andrew Morton也宣稱即將離開(kāi)OSDL并投奔到Google.

          所有的這些,都意味著開(kāi)源領(lǐng)域的大變遷。

          記得在最初的那些年代里,人們都為著自己的興趣愛(ài)好在業(yè)余時(shí)間里一邊工作一邊學(xué)習(xí)地奮力地寫(xiě)著自己的代碼。突然,第一個(gè).com的時(shí)代來(lái)臨,不少早期的開(kāi)源公司開(kāi)始聘請(qǐng)頂級(jí)程序員:如核心編碼員Alan Cox, David Miller,Stephen Tweedie等人紛紛來(lái)到Red Hat, 還有一些去了Linuxcare。

          隨著第一個(gè).com泡沫經(jīng)濟(jì)的破滅,高手們被迫紛紛尋找新的工作,不少人去了新興之秀OSDL。基于這樣的一個(gè)背景,Google的興起以及大攬人才意味著早期公司廣具人才的模式的回歸。當(dāng)然,這次他們的工作都間接的有關(guān)于Google的主要市場(chǎng)策略。

          Google的策略是精明的,看看最近招的人,Goodger和Morton,一個(gè)是瀏覽器,一個(gè)是操作系統(tǒng)。無(wú)不顯示出其與Microsoft暗暗較勁的決心。

          當(dāng)然還有另一方面的原因,可能不是那么明顯,那就是最近的一些爭(zhēng)論,關(guān)于Google能否履行其最初對(duì)開(kāi)源領(lǐng)域許下的諾言。矛頭指向Google是否應(yīng)該公開(kāi)它的源碼?因?yàn)镚oogle用了不少開(kāi)源的東西。

          所以,從某種角度上講,招一些開(kāi)源黑客人士入帳遠(yuǎn)遠(yuǎn)比把代碼隨處發(fā)布好的多。

          那些關(guān)于用了開(kāi)源的代碼的公司是不是也應(yīng)該開(kāi)放他們的代碼的爭(zhēng)論不僅僅涉及到Google。其他的一些主要得益者如Yahoo, 其最近正活躍于收購(gòu)一些Web 2.0的公司如FlickrDel.icio.us,這些都很顯然有著開(kāi)源的印記,當(dāng)然它沒(méi)有Google那樣與開(kāi)源的關(guān)系那么源遠(yuǎn)流長(zhǎng),不過(guò)Yahoo也開(kāi)始著手吸引開(kāi)源人才。
          posted @ 2006-08-11 06:39 Dedian 閱讀(913) | 評(píng)論 (0)編輯 收藏
           
          Copyright © Dedian Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 青神县| 阳曲县| 山西省| 阳高县| 曲靖市| 清涧县| 许昌市| 永丰县| 广元市| 湖口县| 大安市| 夏河县| 罗江县| 莆田市| 嘉义县| 怀远县| 巩留县| 明溪县| 龙陵县| 沧州市| 娄底市| 陕西省| 柳河县| 封开县| 平罗县| 望都县| 都昌县| 阿坝县| 邻水| 瑞丽市| 西乡县| 罗平县| 册亨县| 江口县| 勐海县| 长葛市| 嘉善县| 杭锦后旗| 娱乐| 信宜市| 沂水县|