国产日本欧美一区二区三区在线,亚洲乱码国产乱码精品精,热门国产精品亚洲第一区在线http://www.aygfsteel.com/jjwwhmm/category/31545.htmlEmbrace changes, pursue excellence, share niceness. zh-cnMon, 12 Apr 2010 14:34:51 GMTMon, 12 Apr 2010 14:34:51 GMT60從小處看gmail的性能http://www.aygfsteel.com/jjwwhmm/archive/2010/04/12/318067.htmlponyponyMon, 12 Apr 2010 07:41:00 GMThttp://www.aygfsteel.com/jjwwhmm/archive/2010/04/12/318067.htmlhttp://www.aygfsteel.com/jjwwhmm/comments/318067.htmlhttp://www.aygfsteel.com/jjwwhmm/archive/2010/04/12/318067.html#Feedback0http://www.aygfsteel.com/jjwwhmm/comments/commentRss/318067.htmlhttp://www.aygfsteel.com/jjwwhmm/services/trackbacks/318067.html

在上面的這段html頁(yè)面中,gmail使用了一個(gè)table,代碼如下:
<tr>
  <td nowrap="nowrap">
  <table width="100%" cellspacing="0" cellpadding="0" bgcolor="#c3d9ff" align="center" style="margin-bottom: 5px;">
  <tbody><tr>
  <td valign="top" align="left" class="bubble tl"><div class="SPRITE_corner_tl"></div></td>
  <td style="padding: 5px 0pt; font-family: arial; text-align: left; font-weight: bold;" rowspan="2" class="bubble"><b>歡迎使用 Gmail</b></td>
  <td valign="top" align="right" class="bubble tr"><div class="SPRITE_corner_tr"></div></td>
  </tr>
  <tr>
  <td valign="bottom" align="left" class="bubble bl"><div class="SPRITE_corner_bl"></div></td>
  <td valign="bottom" align="right" class="bubble br"><div class="SPRITE_corner_br"></div></td>
  </tr>
  </tbody></table>
  </td>
  </tr>
為了既考慮UI效果,又能避免帶來(lái)速度上的影響,用了最少的圖片來(lái)實(shí)現(xiàn)彎角效果(圖片在div的SPRITE_corner CSS中),從而避免設(shè)計(jì)成一個(gè)大的圖片而影響用戶瀏覽器下載資源的速度。
從我這個(gè)非UI設(shè)計(jì)人員的視角來(lái)看,不知道GMAIL這樣設(shè)計(jì)的初衷是否是這樣的,如果不是的話,請(qǐng)高手賜教。

pony 2010-04-12 15:41 發(fā)表評(píng)論
]]>
Dr. Jeffrey Jaffe Named W3C CEOhttp://www.aygfsteel.com/jjwwhmm/archive/2010/03/15/315494.htmlponyponyMon, 15 Mar 2010 08:29:00 GMThttp://www.aygfsteel.com/jjwwhmm/archive/2010/03/15/315494.htmlhttp://www.aygfsteel.com/jjwwhmm/comments/315494.htmlhttp://www.aygfsteel.com/jjwwhmm/archive/2010/03/15/315494.html#Feedback0http://www.aygfsteel.com/jjwwhmm/comments/commentRss/315494.htmlhttp://www.aygfsteel.com/jjwwhmm/services/trackbacks/315494.htmlDr. Jeff Jaffe is Chief Executive Officer of the World Wide Web Consortium. In this role he works with Director Tim Berners-Lee, staff, and membership, and the public to evolve and communicate the W3C's organizational vision. He is responsible for all of W3C's global operations, for maintaining the interests of all of W3C's stakeholders, and for sustaining a culture of cooperation and transparency, so that W3C continues to be the leading forum for the technical development and stewardship of the Web.


After receiving a Ph.D. in computer science from MIT in 1979, Jeff joined IBM's Thomas J. Watson Research Center. During his tenure at IBM, he held a wide variety of technical and management positions, including vice president, Systems and Software Research, corporate vice president of technology, and general manager of IBM's SecureWay business unit, where he was responsible for IBM's security, directory, and networking software business.

Jeff then served as president of Bell Labs Research and Advanced Technologies, where he established new facilities in Ireland and India, and served as chairman of the board of the New Jersey Nanotechnology Consortium.

Most recently, Jeff served as the Executive Vice President and Chief Technology Officer for Novell. He was responsible for Novell's technology direction, as well as leading Novell's product business units.

Jeff was appointed by President Bill Clinton to serve on the Advisory Committee for the Presidential Commission for Critical Infrastructure Protection. He has also chaired the Chief Technology Officer group of the Computer Systems Policy Project, and has served on the National Research Council's Computer Science and Telecommunications Board. He is a Fellow of ACM and the IEEE.

Dr. Jaffe holds a BS in Mathematics and an MS in Electrical Engineering and Computer Science in addition to his Doctorate from the Massachusetts Institute of Technology.



pony 2010-03-15 16:29 發(fā)表評(píng)論
]]>
[ZZ]理解form的get和post http://www.aygfsteel.com/jjwwhmm/archive/2010/03/15/315449.htmlponyponyMon, 15 Mar 2010 03:20:00 GMThttp://www.aygfsteel.com/jjwwhmm/archive/2010/03/15/315449.htmlhttp://www.aygfsteel.com/jjwwhmm/comments/315449.htmlhttp://www.aygfsteel.com/jjwwhmm/archive/2010/03/15/315449.html#Feedback0http://www.aygfsteel.com/jjwwhmm/comments/commentRss/315449.htmlhttp://www.aygfsteel.com/jjwwhmm/services/trackbacks/315449.html(轉(zhuǎn)載自http://askjava.blog.sohu.com/76540166.html)

HTML中,form元素

1. get和post的定義

W3CHTML 4.01 specification說(shuō),form元素的method屬性用來(lái)指定發(fā)送form的HTTP方法。

  • 使用get時(shí),form的數(shù)據(jù)集(形如control-name=current-value的鍵值對(duì))被附加到form元素的action屬性所指定的URI后面;
  • 使用post時(shí),form的數(shù)據(jù)集(形如control-name=current-value的鍵值對(duì))被包裝在請(qǐng)求的body中并被發(fā)送。

這可以簡(jiǎn)單地理解為,get僅僅是拼接一個(gè)URI,然后直接向服務(wù)器請(qǐng)求數(shù)據(jù)(需要提交給服務(wù)器的數(shù)據(jù)集包含在URI中)。比如:

