<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Programming &#8211; richliu&#039;s blog</title>
	<atom:link href="https://blog.richliu.com/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.richliu.com</link>
	<description>Linux, 工作, 生活, 家人</description>
	<lastBuildDate>Mon, 02 Jan 2012 05:54:23 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.2</generator>
	<item>
		<title>程式設計之道 冼鏡光</title>
		<link>https://blog.richliu.com/2011/01/22/1019/%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88%e4%b9%8b%e9%81%93-%e5%86%bc%e9%8f%a1%e5%85%89/</link>
					<comments>https://blog.richliu.com/2011/01/22/1019/%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88%e4%b9%8b%e9%81%93-%e5%86%bc%e9%8f%a1%e5%85%89/#comments</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Sat, 22 Jan 2011 04:26:21 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[哲學]]></category>
		<category><![CDATA[程式設計]]></category>
		<category><![CDATA[道]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/?p=1019</guid>

					<description><![CDATA[<p>大學的時代就看過冼鏡光的這篇文章, 當時覺得很神, 不過文章不知道存在那邊. 現在拜有網路之賜, 到處都找得到 [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2011/01/22/1019/%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88%e4%b9%8b%e9%81%93-%e5%86%bc%e9%8f%a1%e5%85%89/">程式設計之道 冼鏡光</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>大學的時代就看過冼鏡光的這篇文章, 當時覺得很神, 不過文章不知道存在那邊.</p>
<p>現在拜有網路之賜, 到處都找得到 (所以我也可以 COPY 一下. )</p>
<p>工作了十年, 不管是進銷存, 網路安全, 軟體, 硬體, 軔體都做過. 也碰到神奇的中醫, 在事業不順時也看了莊子</p>
<p>再回頭來看這篇文章, 特別有感覺</p>
<p>程式設計很簡單, 但是要悟程式設計的<strong>道</strong>, 很難.</p>
<p>悟道之前的修行是又多又苦的.</p>
<p><span id="more-1019"></span></p>
<p>THE DAO OF PROGRAMMING Geoffrey James</p>
<p>程式設計之道 冼鏡光</p>
<p>微電腦時代96,97</p>
<p>第一部 寂靜虛無篇</p>
<p>大師如是說:&#8221;學會從程式抓蟲子之後, 就可以畢業了</p>
<p>1.1 節</p>
<p>.寂靜虛無中有奧秘, 不動不靜, 乃程式之源, 吾無以名之, 故稱之為程式設計之道.</p>
<p>.若道至大, 則作業系統至大; 若作業系統至大, 編譯程式亦然; 若編譯程式至大,</p>
<p>則應用程式亦復如是, 是故使用人大悅, 世有和諧存焉.</p>
<p>1.2 節</p>
<p>.程式設計之道無遠弗屆, 雖晨曦微風而返.</p>
<p>.道生機器語言, 機器語言生組譯程式.</p>
<p>.組譯程式生編譯程式, 於是萬餘語言存焉.</p>
<p>.各語言有其目的, 均表達軟體之陰陽; 其在道中亦各得其所.</p>
<p>.但若能避免, 就不要用COBOL 寫程式.</p>
<p>1.3 節</p>
<p>.太初有道, 道生時空, 故時空乃程式設計之陰陽.</p>
<p>.程式員不悟道則時空永不敷使用, 悟道者恒有充份時空完成目標.</p>
<p>1.4 節</p>
<p>.上智程式員聞道而行之, 中智程式員聞道而求之, 下智程式員聞道而笑之.</p>
<p>.若無笑聲則無道矣.</p>
<p>.至高之聲難以聽聞.</p>
<p>.前進就是後退之路; 大智總是晚成; 每一個完美的程式仍有BUG.</p>
<p>.道在所有知識之外.</p>
<p>第二部 古之大師篇</p>
<p>大師如是說:&#8221;三日不寫程式則生命無趣.</p>
<p>2.1 節</p>
<p>.古程式員神秘而深奧, 無以度量其思維, 僅能描述其表象.</p>
<p>.像狐狸涉水般地小心; 像戰場老兵般地警覺; 像未經琢磨的木頭般地璞拙;</p>
<p>像洞中深潭地不透明.</p>
<p>.誰能指出他們心靈中的秘密?</p>
<p>.答案全在道中.</p>
<p>2.2 節</p>
<p>.大師Turing曾經夢到他是一部電腦, 醒後道:</p>
<p>. &#8220;不知是我Turing作夢變成機器, 還是一部機器作夢變成我我Turing.&#8221;</p>
<p>.一家大電腦公司的程式員參加軟體會議後, 向他的經理報告說:&#8221;你知道其他電腦</p>
<p>公司有什麼程式員嗎? 他們不修邊幅, 頭髮長而邋遢, 衣服既舊且皺, 他們破壞</p>
<p>了氣氛, 而且我簡報時老是製造噪音.&#8221;</p>
<p>.經理說:&#8221;我根本就不應該派你參加會議, 這些程式員超然物外, 他們把生命看成無稽,</p>
<p>意外的結合. 他們往來而無藩籬, 為他們的程式而活, 為什們他們一定要受社會積習</p>
<p>的約束?</p>
<p>.他們生活在道中.&#8221;</p>
<p>2.3 節</p>
<p>.生手問大師:&#8221;有一個程式員從不設計, 測試程式, 寫作文獻, 但了解他的人都認為</p>
<p>他是世間最好的程式員. 為什麼?&#8221;</p>
<p>.大師曰:&#8221;這個程式員已充份悟道, 他超越了設計的需要; 系統垮了不會生氣,</p>
<p>而無條件接受這個世界. 他超越了文獻的需要, 他不再計較是否有人看他的程式.</p>
<p>他也超越了測試的需要, 他的每一個程式都圓滿無缺, 清澈, 優雅, 目的自明.</p>
<p>.是的, 他已悟道, 登堂入室.</p>
<p>第三部 設計篇</p>
<p>大師說:&#8221;到測試程式時再回頭修改設計就太遲了.&#8221;</p>
<p>3.1 節</p>
<p>.曾經有人在參觀電腦展每天進門時都向警衛說:&#8221;我是的妙賊, 偷東西的技巧已臻化境,</p>
<p>先告訴你, 我絕不會放過這次展覽.&#8221;</p>
<p>.這段話刺激到警衛, 因為展覽場有好幾百萬元價值的儀器, 所以老是盯這他,</p>
<p>不過卻只看到這個人一個攤位接著一個攤位看, 哼著小曲而已.</p>
<p>.這個人出門的時侯, 警衛把他帶到一旁搜身, 但卻找不到什麼.</p>
<p>.第二天這個人又來了, 而且教訓警衛說:&#8221;昨天我收獲不錯, 不過今天會更佳.&#8221;</p>
<p>所以警衛就更加注意他了, 但是仍然沒有結果.</p>
<p>.最後一天警衛終於忍不住好奇心, 問那個人:&#8221;賊大師, 我給您弄得寢食難安,</p>
<p>您是否以教我, 究竟偷了些什麼?&#8221;</p>
<p>.這個人笑笑, 說:&#8221;我偷的是概念.&#8221;</p>
<p>3.2 節</p>
<p>.從前有一位大師專寫沒有結構化的程式, 一個生手模仿他, 也開始寫沒有結構化的</p>
<p>程式. 當這位生手要求大師評量進展時, 大師卻批評他寫作沒有結構化的程式.</p>
<p>.大師說:&#8221;對大師適用的不一定適合生手, 在能超越結構化之前, 必須先悟道.&#8221;</p>
<p>3.3 節</p>
<p>.某長官問程式員:&#8221;設計會計系統與作業系統, 那一個比較簡單?&#8221;</p>
<p>.程式員說:&#8221;作業系統.&#8221;</p>
<p>.長官發出不相信的驚呼:&#8221;很顯然的, 會計系統不如作業系統複雜&#8221;,他說.</p>
<p>.&#8221; 不!&#8221;程式員回答,&#8221;在設計會計系統時, 程式員是各種不同主意的人之間的橋樑,</p>
<p>這些主意不外乎: 系統要如何作業? 報表型式如何? 要如何迎合稅法?&#8230;等等.</p>
<p>反過來, 作業系統卻不受外界表象的限制; 在設計作業系統時, 程式員尋求人與機器</p>
<p>間最純的和諧, 這就是為什麼作業系統容易設計.&#8221;</p>
<p>.長官點頭微笑稱是:&#8221;但是那一個容易偵錯?&#8221;</p>
<p>.程式員沒有回答.</p>
<p>3.4 節</p>
<p>.經理去見大師, 並且告訴他一套新應用程式文件的需求規格, 問道:&#8221;如果我給你五</p>
<p>個程式員, 要多久才能設計好這個系統?&#8221;</p>
<p>.大師很快回答:&#8221;一年.&#8221;</p>
<p>.&#8221; 但是我們需要馬上用這個系統! 如果我給你十個程式員, 那要多久?&#8221;經理說.</p>
<p>.大師皺眉說:&#8221;這要兩年.&#8221;</p>
<p>.&#8221; 如果我給你一百個程式員呢?&#8221;</p>
<p>.大師聳聳肩:&#8221;這個系統根本作不出來了.&#8221;</p>
<p>第四部 寫作篇</p>
<p>大師如是說:&#8221;寫作良好的程式本身自成天堂, 寫得差的程式本身就是地獄.</p>
<p>4.1 節</p>
<p>.程式要輕靈, 副程式像一串珍珠. 程式的精神與意圖應始終如一, 不多不少;</p>
<p>沒有多餘的迴圈, 也沒有額外的變數, 既不缺少結構, 也不過份笨重.</p>
<p>.程式應該追隨&#8221; 最低驚訝定律&#8221;,這是什麼?</p>
<p>.簡單得很, 使用人對程式的反應是驚訝的機會要愈低愈好.</p>
<p>.程式不管再複雜, 應該以一個整體來作用; 他應該用內部邏輯, 而不是外在的表</p>
<p>象來指導作業.</p>
<p>.如果程式不滿足這些要求, 就會雜亂而易生混淆, 唯一的補救就是重新寫過.</p>
<p>4.2 節</p>
<p>.生手問大師:&#8221;我有一個程式, 有時侯作得很好, 有時侯卻不行; 我一直遵行程式設</p>
<p>計的規律, 但是卻把我弄得很困擾, 其理安在?&#8221;</p>
<p>.大師答曰:&#8221;因為不悟道才會如此, 只有笨蛋才會期望他的同儕有合理的行為,</p>
<p>而你卻對人類生產的機器有所期望?!計算機只模擬了決定論, 只有道才十全十美.</p>
<p>.程式設計的準則還是暫時性的, 只有道才會進入永恒. 所以, 你在開竅前要先思索道.&#8221;</p>
<p>.&#8221; 但我要如何才能知道已經開竅了呢?&#8221;生手問.</p>
<p>.大師回答:&#8221;從此以後, 你的程式都能正確執行.&#8221;</p>
<p>4.3 節</p>
<p>.大師對弟子說:&#8221;不論軟體之為大為小, 道在所有軟體中.&#8221;</p>
<p>.&#8221; 桌上型計算機有道嗎?&#8221;弟子問.</p>
<p>.&#8221; 有!&#8221;大師答.</p>
<p>.&#8221; 電動玩具程式中有道嗎?&#8221;弟子續問.</p>
<p>.&#8221; 也有!&#8221;大師說.</p>
<p>.&#8221; 那個人電腦的DOS 中有道嗎?&#8221;</p>
<p>.大師咳一下, 輕輕挪動了位置,&#8221;下課&#8221;,他說.</p>
<p>4.4 節</p>
<p>.皇太子的程式員正在寫作軟體, 指尖在鍵盤上飛舞, 程式順暢無誤的編譯完成,</p>
<p>執行起來像陣微風輕拂而完美的結束.</p>
<p>.&#8221; 了不起!&#8221;, 太子嘆曰:&#8221;你的技巧無懈可擊.&#8221;</p>
<p>.&#8221; 技巧?&#8221;程式員從終端機上轉過頭說,&#8221;我所信從的是道, 道超越任何技巧!</p>
<p>我開始學寫程式時, 在我眼前所見是混成一片的程式; 三年後, 不再見到這一大片</p>
<p>程式了</p>
<p>, 我學會使用副程式; 現在, 眼前一片空靈, 什麼都沒有了, 所有東西都進入無</p>
<p>型式的一片靜寂; 所有感覺都不必作用.</p>
<p>.我的精神可以依直覺而不必依任何計劃行事, 換言之, 我的程式自己寫作自己.</p>
<p>當然, 有時會有困難的問題; 我看著他們到來, 我降低自已的速度, 靜靜的看,</p>
<p>改一列程式之後困難就會煙消雲散; 我再重新靜靜坐著欣賞工作的歡樂. 我閉上雙眼</p>
<p>一會兒, 然後關機.&#8221;</p>
<p>.皇太子說:&#8221;我的所有程式員都那麼聰明睿智嗎?&#8221;</p>
<p>第五部 維護篇</p>
<p>大師如是說:&#8221;雖然程式只有三列, 但總有一天需要維護.&#8221;</p>
<p>5.1 節</p>
<p>.常用的門不必上油.</p>
<p>.急流不會淤塞.</p>
<p>.聲音與思想不能在真空中傳遞.</p>
<p>.不用的軟體會生鏽.</p>
<p>.這就是至大的奧秘.</p>
<p>5.2 節</p>
<p>.經理問程式員究竟要多久才能把手上的程式寫完.&#8221;明天&#8221;,程式員很快的回答.</p>
<p>.經理說:&#8221;我想你不太踏實; 真的要多久?&#8221;</p>
<p>.程式員想了一會兒:&#8221;我希望在程式中加上一些東西, 這至少要兩週.&#8221;程式員終於說</p>
<p>.&#8221; 時間還是短了一些&#8221;,經理堅持說:&#8221;如果你能簡單的告訴我什麼時後能寫完我才會滿意.&#8221;</p>
<p>.程式員同意這一點.</p>
<p>.幾年後經理退休了, 在歡送餐會上發現那個程式員伏在終端機上睡著了, 因為他</p>
<p>寫程式寫了整夜.</p>
<p>5.3 節</p>
<p>.一個生手被分派去寫一個單純的財務軟體.</p>
<p>.這個生手狂熱地工做了幾天, 但是當大師看他的成品時, 卻發現這個程式中包</p>
<p>含一個螢光幕編修程式, 一組一般性的繪圖程式, 一個人工智慧界面, 但卻沒有什麼</p>
<p>與財務方面有關.</p>
<p>.大師就問他, 這個生手卻變得很激動:&#8221;不要那麼沒耐心,&#8221;他說,&#8221;我最終會把財務</p>
<p>部份加上去.&#8221;</p>
<p>5.4 節</p>
<p>.好農夫會忽視他種的穀子嗎?</p>
<p>.好老師會忽略他最差的學生嗎?</p>
<p>.好父親會容許他的孩子挨餓嗎?</p>
<p>.好程式員會拒絕維護自己的程式嗎?</p>
<p>第六部 管理篇</p>
<p>大師如是說:&#8221;程式員要多, 經理要少, 生產力就會增加.&#8221;</p>
<p>6.1 節</p>
<p>.經理有開不完的會的話, 程式員就會寫電玩; 主計部門想到利潤, 發展經費</p>
<p>就會被刪減; 高級科學家談到藍藍青天, 那麼青天一定會有浮雲飛過.</p>
<p>.當然, 這不是程式設計之道.</p>
<p>.當經理許下承諾, 程式員就不理會電玩; 當主計部門有長程規劃, 就會回復</p>
<p>和諧與秩序; 當高級科學家處理手上的問題, 問題很快就會解決.</p>
<p>.這才是程式設計之道.</p>
<p>6.2 節</p>
<p>.為什麼程式員沒有生產力? 因為他們的時間都花在開會上頭.</p>
<p>.為什麼程式員難以駕御? 因為管理階層干預太多.</p>
<p>.為什麼程式員一個接一個辭職? 因為他們精力耗光了.</p>
<p>.在不良管理下工作, 程式員不會覺得他的工作有價值.</p>
<p>6.3 節</p>
<p>.某個經理快被炒魷魚了, 但是他底下的一個程式員寫了一個叫好又叫座的程式;</p>
<p>當然, 這位經理因而保住了飯碗.</p>
<p>.經理打算給這位程式員一點獎勵, 但他拒絕接受, 並且說:&#8221;因為我覺得這是個有</p>
<p>趣的概念, 才會寫這個程式, 所以我不希望有獎勵.&#8221;</p>
<p>.經理聽了之後說:&#8221;這個程式員雖然職位不高, 但卻充份了解做為一個職員的責任,</p>
<p>讓我們把他升成崇高的管理顧問吧!&#8221;</p>
<p>.在告訴程式員時, 他再度拒絕, 說:&#8221;我之存在是因為可以寫程式, 如果升了我,</p>
<p>那除了浪費每一個人的時間外而成不了事. 我可以走了嗎? 我還得寫程式.&#8221;</p>
<p>6.4 節</p>
<p>.經理告訴程式員們說:&#8221;下面是你們的工作時間: 早上九點來上班, 下午五點鐘下班.&#8221;</p>
<p>所有程式員都很生氣, 有幾個馬上辭職.</p>
<p>.於是經理說:&#8221;好吧! 這樣好了, 只要能夠如期完工, 工作時間由你們自定.&#8221;程式員現</p>
<p>在滿意了, 每天中午開始工作, 直到第二天早上.</p>
<p>第七部 公司智慧篇</p>
<p>大師如是說:&#8221;你可以對主管示範一個程式, 但無法讓他通曉電腦.&#8221;</p>
<p>7.1 節</p>
<p>.生手問大師:&#8221;遙遠東方有一個叫&#8221; 公司總部&#8221; 的偉大樹狀結構, 上面滿滿地標上了</p>
<p>些副總裁, 會計長等的圖案. 它發出大量的備忘錄, 每張上面都寫了&#8221; 收文!&#8221;</p>
<p>&#8221; 發文!&#8221;沒有人知道是什麼意義. 每年都會把新的名字加到新的分 枝上, 但似乎全</p>
<p>都徒勞無功. 為什麼這樣一個不自然的組織還能繼續存在?&#8221;</p>
<p>.大師回答說:&#8221;你已經體認到這個龐大的結構, 而被它不合理的目的困擾.</p>
<p>不過你能不從它無休止的迴旋而得到樂趣嗎? 能夠不欣賞深藏在枝葉底端毫無困難</p>
<p>的程式設計嗎? 為什麼要被他的無用而困擾呢.&#8221;</p>
<p>7.2 節</p>
<p>.東方海上有大魚曰鯤, 鯤能變成雙翼遮天的大鵬. 當大鵬飛越陸地時帶來一道公司</p>
<p>總部的訊息, 這道訊息正好掉在一群程式員中央, 然後大鵬折起雙翼乘風而歸.</p>
<p>.生手程式員瞪眼望著大鵬, 因為他們不認得; 中智程式員憂大鵬的來臨, 因為他們</p>
<p>害怕它帶來的訊息; 只有大師才能繼續坐在終端機前工作, 因為他不知大鵬的來去</p>
<p>7.3 節</p>
<p>.象牙塔的魔術師帶著他的最新發明去見大師, 他推了一個大黑盒子走進大師的辦公室,</p>
<p>大師正在靜靜的等著.</p>
<p>.&#8221; 這是一套整合性, 分散式, 一般用途的工作站&#8221;,魔術師如是說,&#8221;還有一套專屬的</p>
<p>作業系統, 第六代語言, 多項最先進的使用人界面, 再加上人體工學的設計;</p>
<p>這花了我的助手們好幾百人年才造出來的, 不是很了不起嗎?&#8221;</p>
<p>.大師抬了下眼珠子,&#8221;的確了不起.&#8221;大師說.</p>
<p>.魔術師繼續說:&#8221;公司總部已經下令每個人都要用這台工作站做發展新軟體的基石,</p>
<p>您同意嗎?&#8221;</p>
<p>.&#8221; 當然.&#8221;大師答道:&#8221;我馬上會把它放到資訊中心去.&#8221;於是魔術師高高興興的回到</p>
<p>象牙塔去.</p>
<p>.幾天後, 一個生手在大師的辦公室裡團團轉, 說:&#8221;我找不到新程式的報表,</p>
<p>您知道會在那兒嗎?&#8221;</p>
<p>.&#8221; 當然&#8221;,大師答道,&#8221;報表就堆在資訊中心裡頭的基石上!&#8221;</p>
<p>7.4 節</p>
<p>.大師可以毫無憂慮的從這個程式轉入另一個程式, 管理上的改變傷不到他;</p>
<p>縱使計劃中止了, 也不會被炒魷魚. 為什麼? 因為他充滿了道.</p>
<p>第八部 硬體與軟體篇</p>
<p>大師如是說:&#8221;沒有風, 草不會動, 沒有軟體, 硬體就是廢物.&#8221;</p>
<p>8.1 節</p>
<p>.生手問大師:&#8221;我知道一家電腦公司比其他的大得多, 高高在上就像巨人之比侏儒;</p>
<p>它的任一部都可以單獨成為一個企業. 為什麼會這樣?&#8221;</p>
<p>.大師回答:&#8221;你為什麼問這個笨問題? 這家公司就是因為它大才會這麼大. 如果它只</p>
<p>知道硬體, 沒有人會買它; 如果只生產軟體, 沒有人會用它; 如果只維護系統,</p>
<p>人家會把它看成修理員; 但是因為他把所有的合在一起, 人們就把它當神一樣看待了</p>
<p>. 它根本無需競爭, 因為贏來不費吹灰之力.&#8221;</p>
<p>8.2 節</p>
<p>.大師有一天經過一個生手旁邊, 發現生手迷上一台手掌型的電玩,&#8221;對不起&#8221;,大師說,</p>
<p>&#8220;我可以看看它嗎?&#8221;</p>
<p>.生手停下來, 並且把這台機器交給大師. 大師說:&#8221;我看到這台機器玩起來有三個層次:</p>
<p>初級, 中級, 高級; 不過這種機器通常都有另一個層次的說法, 使機器贏不了人類,</p>
<p>而人類也勝不了機器.&#8221;</p>
<p>.&#8221; 啊! 大師&#8221;,生手說:&#8221;這個奇妙的開關在那裡?&#8221;</p>
<p>.大師把機器摔到地上, 用腳把它踏爛.</p>
<p>.突然地, 生手開竅了.</p>
<p>8.3 節</p>
<p>.從前有一位微電腦的程式員對一位來拜訪他的大型電腦程式員說:&#8221;你看,</p>
<p>在我這兒多好! 我有我自己的作業系統與案儲存設備, 我不必與任何人共用任</p>
<p>何電腦資源;軟體本身自給自足, 而且容易使用. 為什麼你不辭掉目前的工作</p>
<p>來加入我們?&#8221;</p>
<p>.於是大型電腦的程式員就對他的朋友解釋:&#8221;大型電腦就像古之聖哲般的穩穩座落i</p>
<p>在資訊中心中央, 磁碟一個接一個蔚為奇觀, 軟體像鑽石般地有多種面目, 像</p>
<p>古森林般的濃密茂盛. 各個程式像一片急流般地湧入系統, 而這就是我在那兒工</p>
<p>作的樂趣 .&#8221;</p>
<p>.聽了這段話之後, 微電腦程式員靜默無聲; 但是這兩個人卻結為好友, 至死不渝.</p>
<p>8.4 節</p>
<p>.Hardware與Software走在路上, Software說:&#8221;你是陰我是陽, 如果我們能一條心,</p>
<p>一定會成大名賺大錢.&#8221;所以,他們就聯合在一起而想征服世界.</p>
<p>.走了一段路之後, 碰到Firmware, 穿得破破爛爛, 拿著根柺杖, 並且對他們說:</p>
<p>&#8220;道在陰陽之外, 寂靜不動如古井之不生波瀾; 道不求名, 故無人知曉其存在;</p>
<p>道不逐利, 因它圓滿無缺. 道超乎時空之外.&#8221;</p>
<p>.Hardware和Software聽了之後倍感慚愧而打道回家.</p>
<p>第九部 尾聲</p>
<p>大師如是說:&#8221;這是下課的時候了!&#8221;</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2011/01/22/1019/%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88%e4%b9%8b%e9%81%93-%e5%86%bc%e9%8f%a1%e5%85%89/">程式設計之道 冼鏡光</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2011/01/22/1019/%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88%e4%b9%8b%e9%81%93-%e5%86%bc%e9%8f%a1%e5%85%89/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>GCC ## Preprocessor</title>
		<link>https://blog.richliu.com/2007/02/08/434/gcc-preprocessor/</link>
					<comments>https://blog.richliu.com/2007/02/08/434/gcc-preprocessor/#respond</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Thu, 08 Feb 2007 08:51:17 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/2007/02/08/434/</guid>

					<description><![CDATA[<p>之前的程式有用到 ## 減少一些重複的程式, 當時是放在 Linux kernel 2.4 上面, 用的是 g [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2007/02/08/434/gcc-preprocessor/">GCC ## Preprocessor</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>之前的程式有用到  ## 減少一些重複的程式, 當時是放在 Linux kernel 2.4 上面, 用的是 gcc 2.95.3, 不過因為改寫到 Linux kernel 2.6 的緣故, 所以 gcc 改用 3.4.6 . 這時就出現錯誤訊息了.<br />
<span id="more-434"></span><br />
程式大概長得像是這樣.</p>
<blockquote><p>#define amba_attr(name,fmt,arg&#8230;)                              \<br />
static ssize_t show_##name##_test(struct device *_dev, struct device_attribute *attr, char *buf)       \<br />
{                                                               \<br />
struct amba_device *dev = to_amba_##name##(_dev);         \<br />
return sprintf(buf, fmt, arg);                          \<br />
}</p></blockquote>
<p>其實是個錯誤的語法, 要改成</p>
<blockquote><p>#define amba_attr(name,fmt,arg&#8230;)                              \<br />
static ssize_t show_##name##_test(struct device *_dev, struct device_attribute *attr, char *buf)       \<br />
{                                                               \<br />
struct amba_device *dev = to_amba_##name(_dev);         \<br />
return sprintf(buf, fmt, arg);                          \<br />
}</p></blockquote>
<p>這樣才對.</p>
<p>簡單的說, 如果 name 是要代換的字串, name之前是要保留的字串, 那就是要放 ##在前方,<br />
EX: function_##name(arg);<br />
如果 name 之後是要保留的字串, 那就是要放 ## 在後方<br />
EX: name##_function(arg);<br />
如果 name 是夾在中間. 那 ## 前後都要放<br />
EX: function1_##name##_function2(arg);</p>
<p>原來我一直都搞錯, 那&#8230;. gcc 2.95.3 怎麼能過呀 :-/</p>
<p>ref.<br />
<a href="http://gcc.gnu.org/onlinedocs/gcc-3.4.6/cpp/Concatenation.html#Concatenation" target="_blank" rel="noopener">GCC DOC 3.4.6 Concatenation</a></p>
<p>[Tags] Gcc, Programming , Linux [/Tags]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2007/02/08/434/gcc-preprocessor/">GCC ## Preprocessor</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2007/02/08/434/gcc-preprocessor/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[Google] Oops</title>
		<link>https://blog.richliu.com/2007/01/31/427/google-oops/</link>
					<comments>https://blog.richliu.com/2007/01/31/427/google-oops/#respond</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Tue, 30 Jan 2007 16:02:44 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[隨手札記]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/2007/01/31/427/</guid>

					<description><![CDATA[<p>今天在用 Google Reader 的時候, 看到這張圖片&#8230;&#8230;. 看到 That w [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2007/01/31/427/google-oops/">[Google] Oops</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>今天在用 Google Reader 的時候, 看到這張圖片&#8230;&#8230;.<br />
<img decoding="async" src="http://farm1.static.flickr.com/159/374547934_43eefbe39e.jpg?v=0" alt="" /></p>
<p>看到 <strong>That wasn&#8217;t supposed to happen</strong>. &#8230;<br />
不禁笑了出來 :p</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2007/01/31/427/google-oops/">[Google] Oops</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2007/01/31/427/google-oops/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programming Texts and Tutorials</title>
		<link>https://blog.richliu.com/2006/12/21/407/programming-texts-and-tutorials/</link>
					<comments>https://blog.richliu.com/2006/12/21/407/programming-texts-and-tutorials/#comments</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Wed, 20 Dec 2006 16:09:45 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/2006/12/21/407/</guid>

					<description><![CDATA[<p>Unix(Linux/BSD) 下, 各種軟體, 程式語言的文件收集地. 除了中文以外, 其他己經整理得非常詳 [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2006/12/21/407/programming-texts-and-tutorials/">Programming Texts and Tutorials</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Unix(Linux/BSD) 下, 各種軟體, 程式語言的文件收集地. </p>
<p>除了中文以外, 其他己經整理得非常詳細了, 有問題可以到這邊 Search<br /><a href="http://stommel.tamu.edu/%7Ebaum/programming.html#cron" target="_blank" rel="noopener"><br />Programming Texts and Tutorials</a></p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2006/12/21/407/programming-texts-and-tutorials/">Programming Texts and Tutorials</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2006/12/21/407/programming-texts-and-tutorials/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Flash Player 9 Update</title>
		<link>https://blog.richliu.com/2006/11/22/388/flash-player-9-update/</link>
					<comments>https://blog.richliu.com/2006/11/22/388/flash-player-9-update/#comments</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Wed, 22 Nov 2006 13:14:36 +0000</pubDate>
				<category><![CDATA[Gentoo]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[UNIX]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/2006/11/22/388/</guid>

					<description><![CDATA[<p>11 月 20 日, Adobe 又釋出了新版的 FLAH. 這次仍然有 Flash 9 Plugin 和 F [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2006/11/22/388/flash-player-9-update/">Flash Player 9 Update</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>11 月 20 日, <a href="http://www.adobe.com" target="_blank" rel="noopener">Adobe</a> 又釋出了新版的 FLAH.<br />
這次仍然有 Flash 9 Plugin 和 Flash Player .</p>
<p>下載地點在 : <a href="http://labs.adobe.com/downloads/flashplayer9.html" target="_blank" rel="noopener">Flash Player 9 Update<br />
</a><br />
安裝方式仍然可以參照我的 <a href="http://blog.richliu.com/2006/10/20/372/"> Flash 9 Lab Version </a>這一篇</p>
<p>至於穩定性問題, 有一個問題是 .mo 的問題, 可以參考<br />
<a href="http://people.debian.org.tw/~chihchun/" target="_blank" rel="noopener">chihchun </a>長輩的 <a href="http://people.debian.org.tw/~chihchun/2006/11/02/flash-player-9-for-linux/" target="_blank" rel="noopener">Flash Player 9 for Linux</a></p>
<p>不過呢, 依照這樣做還是會當機, 晚上看到一篇<br />
firefox<a href="http://moto.debian.org.tw/viewtopic.php?p=51988#51988" target="_blank" rel="noopener">自動關閉?</a><br />
有人提到</p>
<blockquote><p>如果是用 gcin 可以在 /usr/bin/firefox 開頭處加入</p>
<p>unset XMODIFIERS</p>
<p>防止 flashplayer open XIM。flashplayer 的 XIM 有bug。</p>
<p>加了這行gcin還是可以用 GTK_IM_MODULE=gcin 輸入中文。</p></blockquote>
<p>簡單的說, 如果要手動執行, 可以</p>
<blockquote><p> # unset XMODIFIERS<br />
# LC_ALL=&#8221;zh_TW&#8221; /usr/bin/firefox</p></blockquote>
<p>這樣就可以解決了, 試了一下沒有問題, 只是選單那邊怪怪的, 還有不能放大全螢幕.</p>
<p>這樣應該是堪用了!</p>
<p>P.S 還有另一個問題, 解法是</p>
<p>將  export XLIB_SKIP_ARGB_VISUALS=1 放在.xinitrc 內.</p>
<p>ref.<br />
<a href="http://victor.csie.org/blog/archives/258" style="color: brown" set="yes" rel="bookmark noopener" title="Permanent Link to 找到 firefox 裡面 flash plugin crash 的原因了" target="_blank">找到 firefox 裡面 flash plugin crash 的原因了</a></p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2006/11/22/388/flash-player-9-update/">Flash Player 9 Update</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2006/11/22/388/flash-player-9-update/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Wireless 的 Aggregation</title>
		<link>https://blog.richliu.com/2006/09/30/358/wireless-%e7%9a%84-aggregation/</link>
					<comments>https://blog.richliu.com/2006/09/30/358/wireless-%e7%9a%84-aggregation/#comments</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Sat, 30 Sep 2006 15:20:02 +0000</pubDate>
				<category><![CDATA[Embedded]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Wireless]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/2006/09/30/358/</guid>

					<description><![CDATA[<p>電腦的世界內, 很多概念都是相同的, 有時候看看這些技術, 其實還很好玩的呢~ Aggregation 是一種 [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2006/09/30/358/wireless-%e7%9a%84-aggregation/">Wireless 的 Aggregation</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>電腦的世界內, 很多概念都是相同的, 有時候看看這些技術,  其實還很好玩的呢~</p>
<p>Aggregation 是一種概念, 我最近接觸到這個名詞是在 PreN 的 driver 上看到的, 主要的技術背景<br />
就是將多個封包合而為一, 一起傳送出去. 主要還是減少大量封包傳輸時, 減少 Control Packet 的 Overhead.</p>
<p>其中主要的實作有以下幾種</p>
<li> Block ACK </li>
<li> Reducing Inter Frame Spacing (RIFS) </li>
<li> Frame Packing At MAC Layer (AMPDU) </li>
<li> Aggregating PPDU (APPDU) </li>
<p>這些都是作用在底層的協定(Layer 2), 在實務上, 你用 Sniffer 並不會看到這些技術出現. </p>
<p>首先來看 Block ACK 的機制, 這個機制就是希望在傳送的過程中, 不要再傳送 ACK<br />
而 Block ACK 又分成 immediate 和 delayed, immediate 是直接在 aggregation packet 傳送結束後,<br />
馬上傳回 ACK, 而 delayed 是等下一次傳送後再送出 ACK (心中 OS : 這種 Schema 有人用嗎&#8230;..?)<br />
一般來說, 大量資料傳送都會使用 Block ACK .<br />
而個人認為 Block ACK 也很像是 Scaling Window 的機制, 只是比較簡單, 不需要去判斷 Bandwidth.<br />
其實 ACK Packet 也是要耗用 Resource 去處理的, 如果這個 ACK 是用 hardware 處理也還好,<br />
不過如果這個 ACK Packet 是要用 CPU 去處理, 那就值得用 Block ACK 去減少 ACK 的耗用量<br />
畢竟一個 ACK 也是要耗用和一般 Packet 差不多的時間去處理(當然 Memory Copy 的時間少很多).</p>
<p>RIFS 就比較容易理解了, 就是在 Frame 和 Frame 中間並沒有一些 Delay 或是空白的機制.<br />
以增加單位時間內可以傳輸的資料量. </p>
<p>AMPDU<br />
<img decoding="async" id="image359" src="http://blog.richliu.com/wp-content/uploads/2006/09/ampdu.jpeg" alt="AMPDU 圖示" /><br />
從這一張圖表可以很清楚的看到, AMPDU 就是將數個相同目地的資料, 集合成一次送出, 以減少底層 Hand Shaking 的時間, 同時也可以減少 Header 的重覆傳送, 以達到快速傳送的目地.</p>
<p>APPDU<br />
和 AMPDU 不同的地方在於, APPDU 是 Physical Layer Header 集合在一起. </p>
<p>一般來說, Aggregation 對於 Bulk Data Transfer 的效用並不大, 將 Header 減少的效用剛好在處理 Aggregation 這一段時間就補回來了, 但是 Aggregation 對於小封包就很有用了, 這時 Header 佔小封消耗的時間就比較多了. </p>
<p>曾經看過 Aggregation 這樣處理的<br />
<img decoding="async" id="image359" src="http://blog.richliu.com/wp-content/uploads/2006/09/bad_aggregation.jpeg"  /><br />
這樣的處理如果在 x86 內, 一點問題也沒有, 畢竟 x86 速度快, Memory Bandwidth 也大, 所以程式寫爛一點也沒有關係. 但是在 Embedded Linux 下, 畢竟資源有限.<br />
我們看到這個圖, 總共有幾次的 Memory Copy 呢? 答案是 3 次, 比起一般的收封包, 多了二次, 也就是三倍的 Memory 頻寬耗用量, 這還不包含 CPU 處理的時間.<br />
所以 Driver 這樣寫, 真是大方呀, 據我所知, 大概只有那家將文書編輯軟體內放模擬飛行的公司可以比而己&#8230;..</p>
<p>這只是一個很簡單的例子, 在 Embedded Linux 下寫 Code 要特別小心, 並不是每次都有什麼 IXP420 266Mhz or 400MHZ+ 甚至是 C7 這樣高階的 CPU. 常常的狀況都是比較低階的 CPU . </p>
<p>所以各位看倌可以發現, Aggregation 並沒有什麼了不起, 只是以前的概念拿來修修改改.<br />
在 802.11n 這些技術也己經很普遍了. </p>
<p>Ref. 主要的參考文件<br />
<a href="http://www.crhc.uiuc.edu/~croy/pubs/aggregation.pdf" target="_blank" rel="noopener">Performance Analysis of Data Aggregation Techniques for Wireless LAN</a></p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2006/09/30/358/wireless-%e7%9a%84-aggregation/">Wireless 的 Aggregation</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2006/09/30/358/wireless-%e7%9a%84-aggregation/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>這真是太歡樂了&#8230;&#8230;&#8230; U.S. Grants Patent For Broad Range Of Internet Rich Applications</title>
		<link>https://blog.richliu.com/2006/02/24/306/e98099e79c9fe698afe5a4aae6ada1e6a882e4ba86_us_grants_patent_for_bro/</link>
					<comments>https://blog.richliu.com/2006/02/24/306/e98099e79c9fe698afe5a4aae6ada1e6a882e4ba86_us_grants_patent_for_bro/#respond</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Fri, 24 Feb 2006 02:00:15 +0000</pubDate>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/2006/02/24/306/</guid>

					<description><![CDATA[<p>在 information week 看到的, U.S. Grants Patent For Broad Ra [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2006/02/24/306/e98099e79c9fe698afe5a4aae6ada1e6a882e4ba86_us_grants_patent_for_bro/">這真是太歡樂了&#8230;&#8230;&#8230; U.S. Grants Patent For Broad Range Of Internet Rich Applications</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>在 <a href="http://www.informationweek.com" target="_blank" rel="noopener">information week </a>看到的, <a href="http://www.informationweek.com/story/showArticle.jhtml?articleID=180206472&#038;cid=RSSfeed_IWK_News" target="_blank" rel="noopener">U.S. Grants Patent For Broad Range Of Internet Rich Applications</a></p>
<p>內文提到</p>
<blockquote><p>The patent&#8211;issued on Valentine&#8217;s Day&#8211;covers all rich-media technology implementations, including Flash, Flex, Java, Ajax, and XAML, when the rich-media application is accessed on any device over the Internet, according to the patent holders. </p></blockquote>
<p>所有的 Web 2.0 Application 或是網站提供者, 像是 Google Video , 或是股票網站(用 JAVA 看盤) 等等 都要向這家奇怪的公司拿取授權~<br />
這真是歡樂呀 XD</p>
<p>ref.<br />
<a href="http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&#038;Sect2=HITOFF&#038;d=PALL&#038;p=1&#038;u=/netahtml/srchnum.htm&#038;r=1&#038;f=G&#038;l=50&#038;s1=7,000,180.WKU.&#038;OS=PN/7,000,180&#038;RS=PN/7,000,180" target="_blank" rel="noopener">United States Patent  Methods, systems, and processes for the design and creation of rich-media applications via the internet </a></p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2006/02/24/306/e98099e79c9fe698afe5a4aae6ada1e6a882e4ba86_us_grants_patent_for_bro/">這真是太歡樂了&#8230;&#8230;&#8230; U.S. Grants Patent For Broad Range Of Internet Rich Applications</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2006/02/24/306/e98099e79c9fe698afe5a4aae6ada1e6a882e4ba86_us_grants_patent_for_bro/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The Evolution of a Programmer</title>
		<link>https://blog.richliu.com/2006/01/03/294/the_evolution_of_a_programmer/</link>
					<comments>https://blog.richliu.com/2006/01/03/294/the_evolution_of_a_programmer/#comments</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Mon, 02 Jan 2006 16:10:41 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/2006/01/03/294/</guid>

					<description><![CDATA[<p>在 digg 上看到的, The Evolution of a Programmer 看完的確會有會心一笑的感 [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2006/01/03/294/the_evolution_of_a_programmer/">The Evolution of a Programmer</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>在 digg 上看到的, <a href="http://www.icarus.net/johnjo/evolutio.htm" target="_blank" rel="noopener">The Evolution of a Programmer</a><br />
<span id="more-294"></span><br />
看完的確會有會心一笑的感覺&#8230;&#8230;<br />
因為我現在己經是在叫人寫程式了 Orz </p>
<blockquote><p>
The Evolution of a Programmer</p>
<p>High School/Jr.High</p>
<p>10 PRINT &#8220;HELLO WORLD&#8221;<br />
20 END</p>
<p>First year in College</p>
<p>program Hello(input, output)<br />
  begin<br />
    writeln(&#8216;Hello World&#8217;)<br />
  end.</p>
<p>Senior year in College</p>
<p>(defun hello<br />
  (print<br />
    (cons &#8216;Hello (list &#8216;World))))</p>
<p>New professional</p>
<p>#include <stdio .h><br />
void main(void)<br />
{<br />
  char *message[] = {&#8220;Hello &#8220;, &#8220;World&#8221;};<br />
  int i;</p>
<p>  for(i = 0; i < 2; ++i)
    printf("%s", message[i]);
  printf("\n");
}

Seasoned professional

#include <iostream.h><br />
#include <string .h></p>
<p>class string<br />
{<br />
private:<br />
  int size;<br />
  char *ptr;</p>
<p>public:<br />
  string() : size(0), ptr(new char(&#8216;\0&#8217;)) {}</p>
<p>  string(const string &#038;s) : size(s.size)<br />
  {<br />
    ptr = new char[size + 1];<br />
    strcpy(ptr, s.ptr);<br />
  }</p>
<p>  ~string()<br />
  {<br />
    delete [] ptr;<br />
  }</p>
<p>  friend ostream &#038;operator < <(ostream &#038;, const string &#038;);
  string &#038;operator=(const char *);
};

ostream &#038;operator<<(ostream &#038;stream, const string &#038;s)
{
  return(stream << s.ptr);
}

string &#038;string::operator=(const char *chrs)
{
  if (this != &#038;chrs)
  {
    delete [] ptr;
   size = strlen(chrs);
    ptr = new char[size + 1];
    strcpy(ptr, chrs);
  }
  return(*this);
}

int main()
{
  string str;

  str = "Hello World";
  cout << str << endl;

  return(0);
}

Master Programmer

[
uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820)
]
library LHello
{
    // bring in the master library
    importlib("actimp.tlb");
    importlib("actexp.tlb");

    // bring in my interfaces
    #include "pshlo.idl"

    [
    uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)
    ]
    cotype THello
 {
 interface IHello;
 interface IPersistFile;
 };
};

[
exe,
uuid(2573F890-CFEE-101A-9A9F-00AA00342820)
]
module CHelloLib
{

    // some code related header files
    importheader(<windows.h>);<br />
    importheader(<ole2 .h>);<br />
    importheader(<except .hxx>);<br />
    importheader(&#8220;pshlo.h&#8221;);<br />
    importheader(&#8220;shlo.hxx&#8221;);<br />
    importheader(&#8220;mycls.hxx&#8221;);</p>
<p>    // needed typelibs<br />
    importlib(&#8220;actimp.tlb&#8221;);<br />
    importlib(&#8220;actexp.tlb&#8221;);<br />
    importlib(&#8220;thlo.tlb&#8221;);</p>
<p>    [<br />
    uuid(2573F891-CFEE-101A-9A9F-00AA00342820),<br />
    aggregatable<br />
    ]<br />
    coclass CHello<br />
 {<br />
 cotype THello;<br />
 };<br />
};</p>
<p>#include &#8220;ipfix.hxx&#8221;</p>
<p>extern HANDLE hEvent;</p>
<p>class CHello : public CHelloBase<br />
{<br />
public:<br />
    IPFIX(CLSID_CHello);</p>
<p>    CHello(IUnknown *pUnk);<br />
    ~CHello();</p>
<p>    HRESULT  __stdcall PrintSz(LPWSTR pwszString);</p>
<p>private:<br />
    static int cObjRef;<br />
};</p>
<p>#include <windows .h><br />
#include <ole2 .h>
#include <stdio .h><br />
#include <stdlib .h><br />
#include &#8220;thlo.h&#8221;<br />
#include &#8220;pshlo.h&#8221;<br />
#include &#8220;shlo.hxx&#8221;<br />
#include &#8220;mycls.hxx&#8221;</p>
<p>int CHello::cObjRef = 0;</p>
<p>CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk)<br />
{<br />
    cObjRef++;<br />
    return;<br />
}</p>
<p>HRESULT  __stdcall  CHello::PrintSz(LPWSTR pwszString)<br />
{<br />
    printf(&#8220;%ws\n&#8221;, pwszString);<br />
    return(ResultFromScode(S_OK));<br />
}</p>
<p>CHello::~CHello(void)<br />
{</p>
<p>// when the object count goes to zero, stop the server<br />
cObjRef&#8211;;<br />
if( cObjRef == 0 )<br />
    PulseEvent(hEvent);</p>
<p>return;<br />
}</p>
<p>#include <windows .h><br />
#include <ole2 .h>
#include &#8220;pshlo.h&#8221;<br />
#include &#8220;shlo.hxx&#8221;<br />
#include &#8220;mycls.hxx&#8221;</p>
<p>HANDLE hEvent;</p>
<p> int _cdecl main(<br />
int argc,<br />
char * argv[]<br />
) {<br />
ULONG ulRef;<br />
DWORD dwRegistration;<br />
CHelloCF *pCF = new CHelloCF();</p>
<p>hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);</p>
<p>// Initialize the OLE libraries<br />
CoInitializeEx(NULL, COINIT_MULTITHREADED);</p>
<p>CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER,<br />
    REGCLS_MULTIPLEUSE, &#038;dwRegistration);</p>
<p>// wait on an event to stop<br />
WaitForSingleObject(hEvent, INFINITE);</p>
<p>// revoke and release the class object<br />
CoRevokeClassObject(dwRegistration);<br />
ulRef = pCF->Release();</p>
<p>// Tell OLE we are going away.<br />
CoUninitialize();</p>
<p>return(0); }</p>
<p>extern CLSID CLSID_CHello;<br />
extern UUID LIBID_CHelloLib;</p>
<p>CLSID CLSID_CHello = { /* 2573F891-CFEE-101A-9A9F-00AA00342820 */<br />
    0x2573F891,<br />
    0xCFEE,<br />
    0x101A,<br />
    { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }<br />
};</p>
<p>UUID LIBID_CHelloLib = { /* 2573F890-CFEE-101A-9A9F-00AA00342820 */<br />
    0x2573F890,<br />
    0xCFEE,<br />
    0x101A,<br />
    { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }<br />
};</p>
<p>#include <windows .h><br />
#include <ole2 .h>
#include <stdlib .h><br />
#include <string .h><br />
#include <stdio .h><br />
#include &#8220;pshlo.h&#8221;<br />
#include &#8220;shlo.hxx&#8221;<br />
#include &#8220;clsid.h&#8221;</p>
<p>int _cdecl main(<br />
int argc,<br />
char * argv[]<br />
) {<br />
HRESULT  hRslt;<br />
IHello        *pHello;<br />
ULONG  ulCnt;<br />
IMoniker * pmk;<br />
WCHAR  wcsT[_MAX_PATH];<br />
WCHAR  wcsPath[2 * _MAX_PATH];</p>
<p>// get object path<br />
wcsPath[0] = &#8216;\0&#8217;;<br />
wcsT[0] = &#8216;\0&#8217;;<br />
if( argc > 1) {<br />
    mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1);<br />
    wcsupr(wcsPath);<br />
    }<br />
else {<br />
    fprintf(stderr, &#8220;Object path must be specified\n&#8221;);<br />
    return(1);<br />
    }</p>
<p>// get print string<br />
if(argc > 2)<br />
    mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1);<br />
else<br />
    wcscpy(wcsT, L&#8221;Hello World&#8221;);</p>
<p>printf(&#8220;Linking to object %ws\n&#8221;, wcsPath);<br />
printf(&#8220;Text String %ws\n&#8221;, wcsT);</p>
<p>// Initialize the OLE libraries<br />
hRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED);</p>
<p>if(SUCCEEDED(hRslt)) {</p>
<p>    hRslt = CreateFileMoniker(wcsPath, &#038;pmk);<br />
    if(SUCCEEDED(hRslt))<br />
 hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&#038;pHello);</p>
<p>    if(SUCCEEDED(hRslt)) {</p>
<p> // print a string out<br />
 pHello->PrintSz(wcsT);</p>
<p> Sleep(2000);<br />
 ulCnt = pHello->Release();<br />
 }<br />
    else<br />
 printf(&#8220;Failure to connect, status: %lx&#8221;, hRslt);</p>
<p>    // Tell OLE we are going away.<br />
    CoUninitialize();<br />
    }</p>
<p>return(0);<br />
}</p>
<p>Apprentice Hacker</p>
<p>#!/usr/local/bin/perl<br />
$msg=&#8221;Hello, world.\n&#8221;;<br />
if ($#ARGV >= 0) {<br />
  while(defined($arg=shift(@ARGV))) {<br />
    $outfilename = $arg;<br />
    open(FILE, &#8220;>&#8221; . $outfilename) || die &#8220;Can&#8217;t write $arg: $!\n&#8221;;<br />
    print (FILE $msg);<br />
    close(FILE) || die &#8220;Can&#8217;t close $arg: $!\n&#8221;;<br />
  }<br />
} else {<br />
  print ($msg);<br />
}<br />
1;</p>
<p>Experienced Hacker</p>
<p>#include </stdio><stdio .h><br />
#define S &#8220;Hello, World\n&#8221;<br />
main(){exit(printf(S) == strlen(S) ? 0 : 1);}</p>
<p>Seasoned Hacker</p>
<p>% cc -o a.out ~/src/misc/hw/hw.c<br />
% a.out</p>
<p>Guru Hacker</p>
<p>% cat<br />
Hello, world.<br />
^D</p>
<p>New Manager</p>
<p>10 PRINT &#8220;HELLO WORLD&#8221;<br />
20 END</p>
<p>Middle Manager</p>
<p>mail -s &#8220;Hello, world.&#8221; bob@b12<br />
Bob, could you please write me a program that prints &#8220;Hello,<br />
 world.&#8221;?<br />
I need it by tomorrow.<br />
^D</p>
<p>Senior Manager</p>
<p>% zmail jim<br />
I need a &#8220;Hello, world.&#8221; program by this afternoon.</p>
<p>Chief Executive</p>
<p>% letter<br />
letter: Command not found.<br />
% mail<br />
To: ^X ^F ^C<br />
% help mail<br />
help: Command not found.<br />
% damn!<br />
!: Event unrecognized<br />
% logout</p>
<p>Back to my misc text page<br />
Last revised June 9, 1995<br />
</stdio></string></stdlib></ole2></windows></ole2></windows></stdlib></stdio></ole2></windows></except></ole2></string></stdio></p></blockquote>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2006/01/03/294/the_evolution_of_a_programmer/">The Evolution of a Programmer</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2006/01/03/294/the_evolution_of_a_programmer/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>十年前的程式&#8230;&#8230;&#8230;&#8230;</title>
		<link>https://blog.richliu.com/2005/11/26/276/e58d81e5b9b4e5898de79a84e7a88be5bc8f/</link>
					<comments>https://blog.richliu.com/2005/11/26/276/e58d81e5b9b4e5898de79a84e7a88be5bc8f/#respond</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Fri, 25 Nov 2005 19:00:13 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/2005/11/26/276/</guid>

					<description><![CDATA[<p>最近因為某長輩要求, 正在翻修十年前的程式. 十年前, 我選用 Virtual Foxpro 做為開發程式,  [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/11/26/276/e58d81e5b9b4e5898de79a84e7a88be5bc8f/">十年前的程式&#8230;&#8230;&#8230;&#8230;</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>最近因為某長輩要求, 正在翻修十年前的程式.<br />
十年前, 我選用 Virtual Foxpro 做為開發程式, 以今日的眼光來看 VFP 還是一套非常好用的輕量化資料庫語言. 我整個程式庫壓下來才 1440K, 剛好可以放進一張磁片.<br />
VFP 5.0 TC 壓縮後才 70M. 哈. 那真是一個美好的年代 XD</p>
<p>懷念那個年代寫 DB 很簡單的日子, 後來的 Delphi or VB 老實說都太難寫了,  不符合 DB Language 嘛.</p>
<p>至於我翻修了什麼?<br />
我只能說, 我很久沒看 Code 了, 完全不知道做了什麼事.<br />
所以翻修的 Code 只有改名字 XD .</p>
<p>比十年前進步的是, 我用了 Subversion 記錄我修改歷程, 算是我對十年前寫的東西,<br />
小小的敬意吧.</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/11/26/276/e58d81e5b9b4e5898de79a84e7a88be5bc8f/">十年前的程式&#8230;&#8230;&#8230;&#8230;</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2005/11/26/276/e58d81e5b9b4e5898de79a84e7a88be5bc8f/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Linux 是不是應該有 Binary Driver Layer ?</title>
		<link>https://blog.richliu.com/2005/11/11/267/linux_e698afe4b88de698afe68789e8a9b2e69c89_binary_driver_layer_3f/</link>
					<comments>https://blog.richliu.com/2005/11/11/267/linux_e698afe4b88de698afe68789e8a9b2e69c89_binary_driver_layer_3f/#comments</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Thu, 10 Nov 2005 19:18:32 +0000</pubDate>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/?p=267</guid>

					<description><![CDATA[<p>最近在吵的是, The Japan OSS Promotion Forum 提出了 GKAI(General  [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/11/11/267/linux_e698afe4b88de698afe68789e8a9b2e69c89_binary_driver_layer_3f/">Linux 是不是應該有 Binary Driver Layer ?</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>最近在吵的是,  <a href="http://www.ipa.go.jp/software/open/forum/" target="_blank" rel="noopener">The Japan OSS Promotion Forum</a> 提出了 GKAI(General Kernel API Interface).<br />
而跟著這個 GKAI 提出來的, 就是 Go Taniguchi, Turbolinux, Inc. Kenichi Hori, NEC Corporation. 提的 New Device Driver Structure. 這個 Structure 最大的改變就是在 Linux 上加上 Binary Driver Layer . 以便可以像是 Windows 一樣, 載入 Binary Driver ..<br />
<span id="more-267"></span><br />
想當然爾, 搞 Linux kernel 的人一定不爽了, <a href="http://www.kroah.com/linux/" target="_blank" rel="noopener">Greg Kroah</a>就跳出來寫了一篇 <a href="http://www.kroah.com/log/2005/11/03/ " target="_blank" rel="noopener">OSDL and a binary kernel driver layer</a> .</p>
<p>先來弄清楚兩方的訴求<br />
GKAI</p>
<li>在 Kernel Core 和 Device Driver 中間再加上一層 API, 而這個 API 是固定的</li>
<li>不需要更換 Kernel 就能使用最新的 Hardware Driver</li>
<li>每一個 Linux Distributions 都可以用同一個 Driver</li>
<li>Hardware Vendor 不需要開放原始碼</li>
<li>減少 Programmer 的 Maintain 時程</li>
<p>Kernel developer 的意見(至少是<a href="http://www.kroah.com/linux/" target="_blank" rel="noopener">Greg Kroah</a> 的)</p>
<li>Binary Driver: different kernel 配上不同的 GCC 有不同的 structure, alignment 不同, 甚至支援的 architecture 也不一樣.
</li>
<li>Stable Kernel Source Interface</li>
<li>有時 Kernel Develop 會修改架構以期會有更好的效率, 而 GKAI 不可能做到.</li>
<li>Security Issue. GKAI 要是碰上了 Security 要大修還不是一樣?</li>
<li>Kernel Interface clean , 以便保持效率和精簡.</li>
<li>Kernel API 本來就是會出問題, 會有 Bug. 甚至要改名, 要修.. blah blah.</li>
<li>GKAI是 Close Source , 而且這一點也不有趣.</li>
<li> Binary Code 沒有人要幫你修, 抓 Bug, Tuning . 有問題也改不動</li>
<p>如果站在 Linux Kernel Developer 的角度去看這件事情, 的確一點也不好玩. 而且是 Close Source. 更不要講這是違反 GPL 的. </p>
<p>不過站在一個正在產業界辛苦修改 Linux Kernel 的小咖的角度, 我是傾向支持 GKAI 的出現的. 別的不說, 光是最近在處理的 IT821x 的 Device Driver 就有 n 個版本. IDE API 幾乎 2.4.18 以後, 版版都有修, 就算是 Linux kernel 2.6.x , 每一版的 IT821x 的 Driver 長得都不一樣. 讓人想回 Porting 也很難. </p>
<p>之前也發生過, 某家的 SCSI Driver . Kernel 一升級, 因為 API 大變, 所以這個 Driver 就 isolated 了. 甚至連動都不能動.</p>
<p>另外就是商業保護, 其實 OpenSource 也不是很難, 站在我們的角度, 95% 的 Source Code 一定會 Release 出去, 但是一定會有 5% 的 Code 會收起來, 畢竟在商言商, 這個世界是很殘酷的. Source Code Released. 別人就知道怎麼做. 馬上就組個 Team . 幹掉你了. </p>
<p>小弟我曾經寫過 ITE 887x 的 Serial/Parallel Driver . 當時 Parallel 的 Maintainer 就欣然接受了我的 patch , 讓我以後就不用辛苦的多出幾版 patch .<br />
不過 Serial 的 maintainer 完完全全不理我. 每隔一段時間, 又多一份 patch .<br />
出一份 Patch 代表要重測一次, 這一點也不好玩. </p>
<p>有人講的也有道理, 如果 Linux 接受了 Binary Device Driver . 大家都將 Source 留一手起來, 說不定 Linux Device Driver 不會進步這麼快, 尤其是沒有像是 MSDN 這麼豐富的線上資料庫的時候. Tracing Source Code 就成為許許多多 Linux Device Driver Programmer 最快入手的方法. </p>
<p>結果是一定不會用 GKAI 的, 不過我還是希望有 GKAI 的出現, 畢竟末端 Linux Device Driver Enginner 的血淚, 不是 Kernel Developer 的大大們可以體會的呀 :~~~~</p>
<p>Ref.<br />
<a href="http://www.kroah.com/log/linux/stable_api_nonsense.html" target="_blank" rel="noopener">The Linux Kernel Driver Interface</a><br />
<a href="http://www.kroah.com/log/2005/11/03/ " target="_blank" rel="noopener">OSDL and a binary kernel driver layer</a><br />
<a href="http://linux.slashdot.org/article.pl?sid=05/11/08/1915218" target="_blank" rel="noopener">Slashdot  Should Linux Have a Binary Kernel Driver Layer?</a><br />
<a href="http://lists.osdl.org/pipermail/os_drivers/2005-July/000052.html" target="_blank" rel="noopener">[os_drivers] Yet Another Generic Kernel API</a><br />
<a href="http://www.kroah.com/log/images/gkai-2.odp" target="_blank" rel="noopener">A Proposal of New Device Driver Structure</a>(OpenOffice 2.0 Presentation Format)<br />
<a href="http://www.kroah.com/log/images/gkai.sxi" target="_blank" rel="noopener">Generic Kernel API Interface (GKAI)</a>(OpenOffice.org 1.0 Presentation Format)<br />
<a href="http://blog.linux.org.tw/~jserv/archives/001354.html" target="_blank" rel="noopener">Jserv&#8217;s Linux 的 Binary-form Driver</a></p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/11/11/267/linux_e698afe4b88de698afe68789e8a9b2e69c89_binary_driver_layer_3f/">Linux 是不是應該有 Binary Driver Layer ?</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2005/11/11/267/linux_e698afe4b88de698afe68789e8a9b2e69c89_binary_driver_layer_3f/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>eXtreme Programming</title>
		<link>https://blog.richliu.com/2005/09/10/254/extreme_programming/</link>
					<comments>https://blog.richliu.com/2005/09/10/254/extreme_programming/#comments</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Fri, 09 Sep 2005 16:56:16 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/2005/09/10/254/</guid>

					<description><![CDATA[<p>這邊講的 eXtreme Programming 不是極緻軟體製程(就是找人盯你寫程式那一種) 而是取用 sc [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/09/10/254/extreme_programming/">eXtreme Programming</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>這邊講的  eXtreme Programming 不是極緻軟體製程(就是找人盯你寫程式那一種)<br />
而是取用 <a href="http://blog.schee.info" target="_blank" rel="noopener">schee</a> 的 <a href="http://blog.schee.info/archives/2005/04/20/1816/" target="_blank" rel="noopener">極限部落格經驗 eXtreme Blogging</a>的意思.<br />
在何種狀況下可以寫程式<br />
<span id="more-254"></span><br />
最近幾個月來, 我都是台北和新竹通車, 早上的時候就讀讀書, 晚上回去的時候就看看 <a href="http://www.keroro.com" target="_blank" rel="noopener">keroro</a> 或是電車男之類的日劇, 也曾經在電車上寫程式. 不過在電車上時間實在是太短, 所以可以寫的程式不多. </p>
<p>在火車上寫過的程式有,<br />
Porting Linux kernel 2.6 的 RTC Driver 到 Linux kernel 2.4<br />
Ethernet Driver (未完成, 實在是 Xmit 那一部份要花時間, 而且不急)<br />
Memory Dump Module (這個是花了一次下班, 一次上班的時間完成的)<br />
己經驗證過, 並且 Release 給客戶了(還真敢呀)<br />
其他都是做一些 Porting 的動作, 如果你在新竹台北的電車看到有人開 Linux 起來<br />
Run Console Mode , 那可能是我 &#8230;..</p>
<p>其他的經驗比較深刻的有, 有一次尾牙在 Debug 公司的程式,<br />
詳情請見 <a href="http://blog.richliu.com/2005/01/23/98/">今年的尾牙…</a></p>
<p>eXtreme Programming 比 eXtreme Blog 難多了, 寫 Blog 只要有<a href="http://blog.ijliao.info" target="_blank" rel="noopener">憤青</a>性格, 隨便都可以寫, 難的是 moblog 要上傳而己.<br />
Programming 需要定下心來寫程式, 就像 <a href="http://www.joelonsoftware.com/" target="_blank" rel="noopener">Joel</a> 提到的, 上班看看 mail , news , 打開 ultraedit 要寫程式時, 可能是 11 點了(unix 可能是開 kdevelop/anjuta/vim/emacs blah blah)<br />
我能在火車上寫出程式, 可能也是定性吧 (茶)<br />
不過我覺得看 keroro 的時間可能比 coding 多吧 XD</p>
<p>對了, 通車不要常幹這種事, 對身體不好.<br />
而且某種程度展現了 RD  的悲哀 Orz &#8230;&#8230;.</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/09/10/254/extreme_programming/">eXtreme Programming</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2005/09/10/254/extreme_programming/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Subversion 用 E-mail 寄送更新通知.</title>
		<link>https://blog.richliu.com/2005/07/26/237/subversion_e794a8_e-mail_e5af84e98081e69bb4e696b0e9809ae79fa5/</link>
					<comments>https://blog.richliu.com/2005/07/26/237/subversion_e794a8_e-mail_e5af84e98081e69bb4e696b0e9809ae79fa5/#respond</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Tue, 26 Jul 2005 09:52:39 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/2005/07/26/237/</guid>

					<description><![CDATA[<p>主要是參考 yungyuc 的 寄送 subversion repository 的更新通知 在多人使用, 和 [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/07/26/237/subversion_e794a8_e-mail_e5af84e98081e69bb4e696b0e9809ae79fa5/">Subversion 用 E-mail 寄送更新通知.</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>主要是參考 <a href="http://yungyuc.net/" target="_blank" rel="noopener">yungyuc</a> 的 <a href="http://yungyuc.net/378" target="_blank" rel="noopener">寄送 subversion repository 的更新通知 </a></p>
<p>在多人使用, 和多個 Repository 的環境下</p>
<p>如果寄件者要改成 Commit 的人,  from_addr 要改成如下</p>
<blockquote><p>from_addr = %(author)s@example.com</p></blockquote>
<p>如果有很多個 Repository . 那要怎麼辦呢?<br />
在 mailer.conf 的最下方有說明, 有解決方案, 我自己的解決方案是這樣</p>
<blockquote><p>
[another-example]<br />
# # commits to personal repositories should go to that person<br />
for_repos = /home/svn/(?P<who>[^/]*)<br />
commit_subject_prefix = [%(who)s commit]</who></p></blockquote>
<p>我的 Repositroy 是放在 /home/svn,  for_repos 取出變數值<br />
commit_subject_prefix 就是信件標題, 這樣才分得出是那一個 Project 用的.<br />
python 似乎變數名稱要加 s 才會正常, 所以請記得是 <strong>%(who)s</strong> 代<br />
表完整的變數</p>
<p>所以我在管理多名使用者的時候, 都是利用 hardlike 去 link 所有的 hooks/post-commit conf/passwd conf/svnserve.conf到同一個地方, 以便管理. </p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/07/26/237/subversion_e794a8_e-mail_e5af84e98081e69bb4e696b0e9809ae79fa5/">Subversion 用 E-mail 寄送更新通知.</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2005/07/26/237/subversion_e794a8_e-mail_e5af84e98081e69bb4e696b0e9809ae79fa5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CMMI 中文版</title>
		<link>https://blog.richliu.com/2005/06/01/201/cmmi_e4b8ade69687e78988/</link>
					<comments>https://blog.richliu.com/2005/06/01/201/cmmi_e4b8ade69687e78988/#respond</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Wed, 01 Jun 2005 02:39:11 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/2005/06/01/201/</guid>

					<description><![CDATA[<p>http://www.sei.cmu.edu/cmmi/translations/trad-chinese/m [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/06/01/201/cmmi_e4b8ade69687e78988/">CMMI 中文版</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>http://www.sei.cmu.edu/cmmi/translations/trad-chinese/models/</p>
<p>記錄一下. 或許未來會用到. </p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/06/01/201/cmmi_e4b8ade69687e78988/">CMMI 中文版</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2005/06/01/201/cmmi_e4b8ade69687e78988/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kdevelop PHP Subversion Support .</title>
		<link>https://blog.richliu.com/2005/05/07/178/kdevelop_php_subversion_support_/</link>
					<comments>https://blog.richliu.com/2005/05/07/178/kdevelop_php_subversion_support_/#respond</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Fri, 06 May 2005 16:08:28 +0000</pubDate>
				<category><![CDATA[Gentoo]]></category>
		<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/2005/05/07/178/</guid>

					<description><![CDATA[<p>Gentoo 的 Kdevelop 預設很多 support 是 disable 的. 難怪我一直找不到那邊可 [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/05/07/178/kdevelop_php_subversion_support_/">Kdevelop PHP Subversion Support .</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Gentoo 的 Kdevelop 預設很多 support 是 disable 的.<br />
難怪我一直找不到那邊可以設定 Subversion 的選項</p>
<p>今天才找到 &#8230; -_-!</p>
<p>在 make.conf 的 USE 加上 &#8220;php subersion&#8221; 就可以啟動 kdevelop 的 subversion 及 php support .<br />
其他還有.<br />
IUSE=&#8221;ada clearcase fortran haskell java pascal perforce perl php python ruby sql subversion&#8221;</p>
<p>kdevelop 愈用愈順手了 :p</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/05/07/178/kdevelop_php_subversion_support_/">Kdevelop PHP Subversion Support .</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2005/05/07/178/kdevelop_php_subversion_support_/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CPR</title>
		<link>https://blog.richliu.com/2005/04/28/170/cpr/</link>
					<comments>https://blog.richliu.com/2005/04/28/170/cpr/#respond</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Thu, 28 Apr 2005 06:06:40 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[隨手札記]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/2005/04/28/170/</guid>

					<description><![CDATA[<p>我很久以前提到的一個名詞 CPR, 我說這是每一個 Programmer 必備技能 這個 CPR 不是心肺復甦 [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/04/28/170/cpr/">CPR</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>我很久以前提到的一個名詞 <strong>CPR</strong>, 我說這是每一個 Programmer 必備技能<br />
這個 CPR 不是心肺復甦術</p>
<p>而是 Copy Paste Replace . 相信很多人看了, 心有戚戚焉&#8230;&#8230;<br />
這己經是五年前講的, 今天還是覺得很正確呢&#8230;.</p>
<p>剛剛和 Priv 聊天才想起來, 特此紀念&#8230;</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/04/28/170/cpr/">CPR</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2005/04/28/170/cpr/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>慶祝 PageRank 到 3 ..</title>
		<link>https://blog.richliu.com/2005/04/23/167/e685b6e7a59d_pagerank_e588b0_3_/</link>
					<comments>https://blog.richliu.com/2005/04/23/167/e685b6e7a59d_pagerank_e588b0_3_/#comments</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Fri, 22 Apr 2005 19:41:36 +0000</pubDate>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[trumpery]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/2005/04/23/167/</guid>

					<description><![CDATA[<p>賀 PageRank 達到 3 ，我就來唸一下最近工作上的鳥事吧&#8230;.. 本篇禁止轉載 最近在弄 D [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/04/23/167/e685b6e7a59d_pagerank_e588b0_3_/">慶祝 PageRank 到 3 ..</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>賀 PageRank 達到 3 ，我就來唸一下最近工作上的鳥事吧&#8230;..<br />
<span id="more-167"></span><br />
本篇禁止轉載</p>
<p>最近在弄  <a href="http://www.dslforum.org/" target="_blank" rel="noopener">DSLFroum</a> 的 TR-069<br />
這一份文件內容主要在規範，DSL 的 Device 要送什麼樣的資料到中控資料庫.<br />
兩邊如何溝通等等等之類的東西。</p>
<p>用的是 SOAP Protocol<br />
其中還有提到要支援 HTTPS 和 SSL 做加密傳送 blah blah blah &#8230;..</p>
<p>有接觸過的就應該知道，只要有碰到 XML ，程式大小是以幾何數量成長<br />
如果碰到 SSL ，那就是會變很大了. </p>
<p>還好 SOAP 有 gSOAP Library ，弄起來 size 還可以接受，但是 SSL 加上去，那個 binary size<br />
就無法想像了。</p>
<p>這樣的架構如果放在 DSL Device 內會如何，其實不會如何啦，就只是肥。<br />
各位家中的 Gateway/Wireless 很多都是 2M/16M . 好一點的就用 4M/16M .<br />
所以囉 &#8230;&#8230; </p>
<p>像這樣的東西放在 Route 內還好，如果是一般的 Device ，那可能在招標的時候<br />
就變為選項了，我甚至是認為，在 Device 沒有到 8M/32M 之前，不太可能會成熟的。</p>
<p>講到這個就不得不講一般的 Gateway 了.<br />
一般的 Gateway 因為 Speed 和 Code Size 的關係，所以不是用主流的 OS ，很多都是自己搞 OS<br />
要不然就是自己搞 TCP/IP Stack &#8230;. 這樣才會加快速度<br />
但是這樣的架構穩定嗎？一點也不，所以才會發生很多 Gateway 不穩定<br />
其實不要怪他們，在這種小機器內，要做到 100M Full Speed NAT 是不可能的.<br />
 大家就各憑本事了&#8230;&#8230;&#8230;</p>
<p>沒事情還是自己加 NAT 就好&#8230;. :p<br />
AP 就買純 AP . 這樣一點事情也沒有&#8230;.. 也不會有斷線之類的鳥事出現&#8230;</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/04/23/167/e685b6e7a59d_pagerank_e588b0_3_/">慶祝 PageRank 到 3 ..</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2005/04/23/167/e685b6e7a59d_pagerank_e588b0_3_/feed/</wfw:commentRss>
			<slash:comments>20</slash:comments>
		
		
			</item>
		<item>
		<title>kdbg</title>
		<link>https://blog.richliu.com/2005/04/22/165/kdbg/</link>
					<comments>https://blog.richliu.com/2005/04/22/165/kdbg/#respond</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Fri, 22 Apr 2005 03:57:41 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[UNIX]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/2005/04/22/165/</guid>

					<description><![CDATA[<p>kdbg一個 gdb 的 frontend . for KDE . 雖然功能不如 ddd 強大, 但是介面易單 [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/04/22/165/kdbg/">kdbg</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="http://members.nextra.at/johsixt/kdbg.html" target="_blank" rel="noopener">kdbg</a>一個  <a href="http://www.gnu.org/software/gdb/gdb.html" target="_blank" rel="noopener">gdb </a>的 frontend . for KDE .</p>
<p>雖然功能不如 <a href="http://www.gnu.org/software/ddd/" target="_blank" rel="noopener">ddd</a><br />
強大, 但是介面易單, 容易上手, 試用了一下, 應該可以將 ddd 移掉了 &#8230;&#8230; XD</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/04/22/165/kdbg/">kdbg</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2005/04/22/165/kdbg/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>丟臉丟大了&#8230;&#8230;.</title>
		<link>https://blog.richliu.com/2005/03/23/137/e4b89fe88789e4b89fe5a4a7e4ba86/</link>
					<comments>https://blog.richliu.com/2005/03/23/137/e4b89fe88789e4b89fe5a4a7e4ba86/#comments</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Tue, 22 Mar 2005 16:36:38 +0000</pubDate>
				<category><![CDATA[Gentoo]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/?p=137</guid>

					<description><![CDATA[<p>最近在研究 dbus Gentoo 安裝是很簡單啦，就是下一個 #emerge dbus 就可以了 我在寫第一 [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/03/23/137/e4b89fe88789e4b89fe5a4a7e4ba86/">丟臉丟大了&#8230;&#8230;.</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>最近在研究 <a href="http://www.freedesktop.org/Software/dbus" target="_blank" rel="noopener">dbus</a></p>
<p>Gentoo 安裝是很簡單啦，就是下一個<br />
 #emerge dbus<br />
就可以了</p>
<p>我在寫第一隻小程式的時候，竟然少一個 &#8220;dbus-arch-deps.h&#8221;<br />
我本來將 dbus 的 tar 解開，然後丟進去 /usr/include/dbus-1.0/dbus 下就可以 compile</p>
<p>因為以為是  Gentoo 有問題，就在那邊的 <a href="http://bugs.gentoo.org" target="_blank" rel="noopener">Bugs</a> 開了一個<a href="http://bugs.gentoo.org/show_bug.cgi?id=86144" target="_blank" rel="noopener">dbus 0.23.4 lost include file &#8220;dbus-arch-deps.h&#8221; </a><br />
結果人家說 duplicate 就算了.<br />
而且我的用法還是錯的<br />
要用 <a href="http://bugs.gentoo.org/show_bug.cgi?id=80314" target="_blank" rel="noopener">bug 80314</a> 的一段話</p>
<blockquote><p>
errr.. I&#8217;m both wright and wrong.  Everything is installed fine so long as you use pkg-config as said by foser.  Don&#8217;t spank me, I&#8217;m an ex WIN32 developer.. I was not aware that pkg-config existed. Anyways g++ test.cpp -o test `pkg-config dbus-1 &#8211;libs &#8211;cflags` works correctly.</p></blockquote>
<p>我因為是用 kdevelop 在寫程式，所以在<br />
Project Optoon -> Compile Options -> C -> Cflags 內 加上 <strong>`pkg-config dbus-1 &#8211;libs &#8211;cflags`</strong><br />
link 的時候記得加上 -ldbus-1 就可以了&#8230;.</p>
<p>這個故事告訴我們，亂玩是會丟臉的 Orz </p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/03/23/137/e4b89fe88789e4b89fe5a4a7e4ba86/">丟臉丟大了&#8230;&#8230;.</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2005/03/23/137/e4b89fe88789e4b89fe5a4a7e4ba86/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Linux Device Driver 3rd</title>
		<link>https://blog.richliu.com/2005/03/16/127/linux_device_driver_3rd/</link>
					<comments>https://blog.richliu.com/2005/03/16/127/linux_device_driver_3rd/#respond</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Wed, 16 Mar 2005 05:37:25 +0000</pubDate>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/?p=127</guid>

					<description><![CDATA[<p>在 Jesse 的 Blog 看到的Linux Device Drivers 第三版 我這本書有中文版(第一版 [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/03/16/127/linux_device_driver_3rd/">Linux Device Driver 3rd</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>在 <a href="http://people.debian.org.tw/~jesse/" target="_blank" rel="noopener">Jesse </a>的 Blog 看到的<a href="http://people.debian.org.tw/~jesse/blog/?p=17" target="_blank" rel="noopener">Linux Device Drivers 第三版</a><br />
我這本書有中文版(第一版), 英文版(2nd), 沒有想到己經出了第三版了</p>
<p>第一版和第二版主要是查在 USB Function<br />
第三版主要是在 2.6.10 , 我認為如果你有在 2.6.x 版開發 Driver , 應該買一本.<br />
下載點在<a href="http://lwn.net/Kernel/LDD3/" target="_blank" rel="noopener">http://lwn.net/Kernel/LDD3/</a></p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/03/16/127/linux_device_driver_3rd/">Linux Device Driver 3rd</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2005/03/16/127/linux_device_driver_3rd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Reconfigureable  Computer</title>
		<link>https://blog.richliu.com/2005/01/07/88/reconfigureable_computer/</link>
					<comments>https://blog.richliu.com/2005/01/07/88/reconfigureable_computer/#respond</comments>
		
		<dc:creator><![CDATA[richliu]]></dc:creator>
		<pubDate>Fri, 07 Jan 2005 08:25:58 +0000</pubDate>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">http://blog.richliu.com/?p=88</guid>

					<description><![CDATA[<p>Linux Journal 2005/January 內有一篇文章是講 Reconfigure Compute [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/01/07/88/reconfigureable_computer/">Reconfigureable  Computer</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="http://www.linuxjournal.co" target="_blank" rel="noopener">Linux Journal </a>2005/January 內有一篇文章是講 Reconfigure Computer .<br />
主要概念就是將 FPGA/CPLD 做成可以使用一般的程式去設定成特殊的 function. 所以你寫一隻程式, 很多 function 可以利用 FPGA/CPLD 去達成.<br />
<span id="more-88"></span><br />
這個架構很早之前就和 AlbertB 談過, 那時候還在概念的階段, 和 Reconfigureable Computer 的概念相去不遠, 所以看到以後, 心有戚戚焉&#8230;<br />
以 x86目前的 CPU 架構, 不管是幾個 Opertion Unit, one clock 可以執行多少指令, 還是會遇到很多問題, 像是 Instruction Dependece 或是 Instruction Branch . 就算用二個 pipeline 去算. 還是有其極限<br />
這一點從目前 INTEL/AMD 都傾向將新的 CPU 做 Dual Core 可以看得出來.<br />
另一個瓶頸是以目前的技術, INTEL P4 520 用 90nm 的技術, CPU 耗電量和熱量愈來愈高. </p>
<p>所以目前的走向是多核心, 將 CPU 要做的事抽離出來, 讓專業的 CPU 去做, 而 Reconfigureable Computer 就是讓程式去設定 FPGA/CPLD 要執行什麼程式. 目前這個技術叫做<br />
DEL (Direct execution logical) Process .<br />
以同樣的 execute login processor , 和 INTEL CPU performance 的比較大概是如下圖<br />
<img decoding="async" src="http://www.srccomp.com/images/Perf_vs_micro.gif" alt="" /></p>
<p>程式的話是以 Fortran/C 做原始碼, 經過特別的 Compiler(Parsing/ CFG/DFG Generation /Optimizatin / HDL Generation / Place &#038; Routing 及 Linker 做成最後執行檔<br />
其中可以籍由特殊的架構, 將程式分散在各個 Processer 執行. 有點類似 Cluster 那個樣子<br />
不過是縮小放在一台電腦內</p>
<p>目前我認為這樣的技術會在專業市場先行發酵, 至於一般的運用, 我想可能要觀望<br />
畢竟問題最大的不是技術, 而是習慣.<br />
不過這種開發方式潛力無窮就是了 XD&#8230;..</p>
<p>我個人覺得比較好的系統也是類似這樣, Master CPU下分一大塊可 Configureable 的區域<br />
如果我今天 3DES 用的兇, 那我就可以將 3DES 的 Code 載到這個區域, 直接用 Driver 去提供存取介面. 如果不行, 就用 Master CPU 去執行就可以了. </p>
<p>Reference :<br />
<a href="http://www.linuxjournal.com/article/7867" target="_blank" rel="noopener">Application Defined Processors</a><br />
<a href="http://http://www.srccomp.com">SRC Computer Inc.</a></p>
<p>The post <a rel="nofollow" href="https://blog.richliu.com/2005/01/07/88/reconfigureable_computer/">Reconfigureable  Computer</a> appeared first on <a rel="nofollow" href="https://blog.richliu.com">richliu&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.richliu.com/2005/01/07/88/reconfigureable_computer/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
