<?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>程式設計 遇上 小提琴 &#187; WTF</title>
	<atom:link href="http://blog.ez2learn.com/category/wtf/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ez2learn.com</link>
	<description>Victor&#039;s個人部落格，關於程式設計與小提琴</description>
	<lastBuildDate>Mon, 30 Jan 2012 19:19:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>李大師您多久沒寫程式了 ? 一百個你不應該繼續用Dev C++ 4.9.9.2 的理由</title>
		<link>http://blog.ez2learn.com/2011/07/08/please-do-not-use-dev-c/</link>
		<comments>http://blog.ez2learn.com/2011/07/08/please-do-not-use-dev-c/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 18:50:43 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[WTF]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=1444</guid>
		<description><![CDATA[我常常喜歡說，台灣的軟體業界落後國外十年，這不只是說說而已，很多地方都透露著落後的氣息，像是學校特別是如此，看看很多大學計概在教C/C++語言就知道了，清一色用的是Dev C++，每次看到我都會說 我的天阿! 拜託! 不要再用Dev C++了!! 所以用Dev C++到底錯在哪裡? 下面列出一些為什麼你不該用Dev C++的理由，特別是用來教學 Dev C++是已經死亡多年的專案! 是的，Dev C++這個專案已經陣亡多年，它的上一個穩定版本已經是十年前的產物，即使是beta版也早在六年前停止了開發 所以台灣的軟體產業落後國外十年這真的不是戲言，但或許你會說，停止開發又如何? 簡單好用，過了十年還是一樣簡單好用，但是事情根本不是那樣 學生連開新專案都學不會? Dev C++最大一個特色就是不用開新專案就能編譯並執行程式，在我所知道的IDE裡這是極少數有這樣特性的環境，至少以現代的眼光來看盡是如此，如果是遠古時代的Turbo C之類的就不用比了，因為這樣特性的使然，一堆學生連開新專案都不會，你或許會說，不會開新專案又怎樣? 不會開新專案問題就大了，不管是debugger、編譯器設定、函式庫連結，這些都得先建出一個專案才能進行設定或使用，不管是Visual C++、Eclipse、Code::Blocks等你所能找到的所有現代IDE都是如此，連開新專案都不會就在寫程式就好像連走路都不會就在跑步一樣的糟糕 多數不清的臭蟲和怪異的行為 因為Dev C++專案已經陣亡多年，所以其中有數不清的臭蟲還有詭異的行為都沒有被修正，通常遇到了就像是鬼打牆一樣，debugger也是問題百出，常常有些同學的程式有問題拿來問我，我在檢查了多次都找不到問題所在，接著拿到其它的IDE下就能正常執行，最後發現其實是Dev C++本身的缺陷所引起的，只能苦笑著說是Dev C++發生鬼打牆，這對初學者有什麼影響? 這影響可大了! 初學者連最基本的東西都不會，他們需要的是一個可以信賴的環境讓他們可以知道什麼是對的什麼是錯的，但是今天這個環境連什麼是對的什麼是錯的都沒辦法確定，這樣有可能可以學好程式設計嗎? 有可能嗎? 無法教會學生使用除錯器 除錯器(debugger)是學習程式到底是如何執行的，以及找到錯誤的好幫手，有一點程度的程式設計師都知道這叫trace，也就是追蹤，但是因為Dev C++本身的問題，其除錯器的功能殘缺就算了，還有一大堆未知的臭蟲在其中，更慘的是搭配先前不用建專案就能執行，就算建了專案還得手動加入除錯的選項才能使用，使得用Dev C++教會學生正確地使用除錯器根本就是天方夜譚。 業界根本沒有人在使用Dev C++ 就我所知道的業界根本沒有人在使用Dev C++，如果有的話請讓我知道，我真的很佩服可以用這樣破爛的工具還能在業界生存，肯定是神手中的神手 學生學會這樣的工具就頂多只能勉強寫作業而已，出了社會來到業界連個開新專案都不會，更別說是連結別人寫好的函式庫，甚至是自己寫函式庫給別人連結，我只能寫一個慘字! 老舊的編譯器 &#8230; <a href="http://blog.ez2learn.com/2011/07/08/please-do-not-use-dev-c/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>我常常喜歡說，台灣的軟體業界落後國外十年，這不只是說說而已，很多地方都透露著落後的氣息，像是學校特別是如此，看看很多大學計概在教C/C++語言就知道了，清一色用的是Dev C++，每次看到我都會說</p>
<p><strong>我的天阿! 拜託! 不要再用Dev C++了!!</strong></p>
<p>所以用Dev C++到底錯在哪裡? 下面列出一些為什麼你不該用Dev C++的理由，特別是用來教學</p>
<h2>Dev C++是已經死亡多年的專案!</h2>
<p>是的，Dev C++這個專案已經陣亡多年，它的上一個穩定版本已經是十年前的產物，即使是beta版也早在六年前停止了開發</p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2011/07/dead_dev_c_.png"><img class="alignnone size-full wp-image-1445" title="Dead Dev C++" src="http://blog.ez2learn.com/wp-content/uploads/2011/07/dead_dev_c_.png" alt="" width="608" height="495" /></a></p>
<p>所以台灣的軟體產業落後國外十年這真的不是戲言，但或許你會說，停止開發又如何? 簡單好用，過了十年還是一樣簡單好用，但是事情根本不是那樣</p>
<h2>學生連開新專案都學不會?</h2>
<p>Dev C++最大一個特色就是不用開新專案就能編譯並執行程式，在我所知道的IDE裡這是極少數有這樣特性的環境，至少以現代的眼光來看盡是如此，如果是遠古時代的Turbo C之類的就不用比了，因為這樣特性的使然，一堆學生連開新專案都不會，你或許會說，不會開新專案又怎樣?</p>
<p>不會開新專案問題就大了，不管是debugger、編譯器設定、函式庫連結，這些都得先建出一個專案才能進行設定或使用，不管是Visual C++、Eclipse、Code::Blocks等你所能找到的所有現代IDE都是如此，連開新專案都不會就在寫程式就好像連走路都不會就在跑步一樣的糟糕</p>
<h2>多數不清的臭蟲和怪異的行為</h2>
<p>因為Dev C++專案已經陣亡多年，所以其中有數不清的臭蟲還有詭異的行為都沒有被修正，通常遇到了就像是鬼打牆一樣，debugger也是問題百出，常常有些同學的程式有問題拿來問我，我在檢查了多次都找不到問題所在，接著拿到其它的IDE下就能正常執行，最後發現其實是Dev C++本身的缺陷所引起的，只能苦笑著說是Dev C++發生鬼打牆，這對初學者有什麼影響?</p>
<p>這影響可大了! 初學者連最基本的東西都不會，他們需要的是一個可以信賴的環境讓他們可以知道什麼是對的什麼是錯的，但是今天這個環境連什麼是對的什麼是錯的都沒辦法確定，這樣有可能可以學好程式設計嗎? 有可能嗎?</p>
<h2>無法教會學生使用除錯器</h2>
<p>除錯器(debugger)是學習程式到底是如何執行的，以及找到錯誤的好幫手，有一點程度的程式設計師都知道這叫trace，也就是追蹤，但是因為Dev C++本身的問題，其除錯器的功能殘缺就算了，還有一大堆未知的臭蟲在其中，更慘的是搭配先前不用建專案就能執行，就算建了專案還得手動加入除錯的選項才能使用，使得用Dev C++教會學生正確地使用除錯器根本就是天方夜譚。</p>
<h2>業界根本沒有人在使用Dev C++</h2>
<p>就我所知道的業界根本沒有人在使用Dev C++，如果有的話請讓我知道，我真的很佩服可以用這樣破爛的工具還能在業界生存，肯定是神手中的神手</p>
<p>學生學會這樣的工具就頂多只能勉強寫作業而已，出了社會來到業界連個開新專案都不會，更別說是連結別人寫好的函式庫，甚至是自己寫函式庫給別人連結，我只能寫一個慘字!</p>
<h2>老舊的編譯器</h2>
<p>現在的C++已經跟10年前的C++有一段很大的落差了，新的特性一直在增加，因為Dev C++搭載的是當時的gcc，因此很多最新的特性都沒有，好吧，雖然我一點都不期待有多少老師或助教能知道那些新技術，像是李伯伯知道什麼是Boost嗎? 什麼又是technical report? 暱名函數? auto? 甚至是最基本的STL?</p>
<h2>為什麼用Dev C++?</h2>
<p>是的，我的標題騙人，我沒寫滿100個理由，或許有天我會補上，但現在我們先看一下主要我所認為使用Dev C++的理由</p>
<ul>
<li>懶，Dev C++開了檔案就編譯，簡單好用，連開新專案都不用解釋</li>
<li>Debugger? 那是什麼?</li>
<li>阿我也只會用Dev C++</li>
<li>阿我的老師教我用Dev C++，所以我也用</li>
<li>學長寫的講議用Dev C++，所以我也用</li>
<li>隔壁Lab的王小明他家的狗的前主人的二嬸婆也用Dev C++教學，所以我也用</li>
<li>我只知道Dev C++</li>
<li>阿就免錢的，我也買不起Visual C++</li>
<li>寫論文拿來跑跑模擬數據就夠了</li>
<li>&#8230;.</li>
</ul>
<h2>啥咪? 連李家同都用Dev C++喔?</h2>
<p>為什麼我會突然寫這篇? 其實平時看到大家在用Dev C++在心裡咒罵這些不長進的傢伙就算了，但今天偶然看見李家同大師的新書的心得</p>
<p><a href="http://www.books.com.tw/exep/prod/booksfile.php?item=0010509876">人人都能學會寫程式：李家同教你用邏輯思考學程式設計</a></p>
<p>然後看見這本書的介紹裡提到</p>
<blockquote><p>在此強調我們用的程式語言是C語言，所使用的編譯器是Dev-C++4.9.9.2。讀者如果用錯了編譯器版本可能會出問題。</p></blockquote>
<p>我的媽呀，於是我忍不住了，姑且不論這本書是不是他弟子捉刀寫的書，但即然都掛上李家同名號了，我想請問一下李大師</p>
<p><strong>您多久沒寫過程式了?</strong></p>
<p>讀者用錯了編譯器版本還可能出問題，不要告訴我這特異的行為又是Dev C++本身引起的問題，難道其中用了什麼樣的奇技淫巧在不同編譯器下還會出現不同的行為? 使用這樣破爛的工具教初學者真的好嗎? 初學者有辦法分得出來是Dev C++本身鬼打牆，還是自己寫錯了呢? 更何況是這本書聲稱的人人有功練?</p>
<h2>選擇更好的工具，你可以不用變成李家同</h2>
<p>我不知道李伯伯多久沒寫程式了，但是看他的書都用Dev C++就可以斷定，他或他的弟子都沒寫過什麼真正的程式，或許跑跑數據模擬還過得去，除此之外可能就有問題，更別說來教別人寫程式了，巨塔裡所謂的寫程式和外面的寫程式是兩回事</p>
<p>工欲善其事，必先利其器，使用破爛的工具只會造成程式學習上的重大阻礙，如果你的目標是成為李大師，或許你可以用Dev C++，否擇除了Dev C++以外，其實你還有n種選擇，在這裡列出幾樣我所知道的</p>
<h2><a href="http://www.codeblocks.org/">Code::blocks</a></h2>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2011/07/code_blocks.jpg"><img class="alignnone size-full wp-image-1447" title="code_blocks" src="http://blog.ez2learn.com/wp-content/uploads/2011/07/code_blocks.jpg" alt="" width="312" height="257" /></a></p>
<p>Code::Blocks是一款open source的IDE環境，優點是輕巧易用，而且該有的功能一樣都沒少，其本身就是一套強大的編譯工具，甚至cmake等編譯工具也可以產生Code::block的專案用來編譯，但缺點是目前只有英文介面，對於教學上比較不方便</p>
<h2><a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express">Visual C++ Express</a></h2>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2011/07/vc_express.png"><img class="alignnone size-full wp-image-1448" title="Visual C++ Express" src="http://blog.ez2learn.com/wp-content/uploads/2011/07/vc_express.png" alt="" width="916" height="671" /></a></p>
<p>或許是為了搶佔學生市場，微軟佛心來的推出了<strong>免費的</strong>閹割版的Visual C++，也就是Visual C++ Express，雖然說是閹割版，也只是少掉了MFC之類商用的函式庫，其它該有的功能一樣都沒少，自動完成等等，它的debugger甚至還硬比其它IDE強大，可以回朔到上面的指令，而且它有中文版，拿來教學再好也不過，缺點是中文版的編譯器訊息也是中文的，英文的錯誤訊息已經夠難懂了，翻成中文後你連在Google貼上訊息找到半點有用的資料都找不到</p>
<h2><a href="http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers-includes-incubating-components/indigor">Eclipse</a></h2>
<p>Eclipse本身是用Java寫的IDE，並沒有限定在特定的語言上，因此從Java、C/C++、Python甚至到PHP都有相對應的IDE可以使用，而且該有的功能也一樣都有，比其它IDE棒的地方是它有各種不同的插件可以使用，例如可以整合版本控制系統，不過對於教學用途可能就用不到，而且缺點是很耗系統資源，特別是記憶體，這是用Java寫的程式一貫的毛病，對於老舊的教室電腦可能是很大的負擔，因此不是很推薦用於C/C++教學</p>
<h2><a href="http://wxdsgn.sourceforge.net/">wxDevC</a></h2>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2011/07/with_designer_small.jpg"><img class="alignnone size-full wp-image-1449" title="with_designer_small" src="http://blog.ez2learn.com/wp-content/uploads/2011/07/with_designer_small.jpg" alt="" width="350" height="233" /></a></p>
<p>不是說Dev C++死了嗎? 確實是死了，但其實沒有死透，後繼有人接手了Dev C++的開發，改名為wxDev C++，最主要是整合了wxWidget的設計功能，個人是沒有用過，但這專案一直都有在維護，應該至少會比目前的Dev C++好上很多，如果真的對Dev C++有執著的話不妨可以試試</p>
<h2>最後</h2>
<p>再一次，如果你是程式設計課程的助教、老師，拜託，花點時間學款現代一點的IDE吧，不要再用史前時代的破爛工具來殘害你的學生們，台灣軟體產業已經夠落後了，行行好吧</p>
<h2>2011/09/17 更新</h2>
<p>最近有人接續了Dev C++的開發工作，持續更新了好幾個版本，修正了上面提到很多主要的問題，我想Dev C++改掉上面那些問題其實是很小巧好用的工具，個人強烈建議要用Dev C++請使用最新的版本，目前已經出到了5.0.0.3，請參考另一篇文章</p>
<p><a href="http://blog.ez2learn.com/2011/09/17/dev-c-5-0-0-3/">Dev C++ 5.0.0.3釋出</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2011/07/08/please-do-not-use-dev-c/feed/</wfw:commentRss>
		<slash:comments>57</slash:comments>
		</item>
		<item>
		<title>Now.in 遭受到來自歐洲的殭屍DDOS攻擊</title>
		<link>http://blog.ez2learn.com/2010/07/18/now-in-is-under-attack-from-european-zombies/</link>
		<comments>http://blog.ez2learn.com/2010/07/18/now-in-is-under-attack-from-european-zombies/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 12:47:10 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[資訊安全]]></category>
		<category><![CDATA[WTF]]></category>
		<category><![CDATA[資安]]></category>
		<category><![CDATA[腦殘]]></category>
		<category><![CDATA[殭屍]]></category>
		<category><![CDATA[攻擊]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=1079</guid>
		<description><![CDATA[Now.in這兩天遭到來自歐洲各國的殭屍DDOS攻擊，來源國家有羅馬尼亞、土耳其、捷克共合國、德國、法國 為了讓服務能正常運行，我花了一個晚上寫了一個防火牆，自從掛上去之後對方的攻擊都是無效的 我也不知道明明是無效的攻擊為什麼這位小朋友還要繼續試，從手法來看對方應該只是個script kid，攻擊的Request從一開始全部是這樣 GET /radio/musicfm Host: en.now.in 變成 GET /radio/musicfm Content-Type: text/plain Host: en.now.in 或是 GET /radio/musicfm Connection: keep-alive Host: en.now.in 他大概蠢到以為加了keep-alive之後我的伺服器就會蠢到把連線開著讓他吃免錢的資源? 或是改變request的內容我的防火牆就會認不出來? 在他猜到防火牆設的規則前攻擊都是無效的，說真的，我想不到有什麼無聊的理由可以浪費時間在攻擊別人的網站，這樣一直狂送request就會高潮嗎? 如果有效就算了，還是這種無力的三流攻擊，我統計了一下記錄檔他十幾台殭屍聯合攻擊的request/seconds數量也才200多，連防火牆的1%CPU使用率都撐不起來 不過，網路上神經病何其多，架網站遇到這種莫名奇妙的攻擊也是遲早的事，感謝這位小朋友讓我有機會寫個防火牆，之後還一直有機會遇到神經病的攻擊，也算是經驗的一種，而這防火牆是因為殭屍而生的，所以就把它命名為 Molotov吧。]]></description>
			<content:encoded><![CDATA[<p><a href="http://now.in">Now.in</a>這兩天遭到來自歐洲各國的殭屍DDOS攻擊，來源國家有羅馬尼亞、土耳其、捷克共合國、德國、法國</p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2010/07/l4d_hospital01_apartment0011.jpg"><img class="alignnone size-large wp-image-1080" title="Now.in 遭受到來自歐洲的殭屍攻擊" src="http://blog.ez2learn.com/wp-content/uploads/2010/07/l4d_hospital01_apartment0011-1024x640.jpg" alt="" width="717" height="448" /></a></p>
<p>為了讓服務能正常運行，我花了一個晚上寫了一個防火牆，自從掛上去之後對方的攻擊都是無效的</p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2010/07/l4d_hospital02_subway0016.jpg"><img class="alignnone size-large wp-image-1081" title="l4d_hospital02_subway0016" src="http://blog.ez2learn.com/wp-content/uploads/2010/07/l4d_hospital02_subway0016-1024x640.jpg" alt="" width="717" height="448" /></a></p>
<p>我也不知道明明是無效的攻擊為什麼這位小朋友還要繼續試，從手法來看對方應該只是個script kid，攻擊的Request從一開始全部是這樣</p>
<blockquote>
<div id="_mcePaste">GET /radio/musicfm</div>
<div>Host: en.now.in</div>
</blockquote>
<div id="_mcePaste">變成</div>
<blockquote>
<div>
<div>GET /radio/musicfm</div>
<div>Content-Type: text/plain</div>
<div>Host: en.now.in</div>
</div>
</blockquote>
<div>或是</div>
<blockquote>
<div>
<div>GET /radio/musicfm</div>
<div>Connection: keep-alive</div>
<div>Host: en.now.in</div>
</div>
</blockquote>
<div>他大概蠢到以為加了keep-alive之後我的伺服器就會蠢到把連線開著讓他吃免錢的資源? 或是改變request的內容我的防火牆就會認不出來? 在他猜到防火牆設的規則前攻擊都是無效的，說真的，我想不到有什麼無聊的理由可以浪費時間在攻擊別人的網站，這樣一直狂送request就會高潮嗎? 如果有效就算了，還是這種無力的三流攻擊，我統計了一下記錄檔他十幾台殭屍聯合攻擊的request/seconds數量也才200多，連防火牆的1%CPU使用率都撐不起來</div>
<div></div>
<div>不過，網路上神經病何其多，架網站遇到這種莫名奇妙的攻擊也是遲早的事，感謝這位小朋友讓我有機會寫個防火牆，之後還一直有機會遇到神經病的攻擊，也算是經驗的一種，而這防火牆是因為殭屍而生的，所以就把它命名為 Molotov吧。</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2010/07/18/now-in-is-under-attack-from-european-zombies/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How hateful it is to develop a web application which runs correctly with different browsers?</title>
		<link>http://blog.ez2learn.com/2010/07/11/how-hateful-it-is-to-develop-a-web-application-which-runs-correctly-with-different-browsers/</link>
		<comments>http://blog.ez2learn.com/2010/07/11/how-hateful-it-is-to-develop-a-web-application-which-runs-correctly-with-different-browsers/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 19:13:48 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[English Articles]]></category>
		<category><![CDATA[WTF]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[sucks]]></category>
		<category><![CDATA[Web-development]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=1051</guid>
		<description><![CDATA[Like this: You have to run different browsers for testing the web-page.  What&#8217;s more? You have to run those stupid IE browsers under VirtualBox or some virtual system.  Moreover, different detail behaviors of JavaScript/CSS engine drives you crazy, especially IE. &#8230; <a href="http://blog.ez2learn.com/2010/07/11/how-hateful-it-is-to-develop-a-web-application-which-runs-correctly-with-different-browsers/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Like this:</p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2010/07/browsers.png"><img class="alignnone size-medium wp-image-1052" title="browsers" src="http://blog.ez2learn.com/wp-content/uploads/2010/07/browsers-300x187.png" alt="" width="300" height="187" /></a></p>
<p>You have to run different browsers for testing the web-page.  What&#8217;s more? You have to run those stupid IE browsers under VirtualBox or some virtual system.  Moreover, different detail behaviors of JavaScript/CSS engine drives you crazy, especially IE.  You can write the CSS which works correctly with Chrome/FireFox/Opera, unfortunately, the layout will be messed up by IE! Also, you can write some code that runs correctly with IE6/IE8/Chrome/FireFox/Opera, but not with IE7 <a href="http://stackoverflow.com/questions/2949179/jquery-error-when-aborting-an-ajax-call-only-in-internet-explorer">(jQuery error when aborting an ajax call only in Internet Explorer</a>).</p>
<h1>Die! IE! Die!!!!!!</h1>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2010/07/11/how-hateful-it-is-to-develop-a-web-application-which-runs-correctly-with-different-browsers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>以前的PHP有很多缺陷</title>
		<link>http://blog.ez2learn.com/2010/01/06/old-php-sucks/</link>
		<comments>http://blog.ez2learn.com/2010/01/06/old-php-sucks/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 15:42:15 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[WTF]]></category>
		<category><![CDATA[爛]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[sucks]]></category>
		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=907</guid>
		<description><![CDATA[有人在plurk上PO了一篇文章的連結，PHP 開發迷思 (三) – PHP 很糟糕？，因為我不認同那樣的看法，所以我回覆說php很爛，當你說一個語言很爛時，就要有心理準備有人準備要跟你戰了，果然有人不認同我的說法，當然任何人都可以不認同我所說的，而且好和爛是很主觀的，同時也是是相對的，但是我所說的是有根據的，說php爛不是我一個人的說法，而是已經被說到爛掉的說法，很多比我有經驗多的網頁程式設計師都異口同聲的說PHP很爛，為了解釋為什麼我認為PHP很爛(我在本文指的爛是指語言設計上的眾多嚴重缺陷)，我寫了這篇文章 更新: 我承認這篇寫得有點偏激，也是以前的觀點，也是在發洩以前對PHP的不滿，我沒有寫較新的PHP，所以我收回PHP很爛，改成以前的PHP有很多缺陷，我想表達的是一款語言的很多缺陷，而且是在以前的缺陷，現在PHP確實有改進很多，所以我寫了一篇 如何評估比較程式語言 另外我想表達的一件事是，當有人說你用的程式語言有問題時，為什麼一定要這麼抓狂呢? 如果一個程式語言它的缺陷沒有人罵，大家都愛語言如命，那麼語言的開發者或團隊要如何知道這語言要改進什麼呢? PHP有很多缺陷是事實，然而說出來很多人可能就不高興，然而我選擇用較激烈的字眼是因為他改進實在太慢了，我們可以看到以前的Magic quote、unicode問題等等，至今都仍未解決，要php6才會解決，這些問題不是只有我覺得很糟，而是我發現很多人都跟我一樣覺得這太差了，我每次罵PHP都真的很希望他在下一個版本就把這些鳥問題解決掉，但以我之前的經驗它都讓我失望，所以我怨念很深，這篇文章寫起來也特別偏激，但我想表達的是，我說PHP爛某種程度是希望他變好，那你可能會問，我為什麼不說Python爛，然後哪裡爛，很簡單的原因是我太喜歡Python，當你很喜歡一個東西時你是看不見這東西的缺點，如果有人說Python爛，我覺得很好，我想知道他有哪些缺陷，是我沒看到的 除此之外，對於初學者來說，PHP的低門檻讓他成為吸引新手的蜜罐，而很多人都只知道PHP可以寫網頁，但是不知道其實所有程式語言都能寫網頁，我希望透過罵PHP也能讓更多人知道其實還有更多選擇，但其實這會讓人覺得反感，我在這背後目的是希望其它語言能夠有更多人使用，有競爭才有進步，而對於國內大部份人都只用PHP在刻網頁我也覺得很失望，我同時也希望讓大家知道其實網頁的技術現在已經很先進了，很少有人使用框架等次世代的網頁技術，所以有興趣也可以看一些較新的技術，而不是土法煉鋼 美與醜 當路上走來一個女的，一個人說她很正，另一個人說她很醜，美醜好壞基本上都是主觀的，而且是相對的，如果說走在路上的那個女生是世界上唯一的女生，那麼何從比較她的美醜呢? 我今天說PHP很爛，是基於我的經驗，和看別人的經驗，我有用不同的語言、工具寫過網頁程式，在這樣的情況下，因為經過比較才有辦法知道好壞，有趣的是在Plurk裡的討論有人甚至懷疑我沒寫過PHP，我個人比較喜歡就事論事，不太喜歡用質疑對方的立場來證明自己的說法，當別人懷疑你經歷時，你一樣可以這樣懷疑別人，像是「你們有沒有用非PHP的平台寫過網頁程式?」，「你們有沒有用現代一點的平台像是Django、ROR寫過網頁程式?」，但是這樣會讓問題失焦，到後來變成在檢視對方背景來決定他講這話是否是對的，而沒有去看這些話是否是真的正確或有道理，即使這是一個主觀的問題，而我描述的只是依我經驗和認知所得到的想法，每個人都可以不同意我所說的，但是那些確實是我所經歷過的，我可以說謊「天阿~ PHP好棒，大家快去學」，或是選擇不發言，但是當我說出「PHP很爛」，千真萬確是我的心得 我的經驗 我在小學六年級時家裡有了撥接的網路，在那時候開始學習怎麼寫網頁，當時所謂的網頁，也只是到處亂貼一些資料，整畫面閃來閃去的GIF圖檔，都是那時候新手網頁的調調，更誇張一點會加一堆亂七八糟的特效，上傳到免費的空間，我還記得當時申請的空間叫台北酒巴什麼的，當時真的覺得做網頁是件很酷的事情，在我學習寫程式之前其實大多都在做網頁，做破破爛爛的網頁，但是樂在其中，當時覺得程式真是很神奇的東西，有時會載一些用perl寫的cgi程式來架架看，光是架那些留言板或聊天室之類的，就是一件大工程，當時對於行末少一個;就沒辦法執行這件事覺得很驚訝，居然程式只要一個符號錯了就不能跑，那到底要怎麼寫? 當我上國一開始自己學寫VB6.0之後，因為有了VB6.0的程式設計經驗，我終於漸漸瞭解perl的cgi怎麼寫，這之中我記得我也有碰過ASP，因為他語法和VB一樣，但是並沒有太深入，後來因為我父親想弄一個放他文章的網站，於是我就用Perl-CGI幫他寫了一套文章管理系統，自己也順便做了一個個人工作室的網站 Victor工作室 我可以透過後台管理系統來新增消息，或是檔案下載等等，同時我也用Perl-CGI寫了一個留言版系統 Victor工作室 &#8211; 留言版 1.1 Beta 可以在這裡下載，在寫了這麼多Perl-CGI的程式後，發現PHP這東西好像漸漸流行起來，越來越多用PHP寫的網站、免費的網頁程式等等，在這之前幾乎都是Perl-CGI的天下，PHP做為後起之秀取而代之，因為他的門檻比Perl還低，同時比起Perl，PHP的程式也好懂許多，所以我也開始學習PHP，PHP絕對是當時最佳選擇之一，當之無愧，在寫的過程中有遇過不少問題，像是許功蓋問題，處理SQL Injection的問題，PHP的自動引號取代問題(Magic quote)，這些是顯著的問題，但有些問題在當時一直感覺不太對勁，但是也說不出個所以然，像是它的形別等等問題，相較於我當時所會的VB，PHP是一款非常不嚴僅的語言，但是我在當時並不覺得它很爛，可能是因為不知道有其它選擇，又或著當時真的沒什麼選擇，所以一邊學PHP，一邊我就把之前寫的文章系統改成用PHP重寫，到今天我父親還在使用這套系統: 金門根本文采工作室 在這之後有很長的時間，寫網頁我也都是用PHP，直到我學會了Python，大約已經是大二以後的事了，在那時我選擇了TurboGears當網頁框架，那時我回首過去，才深深地發現PHP是一款多麼爛的語言，在當時他或許是開路先鋒，讓網頁程式開發的門檻降低到一定的程度，但是在我學習寫TurboGears時他還是一樣的爛，以前我遇過的那些問題大多數都還在，而且學會了Python這種清晰的語言更加地覺得PHP真的很污穢，在那之後我用TurboGears開發了一些網頁，我以前在PHP遇到的鳥問題從來都沒有再碰到過，開發的速度也大大加快，我能夠專注在我所想開發的功能上，而不是整天去處理那些鳥問題，安全性也大大提升，目前那些網頁還在跑的有 Walele創意投票系統 是一個線上投票系統，從決定到開發完成上線只用了一週的課餘時間，用的是TurboGears1 Now.In廣播平台 是一個線上廣播平台，目前還在beta版的階段，用的是TurboGears2 試鏡報名系統 用一個晚上寫出來的試鏡報名系統，可以上傳照片，後面還有一個後台可以看資料 我承認我寫的網頁程式其實不多，但是從我第一個寫的網頁到今天已經有十年以上，我看見網路的發展，網頁開發工具的演進，PHP在以前我不會說他爛，因為他是開路先鋒，沒有他網頁程式設計可能難以上手，但是這麼多年來他有在改進，但是改進實在太慢，問題還是一大堆，再加上他改進的方式都是疊床架屋，而不是正視問題並解決它，再者相較於現代的網頁開發工具，PHP真的是太落伍了，先天不良，後天失調，所以今天我才說PHP很爛，即使PHP有了不少網頁框架，還是擺脫不他那語言本身就一堆問題的原罪，他之所以會大流行，回首當時，不外乎就是當時正好缺少一個低門檻的網頁開發工具、平台，PHP來得正是時候，所以大紅大紫，但是即使再怎麼流行也不能抹掉PHP語言設計很爛的這個事實 &#8230; <a href="http://blog.ez2learn.com/2010/01/06/old-php-sucks/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>有人在plurk上PO了一篇文章的連結，<a href="http://www.jaceju.net/blog/?p=936">PHP 開發迷思 (三) – PHP 很糟糕？</a>，因為我不認同那樣的看法，所以我回覆說php很爛，當你說一個語言很爛時，就要有心理準備有人準備要跟你戰了，果然有人不認同我的說法，當然任何人都可以不認同我所說的，而且好和爛是很主觀的，同時也是是相對的，但是我所說的是有根據的，說php爛不是我一個人的說法，而是已經被說到爛掉的說法，很多比我有經驗多的網頁程式設計師都異口同聲的說PHP很爛，為了解釋為什麼我認為PHP很爛<strong>(我在本文指的爛是指語言設計上的眾多嚴重缺陷)</strong>，我寫了這篇文章</p>
<h3>更新:</h3>
<p>我承認這篇寫得有點偏激，也是以前的觀點，也是在發洩以前對PHP的不滿，我沒有寫較新的PHP，所以我收回PHP很爛，改成以前的PHP有很多缺陷，我想表達的是一款語言的很多缺陷，而且是在以前的缺陷，現在PHP確實有改進很多，所以我寫了一篇 <a href="http://blog.ez2learn.com/2010/01/08/how-to-compare-languages/">如何評估比較程式語言</a></p>
<p>另外我想表達的一件事是，當有人說你用的程式語言有問題時，為什麼一定要這麼抓狂呢? 如果一個程式語言它的缺陷沒有人罵，大家都愛語言如命，那麼語言的開發者或團隊要如何知道這語言要改進什麼呢? PHP有很多缺陷是事實，然而說出來很多人可能就不高興，然而我選擇用較激烈的字眼是因為他改進實在太慢了，我們可以看到以前的Magic quote、unicode問題等等，至今都仍未解決，要php6才會解決，這些問題不是只有我覺得很糟，而是我發現很多人都跟我一樣覺得這太差了，我每次罵PHP都真的很希望他在下一個版本就把這些鳥問題解決掉，但以我之前的經驗它都讓我失望，所以我怨念很深，這篇文章寫起來也特別偏激，但我想表達的是，我說PHP爛某種程度是希望他變好，那你可能會問，我為什麼不說Python爛，然後哪裡爛，很簡單的原因是我太喜歡Python，當你很喜歡一個東西時你是看不見這東西的缺點，如果有人說Python爛，我覺得很好，我想知道他有哪些缺陷，是我沒看到的</p>
<p>除此之外，對於初學者來說，PHP的低門檻讓他成為吸引新手的蜜罐，而很多人都只知道PHP可以寫網頁，但是不知道其實所有程式語言都能寫網頁，我希望透過罵PHP也能讓更多人知道其實還有更多選擇，但其實這會讓人覺得反感，我在這背後目的是希望其它語言能夠有更多人使用，有競爭才有進步，而對於國內大部份人都只用PHP在刻網頁我也覺得很失望，我同時也希望讓大家知道其實網頁的技術現在已經很先進了，很少有人使用框架等次世代的網頁技術，所以有興趣也可以看一些較新的技術，而不是土法煉鋼</p>
<p><span id="more-907"></span></p>
<h2>美與醜</h2>
<p>當路上走來一個女的，一個人說她很正，另一個人說她很醜，美醜好壞基本上都是主觀的，而且是相對的，如果說走在路上的那個女生是世界上唯一的女生，那麼何從比較她的美醜呢? 我今天說PHP很爛，是基於我的經驗，和看別人的經驗，我有用不同的語言、工具寫過網頁程式，在這樣的情況下，因為經過比較才有辦法知道好壞，有趣的是在Plurk裡的討論有人甚至懷疑我沒寫過PHP，我個人比較喜歡就事論事，不太喜歡用質疑對方的立場來證明自己的說法，當別人懷疑你經歷時，你一樣可以這樣懷疑別人，像是「你們有沒有用非PHP的平台寫過網頁程式?」，「你們有沒有用現代一點的平台像是Django、ROR寫過網頁程式?」，但是這樣會讓問題失焦，到後來變成在檢視對方背景來決定他講這話是否是對的，而沒有去看這些話是否是真的正確或有道理，即使這是一個主觀的問題，而我描述的只是依我經驗和認知所得到的想法，每個人都可以不同意我所說的，但是那些確實是我所經歷過的，我可以說謊「天阿~ PHP好棒，大家快去學」，或是選擇不發言，但是當我說出「PHP很爛」，千真萬確是我的心得</p>
<h2>我的經驗</h2>
<p>我在小學六年級時家裡有了撥接的網路，在那時候開始學習怎麼寫網頁，當時所謂的網頁，也只是到處亂貼一些資料，整畫面閃來閃去的GIF圖檔，都是那時候新手網頁的調調，更誇張一點會加一堆亂七八糟的特效，上傳到免費的空間，我還記得當時申請的空間叫台北酒巴什麼的，當時真的覺得做網頁是件很酷的事情，在我學習寫程式之前其實大多都在做網頁，做破破爛爛的網頁，但是樂在其中，當時覺得程式真是很神奇的東西，有時會載一些用perl寫的cgi程式來架架看，光是架那些留言板或聊天室之類的，就是一件大工程，當時對於行末少一個;就沒辦法執行這件事覺得很驚訝，居然程式只要一個符號錯了就不能跑，那到底要怎麼寫?</p>
<p>當我上國一開始自己學寫VB6.0之後，因為有了VB6.0的程式設計經驗，我終於漸漸瞭解perl的cgi怎麼寫，這之中我記得我也有碰過ASP，因為他語法和VB一樣，但是並沒有太深入，後來因為我父親想弄一個放他文章的網站，於是我就用Perl-CGI幫他寫了一套文章管理系統，自己也順便做了一個個人工作室的網站</p>
<p><a href="http://www.kinmen.info/vic/">Victor工作室</a></p>
<p>我可以透過後台管理系統來新增消息，或是檔案下載等等，同時我也用Perl-CGI寫了一個留言版系統</p>
<p><a href="http://www.kinmen.info/vic/book/index.pl">Victor工作室 &#8211; 留言版 1.1 Beta</a></p>
<p>可以在<a href="http://www.kinmen.info/vic/download.pl#2">這裡下載</a>，在寫了這麼多Perl-CGI的程式後，發現PHP這東西好像漸漸流行起來，越來越多用PHP寫的網站、免費的網頁程式等等，在這之前幾乎都是Perl-CGI的天下，PHP做為後起之秀取而代之，因為他的門檻比Perl還低，同時比起Perl，PHP的程式也好懂許多，所以我也開始學習PHP，PHP絕對是當時最佳選擇之一，當之無愧，在寫的過程中有遇過不少問題，像是許功蓋問題，處理SQL Injection的問題，PHP的自動引號取代問題(Magic quote)，這些是顯著的問題，但有些問題在當時一直感覺不太對勁，但是也說不出個所以然，像是它的形別等等問題，相較於我當時所會的VB，PHP是一款非常不嚴僅的語言，但是我在當時並不覺得它很爛，可能是因為不知道有其它選擇，又或著當時真的沒什麼選擇，所以一邊學PHP，一邊我就把之前寫的文章系統改成用PHP重寫，到今天我父親還在使用這套系統:</p>
<p><a href="http://www.kinmen.info/">金門根本文采工作室</a></p>
<p>在這之後有很長的時間，寫網頁我也都是用PHP，直到我學會了Python，大約已經是大二以後的事了，在那時我選擇了TurboGears當網頁框架，那時我回首過去，才深深地發現PHP是一款多麼爛的語言，在當時他或許是開路先鋒，讓網頁程式開發的門檻降低到一定的程度，但是在我學習寫TurboGears時他還是一樣的爛，以前我遇過的那些問題大多數都還在，而且學會了Python這種清晰的語言更加地覺得PHP真的很污穢，在那之後我用TurboGears開發了一些網頁，我以前在PHP遇到的鳥問題從來都沒有再碰到過，開發的速度也大大加快，我能夠專注在我所想開發的功能上，而不是整天去處理那些鳥問題，安全性也大大提升，目前那些網頁還在跑的有</p>
<p><a href="http://walele.com/">Walele創意投票系統</a> 是一個線上投票系統，從決定到開發完成上線只用了一週的課餘時間，用的是TurboGears1</p>
<p><a href="http://now.in">Now.In廣播平台</a> 是一個線上廣播平台，目前還在beta版的階段，用的是TurboGears2</p>
<p><a href="http://tiangeapp.ez2learn.com/screentest/form">試鏡報名系統</a> 用一個晚上寫出來的試鏡報名系統，可以上傳照片，後面還有一個後台可以看資料</p>
<p>我承認我寫的網頁程式其實不多，但是從我第一個寫的網頁到今天已經有十年以上，我看見網路的發展，網頁開發工具的演進，PHP在以前我不會說他爛，因為他是開路先鋒，沒有他網頁程式設計可能難以上手，但是這麼多年來他有在改進，但是改進實在太慢，問題還是一大堆，再加上他改進的方式都是疊床架屋，而不是正視問題並解決它，再者相較於現代的網頁開發工具，PHP真的是太落伍了，先天不良，後天失調，所以今天我才說PHP很爛，即使PHP有了不少網頁框架，還是擺脫不他那語言本身就一堆問題的原罪，他之所以會大流行，回首當時，不外乎就是當時正好缺少一個低門檻的網頁開發工具、平台，PHP來得正是時候，所以大紅大紫，但是即使再怎麼流行也不能抹掉PHP語言設計很爛的這個事實</p>
<h2>其它人的看法</h2>
<p>我知道我說的可能很多人不認同，又或著不相信，但如果是大部份有接觸過現代網頁開發平台，很有經驗的網頁開發者都異口同聲的說php sucks呢? 在Google搜尋 "php sucks"，可以找到一大堆的網頁，他們都在說PHP很爛，我在此引用幾篇他們寫的</p>
<h3><a href="http://maurus.net/resources/programming-languages/php/">I’m sorry, but PHP sucks.</a></h3>
<p>這篇文章清楚地條列出PHP哪裡爛，會遇到哪些麻煩的問題，像是字元支援的問題、不相容的問題、它莫名奇妙的形別系統等等</p>
<h3><a href="http://www.codinghorror.com/blog/archives/001119.html">PHP Sucks, But It Doesn&#8217;t Matter</a></h3>
<p>這篇文章引用其它人的說法，和他自己的經驗來說明PHP很爛，他這麼說道</p>
<blockquote><p>I&#8217;ve written both VB and PHP code, and in my opinion the comparison is grossly unfair to Visual Basic. Does PHP suck? Of course it sucks. Did you read any of the links in Tim&#8217;s blog entry? It&#8217;s a galactic supernova of incomprehensibly colossal, mind-bendingly awful suck. If you sit down to program in PHP and have even an ounce of programming talent in your entire body, there&#8217;s no possible way to draw any other conclusion. It&#8217;s inescapable.</p></blockquote>
<p>大略翻譯是:</p>
<p style="padding-left: 30px;">PHP很爛? 當然它很爛，你有讀Tim部落格裡引用的每個連結嗎? 它真的是宇宙超級霹靂無敵的爛，就算你有一身寫PHP的才能，也沒辦法下任何其它的結論，這是事實</p>
<h3><a href="http://www.tbray.org/ongoing/When/200x/2006/02/17/PHP">On PHP</a></h3>
<p>這篇文章整理了一整一大堆資深的網頁程式開發人員，對於PHP的看法，大略挑幾句來翻譯</p>
<blockquote><p>Adam Kalsey:</p>
<p>If you want some support on your foray into PHP, please let me know. I’d love to lend a hand. ¶</p>
<p>It’s easy to write bad code in PHP. Or in Perl. Or in C. Or Java. I think two things contribute to the perception that PHP code is crap. First of all, when you write spaghetti PHP, it still works just fine. So unless you’re a professional programmer or maintaining lots of code, you probably don’t care that the code is crap.</p>
<p>Secondly, since PHP is easy to learn, is ubiquitous, and there’s lots of PHP examples on the web, it’s easy for a non-pro to pick up PHP and start monkeying with it. They learn bad habits and then publish their code and teach others bad habits. Some of the most popular open source PHP applications ever are really poorly coded. Gallery and WordPress come to mind.</p>
<p>A hammer can be used to build a beautiful structure or a mis-shapen birdhouse. And it’s easy to flatten your thumb. With so many amateur PHP developers out there, it’s not surprising there’s a lot of flat-thumb code in the wild.</p></blockquote>
<p>大略翻譯:</p>
<p style="padding-left: 30px;">如果你想學PHP，請讓我知道，我很樂意幫助你</p>
<p style="padding-left: 30px;">PHP非常容易寫出很爛的程式碼，對Perl、C和Java來說也一樣，我想有兩件事情讓人對於PHP程式碼覺得很糟糕，首先，當你寫出了垃圾程式，它一樣運作的很好，除非你是專業的程式設計師，或是維護大量的程式碼，不然你根本不在意那程式碼是些垃圾。</p>
<p style="padding-left: 30px;">第二，因為PHP很容易學，很普及，在網路上有很多PHP的範例，很容易就有非專業的人用PHP來亂搞，他們學習糟糕的習慣，然後發表他們的程式教其他人這些壞習慣，很多流行的Open source PHP程式也寫得非常爛，說到這裡就想到Gallery和Wordpress</p>
<p style="padding-left: 30px;">它是一把可以建造漂亮結構或是歪曲鳥籠的槌子，還有它很容易敲爛你的姆指，有這麼多業餘的PHP開發者，所以在外面有這麼多爛程式也不令人意外</p>
<blockquote><p>Dominic Mitchell<br />
(略) Every time I’ve looked at PHP, I’ve been unable to find out how they use placeholders in code that talks to the database. Yes, every database adaptor provides a quote function, but nobody uses it (consistently). And people wonder why PHP code is always full of security holes.</p>
<p>It’s a real shame, as I can see that there’s a lot to like in PHP. But it really needs to clean its act up to appeal to people coming from other programming languages, instead of just people coming from dreamweaver.</p>
<p>I actually heard David Heinemeier Hansson (sp?) talking about rails the other day. One of the key points he made is that it should be easy to do the right thing. That’s why Rails hits a sweet spot for me. But when you look at PHP, yes, it’s easy to code, but it’s not easy to do the right thing. That’s where it falls down.</p></blockquote>
<p>大略翻譯:</p>
<p style="padding-left: 30px;">每次我看PHP的程式，都沒辦法找到他們怎樣在程式碼中用placeholders來和資料庫溝通，是的，所有資料庫介面都有提供過慮(quote 就是取代掉特殊符號)的函數，但是沒有人去用它 (一致的)，然後人們就很困惑為什麼PHP老是一堆安全性的漏洞</p>
<p style="padding-left: 30px;">真的很丟臉，我看見很多人喜歡PHP，但是它需要向上提升才能吸引更多其它程式語言的開發者來使用，而不是那些從Dreamweaver跳槽過來的使用者</p>
<p style="padding-left: 30px;">我前些天聽見David Heinemeier Hansson談到Rails (Ruby On Rails)，其中有個重點是他很容易把事情做對，那就是為什麼Rails能夠贏得我的歡心，但是反觀PHP，是的，他很容易寫，但是他不容易把事情做對，這就是他失敗的地方</p>
<h3><a href="http://www.bitstorm.org/edwin/en/php/">What I don&#8217;t like about PHP</a></h3>
<p>這裡面也提到並列出PHP的一些經典缺陷，像是namespace (雖然5.3版新增了，但是詭異的是用反斜線來做區分)，遞迴問題，Magic quote問題等等</p>
<blockquote><p>PHP has two advantages: it&#8217;s very easy and it&#8217;s widely supported by webhosting companies. But that doesn&#8217;t make it a good language.</p>
<p>For very small projects, it can be a nice programming language. But for larger and more complex projects, PHP can show its weakness. When you search long enough, you&#8217;ll find solutions (work arounds) to some of the mentioned problems. So when a solution is known, why isn&#8217;t it fixed? And why are the fixes not mentioned in the manual?</p>
<p>It&#8217;s good that an open source language is very populair. Unfortunately, it&#8217;s not a great language. I hope all problems will be solved once (in PHP 6?) and we will have an open source language that&#8217;s open source and good.</p>
<p>Until then, when you start a project larger than five scripted pages, you might also consider C#/ASP.Net or Java/JSP as a better solution. And if you want really good (distributed) performance, you can look at some initiatives which have been popping up the last couple of years. Just to mention a couple of them: Nginx, Couch DB and Node.js. They all blow existing systems away.</p></blockquote>
<p>大略翻譯</p>
<p style="padding-left: 30px;">PHP有兩個優點，它非常容易使用，還有廣範地被webhosting公司支援，但是這並沒有使他成為一個好的語言</p>
<p style="padding-left: 30px;">對所有的小專案來說，它可以是一個好的程式語言，但是<strong>對於大而且複雜的專案來說，PHP就顯得很弱</strong>，在你搜尋夠久時<strong>，你會發現部份這些提到的問題的解決方案，即然這些解決方案是已知的，為什麼這些問題沒有被解決? 還有為什麼這些修正沒有在手冊裡提到?</strong></p>
<p style="padding-left: 30px;">當一個open source的語言非常流行是一件好事，不幸的是他不是一個優良的語言，我希望所有問題都能一口氣被解決(在PHP6?)，這樣我們就會有一個好的open source語言</p>
<p style="padding-left: 30px;">直到現在，當你開始一個大於五個script檔案的專案時，你可能會考慮C#/ASP.Net 或 Java/JSP做為更好的解決方案，還有如果你真的想要好的(分散式)效能，你可以看某些這幾年創新的解決方案，例如Nginx, Couch DB還有Node.js，他們會趕走現存的系統。</p>
<h3><a href="http://www.ukuug.org/events/linux2002/papers/html/php/">Experiences of Using PHP in Large Websites</a></h3>
<p>這篇很詳細地從語言的層面說明PHP語言設計上到底有哪些缺陷</p>
<blockquote><p>Furthermore, PHP suffers from a related issue: the language was accreted, rather than ever having been designed. Most programming languages that have achieved genuine long-lasting popularity have been the work of at most a small team of gifted language designers. These designers have worked as much on deciding what to leave out of their languages as on what to put in. PHP’s creator, Rasmus Lerdorf, adopted a deliberate policy of letting others contribute freely to the development of the PHP implementation — and thus implicitly to that of the language itself. Where languages like C, C++, or Perl have had a Ritchie, Stroustrup, or Wall directing their evolution, Lerdorf does not seem to have applied the same sorts of controls to PHP. The result in some cases is that PHP lacks any sort of coherent world view. This in turn only increases the complexity for those trying to actually build working solutions with PHP.</p></blockquote>
<p>大略翻譯:</p>
<p style="padding-left: 30px;">除此之外，PHP受苦於相關的問題: 這語言是拼湊出來而不是被設計出來的，大部份有名望的程式語言都是由小部份天才語言設計者所組成的團隊的作品，這些設計師做了很多語言的某些特性是否該保留或新增的決定，而PHP的建立者，Rasmus Lerdorf採用討論的機制讓其他人自由地開發PHP的實作，也就是PHP語言的本身，像C, C++或Perl有Ritchie, Stroustrup, or Wall等人指導他們的演進，Lerdorf似乎沒有對PHP採用同樣的控制，做為結果就是PHP缺少了一貫的世界觀，這只使得要在PHP上建立解決方案變得更加複雜</p>
<p>從這段我們可以瞭解，<strong>PHP的設計的決定很多在亂搞一通</strong>，它原本的作者也對程式語言的設計沒有才能</p>
<blockquote><p>A similar problem crops up with relational operators. PHP’s simple variables can contain either a number or a string. PHP converts between numbers and strings whenever necessary, so that the programmer need not worry about the underlying type.</p>
<p>That’s the theory, anyway; in practice, this makes it extremely difficult to compare two values of different types for equality. The standard PHP equality-testing operator is spelled ==:</p>
<p>$n1 = 0;      $n2 = 10;<br />
$s1 = &#8216;foo&#8217;;  $s2 = &#8216;bar&#8217;;</p>
<p>$n1 == $n2;  // Numeric comparison, returns false<br />
$s1 == $s2;  // String comparison, returns false<br />
$n1 == $s1;  // Good question<br />
$s1 == $n1;  // Is this any different?</p>
<p>The problem is that, when the values are weakly typed, and there is only one equality-testing operator, the language cannot determine the programmer’s intention. PHP has a variety of kludges to deal with this:</p>
<p>* Some programmers recommend using !strcmp($n1, $s1) to force a string interpretation.<br />
* You can cast one or both sides to the intended type.<br />
* PHP 4 has a === operator. It works the same way as ==, except that it additionally requires both sides to have the same type. This sounds initially like the perfect solution — just use === wherever you would otherwise have used ==. Unfortunately, you lose the convenience of being able to treat numbers and strings interchangeably: it is no longer the case that 3 === "3&#8243;.</p>
<p>Perl has similar rules for its scalar variables: they can contain either a number or a string, and the language freely converts as necessary. However, Perl allows the programmer to express the intent: it offers both a numeric-equality operator == and a string-equality operator eq. PHP explicitly rejects this approach. The manual for PHP 2 says “Once you start having separate operators for each type you start making the language much more complex. You can’t use == for strings, you now would use eq. I don’t see the point, especially for something like PHP where most of the scripts will be rather simple and in most cases written by non-programmers who want a language with a basic logical syntax that doesn’t have too high a learning curve.” Unfortunately, in cases like this, the complexity is rather like an air bubble under freshly hung wallpaper: pushing it from one place to another will only leave more mess on the wall.</p></blockquote>
<p>大略翻譯:</p>
<p style="padding-left: 30px;">一個類似的問題在關係運算子出現，PHP的簡單變數可以包含數字或字串，PHP在需要時轉形成數字或字串，所以程式設計師不需要擔心底層的形別</p>
<p style="padding-left: 30px;">這只是理論，一般來說，這使比較兩個不同形別不同值是否相等變得極度的困難，標準的PHP相等測試運算為 ==:</p>
<p style="padding-left: 30px;">$n1 = 0;      $n2 = 10;<br />
$s1 = &#8216;foo&#8217;;  $s2 = &#8216;bar&#8217;;</p>
<p style="padding-left: 30px;">$n1 == $n2;  // Numeric comparison, returns false<br />
$s1 == $s2;  // String comparison, returns false<br />
$n1 == $s1;  // Good question<br />
$s1 == $n1;  // Is this any different?</p>
<p style="padding-left: 30px;">問題在於，當值是weakly type，且只有一種相檔測式運算子，語言與法判斷程式設計師的意圖，PHP有很多暫時的解決方案:</p>
<p style="padding-left: 30px;">* 有些程式設計師建議使用 !strcmp($n1, $s1)來強迫解釋成字串<br />
* 你可以轉型兩邊成為想要的型別<br />
* PHP4有一個 === 運算子，它運作和==一樣，除了他需要兩邊是同樣的類型，聽起來好像是完美的解決方案 &#8211; 只使用 ===在你使用 ==的地方，不幸的是你失去了數字和字串相容的方便性，再也不能使用 3 === "3&#8243;</p>
<p style="padding-left: 30px;">Perl有一個類似的規則給他的純量變數，他們可以包含一個數字或字串，語言可以自由的在需要的時候轉形，僅管如此Perl允許程式設計師表答他的意圖: 他提供了數字相等運算子 == 還有字串相等運算子 eq，PHP明確地拒絕這個方法，PHP2的手冊說到 "當你開始有兩種不同的運算子給不同的形別時，你開始讓語言變得更複雜，<strong>你無法對字串使用==，你要使用eq，我不瞭解這用意在哪裡</strong>，特別是對像PHP這種將會非常簡單的語言，<strong>且在大部份情況下，PHP都是由非程式設計師來寫，他們只是想寫基本邏輯語法而且不想要一個太高的學習曲線</strong>"，不幸的是，像這樣的情況，複雜的情況就像一個在璧紙後面隆起的泡泡，把它從這裡移到納裡只會把牆弄得更遭。</p>
<p>又一個<strong>業餘語言設計者在PHP所犯下的設計錯誤，而且程式語言也都設計在於討好初學者，而不是更嚴僅</strong></p>
<p>說了PHP這麼多壞話，這還只是冰山一角，任何有上過資工系"程式語言"課程的人都能發現PHP這程式語言一堆不合理的設計/實作，但是PHP也不是完全不可取，在寫小形專案時他就很不錯，這文章寫得真的很不錯，他列出了一個檢查表，讓你檢查什麼情況適合使用PHP</p>
<blockquote><p>We have identified a number of problems that arise when attempting to use PHP on large websites. However, we do not claim that PHP should never be used, only that these issues make its use inadvisable in certain circumstances. The following checklist suggests questions that should be considered before making a decision to use PHP for a given project.</p>
<p>*How much control will you have over the deployment platform? PHP’s one-size-fits-all approach to the php.ini file makes it hard to share servers with sites that were developed with different settings.<br />
*How many people will work on the site, now and in the future? PHP as a language lacks the features necessary to promote effective teamwork; the bigger your team, the greater the problems you’ll have.<br />
*How big will the site be, in terms of numbers of distinct pages? This is related to the previous item: the bigger the site, the greater your need will be for language features that promote teamwork.<br />
*How long will the site be expected to last? The longer it lasts, the more likely it is that significant design changes will be needed. If you use PHP in the obvious manner, major design changes are difficult. If you extend PHP with a templating system, whether ad hoc or carefully enforced, using PHP buys you little if anything.</p>
<p>*How experienced are the developers; and how complex will the site need to be? Experienced developers will find themselves hindered rather than helped by the language’s simplicity. Inexperienced developers will find the simplicity a significant boon — but if you have inexperienced developers trying to develop a complicated dynamic site, you will soon run into other problems.</p></blockquote>
<p>大略翻譯:</p>
<p style="padding-left: 30px;">我們確認了不少用PHP寫大型網站會遇到的問題，但是我們不宣稱PHP永遠不該被使用，只是那些問題造成在現在的情況下不宜使用，但是下面這個檢查表建議了一些可以在決定使用PHP來開發專案前需要考量的問題</p>
<p style="padding-left: 30px;">* 你對於你部署用的平台有多少控制權? PHP的設定檔php.ini的一次設定影響全部的方式使得要針對不同網站使用不同設定變得很困難</p>
<p style="padding-left: 30px;">* 有多少人開發這個網站? 現在? 還有未來? PHP是一個缺乏必要特性來增進有效團隊合作的語言，當你的團隊越大，你會遇到越多問題</p>
<p style="padding-left: 30px;">* 你的網站會有多大? 有幾個不同的頁面? 這關係到前一個項目，網站越大，你需要的語言特性就要越好來提升團隊的合作</p>
<p style="padding-left: 30px;">* 你的網站會運行多久? 你的網站運行越久，越有可能需要進行設計上的重大改變，如果你使用PHP是因為明顯的意圖，主要的設計改變將會非常困難，如果你用樣版系統延伸PHP，不管是臨時或是特製的，使用PHP都沒帶來什麼好處</p>
<p style="padding-left: 30px;">* 你有多少身為開發者的經驗; 還有網站將會有多複雜? 有經驗的開發者會發現他們因為語言的簡單受到阻礙而非幫助，沒經驗的開發者會發現簡單是一個重要的好處，但如果你有沒經驗的開發者來試圖開發一個複雜的動態網站，你很快會遇到其它問題</p>
<p>該文章作的結論是</p>
<blockquote><p>PHP is a convenient language for rapidly prototyping simple dynamic websites. Websites thus built can in many cases be deployed indefinitely, without spending time and money on refactoring code in a different language. PHP’s simplicity makes it a good language for inexperienced programmers, such as those moving from a pure page-design rôle to a site development one.</p>
<p>For more experienced developers, though, the language’s simplicity rapidly turns into complexity, slowing down the development process. These developers are the ones who have the skills needed to build large and/or complex websites; using PHP for such sites therefore tends to be a net loss. This tendency is reinforced by PHP’s lack of the linguistic features needed to promote working on large software projects. If your project is at all large or complex, it may be better to look elsewhere when choosing an implementation language.</p>
<p>In cases where PHP has been determined to be inappropriate, what language should be used? There is considerable choice here; few languages are as bad as PHP for doing serious development work. The author and his colleagues have had good results with Perl, and believe that languages such as C++, Java, and Python should serve equally well.</p></blockquote>
<p>大略翻譯:</p>
<p style="padding-left: 30px;">PHP是一個用於快速開發簡單動態網站原形的語言，在沒有花錢和時間重構成不同的語言前，網站在很多情況下都不能被明確地部署，PHP的簡單使它成為一個給沒有經驗的程式設計者的好語言，像是一個單純從事頁面設計開發的人</p>
<p style="padding-left: 30px;">對更多有經驗的開發者而言，語言的簡單很快的變成了複雜，減慢了開發的進度，這些開發者是有能力開發建置大形的複雜網站; 使用PHP在這樣的網站會傾向於成為平白的損失，這些傾向是來自於PHP缺乏對提升大形專案開發工作的語言特性，如果你的專案是大且複雜的，在選擇實做的語言之前最好去找其它的選擇</p>
<p style="padding-left: 30px;">當PHP被認為不適合時，該使用什麼語言? 有很多選擇; 對於開發重要專案，很少有像PHP這麼糟糕的語言，作者和他的同事用Perl有好的結果，且相信像C++、Java還有Python可以有同樣好的結果</p>
<p>雖然從設計哲學看來我不喜歡Perl的哲學:</p>
<blockquote><p>There&#8217;s more than one way to do it</p></blockquote>
<p>而比較喜歡Python的</p>
<blockquote><p>There should be one&#8211; and preferably only one &#8211;obvious way to do it.</p></blockquote>
<p>但是做為一個程式語言，Perl的設計絕對比PHP好上太多了，PHP真的是拼湊出來的</p>
<h2>PHP的問題</h2>
<p>你可以在上面這些文章中發現，現在是2010年了，以現今的眼光來看，PHP確實是爛到暴炸了，有人反對我所說的，是說程式是人寫的，所以程式的好壞是在人而不是在程式語言本身，而且也有很多人有提到PHP可以寫出很棒的程式，這我也很認同，但是如同這些人也有提到的，<strong>要寫出優良的PHP程式非常困難，為什麼? 因為他有太多缺陷了</strong>，是的，不可否認他的門檻真的很低，但是<strong>那些缺陷就像是地雷一樣，而它的門檻就像是雷區的鐵絲網，讓大部份人可以跳進雷區來玩，不懂那些瑣碎的語言缺陷，很容易就被滿地的地雷炸飛，只有少數的人能夠熟知地雷的位置，在這雷區中行走自如，那是非常困難的事</strong>，換言之，PHP的學習曲線一開始是很平緩的，大部份人都可以快速上手寫出簡單的程式，但是當要寫的東西越來越複雜，要懂的東西就不是一般的多和瑣碎，因為那些問題都來自語言的設計不良，不瞭解就很容易誤用或濫用，所以到後來的學習曲線會很抖，而<strong>就算你懂也會那些問題，還有另一個疑問，為什麼要堅持用這個破爛而不知進步的爛語言? 而不改用一個更優良的語言或開發平台呢?</strong></p>
<p>今天我會說他爛，有很大部份原因是因為我想讓大家瞭解，其實除了<strong>PHP以外還有很多網頁開發的平台</strong>，而和這些現代的網頁開發平台相較之下，單純用PHP開發網頁真的是宇宙超級霹靂無敵爛，拿框架比語言是很不公平，但是<strong>就算是比較語言本身，PHP一樣還是很爛</strong>，但是<strong>他也有他的優點，就是他非常流行，所以教學、資源、範例、現成的程式等等，都很豐富，而且門檻很低，進入地獄的低門檻</strong>，這樣的優勢能夠持續多久? PHP這麼流行，加上我們<strong>從上面看到引用的文章就知道，PHP改進的商討是笑話，一堆業餘的程式語言設計師在一起做出爛決定，很難做出痛改前非的重大且正確的改變</strong>，君不見PHP做出多少讓開發者罵到臭頭的爛決定，被罵了多少個版本才改回來，除非PHP真的改掉他那些壞毛病，不然<strong>如果想走向專業的話，我不建議學習PHP，但如果只是業餘和興趣，PHP真的是很不錯的玩具</strong></p>
<p>說他爛的同時，我也希望他能夠變得更好，但是以我過往的經驗，<strong>PHP所謂的改善，總是讓人失望加憤怒</strong>，以最有名的例子Magic quote來說，我有一次發現我的PHP程式出問題，才知道原來是新版本的PHP會自動幫你escape引號，他的出發點是好意防止SQL Injection，但是欠缺深思熟慮，他這樣做使得既有的程式碼，正確地以mysql_escape之類函數來escape特殊符號的程式，需要特地寫workaround來解決此問題，再加上這樣的特性是可以設定改變的，所以你得花更多一點心力去判斷它是否有啟動Magic quote，這是在<strong>懲罰程式設計師，討好初學者</strong>，我不知道為什麼PHP社群會做出這樣令人傻眼的更新，不可否認地這樣做確實是救到了很多不懂得過慮 SQL Injection的新手，<strong>討好了新手，打了老手巴掌，但是卻開啟了更多問題</strong>，這類的改進方式，我記得在PHP的改進過程中遇過不少，都是令人傻眼的"改善"</p>
<h2>替代的方案</h2>
<p>現在其實已經有太多新的網頁技術可以使用，不管是哪一個，都比直接寫PHP來得好，但是缺點就是入門門檻比較高，目前資源比較少，又或著在國外資源很多，但是國內中文資源很少，如果要走向專業的話，絕對值得投資，以下列出一些我所知道的解決方案</p>
<h3><a href="http://turbogears.org/">TurboGears</a></h3>
<p>集合各種Python最好的函式庫而成的網頁框架，可以說是集大成，它的特性是組件之間的藕合很鬆，所以可以換置組件，我個人就是使用TurboGears，他有一個有驚人的視訊影片，由TurboGears的作者親自示範如何在20分鐘裡寫出一個Wiki程式，有興趣可以下載來看看</p>
<p><a href="http://files.turbogears.org/video/20MinuteWiki2nd.mov">20分鐘寫Wiki影片</a></p>
<p>知名的Open source網站Sourceforge.com就是用TurboGears2寫的，可以參考這篇文章</p>
<p><a href="http://compoundthinking.com/blog/index.php/2009/07/16/turbogears-on-sourceforge/">TurboGears on Sourceforge</a></p>
<h3><a href="http://www.djangoproject.com/">Django</a></h3>
<p>不同於TurboGears的集大成，Django所有組件都是量身打造的，因此他的藕合度比較高，但是因為原本就是商業用途，所以有較多的實際商用經驗</p>
<h3><a href="http://www.rubyonrails.org.tw/">Ruby On Rails</a></h3>
<p>基於Ruby語言的網頁框架，因為我不懂Ruby，所以不太熟這款框架，但我知道網路上有高手在24小時之內在八八風災期間寫出物資需求回報的網頁程式，開發效率也相當好</p>
<h3>使用PHP的框架</h3>
<p>有人說PHP也有優秀的框架，而且用框架比語言很不公平，所以我加了這條，使用PHP的框架能提升一定程度的生產力，雖然他減清了某些負擔，但是少有框架是完全不用寫程式的，當<strong>你需要自己寫PHP的程式部份時還是得面對語言缺陷</strong>，以下是知名的PHP網頁框架</p>
<p><a href="http://www.symfony-project.org/">Symfony</a></p>
<p><a href="http://framework.zend.com/">Zend framework</a></p>
<p><a href="http://cakephp.org/">CakePHP</a></p>
<h2>成功的例子</h2>
<p>當然你聽到這些莫生的名詞，可能會懷疑這樣的東西真的可行嗎? 就像我當初的疑問一樣，但是現在已經有越來越多的網站往這些新世代的網頁以這些新的技術為基礎，或是舊的網站改用新的技術重新寫過，舉幾個我所知道以Python為語言的網站有這些</p>
<p><a href="http://plurk.com">Plurk</a></p>
<p><a href="http://youtube.com">Youtube</a></p>
<p><a href="http://sourceforge.com">Sourceforge</a></p>
<p><a href="http://reddit.com">Reddit</a></p>
<p><a href="http://justin.tv/">Justin.tv</a> (用的是<a href="http://twistedmatrix.com/trac/">Twisted</a>)</p>
<h2>最後</h2>
<p>我知道我講的這些可能聽起來很刺耳，但是確實是我所見所聞，你可以不認同我所說的，反駁我所說的，只要是理性的討論都歡迎並且尊重，請勿進行人身攻擊，還有我想知道有沒有用過現代的網頁技術，回頭去看PHP覺得是很好的，我也希望能瞭解這樣的想法</p>
<p>更新:</p>
<ul>
<li>2010/1/7 強調PHP爛在語言設計，拿掉一些太偏頗的比較(語言和框架)，和增加另兩個網站連結，以及PHP的框架，還有增加PHP腦殘設計決定和checklist的翻譯</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2010/01/06/old-php-sucks/feed/</wfw:commentRss>
		<slash:comments>48</slash:comments>
<enclosure url="http://files.turbogears.org/video/20MinuteWiki2nd.mov" length="41351154" type="video/quicktime" />
		</item>
		<item>
		<title>黑心電線</title>
		<link>http://blog.ez2learn.com/2009/12/08/suck-wire/</link>
		<comments>http://blog.ez2learn.com/2009/12/08/suck-wire/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 19:15:59 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[WTF]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=901</guid>
		<description><![CDATA[今天在忙著趕畢業專題的電子羅盤時，一直有鬼打牆的情況發生，沒多久前還運作得好好的，一下子突然停掉了，一開始我以為是麵包板上的線插壞或鬆了，花了我一整個晚上在找問題的來源，我拿著三用電錶到處量電壓，終於，最後我發現，一條USB接過來的電源線，在某個鱷魚夾還有將近5V的電壓，但經過某條線之後，電壓就有很大的機會變得很低，那條線很敏感，只要稍微扯動一下，電壓就會變很低，拉USB當電源線，是因為電子羅盤需要5V的電壓驅動，之所以會一下子能運作，一下子運作不了，就是那條線造成的，一開始我認為是接頭觸鬆掉了，於是將金屬接頭的螺斯鬆開，打算截掉後面一點的外皮，再重接上去，然而，當我把金屬接頭拿下來，用剪刀在絕緣外皮切一圈，接著轉動外皮要將它拔下來，其中一條線很容易就把皮轉下來，裡面亮晶晶的銅線露了出來，而另一條線，一轉裡面的導線就斷了，一開始我認為應該是我切深所以斷掉了，再往後面的地方截，下場也是一樣，於是我發現，那條一截就斷的線，之所以會斷是以經繡蝕得很嚴重了，我一開始認為，應該只是因為較接近終端，所以有空氣跑進去讓它生鏽了，於是再往更後面截，截了好幾次，都遇到這種生鏽的線，開始覺得不對勁，那線生鏽到粉狀的地部了，都已經切這麼後面了，絕緣外皮還好好的，沒理由線會鏽成那樣，而且比照另外一條線，是亮晶晶的狀態 而到了更後面點的地方，原本沒鏽的線生鏽了，生鏽的線那條到那裡變沒鏽了，仔細想想，銅生鏽好像是綠色的，所以那好像也不是生鏽，我開始想，這一點都不像是後來才變成這樣的，像是一開始包進去時就是這個樣子，搜尋了一下"黑心電線"，果不其然，發現大陸果然有黑心電線 湖北红旗电缆有限责任公司生产销售的"黑心"电线 情況也很類似，包廢線進去，都已經截到這麼後面了，線還是鏽的，我只能說，這百分之九十九是黑心電線，為了這條黑心電線，我浪費了整個晚上在找出問題在哪，好樣的黑心電線，就感心]]></description>
			<content:encoded><![CDATA[<p>今天在忙著趕畢業專題的電子羅盤時，一直有鬼打牆的情況發生，沒多久前還運作得好好的，一下子突然停掉了，一開始我以為是麵包板上的線插壞或鬆了，花了我一整個晚上在找問題的來源，我拿著三用電錶到處量電壓，終於，最後我發現，一條USB接過來的電源線，在某個鱷魚夾還有將近5V的電壓，但經過某條線之後，電壓就有很大的機會變得很低，那條線很敏感，只要稍微扯動一下，電壓就會變很低，拉USB當電源線，是因為電子羅盤需要5V的電壓驅動，之所以會一下子能運作，一下子運作不了，就是那條線造成的，一開始我認為是接頭觸鬆掉了，於是將金屬接頭的螺斯鬆開，打算截掉後面一點的外皮，再重接上去，然而，當我把金屬接頭拿下來，用剪刀在絕緣外皮切一圈，接著轉動外皮要將它拔下來，其中一條線很容易就把皮轉下來，裡面亮晶晶的銅線露了出來，而另一條線，一轉裡面的導線就斷了，一開始我認為應該是我切深所以斷掉了，再往後面的地方截，下場也是一樣，於是我發現，那條一截就斷的線，之所以會斷是以經繡蝕得很嚴重了，我一開始認為，應該只是因為較接近終端，所以有空氣跑進去讓它生鏽了，於是再往更後面截，截了好幾次，都遇到這種生鏽的線，開始覺得不對勁，那線生鏽到粉狀的地部了，都已經切這麼後面了，絕緣外皮還好好的，沒理由線會鏽成那樣，而且比照另外一條線，是亮晶晶的狀態</p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2009/12/IMAG0177.jpg"><img class="alignnone size-large wp-image-902" title="IMAG0177" src="http://blog.ez2learn.com/wp-content/uploads/2009/12/IMAG0177-682x1024.jpg" alt="IMAG0177" width="682" height="1024" /></a></p>
<p>而到了更後面點的地方，原本沒鏽的線生鏽了，生鏽的線那條到那裡變沒鏽了，仔細想想，銅生鏽好像是綠色的，所以那好像也不是生鏽，我開始想，這一點都不像是後來才變成這樣的，像是一開始包進去時就是這個樣子，搜尋了一下"黑心電線"，果不其然，發現大陸果然有黑心電線</p>
<h3><a href="http://s.bbs.sina.com.cn/pview-68-29221.html">湖北红旗电缆有限责任公司生产销售的"黑心"电线</a></h3>
<p>情況也很類似，包廢線進去，都已經截到這麼後面了，線還是鏽的，我只能說，這百分之九十九是黑心電線，為了這條黑心電線，我浪費了整個晚上在找出問題在哪，好樣的黑心電線，就感心</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2009/12/08/suck-wire/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>使用IE的同學開學日是16號，使用FireFox則是28號開學</title>
		<link>http://blog.ez2learn.com/2009/01/30/stupid-schedule-layout/</link>
		<comments>http://blog.ez2learn.com/2009/01/30/stupid-schedule-layout/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 07:10:32 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[WTF]]></category>
		<category><![CDATA[腦殘]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=493</guid>
		<description><![CDATA[使用IE的同學開學日是16號，使用FireFox則是28號開學 <a href="http://blog.ez2learn.com/2009/01/30/stupid-schedule-layout/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="attachment_494" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2009/01/firefox.png"><img class="size-medium wp-image-494" title="FireFox開學日" src="http://blog.ez2learn.com/wp-content/uploads/2009/01/firefox-300x234.png" alt="FireFox開學日" width="300" height="234" /></a><p class="wp-caption-text">FireFox開學日</p></div>
<div id="attachment_495" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2009/01/ie.png"><img class="size-medium wp-image-495" title="IE開學日" src="http://blog.ez2learn.com/wp-content/uploads/2009/01/ie-300x216.png" alt="IE開學日" width="300" height="216" /></a><p class="wp-caption-text">IE開學日</p></div>
<p>什麼情況會是使用IE的同學開學日是16號，使用FireFox開學日則是28號呢?</p>
<blockquote><p>IE一向都很nice的， 這其中一定有什麼誤會</p></blockquote>
<div id="attachment_496" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2009/01/firebug.png"><img class="size-medium wp-image-496" title="原始碼內容" src="http://blog.ez2learn.com/wp-content/uploads/2009/01/firebug-300x194.png" alt="原始碼內容" width="300" height="194" /></a><p class="wp-caption-text">原始碼內容</p></div>
<p>看來是用Microsoft Office輸出的網頁，做這行事曆的人可能以為Office裡面看起來齊了就好，也不弄個表格把內容分行開來，有一行字因為太長被折成兩行，MS Office也沒有用css指定不要斷開來，對Office而言產生的html也是IE看起來正確就好，嘖嘖，現在用FireFox的人寒假硬是多出好幾天，使用IE的同學抱歉啦~ 你們的寒假比使用FireFox的人少 XD</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2009/01/30/stupid-schedule-layout/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>同學的Steam帳號被俄羅斯的雜碎盜走了</title>
		<link>http://blog.ez2learn.com/2008/12/29/russian-asshole-steal-steam-account/</link>
		<comments>http://blog.ez2learn.com/2008/12/29/russian-asshole-steal-steam-account/#comments</comments>
		<pubDate>Sun, 28 Dec 2008 16:59:37 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[WTF]]></category>
		<category><![CDATA[腦殘]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=443</guid>
		<description><![CDATA[同學的Steam帳號被俄羅斯的雜碎盜走了 <a href="http://blog.ez2learn.com/2008/12/29/russian-asshole-steal-steam-account/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>我同學跟我說他收到了email說他Steam的信，要我幫他看看在寫什麼</p>
<blockquote><p>This email message confirms that your Steam account contact email address has been successfully changed.</p>
<p>We are sending this notice to ensure the privacy and security of your Steam account. If you authorized this change, no further action is necessary. If you did not authorize this change, or if you need additional help with your account, please follow this link to the</p>
<p>http://support.steampowered.com/cgi-bin/steampowered.cfg/php/enduser/std_adp.php?p_faqid=197</p>
<p>Thanks for reviewing this information and helping us to maintain the privacy and security of your account.</p></blockquote>
<p>原來是他的email被改掉了，還不是他改的，看來是被盜帳號了，我還以為只有線上遊戲的帳號有人要盜，沒想道連Steam的帳號都有人要盜= ="，雖然說沒有什麼額外的價值，不過就等於是把整帳號的遊戲全偷走</p>
<p>他改了暱稱以外還把他好友都加進來，原本的好友都被他砍了，看了一下是來自俄羅斯的雜碎</p>
<div id="attachment_444" class="wp-caption alignnone" style="width: 475px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/12/russian_asshole.png"><img class="size-full wp-image-444" title="被俄羅斯雜碎盜的Steam帳號" src="http://blog.ez2learn.com/wp-content/uploads/2008/12/russian_asshole.png" alt="被俄羅斯雜碎盜的Steam帳號" width="465" height="313" /></a><p class="wp-caption-text">被俄羅斯雜碎盜的Steam帳號</p></div>
<div id="attachment_445" class="wp-caption alignnone" style="width: 475px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/12/russian_asshole2.png"><img class="size-full wp-image-445" title="俄羅斯雜碎的好友" src="http://blog.ez2learn.com/wp-content/uploads/2008/12/russian_asshole2.png" alt="俄羅斯雜碎的好友" width="465" height="313" /></a><p class="wp-caption-text">俄羅斯雜碎的好友</p></div>
<p>不過還好留有原本的CD Key應該可以要回來</p>
<p>說到俄羅斯的雜碎，讓我想起GTA IV的Dimitri那個俄國雜碎 XD</p>
<p>話說仔細想一想那個上線的應該不是盜的人，上網找一下似乎是集團有計劃的用bot自動傳送釣魚網頁，所以看來是某個俄國的雜碎想買便宜的L4D或其它裡面的遊戲，不過他買到便宜的遊戲過一陣子就會被拿回去，他的錢也就白花了，科科，這俄羅斯雜碎死好 XD</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2008/12/29/russian-asshole-steal-steam-account/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>這年頭連垃圾廣告信都能爭眼說瞎話</title>
		<link>http://blog.ez2learn.com/2008/12/09/shame-to-spam/</link>
		<comments>http://blog.ez2learn.com/2008/12/09/shame-to-spam/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 11:27:09 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[WTF]]></category>
		<category><![CDATA[腦殘]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=376</guid>
		<description><![CDATA[我還以為只有詐騙集團才能睜眼說瞎話，沒想到這年頭連網站行銷都能這樣幹，話說我已經對垃圾信沒有什麼感覺，但是還是一樣的原則，透過垃圾信行銷的網站、產品，絕對是不屑一顧 對於垃圾信是如此，對於佯裝成系統信件、朋友信件等等的垃圾信更是如此，剛才就收到這麼一封 如果您確實未曾在瘋狂賣客crazymike購買過任何東西，沒關係，但這也很有可能是我們電腦自動挑選的通知名單有誤，這表示您是多麼的幸運才會接到我們的通知。 哇~ 好幸運喔，這擺明是把所有人當白痴是嗎? 幸運個屁，連聽都沒聽過這什麼鬼網站，為什麼會有我信箱，更不可能購什麼物，加了這段文字根本更是此地無銀三百兩，還電腦自動挑選的通知名單有誤，去你的通知名單有誤，憑空生出我的信箱，不! 應該說是去買到信箱資料庫，這程式還真神奇阿，我只能說 電腦選的麻!? 我知道阿，土豆也是電腦選的 再者，就算真的沒買過東西居然會收到訂單通知信，那更讓人覺得這網站還真可靠，事關商譽的訂單信居然能這樣亂寄，哪裡來的天兵能想到這種腦殘行銷方法，請大家唾棄不要臉的不誠實的行銷方式]]></description>
			<content:encoded><![CDATA[<p>我還以為只有詐騙集團才能睜眼說瞎話，沒想到這年頭連網站行銷都能這樣幹，話說我已經對垃圾信沒有什麼感覺，但是還是一樣的原則，透過垃圾信行銷的網站、產品，絕對是不屑一顧</p>
<p>對於垃圾信是如此，對於佯裝成系統信件、朋友信件等等的垃圾信更是如此，剛才就收到這麼一封</p>
<div id="attachment_377" class="wp-caption alignnone" style="width: 282px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/12/shame_spam.png"><img class="size-medium wp-image-377" title="不要臉的廣告信" src="http://blog.ez2learn.com/wp-content/uploads/2008/12/shame_spam-272x300.png" alt="不要臉的廣告信" width="272" height="300" /></a><p class="wp-caption-text">不要臉的廣告信</p></div>
<blockquote><p><span style="letter-spacing: 2px; line-height: 25px; font-size: x-small; font-family: Verdana; color: #000000;"> 如果您確實未曾在瘋狂賣客crazymike購買過任何東西，沒關係，但這也很有可能是我們電腦自動挑選的通知名單有誤，這表示您是多麼的幸運才會接到我們的通知。</span></p></blockquote>
<p>哇~ 好幸運喔，這擺明是把所有人當白痴是嗎? 幸運個屁，連聽都沒聽過這什麼鬼網站，為什麼會有我信箱，更不可能購什麼物，加了這段文字根本更是此地無銀三百兩，還電腦自動挑選的通知名單有誤，去你的通知名單有誤，憑空生出我的信箱，不! 應該說是去買到信箱資料庫，這程式還真神奇阿，我只能說</p>
<blockquote><p>電腦選的麻!? 我知道阿，土豆也是電腦選的</p></blockquote>
<p>再者，就算真的沒買過東西居然會收到訂單通知信，那更讓人覺得這網站還真可靠，事關商譽的訂單信居然能這樣亂寄，哪裡來的天兵能想到這種腦殘行銷方法，請大家唾棄不要臉的不誠實的行銷方式</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2008/12/09/shame-to-spam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WTF : 好萊塢版七龍珠</title>
		<link>http://blog.ez2learn.com/2008/10/06/wtf-hollywood-dragon-ball/</link>
		<comments>http://blog.ez2learn.com/2008/10/06/wtf-hollywood-dragon-ball/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 03:10:49 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[WTF]]></category>
		<category><![CDATA[XD]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=117</guid>
		<description><![CDATA[Wow! WTF? 好萊塢版的七龍珠，好酷! 我笑了 XD 讓我想起台灣版的七龍珠 XD]]></description>
			<content:encoded><![CDATA[<div id="attachment_118" class="wp-caption alignnone" style="width: 135px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/10/dragonballmovie.jpg"><img class="size-medium wp-image-118" title="好萊塢版七龍珠" src="http://blog.ez2learn.com/wp-content/uploads/2008/10/dragonballmovie-125x300.jpg" alt="好萊塢版七龍珠" width="125" height="300" /></a><p class="wp-caption-text">好萊塢版七龍珠</p></div>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="470" height="353" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="wmode" value="window" /><param name="allowFullScreen" value="true" /><param name="src" value="http://video.rutube.ru/bef6e6ce47487f189b7e159bdb02cde8" /><embed type="application/x-shockwave-flash" width="470" height="353" src="http://video.rutube.ru/bef6e6ce47487f189b7e159bdb02cde8" allowfullscreen="true" wmode="window"></embed></object></p>
<p>Wow! WTF? <a href="http://dragonball-trailer.blogspot.com/">好萊塢版的七龍珠</a>，好酷! 我笑了 XD</p>
<p>讓我想起台灣版的七龍珠 XD</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2008/10/06/wtf-hollywood-dragon-ball/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