<form method="get" action="FormGet.aspx">
    
<input type="text" name="ProductID" value="1" />
    
<input type="submit" value="Get" />
</form>

這個(gè)form在提交的時(shí)候,會(huì)產(chǎn)生這樣能夠一個(gè)get請(qǐng)求:FormGet.aspx?ProductID=1。

而post會(huì)把form的數(shù)據(jù)集,即ProductID=1這個(gè)鍵值對(duì)包裝在請(qǐng)求的body中,發(fā)送給服務(wù)器,然后向服務(wù)器請(qǐng)求數(shù)據(jù)。對(duì)于:

<form method="post" action="FormPost.aspx">
    
<input type="text" name="ProductID" value="1" />
    
<input type="submit" value="Get" />
</form>

這樣一個(gè)form在提交時(shí),我們將看到一個(gè)干凈的URI:FormPost.aspx。因?yàn)閿?shù)據(jù)不是拼接在URI中。

2. get和post的區(qū)別

2.1 安全性

如果用get提交一個(gè)驗(yàn)證用戶名和密碼的form,一般認(rèn)為是不安全的。因?yàn)橛脩裘兔艽a將出現(xiàn)在URL上,進(jìn)而出現(xiàn)在瀏覽器的歷史記錄中。顯然,在對(duì)安全性有要求的情況下,應(yīng)該使用post。

2.2 編碼

HTML 4.01 specification指出,get只能向服務(wù)器發(fā)送ASCII字符,而post則可以發(fā)送整個(gè)ISO10646中的字符(如果同時(shí)指定

注意get和post對(duì)應(yīng)的enctype屬性有區(qū)別。enctype有兩個(gè)值,默認(rèn)值為application/x-www-form-urlencoded,而另一個(gè)值multipart/form-data只能用于post。

2.3 提交的數(shù)據(jù)的長(zhǎng)度

HTTP specification并沒(méi)有對(duì)URL長(zhǎng)度進(jìn)行限制,但是IE將請(qǐng)求的URL長(zhǎng)度限制為2083個(gè)字符,從而限制了get提交的數(shù)據(jù)長(zhǎng)度。測(cè)試表明如果URL超出這個(gè)限制,提交form時(shí)IE不會(huì)有任何響應(yīng)。其它瀏覽器則沒(méi)有URL的長(zhǎng)度限制,因此其它瀏覽器能通過(guò)get提交的數(shù)據(jù)長(zhǎng)度僅受限于服務(wù)器的設(shè)置。

而對(duì)于post,因?yàn)樘峤坏臄?shù)據(jù)不在url中,所以通常可以簡(jiǎn)單地認(rèn)為數(shù)據(jù)長(zhǎng)度限制僅受限于服務(wù)器的設(shè)置。

2.4 緩存

由于一個(gè)get得到的結(jié)果直接對(duì)應(yīng)到一個(gè)URI,所以get的結(jié)果頁(yè)面有可能被瀏覽器緩存。而post一般則不能,參考5。

2.5 引用和SEO

出于和上面相同的原因,我們可以用一個(gè)URI引用一個(gè)get的結(jié)果頁(yè)面,而post的結(jié)果則不能,所以必然不能被搜索引擎搜到。

3. 服務(wù)端的處理

在服務(wù)端的ASP.NET程序中,對(duì)于get,我們用Request.QueryString[control-name]來(lái)取得對(duì)應(yīng)的=current-value;對(duì)于post,我們用Request.Form[control-name]。

我們也可以籠統(tǒng)地使用Request[control-name]。但這樣做的效率不如前者。我們可以用下面的程序比較Request.QueryString和Request的效率:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    protected 
void Page_PreInit(object sender, EventArgs e)
    {
        
if(Request["InputString"!= null)
        {
            
int count = 1000000;
            DateTime start;
            DateTime end;
            string value 
= "";
            start 
= DateTime.Now;
            
for(int i = 0;i < count;i++)
            {
                value 
= Request.QueryString["InputString"];
            }
            end 
= DateTime.Now;
            
double requestGet = (end - start).TotalSeconds;
            start 
= DateTime.Now;
            
for(int i = 0;i < count;i++)
            {
                value 
= Request["InputString"];
            }
            end 
= DateTime.Now;
            
double request = (end - start).TotalSeconds;
            compare.InnerHtml 
= requestGet.ToString() + " / " + request.ToString() + " = " + (requestGet / request).ToString();
            get.InnerHtml 
= value;
        }
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
    
<head>
        
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        
<title>Request.QueryString / Request</title>
    
</head>
    
<body>
        
<form method="get" action="FormGet.aspx">
            
<div>
                
<input type="text" name="InputString" /><input type="submit" value="Post" /><br />
                Get: 
<span runat="server" id="get"></span><br />
                Request.QueryString / Request: 
<span runat="server" id="compare"></span>
            
</div>
        
</form>
    
</body>
</html>

同樣的辦法我們可以比較Request.Form和Request。

最后得到的結(jié)果(Request.QueryString[control-name] / Request[control-name]和Request.Form[control-name] / Request[control-name])大多數(shù)時(shí)候是小于1的。因此,我們因該盡量用Request.QueryString或Request.Form來(lái)代替Request。

4. 正確地使用get和post

W3C的官方建議是:當(dāng)且僅當(dāng)form是冪等(idempotent)的時(shí)候,使用get。冪等是一個(gè)數(shù)學(xué)上的術(shù)語(yǔ),其定義是:對(duì)于一個(gè)函數(shù)f : D -> D,如果D中的所有x滿足f (f x) = f x,那么這個(gè)函數(shù)是冪等的。HTTP specification(比如RFC 2616)中,將冪等解釋為:多次相同請(qǐng)求產(chǎn)生的副作用,和一次請(qǐng)求的副作用相同。

打個(gè)比方,如果你提交一個(gè)form會(huì)從Google上查詢(xún)一個(gè)關(guān)鍵詞,那么我們可以認(rèn)為這個(gè)form是冪等的,因?yàn)?次提交和10次提交的副作用是差不多的(10次查詢(xún)可能會(huì)多消耗一些電能);如果你提交一個(gè)form是訂購(gòu)一個(gè)終極大黃蜂(Utimate bumblebee),那么這就不是冪等的:要是你不小心多提交了1次form的話,你可能會(huì)被老婆亂罵,你不小心又提交了10次的話,你可能就破產(chǎn)了——一次提交和多次提交的副作用明顯不同,所以這不是冪等的。

所以,一般來(lái)說(shuō),如果提交這個(gè)請(qǐng)求純粹只是從服務(wù)端獲取數(shù)據(jù)而不進(jìn)行其他操作,并且多次提交不會(huì)有明顯的副作用,應(yīng)該使用get。比如:

如果提交這個(gè)請(qǐng)求會(huì)產(chǎn)生其它操作和影響,就應(yīng)該使用post。比如:

  • 修改服務(wù)器上數(shù)據(jù)庫(kù)中的數(shù)據(jù);
  • 發(fā)送一封郵件;
  • 刪除一個(gè)文件。

另一個(gè)要考慮的因素是安全性。見(jiàn)2.1。

5. 瀏覽器差異

6. 參考



pony 2010-03-15 11:20 發(fā)表評(píng)論
]]>
轉(zhuǎn)載:再談創(chuàng)業(yè)者管哪個(gè)重要http://www.aygfsteel.com/jjwwhmm/archive/2009/12/22/306904.htmlponyponyTue, 22 Dec 2009 06:28:00 GMThttp://www.aygfsteel.com/jjwwhmm/archive/2009/12/22/306904.htmlhttp://www.aygfsteel.com/jjwwhmm/comments/306904.htmlhttp://www.aygfsteel.com/jjwwhmm/archive/2009/12/22/306904.html#Feedback0http://www.aygfsteel.com/jjwwhmm/comments/commentRss/306904.htmlhttp://www.aygfsteel.com/jjwwhmm/services/trackbacks/306904.html
http://shaoblog.com/2009/01/22/%e5%86%8d%e8%b0%88%e5%88%9b%e4%b8%9a%e8%80%85%e7%ae%a1%e5%93%aa%e4%b8%aa%e9%87%8d%e8%a6%81/

昨天QQ的馬化騰到我們這邊來(lái)聊天,談到了創(chuàng)始人重視產(chǎn)品在企業(yè)成功的重要性。即使在QQ已經(jīng)這么成功,市值近百億美金的今天,他還花很多時(shí)間在產(chǎn)品上。聽(tīng)上去很簡(jiǎn)單也很自然,但是我看到很多創(chuàng)始人做不到。

創(chuàng)業(yè)者要管的太多了,產(chǎn)品,市場(chǎng),銷(xiāo)售,財(cái)務(wù),技術(shù),找人,炒人,公關(guān)。不可能每件事情都事必躬親,一定有些需要交給手下領(lǐng)頭。哪兩件最重要?我覺(jué)得是找人和產(chǎn)品。別的事都可能找到好的人代勞,但產(chǎn)品和找人不行。

找到一個(gè)好的人太關(guān)鍵了。我從前寫(xiě)了很多:海龜還是土鱉?招不到稱(chēng)心的人怎么辦?招怎么樣的人,今天就不多說(shuō)了。只加一句:找什么樣的人,決定公司的文化,所以創(chuàng)業(yè)者是一定要自己做的。

找到好的人,可以一手代包市場(chǎng),銷(xiāo)售,財(cái)務(wù),技術(shù),公關(guān)(找到好的人,能放心的把我的一個(gè)部門(mén)讓他管,知道他會(huì)管的比我更好時(shí),感覺(jué)太好了!),但產(chǎn)品是一個(gè)公司的靈魂。它需要融會(huì)貫通:從市場(chǎng)這邊了解目標(biāo)用戶是誰(shuí)和他們的需求,平衡銷(xiāo)售那邊經(jīng)常和市場(chǎng)部不同的意見(jiàn),與技術(shù)討論什么能做,什么不能做。其中有很多取舍,很多推動(dòng),不是創(chuàng)始人CEO,很難做好這個(gè)工作。另外,創(chuàng)始人應(yīng)該是最了解用戶的需求的人,因?yàn)樗麆?chuàng)業(yè)的激情就來(lái)自于為用戶解決一個(gè)問(wèn)題,增添一個(gè)價(jià)值。

做易趣時(shí)我產(chǎn)品放權(quán)太多。雖然我們那時(shí)的產(chǎn)品部很不錯(cuò),但沒(méi)有創(chuàng)始人每天的介入,他們的任務(wù)是不可能完成的。我給我們那時(shí)候2002年的產(chǎn)品打75分。2003年走了后,平臺(tái)遷移到eBay后,分?jǐn)?shù)就慘不忍睹了。網(wǎng)站改個(gè)字需要九個(gè)禮拜,改個(gè)功能需要在總部排隊(duì)九個(gè)月。(這里的故事很長(zhǎng)了,產(chǎn)品只是一部分,文化的變化更致命。以后有空和易趣那些老員工們應(yīng)該一起寫(xiě)本書(shū)。)

放眼世界上翹楚的產(chǎn)品,AMAZON,APPLE,NINTENDO,他們的CEO或創(chuàng)始人都是注重產(chǎn)品,不放權(quán)的瘋子。




上一篇創(chuàng)業(yè),管哪個(gè)事情最重要?引起了一些有趣的爭(zhēng)議,關(guān)于產(chǎn)品還是市場(chǎng)重要。我覺(jué)得這個(gè)問(wèn)題對(duì)創(chuàng)業(yè)者很關(guān)鍵,所以再來(lái)寫(xiě)一篇。ha,這個(gè)月寫(xiě)了兩篇,為前幾個(gè)月補(bǔ)過(guò)。

首先,問(wèn)題不是說(shuō)企業(yè)里哪個(gè)部門(mén)重要。一個(gè)企業(yè)的成功,是很多因素的乘法。乘法和加法不同:后者如有一個(gè)因素是零,對(duì)整體不一定有大影響,但前者里如果有個(gè)因素是零,結(jié)果是零 - 產(chǎn)品,市場(chǎng)做得再好,財(cái)務(wù)出問(wèn)題,公司照樣死。當(dāng)企業(yè)成功是乘法時(shí),討論哪個(gè)部門(mén)重要,沒(méi)什么意義。比較有意義的問(wèn)題是:創(chuàng)業(yè)者哪個(gè)比較可以放權(quán),哪個(gè)需要自己抓。(謝謝keso幫我澄清too。)這個(gè)問(wèn)題太重要了,因?yàn)槲覉?jiān)信一個(gè)初創(chuàng)的企業(yè),最重要的資源是創(chuàng)始人的時(shí)間和精力。我們現(xiàn)在談的,是這個(gè)資源的分配問(wèn)題。

第二,做產(chǎn)品,從來(lái)不是(或不應(yīng)該是)空想的。我覺(jué)得產(chǎn)品部是公司最難的工作。它需要綜合權(quán)衡各個(gè)部門(mén)的要求。

a)市場(chǎng):我們的現(xiàn)有用戶是這么樣的人?他們的需求是什么?我們的潛在用戶是誰(shuí)?他們的需求是什么?很多時(shí)候,人(尤其是經(jīng)理人)會(huì)太注重現(xiàn)有顧客,忽視潛在客戶。人也會(huì)太注重用戶能表達(dá)的需求(市場(chǎng)調(diào)查拿得到得),忽略用戶不知道怎么表達(dá)的需求(需要靠創(chuàng)業(yè)的自覺(jué)來(lái)發(fā)掘的)。

b)銷(xiāo)售:什么樣的產(chǎn)品賣(mài)得掉,容易銷(xiāo)售?在有些公司,市場(chǎng)和銷(xiāo)售的目標(biāo)用戶是一樣的。在有些公司,用戶(主要用產(chǎn)品的人)和顧客(付錢(qián)的人)是不一樣的。如何滿足和權(quán)衡他們不同的需求?在易趣那時(shí),用戶是買(mǎi)家,顧客是賣(mài)家,他們的需求往往不同,甚至相反。

c)技術(shù):那些產(chǎn)品容易做,那些難做?如何取舍時(shí)間vs功能?技術(shù)部會(huì)經(jīng)常說(shuō):市場(chǎng)部要的功能不可能做,或需要太久。有時(shí)技術(shù)部有個(gè)好點(diǎn)子,能做個(gè)眩的新功能,市場(chǎng)部不要。相信誰(shuí)的判斷?

d)客服:用戶很多的反饋和問(wèn)題,需要多重視?什么是1%的不重要的用戶提出來(lái)的,什么是我們的核心用戶的要求,或是潛在的核心用戶的問(wèn)題(解決了這個(gè)問(wèn)題,他就成了核心用戶)?

還有很多例子可舉。我的感覺(jué)是產(chǎn)品最最需要一個(gè)創(chuàng)始者以一個(gè)公司總體長(zhǎng)遠(yuǎn)的發(fā)展為目標(biāo),權(quán)衡各個(gè)部門(mén)的利益偏見(jiàn)(甚至慣性或惰性),最終以創(chuàng)始者的直覺(jué)做決定。



pony 2009-12-22 14:28 發(fā)表評(píng)論
]]>
要挖滿足下面條件的一個(gè)人,可以嗎?http://www.aygfsteel.com/jjwwhmm/archive/2009/03/16/260059.htmlponyponyMon, 16 Mar 2009 09:36:00 GMThttp://www.aygfsteel.com/jjwwhmm/archive/2009/03/16/260059.htmlhttp://www.aygfsteel.com/jjwwhmm/comments/260059.htmlhttp://www.aygfsteel.com/jjwwhmm/archive/2009/03/16/260059.html#Feedback1http://www.aygfsteel.com/jjwwhmm/comments/commentRss/260059.htmlhttp://www.aygfsteel.com/jjwwhmm/services/trackbacks/260059.html 1.對(duì)Unix系統(tǒng)管理,網(wǎng)絡(luò),數(shù)據(jù)庫(kù),安全,分布式系統(tǒng)開(kāi)發(fā)等各方面技術(shù)都有一定涉獵及經(jīng)驗(yàn)
2.精通一門(mén)編程語(yǔ)言,如Java,C,Php等
3.精通企業(yè)系統(tǒng)集成設(shè)計(jì)模式
3.對(duì)互聯(lián)網(wǎng)有深刻認(rèn)識(shí),對(duì)電子商務(wù),SNS,SAAS,支付,CRM,ERP等行業(yè)有過(guò)從業(yè)經(jīng)驗(yàn)或有一定理解,熟悉主流電子商務(wù)網(wǎng)站的業(yè)務(wù)模式
4.至少要有一個(gè)大型系統(tǒng)的系統(tǒng)分析/設(shè)計(jì)經(jīng)驗(yàn),有過(guò)百萬(wàn)級(jí)別會(huì)員數(shù)量以上系統(tǒng)的分析、設(shè)計(jì)經(jīng)驗(yàn)者更佳
5.至少有一個(gè)產(chǎn)品的完整開(kāi)發(fā)經(jīng)驗(yàn),包括需求分析,產(chǎn)品設(shè)計(jì),系統(tǒng)設(shè)計(jì),程序開(kāi)發(fā),3人以上的開(kāi)發(fā)團(tuán)隊(duì)管理,軟件配置管理,質(zhì)量控制,產(chǎn)品運(yùn)營(yíng)等各方面工作都有一定理解及經(jīng)驗(yàn)
6.優(yōu)秀的口語(yǔ)及書(shū)面溝通表達(dá)能力,能熟練使用Word,PowerPoint,Project,UML工具編寫(xiě)各種類(lèi)型文檔,能熟練閱讀英文 
7.有自己創(chuàng)業(yè)經(jīng)驗(yàn)者優(yōu)先

pony 2009-03-16 17:36 發(fā)表評(píng)論
]]>
不會(huì)偷懶的程序員不是好程序員!http://www.aygfsteel.com/jjwwhmm/archive/2008/06/20/209400.htmlponyponyFri, 20 Jun 2008 03:38:00 GMThttp://www.aygfsteel.com/jjwwhmm/archive/2008/06/20/209400.htmlhttp://www.aygfsteel.com/jjwwhmm/comments/209400.htmlhttp://www.aygfsteel.com/jjwwhmm/archive/2008/06/20/209400.html#Feedback4http://www.aygfsteel.com/jjwwhmm/comments/commentRss/209400.htmlhttp://www.aygfsteel.com/jjwwhmm/services/trackbacks/209400.html今天看了篇文章:
http://blogoscoped.com/archive/2005-08-24-n14.html

這篇文章是講為什么好的程序員是既懶有笨的!哈哈!
我記得在看UNIX編程藝術(shù)時(shí),里面也有這么段話,說(shuō)不會(huì)偷懶的程序員不是好程序員!
為什么呢!我們可以舉些簡(jiǎn)單的例子:
1.只有懶惰的程序員才會(huì)去編寫(xiě)那些可以最終代替自己工作的自動(dòng)化工具,好的程序員都會(huì)有一套自己的代碼自動(dòng)生成工具,有的是用模板語(yǔ)言,有的是用shell.在開(kāi)發(fā)一個(gè)新的系統(tǒng)時(shí),系統(tǒng)基礎(chǔ)框架設(shè)計(jì)好后,很多業(yè)務(wù)層代碼基本上都是一個(gè)模子出來(lái)的,要想讓這些代碼都是從一個(gè)模子里出來(lái),那么就需要在底層下很大的功夫才能做到.所以,每個(gè)程序員夠應(yīng)該有,或者會(huì)寫(xiě)代碼自動(dòng)生成工具,當(dāng)然,這個(gè)工具并不是一個(gè)成功工具!它的前提是你必須在底層有足夠的抽象.

2.只有懶惰的程序員才不會(huì)去去寫(xiě)大段的冗余重復(fù)的代碼,他們會(huì)想出各種方法來(lái)避免這種冗余代碼的情況,做的好的,就是在系統(tǒng)的基礎(chǔ)架構(gòu)層來(lái)解決大部分這樣的問(wèn)題,通過(guò)精致的設(shè)計(jì)模式,高度抽象的模塊,易用的接口,高度可配置的基礎(chǔ)平臺(tái)等等來(lái)實(shí)現(xiàn),做的一般的會(huì)利用各種開(kāi)源工具來(lái)代替自己想要的代碼,做的差些的就是不斷利用refactor重構(gòu)出那些重復(fù)代碼.

3.好程序員怎么可能"笨"呢!哈哈!俺們可都是天之驕子啊!小心我扔你雞蛋啊!
很聰明的程序員一般比較自信,難以聽(tīng)進(jìn)別人的意見(jiàn),在一個(gè)團(tuán)隊(duì)中,最怕的并不是怕沒(méi)有技術(shù)好的人,而是怕那些很聰明的人不跟你團(tuán)隊(duì)保持一致,舉個(gè)例子,可能團(tuán)隊(duì)里有一套通用的數(shù)據(jù)存取方法,但聰明的程序員會(huì)堅(jiān)持己見(jiàn),自己發(fā)明出一套新的方法來(lái)!聰明的程序員會(huì)認(rèn)為自己更懂客戶的需求,而不顧市場(chǎng)人員提出的需求.這也是為什么很多人會(huì)說(shuō)"要對(duì)團(tuán)隊(duì)中聽(tīng)話的人委以重任",我當(dāng)然不同意這種看法,但是,既聰明團(tuán)隊(duì)意識(shí)又好的人,就比較少見(jiàn)了.團(tuán)隊(duì)不行的話,一個(gè)人再聰明又有什么用?

4.聰明的程序員喜歡自己重新發(fā)明輪子!笨的程序員喜歡利用聰明的程序員寫(xiě)出的代碼!

5.聰明的程序員一般有自己思維的定勢(shì),笨的程序員因?yàn)槭裁炊疾欢?所以他的眼里什么都是可能,什么都是不可能!查找代碼問(wèn)題的時(shí)候,聰明的程序員首先會(huì)說(shuō):這是系統(tǒng)的bug,笨的程序員會(huì)看看自己的代碼是不是有拼寫(xiě)錯(cuò)誤!笨的程序員跟容易換位思考,下面有個(gè)例子:
一段關(guān)于web開(kāi)發(fā)問(wèn)題的程序員和客服人員的對(duì)話:

“從昨天開(kāi)始我們的用戶就看不到我們站點(diǎn)上的Logo了。”
“他試過(guò)重啟瀏覽器么?”
“是的。”
“他試過(guò)重啟電腦么?”
“是的。”
“他清空過(guò)瀏覽器Cache么?”
“是的。”
“他的瀏覽器版本是IE6么?”
“是的。”
“他確信是真的看不到Logo了么?”
“是的。”
“他是在電腦顯示器屏幕上看我們的站點(diǎn)么?”
“什么?”
“比如說(shuō),它可能是打印出來(lái)看不到?”
“不。他是在顯示器上看的。”
“除了站點(diǎn)Logo之外,他是不是其他的圖片都看不到?”
“什么?哦。我再問(wèn)問(wèn)他。”

也許,聰明的程序員遇到這個(gè)問(wèn)題的時(shí)候,甚至可能去找個(gè)圖形算法分析下這個(gè)圖片是否有問(wèn)題!

最后,以http://blogoscoped.com/archive/2005-08-24-n14.html中的故事結(jié)尾,,以博列為看官一笑^_^
It’s like the story of the centipede(蜈蚣). The centipede was very good at walking with its hundred legs. It never spent a thought on just how it could walk. Until one day, when a big black bug(臭蟲(chóng)) asked the centipede “How can you manage to walk with all those feet? Don’t you find it hard to coordinate their rhythm?” The black bug already left, when the centipede was still sitting down, pondering how it could walk, wondering, and (for the first time in his life) even worrying a little bit. From that day on, the centipede couldn’t walk anymore.
So you better not think too much if you want to achieve something. And of course this is only half the truth, too...



pony 2008-06-20 11:38 發(fā)表評(píng)論
]]>
你的編程語(yǔ)言可以這樣做嗎?(map/reduce的js示范) (轉(zhuǎn))http://www.aygfsteel.com/jjwwhmm/archive/2008/06/09/206800.htmlponyponyMon, 09 Jun 2008 10:39:00 GMThttp://www.aygfsteel.com/jjwwhmm/archive/2008/06/09/206800.htmlhttp://www.aygfsteel.com/jjwwhmm/comments/206800.htmlhttp://www.aygfsteel.com/jjwwhmm/archive/2008/06/09/206800.html#Feedback1http://www.aygfsteel.com/jjwwhmm/comments/commentRss/206800.htmlhttp://www.aygfsteel.com/jjwwhmm/services/trackbacks/206800.html // 一個(gè)小例子:
 
 alert("偶要吃意大利面!");
 alert("偶要吃巧克力慕思!"); 嗯,這個(gè)例子碰巧是用javascript寫(xiě)的,不過(guò)你就算不懂JavaScript,應(yīng)該也能明白它在干什么。

拷貝代碼不好。于是,你創(chuàng)建了個(gè)函數(shù)
 function SwedishChef( food ){
 alert("偶要吃" + food + "!");
 }
 SwedishChef("意大利面");
 SwedishChef("巧克力慕思");
Ok,這只是一個(gè)很小很小的例子而已,相信你能想像到個(gè)更實(shí)際一點(diǎn)的例子。這段代碼有很多優(yōu)點(diǎn),你全都聽(tīng)過(guò)幾萬(wàn)次了:可維護(hù)性、可讀性、抽象性 = 好!

現(xiàn)在你留意到有另外兩段代碼幾乎跟它們一模一樣,除了一個(gè)反復(fù)調(diào)用一個(gè)叫BoomBoom的函數(shù),另一個(gè)反復(fù)調(diào)用一個(gè)叫PutInPot的。除此之外,這兩段代碼簡(jiǎn)直沒(méi)什么兩樣:
 alert("拿龍蝦");
 PutInPot("龍蝦");
 PutInPot("水");
 alert("拿雞肉");
 BoomBoom("雞肉");
 BoomBoom("椰子醬");
現(xiàn)在要想個(gè)辦法,使得你可以將一個(gè)函數(shù)用作另一個(gè)函數(shù)的參數(shù)。這是個(gè)重要的能力,因?yàn)槟愀菀讓⒖蚣艽a寫(xiě)成一個(gè)函數(shù)(emu注:還記得template method模式吧?)。
 function Cook( i1, i2, f ){
 alert("拿" + i1);
 f(i1);
 f(i2);
 }
 Cook( "龍蝦", "水", PutInPot );
 Cook( "雞肉", "椰子醬", BoomBoom );
看看,我們居然把函數(shù)當(dāng)成調(diào)用參數(shù)傳遞了!

你的編程語(yǔ)言能辦到嗎?

等等……假如我們已經(jīng)有了PutInPot和BoomBoom這些函數(shù)的具體實(shí)現(xiàn)代碼(而且又不需要在別的地方重用它們),那么用內(nèi)聯(lián)語(yǔ)法把它們寫(xiě)進(jìn)函數(shù)調(diào)用里面不是比顯式的聲明這兩個(gè)函數(shù)更漂亮嗎?
 Cook( "龍蝦",
 "水",
 function(x) { alert("pot " + x); } );
 Cook( "雞肉",
 "椰子醬",
 function(x) { alert("boom " + x); } );
耶,真方便!請(qǐng)注意我只是隨手創(chuàng)建了個(gè)函數(shù),甚至不用考慮怎么為它起名,只要拎著它的耳朵把它往一個(gè)函數(shù)里頭一丟就可以了。

當(dāng)你一想到作為參數(shù)的匿名函數(shù),你也許想到對(duì)那些對(duì)數(shù)組里的每個(gè)元素進(jìn)行相同操作的代碼。
 var a = [1,2,3];
 for (i=0; i<a.length; i++){
 a[i] = a[i] * 2;
 }
 for (i=0; i<a.length; i++){
 alert(a[i]);
 }
常常要對(duì)數(shù)組里的所有元素做同一件事,因此你可以寫(xiě)個(gè)這樣的函數(shù)來(lái)幫忙:
 function map(fn, a){
 for (i = 0; i < a.length; i++){
 a[i] = fn(a[i]);
 }
 }
現(xiàn)在你可以把上面的東西改成:
 map( function(x){return x*2;}, a );
 map( alert, a );
另一個(gè)常見(jiàn)的任務(wù)是將數(shù)組內(nèi)的所有元素按照某總方式匯總起來(lái):
 function sum(a){
 var s = 0;
 for (i = 0; i < a.length; i++)
 s += a[i];
 return s;
 }
 
 function join(a){
 var s = "";
 for (i = 0; i < a.length; i++)
 s += a[i];
 return s;
 }
 
 alert(sum([1,2,3]));
 alert(join(["a","b","c"]));
sum和join長(zhǎng)得很像,你也許想把它們抽象為一個(gè)將數(shù)組內(nèi)的所有元素按某種算法匯總起來(lái)的泛型函數(shù):
 function reduce(fn, a, init){
 var s = init;
 for (i = 0; i < a.length; i++)
 s = fn( s, a[i] );
 return s;
 }
 
 function sum(a){
 return reduce( function(a, b){ return a + b; }, a, 0 );
 }
 
 function join(a){
 return reduce( function(a, b){ return a + b; }, a, "" );
 }
許多早期的編程語(yǔ)言沒(méi)法子做這種事。有些語(yǔ)言容許你做,卻又困難重重(例如C有函數(shù)指針,但你要在別處聲明和定義函數(shù))。面向?qū)ο笳Z(yǔ)言也不確保你用函數(shù)可以干些啥(把函數(shù)當(dāng)對(duì)象處理?)。

如 果你想將函數(shù)視為一類(lèi)對(duì)象,Java要求你建立一個(gè)有單方法的對(duì)象,稱(chēng)為算子對(duì)象。許多面向?qū)ο笳Z(yǔ)言要你為每個(gè)類(lèi)都建立一個(gè)完整文件,像這樣開(kāi)發(fā)可真叫 快。如果你的編程語(yǔ)言要你使用算子對(duì)象來(lái)包裝方法(而不是把方法本身當(dāng)成對(duì)象),你就不能徹底得到現(xiàn)代(動(dòng)態(tài))編程語(yǔ)言的好處。不妨試試看你可否退貨拿回 些錢(qián)?

不用再寫(xiě)那些除了經(jīng)過(guò)一個(gè)數(shù)組對(duì)每個(gè)元素做一些事情之外一無(wú)是處的函數(shù),有什么好處?

讓我們看回map函數(shù)。當(dāng)你要對(duì)數(shù)組內(nèi)的每個(gè)元素做一些事,你很可能不在乎哪個(gè)元素先做。無(wú)論由第一個(gè)元素開(kāi)始執(zhí)行,還是是由最后一個(gè)元素執(zhí)行,你的結(jié)果都是一樣的,對(duì)不?如果你手頭上有2個(gè)CPU,你可以寫(xiě)段代碼,使得它們各對(duì)一半的元素工作,于是乎map快了兩倍。

或 者,發(fā)揮一下想像力,設(shè)想你在全球有千千萬(wàn)萬(wàn)臺(tái)服務(wù)器分布在全世界的若干個(gè)數(shù)據(jù)中心,你有一個(gè)真的很大很大的數(shù)組,嗯,再發(fā)揮一下想像力,設(shè)想這個(gè)數(shù)組記 錄有整個(gè)互聯(lián)網(wǎng)的內(nèi)容。還了,現(xiàn)在你可以在幾千臺(tái)服務(wù)器上同時(shí)執(zhí)行map,讓每臺(tái)服務(wù)器都來(lái)解決同一個(gè)問(wèn)題的一小部分。

那么在這個(gè)例子里面,編寫(xiě)一段非常快的代碼來(lái)搜索整個(gè)互聯(lián)網(wǎng)這個(gè)問(wèn)題,其實(shí)就和用一個(gè)簡(jiǎn)單的字符串搜索器(算子)作為參數(shù)來(lái)調(diào)用map函數(shù)一樣簡(jiǎn)單了。

希 望你注意到一個(gè)真正有意思的要點(diǎn),如果你想要把map/reduce模式變成一個(gè)對(duì)所有人都有用,對(duì)所有人都能立刻派上用場(chǎng)的技術(shù),你只需要一個(gè)超級(jí)天才 來(lái)寫(xiě)最重要的一部分代碼,來(lái)讓map/reduce可以在一個(gè)巨大的并行計(jì)算機(jī)陣列上運(yùn)行,然后其他舊的但是一向在單一個(gè)循環(huán)中運(yùn)行良好的代碼,仍可以保 持正確的運(yùn)行,惟一的差別只是比原來(lái)單機(jī)運(yùn)行快了n倍。這意味著它們都一不留神突然變成可以被用來(lái)解決一個(gè)巨大的問(wèn)題的代碼。

讓我再啰嗦一下,通過(guò)把“循環(huán)”這個(gè)概念加以抽象,你可以把用任何你喜歡的方式來(lái)實(shí)現(xiàn)“循環(huán)”過(guò)程,包括可以實(shí)現(xiàn)讓循環(huán)迭代速度隨著硬件計(jì)算能力保持令人滿意的同步增長(zhǎng)。

你現(xiàn)在應(yīng)該可以明白不久為何對(duì)那些對(duì)除了Java之外什么都沒(méi)被學(xué)過(guò)的計(jì)算機(jī)系學(xué)生表示不滿了:
( http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html ) :

Without understanding functional programming, you can't invent MapReduce, the algorithm that makes Google so massively scalable. The terms Map and Reduce come from Lisp and functional programming. MapReduce is, in retrospect, obvious to anyone who remembers from their 6.001-equivalent programming class that purely functional programs have no side effects and are thus trivially parallelizable. The very fact that Google invented MapReduce, and Microsoft didn't, says something about why Microsoft is still playing catch up trying to get basic search features to work, while Google has moved on to the next problem: building Skynet^H^H^H^H^H^H the world's largest massively parallel supercomputer. I don't think Microsoft completely understands just how far behind they are on that wave.

不理解函數(shù)式編程,你就發(fā)明不了MapReduce這個(gè)讓Google的計(jì)算能力如此具有可擴(kuò)展性的算法。Map和Reduce這兩個(gè)術(shù)語(yǔ)源自Lisp語(yǔ)言和函數(shù)式編程……(這是另一篇文章的內(nèi)容,emu也不是很理解其中的各種說(shuō)法的來(lái)龍去脈,就不翻譯了)

我希望你現(xiàn)在明白,把函數(shù)當(dāng)成基本類(lèi)型的(動(dòng)態(tài))編程語(yǔ)言能讓你在編程過(guò)程中更好的進(jìn)行抽象化,也就是使代碼精悍、功能更內(nèi)聚、更具可重用性及更具有擴(kuò)展性。很多的Google應(yīng)用使用Map/Reduce模式,因此一有人對(duì)其優(yōu)化或修正缺陷,它們就都可以從中得益。

我 準(zhǔn)備要再羅嗦一下,我認(rèn)為最有生產(chǎn)力的編程語(yǔ)言莫過(guò)于能讓你在不同層次上都可以進(jìn)行抽象化的。老掉牙的FORTRAN 語(yǔ)言以前是不讓你寫(xiě)函數(shù)的注。C 有函數(shù)指針,可是它們都非常丑丑丑丑丑丑丑丑陋,不允許匿名聲明,又不能在用它們時(shí)實(shí)現(xiàn)它們而偏偏要放在別處去實(shí)現(xiàn)。Java讓你使用算子對(duì)象,一種更丑 陋的東西。正如Steve Yegge所述,Java是個(gè)名詞王國(guó)
( http://steveyegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html )。

作者注:這 里提起了FORTRAN,不過(guò)我上次使用FORTRAN是27年前的事了。FORTRAN是有函數(shù)的,我碼字那會(huì)兒腦子里面想的大概是GW-BASIC語(yǔ) 言。(emu注,basic確實(shí)只有所謂的子程序和go-sub語(yǔ)句,作用只是重新組織代碼結(jié)構(gòu)而已,沒(méi)有參數(shù)和調(diào)用堆棧,因此沒(méi)有真正的函數(shù)調(diào)用)

譯者注:原作者起了《你的編程語(yǔ)言可以這樣做嗎》這個(gè)標(biāo)題其實(shí)并不是這篇文章的真正價(jià)值所在,我轉(zhuǎn)這篇文章也不是因?yàn)樵髡呖梢园颜Z(yǔ)言的初級(jí)技巧玩得轉(zhuǎn),而是因?yàn)檫@是一篇map/reduce模型的示范。

pony 2008-06-09 18:39 發(fā)表評(píng)論
]]>
蓋茨向開(kāi)發(fā)人員告別演講的一句話有感http://www.aygfsteel.com/jjwwhmm/archive/2008/06/04/205900.htmlponyponyWed, 04 Jun 2008 10:18:00 GMThttp://www.aygfsteel.com/jjwwhmm/archive/2008/06/04/205900.htmlhttp://www.aygfsteel.com/jjwwhmm/comments/205900.htmlhttp://www.aygfsteel.com/jjwwhmm/archive/2008/06/04/205900.html#Feedback3http://www.aygfsteel.com/jjwwhmm/comments/commentRss/205900.htmlhttp://www.aygfsteel.com/jjwwhmm/services/trackbacks/205900.html 看到這句話的時(shí)候,我想到了現(xiàn)在的公司,現(xiàn)在公司老板的意思就是不要企業(yè)文化,而是通過(guò)明確的管理規(guī)范來(lái)約束企業(yè)員工,如果所有的員工都一視同仁,開(kāi)發(fā)人員與市場(chǎng)人員,運(yùn)營(yíng)人員都在相同的管理制度下工作的話,那么怎么來(lái)提現(xiàn)"微軟的成功在于我們和開(kāi)發(fā)人員的關(guān)系"?
我一直堅(jiān)定自己從事互聯(lián)網(wǎng)行業(yè)的工作,就是因?yàn)樵谶@個(gè)舞臺(tái)上,每個(gè)人都可能有機(jī)會(huì),每一個(gè)人都更加能夠發(fā)揮自己的主觀能動(dòng)性,而且更加容易.作為互聯(lián)網(wǎng)企業(yè)中最前線的員工---開(kāi)發(fā)人員,如果企業(yè)不能提供一個(gè)有效的機(jī)制來(lái)激發(fā)他們創(chuàng)作的激情,而只是把他們當(dāng)作工具來(lái)使用的話,那么很難想像企業(yè)的前途.又聯(lián)想到現(xiàn)在google大量高級(jí)開(kāi)發(fā)人員,甚至管理人員都紛紛出走,究其原因,是因?yàn)檫@里限制了他們的創(chuàng)造性.我相信,沒(méi)有一個(gè)其它的行業(yè)能比處在互聯(lián)網(wǎng)行業(yè)這個(gè)時(shí)代的浪潮之尖的行業(yè)中更能體會(huì)到創(chuàng)造的樂(lè)趣!
所以,我認(rèn)為,互聯(lián)網(wǎng)企業(yè)中,公司與開(kāi)發(fā)人員的關(guān)系這個(gè)問(wèn)題,應(yīng)該要被提到公司的戰(zhàn)略管理的高度來(lái)重視這個(gè)問(wèn)題.

pony 2008-06-04 18:18 發(fā)表評(píng)論
]]>
Collective Intelligence讀書(shū)筆記之Inroduction to Collective Intelligencehttp://www.aygfsteel.com/jjwwhmm/archive/2008/05/19/201369.htmlponyponyMon, 19 May 2008 05:38:00 GMThttp://www.aygfsteel.com/jjwwhmm/archive/2008/05/19/201369.htmlhttp://www.aygfsteel.com/jjwwhmm/comments/201369.htmlhttp://www.aygfsteel.com/jjwwhmm/archive/2008/05/19/201369.html#Feedback0http://www.aygfsteel.com/jjwwhmm/comments/commentRss/201369.htmlhttp://www.aygfsteel.com/jjwwhmm/services/trackbacks/201369.html這本書(shū)將會(huì)告訴讀者,通過(guò)一些API,應(yīng)用機(jī)器學(xué)習(xí)算法和統(tǒng)計(jì)方法來(lái)收集數(shù)據(jù)的一些方法.那么什么是機(jī)器學(xué)習(xí)呢?這個(gè)概念我倒是還有映像,幸好以前研究過(guò)語(yǔ)音識(shí)別,所以對(duì)人工智能方面的知識(shí)還有一點(diǎn)基礎(chǔ)^_^作者給出的定義是:
An algorithm is given a set of data and infers information about the properties of the data---and that information allows it to make predictions about other data that it might see in the future.簡(jiǎn)單的說(shuō),就是給定一組數(shù)據(jù),然后通過(guò)一個(gè)算法推斷出一個(gè)數(shù)據(jù)模型,然后,利用這個(gè)模型可以對(duì)未來(lái)的其它數(shù)據(jù)做出預(yù)測(cè).作者通過(guò)一個(gè)垃圾郵件過(guò)濾的簡(jiǎn)單例子形象的說(shuō)明了機(jī)器學(xué)習(xí)的過(guò)程!
機(jī)器學(xué)習(xí)常用到的一些算法包括決策樹(shù),神經(jīng)網(wǎng)絡(luò)等,我還記得語(yǔ)音識(shí)別中用到了隱馬爾科夫模型,DTW,線性預(yù)測(cè)LPC,聚類(lèi)等模型,但主要的都是基于數(shù)學(xué)方法和統(tǒng)計(jì)方法,真是后悔數(shù)學(xué)沒(méi)學(xué)好啊:(
作者羅列了一些機(jī)器學(xué)習(xí)算法的應(yīng)用場(chǎng)景,例如Google的page rank,Amozon的推薦系統(tǒng),在金融系統(tǒng)中的防欺騙檢測(cè),產(chǎn)品市場(chǎng)預(yù)測(cè),供應(yīng)鏈管理等方面.


pony 2008-05-19 13:38 發(fā)表評(píng)論
]]>
Collective Intelligence讀書(shū)筆記之Forewordhttp://www.aygfsteel.com/jjwwhmm/archive/2008/05/16/200924.htmlponyponyFri, 16 May 2008 07:22:00 GMThttp://www.aygfsteel.com/jjwwhmm/archive/2008/05/16/200924.htmlhttp://www.aygfsteel.com/jjwwhmm/comments/200924.htmlhttp://www.aygfsteel.com/jjwwhmm/archive/2008/05/16/200924.html#Feedback0http://www.aygfsteel.com/jjwwhmm/comments/commentRss/200924.htmlhttp://www.aygfsteel.com/jjwwhmm/services/trackbacks/200924.html今天終于拿到了這本期盼已久的書(shū),可惜是英文的,鑒于對(duì)這本書(shū)的敬仰!也只好咬著頭皮讀下去了!
剛看了序言,把里面精彩的兩段摘錄下來(lái):
Web2.0...Getting users to participage is the first step.Learning from those users and shapping your site based on what they do and pay attention to is the second step.
在web2.0中,讓用戶參與到你的系統(tǒng)中來(lái)只是其中的第一步,更多的是要從這些用戶的行為中不斷學(xué)習(xí),并在這些經(jīng)驗(yàn)的基礎(chǔ)上優(yōu)化你的web站點(diǎn)

It's not longer enough to know how to build a database-backed web site.If you want to succeed,you need to know how to mine the data that users are ading,both explicitly and as a side effect of their activity on your site.
如果你想成功的話,僅僅局限于知道怎么構(gòu)建一個(gè)基于數(shù)據(jù)路的web站點(diǎn)還是很不夠的,你需要知道怎么從用戶增加的web內(nèi)容中提煉出有用的數(shù)據(jù).



pony 2008-05-16 15:22 發(fā)表評(píng)論
]]>
主站蜘蛛池模板: 中西区| 鹤庆县| 福泉市| 嫩江县| 田林县| 大邑县| 伊金霍洛旗| 平邑县| 广河县| 米林县| 乐陵市| 石楼县| 革吉县| 博爱县| 南宫市| 石屏县| 昌乐县| 杭锦后旗| 温泉县| 襄城县| 观塘区| 南安市| 西和县| 泰兴市| 八宿县| 衡水市| 阿尔山市| 新乐市| 晋中市| 象山县| 赣榆县| 海丰县| 巴塘县| 石棉县| 乌兰县| 大竹县| 花垣县| 萍乡市| 静乐县| 定安县| 蓬莱市|