<?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-10724994</id><updated>2011-11-28T08:29:06.908+08:00</updated><category term='瀏覽器'/><category term='新聞評論'/><category term='Heuristic'/><category term='程式'/><category term='MacOSX'/><category term='轉貼'/><category term='tun'/><category term='nVidia'/><category term='告訴你系列'/><category term='Firmware/BIOS update'/><category term='工作'/><category term='VirtualBox'/><category term='Opera'/><category term='Kuso'/><category term='藍牙'/><category term='網路'/><category term='天馬行空'/><category term='Driver'/><category term='學校'/><category term='印象深刻的夢'/><category term='Apple'/><category term='家用機'/><category term='好東西'/><category term='Chromium'/><category term='PHP'/><category term='Algorithm'/><category term='GRUB'/><category term='系統調校'/><category term='Chrasis'/><category term='Firefox'/><category term='AI'/><category term='Cross-Compiler'/><category term='Linux'/><category term='tap'/><category term='tuntap'/><category term='Orz'/><category term='嘴砲轟'/><category term='Bluetooth'/><category term='RFID'/><category term='Ubuntu'/><title type='text'>Palatis's Kafooster</title><subtitle type='html'>碎碎唸... 碎碎唸... 碎碎唸... 碎碎唸... 碎碎唸... 碎碎唸...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default?start-index=101&amp;max-results=100'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>141</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10724994.post-7564730366713861686</id><published>2011-06-08T19:15:00.000+08:00</published><updated>2011-06-08T19:15:54.807+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='嘴砲轟'/><category scheme='http://www.blogger.com/atom/ns#' term='新聞評論'/><title type='text'>核能發電，該還是不該？</title><content type='html'>&lt;p&gt;今天看到的新聞：&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://tw.news.yahoo.com/article/url/d/a/110608/4/2swyl.html"&gt;小英：再執政 十三年後終止核能發電&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;中國時報【朱真楷／台北報導】&lt;/p&gt;
  &lt;p&gt;提出「二○二五非核家園計畫」的民進黨主席蔡英文，昨日上午抵達德國考察綠能產業。她表示，德國政府已宣布二○二二年前關閉所有核電廠的政策，證明要達成非核目標的關鍵，在於決策者的決心，所以只要民進黨取得政權，就有信心用十三年的時間終止核能發電。&lt;/p&gt;
  &lt;p&gt;蔡英文在柏林時間六日上午抵達德國後，在執政黨基民黨國會議員費雪陪同下參訪柏林車站等相關綠能建設。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;不要核能發電可以，可是要有替代的發電方案。&lt;/p&gt;
&lt;p&gt;我國（中華民國）電能來源中，核能佔了 19.3% 左右（資料來源：&lt;a href="http://www.taipower.com.tw/"&gt;台灣電力公司&lt;/a&gt; - &lt;a href="http://www.taipower.com.tw/left_bar/jing_ying_ji_xiao/year_production.htm"&gt;年產銷快訊&lt;/a&gt;）。所以說，如果沒有核能發電，這些電勢必要以其他方式來產生。&lt;/p&gt;
&lt;p&gt;如果平攤到其他種種發電方法中，意味火力發電（國營 53.4% + 民營 18.7% = 72%）必須增加 19.3% * 72% = 13.9%。&lt;/p&gt;
&lt;p&gt;再看到總用電量 1933.1 億度，也就是說火力發電必須增加 1933.1 * 13.9% = 268.7 億度。&lt;/p&gt;
&lt;p&gt;如果這些發電改用：
  &lt;ul&gt;
    &lt;li&gt;燃煤：產生 268.7 億 kw/h * 1.020 kg/(kw/h) = 274.074 億 kg 的二氧化碳&lt;/li&gt;
    &lt;li&gt;燃油：產生 268.7 億 kw/h * 0.758 kg/(kw/h) = 203.675 億 kg 的二氧化碳&lt;/li&gt;
    &lt;li&gt;天然氣：產生 268.7 億 kw/h * 0.515 kg/(kw/h) = 138.38 億 kg 的二氧化碳&lt;/li&gt;
    &lt;li&gt;核能（原本）：產生 268.7 億 kw/h * 0.0661 kg/(kw/h) = 17.761 億 kg 的二氧化碳&lt;/li&gt;
  &lt;/ul&gt;
p.s. 我忘記在哪裡看到這些數據，請知道的人幫我補... &amp;gt;_&amp;lt;&lt;/p&gt;
&lt;p&gt;然後又會跑到令一個惡性循環：二氧化碳升高 = 溫度升高、溫度升高 = 冷氣用量增加、冷氣用量增加 = 用電量增加、用電量增加 = 發電量增加、發電量增加 = 二氧化碳升高...&lt;/p&gt;
&lt;p&gt;====== 分隔線 === 分隔線 === 分隔線 ======&lt;/p&gt;
&lt;p&gt;話又說回來，如果那些反核的從電廠關掉開始就完全不要用電（除了搬去山裡與世隔絕以外，還有別的辦法嗎？），那就關吧！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-7564730366713861686?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/7564730366713861686/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=7564730366713861686' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/7564730366713861686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/7564730366713861686'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2011/06/blog-post.html' title='核能發電，該還是不該？'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-3953537501477089547</id><published>2011-05-30T21:06:00.000+08:00</published><updated>2011-05-30T21:06:41.920+08:00</updated><title type='text'>小叮噹風扇 vs. 數位電視訊號</title><content type='html'>&lt;p&gt;記者知識不足，才會把這件事當成很嚴重的事情：&lt;a href="http://tw.news.yahoo.com/article/url/d/a/110529/8/2se1p.html"&gt;http://tw.news.yahoo.com/article/url/d/a/110529/8/2se1p.html&lt;/a&gt;。懂原理的就會知道，這只是沒什麼大不了的數位信號干擾。&lt;/p&gt;

&lt;p&gt;台灣使用的數位電視訊號是 1080p/1080i 的 &lt;a href="http://en.wikipedia.org/wiki/DVB-T"&gt;DVB-T&lt;/a&gt;，DVB-T 會將數位訊號用 &lt;a href="http://en.wikipedia.org/wiki/Orthogonal_frequency-division_multiplexing"&gt;OFDM（正交分頻多工）&lt;/a&gt;打散分佈至 4kHz 或 1kHz 的訊號中。&lt;/p&gt;

&lt;p&gt;也就是說，當你有個外部頻率為 4k 或 1k 的因數的訊源時（例如 2Hz、4Hz、5Hz、8Hz、10Hz、20Hz、25Hz、40Hz、50Hz、100Hz、125Hz、200Hz、250Hz、500Hz、800Hz、1000Hz、2000Hz、4000Hz...），就有可能會干擾到數位電視訊號。而超商的小叮噹風扇很有可能剛好就是這個轉速（例如剛好是 1000rpm），所以會產生這些頻率的雜訊干擾數位電視訊號。&lt;/p&gt;

&lt;p&gt;而影像資料壓縮通常是以 Block 為單位，所以他解壓縮的時候會有某些 block 解壓失敗，導致下一個 block 被提前或延後。反應到影像上就是部份畫面看起來像在左右抖動。&lt;/p&gt;

&lt;p&gt;而吹風機為了吹出足夠大的風量，轉速通常都很高，可以到 10000 ~ 20000 rpm，不容易干擾 1kHz 或 4kHz 的數位訊號。如果你拿轉速相當於前述 Hz 的風扇靠近數位電視訊號接收器，應該也會出現類似的干擾。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-3953537501477089547?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/3953537501477089547/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=3953537501477089547' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/3953537501477089547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/3953537501477089547'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2011/05/vs.html' title='小叮噹風扇 vs. 數位電視訊號'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-981715278882900151</id><published>2011-03-27T18:58:00.001+08:00</published><updated>2011-03-27T19:00:28.083+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><title type='text'>給一個日期，怎樣知道那天星期幾？</title><content type='html'>&lt;p&gt;嗯... 這真是個神奇的函式 XD~&lt;/p&gt;
&lt;pre&gt;int dayofweek(int y, int m, int d)  /* 0 = Sunday */
{
  static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
  y -= m &lt; 3;
  return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}&lt;/pre&gt;
&lt;p&gt;&lt;i&gt;-- by Tomohiko Sakamoto.&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-981715278882900151?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/981715278882900151/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=981715278882900151' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/981715278882900151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/981715278882900151'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2011/03/blog-post.html' title='給一個日期，怎樣知道那天星期幾？'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-1020579245114471811</id><published>2011-03-25T21:53:00.153+08:00</published><updated>2011-03-29T04:17:12.132+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='瀏覽器'/><category scheme='http://www.blogger.com/atom/ns#' term='Chromium'/><category scheme='http://www.blogger.com/atom/ns#' term='Opera'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox 4.0 初步使用心得</title><content type='html'>&lt;p&gt;做了一些 benchmark。我的機器：
  &lt;ul&gt;
    &lt;li&gt;Intel Core-i7 720QM：performance cpufreq governor&lt;/li&gt;
    &lt;li&gt;Transcend JM1333KSN-4G x 2：在測試時還剩下約 1GB 空間（扣掉 Buffer 則剩 3.5GB）&lt;/li&gt;
    &lt;li&gt;Linux 2.6.38：有開 per-session auto-group（CONFIG_SCHED_AUTOGROUP=y）&lt;/li&gt;
  &lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;參賽的瀏覽器有：
&lt;ul&gt;
  &lt;li&gt;Chromium 11.0.696.16：&lt;br /&gt;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.16 Safari/534.24&lt;/li&gt;
  &lt;li&gt;Firefox 4.0：&lt;br /&gt;Mozilla/5.0 (X11; Linux x86_64; rv:2.0) Gecko/20110323 Firefox/4.0&lt;/li&gt;
  &lt;li&gt;Opera 11.10 beta：&lt;br /&gt;Opera/9.80 (X11; Linux x86_64; U; zh-tw) Presto/2.8.119 Version/11.10&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;測試 0：
&lt;ul&gt;
  &lt;li&gt;
    &lt;a href="http://acid3.acidtests.org/"&gt;Acid3&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;Chromium：100/100&lt;/li&gt;
      &lt;li&gt;Firefox：97/100&lt;/li&gt;
      &lt;li&gt;Opera：100/100&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    冷啟動速度：
    &lt;ul&gt;
      &lt;li&gt;Chromium：4.16s（8.33 次）&lt;/li&gt;
      &lt;li&gt;Firefox：1.5s（3 次）&lt;/li&gt;
      &lt;li&gt;Opera：5.16s（10.33 次）&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;冷啟動速度是執行「sync ; echo 3 &gt; /proc/sys/vm/drop_caches」以後啟動瀏覽器到視窗出現，游標閃爍的次數（每次 0.5s)。測了三次，精度不是很準確... 看看就好！&lt;/p&gt;

&lt;p&gt;測試 1 - CPU 0%（幾乎沒有其他負載）：
&lt;ul&gt;
  &lt;li&gt;
    &lt;a href="http://v8.googlecode.com/svn/data/benchmarks/v6/run.html"&gt;V8 Benchmark Suite&lt;/a&gt;
    &lt;table&gt;
      &lt;thead&gt;
        &lt;tr style="text-align: center; font-weight: bold;"&gt;
          &lt;td&gt;瀏覽器&lt;/td&gt;
          &lt;td&gt;Score&lt;/td&gt;
          &lt;td&gt;Richards&lt;/td&gt;
          &lt;td&gt;DeltaBlue&lt;/td&gt;
          &lt;td&gt;Crypto&lt;/td&gt;
          &lt;td&gt;RayTrace&lt;/td&gt;
          &lt;td&gt;EarleyBoyer&lt;/td&gt;
          &lt;td&gt;RegExp&lt;/td&gt;
          &lt;td&gt;Splay&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;/tbody&gt;
        &lt;tr&gt;
          &lt;td style="text-align: center;"&gt;Chromium&lt;/td&gt;
          &lt;td style="text-align: right; font-weight: bold;"&gt;4380&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;3671&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;4333&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;4685&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;4874&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;13809&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;1952&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;3157&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style="text-align: center;"&gt;Firefox&lt;/td&gt;
          &lt;td style="text-align: right; font-weight: bold;"&gt;3583&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;5454&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;3954&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;5745&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;2787&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;3505&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;1312&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;4775&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style="text-align: center;"&gt;Opera&lt;/td&gt;
          &lt;td style="text-align: right; font-weight: bold;"&gt;3091&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;2606&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;2063&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;3115&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;4593&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;4109&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;1447&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;5901&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href="http://www.webkit.org/perf/sunspider/sunspider.html"&gt;Sunspider 0.9.1&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;Chromium: &lt;a href="http://www.webkit.org/perf/sunspider-0.9.1/sunspider-0.9.1/results.html?%7B%22v%22:%20%22sunspider-0.9.1%22,%20%223d-cube%22:%5B25,24,22,22,21,21,21,22,22,23%5D,%223d-morph%22:%5B17,17,17,17,18,17,20,19,17,16%5D,%223d-raytrace%22:%5B17,19,21,18,17,18,18,21,18,17%5D,%22access-binary-trees%22:%5B2,2,2,2,2,2,3,2,2,2%5D,%22access-fannkuch%22:%5B20,20,21,20,20,19,20,20,19,19%5D,%22access-nbody%22:%5B15,15,14,14,15,15,15,14,17,13%5D,%22access-nsieve%22:%5B6,7,5,7,6,7,6,6,7,5%5D,%22bitops-3bit-bits-in-byte%22:%5B3,3,3,3,2,3,3,2,4,3%5D,%22bitops-bits-in-byte%22:%5B9,9,9,9,9,11,11,9,10,9%5D,%22bitops-bitwise-and%22:%5B12,13,13,13,12,13,14,14,13,12%5D,%22bitops-nsieve-bits%22:%5B10,11,11,11,11,11,12,10,11,10%5D,%22controlflow-recursive%22:%5B3,4,3,3,4,4,4,3,4,3%5D,%22crypto-aes%22:%5B11,12,11,12,11,11,12,11,12,11%5D,%22crypto-md5%22:%5B4,5,5,4,5,5,6,5,5,5%5D,%22crypto-sha1%22:%5B3,4,4,3,4,5,3,4,5,3%5D,%22date-format-tofte%22:%5B17,17,17,18,18,20,17,18,20,19%5D,%22date-format-xparb%22:%5B20,20,21,20,24,22,21,23,27,21%5D,%22math-cordic%22:%5B15,16,14,15,15,14,16,15,17,15%5D,%22math-partial-sums%22:%5B20,21,19,19,20,20,18,19,20,20%5D,%22math-spectral-norm%22:%5B8,8,8,8,10,7,6,8,8,8%5D,%22regexp-dna%22:%5B13,13,15,14,15,13,14,13,13,14%5D,%22string-base64%22:%5B7,8,8,7,8,7,7,8,7,7%5D,%22string-fasta%22:%5B18,17,19,17,19,17,19,18,18,18%5D,%22string-tagcloud%22:%5B26,21,22,22,22,23,23,21,24,21%5D,%22string-unpack-code%22:%5B29,34,29,34,29,30,29,30,30,30%5D,%22string-validate-input%22:%5B17,20,17,17,18,17,18,18,18,18%5D%7D"&gt;353.2ms +/- 1.5%&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;Firefox: &lt;a href="http://www.webkit.org/perf/sunspider-0.9.1/sunspider-0.9.1/results.html?%7B%22v%22:%20%22sunspider-0.9.1%22,%20%223d-cube%22:%5B20,20,20,20,20,25,20,21,24,22%5D,%223d-morph%22:%5B7,7,6,6,7,9,6,6,7,7%5D,%223d-raytrace%22:%5B18,19,21,19,19,23,19,19,21,24%5D,%22access-binary-trees%22:%5B6,6,6,6,6,6,5,6,7,6%5D,%22access-fannkuch%22:%5B24,23,22,22,22,22,25,24,23,23%5D,%22access-nbody%22:%5B6,7,7,6,6,7,6,8,7,6%5D,%22access-nsieve%22:%5B9,9,9,9,10,9,9,10,9,9%5D,%22bitops-3bit-bits-in-byte%22:%5B1,1,1,1,1,1,1,1,1,1%5D,%22bitops-bits-in-byte%22:%5B11,10,11,9,12,10,10,10,10,10%5D,%22bitops-bitwise-and%22:%5B2,2,2,2,2,2,3,2,2,2%5D,%22bitops-nsieve-bits%22:%5B6,6,7,6,7,6,6,5,6,5%5D,%22controlflow-recursive%22:%5B4,4,3,4,4,4,4,3,3,4%5D,%22crypto-aes%22:%5B12,21,12,12,13,12,12,12,12,12%5D,%22crypto-md5%22:%5B6,8,5,5,6,5,5,5,5,5%5D,%22crypto-sha1%22:%5B4,7,4,4,4,6,4,4,4,5%5D,%22date-format-tofte%22:%5B23,25,24,25,24,27,31,24,25,23%5D,%22date-format-xparb%22:%5B11,12,14,13,12,11,12,12,13,12%5D,%22math-cordic%22:%5B6,7,6,7,7,7,6,6,6,6%5D,%22math-partial-sums%22:%5B12,12,13,11,12,12,12,12,13,12%5D,%22math-spectral-norm%22:%5B8,8,8,8,8,8,8,8,13,7%5D,%22regexp-dna%22:%5B17,14,14,14,15,15,14,14,14,15%5D,%22string-base64%22:%5B5,5,4,4,4,5,5,5,5,5%5D,%22string-fasta%22:%5B14,15,14,13,14,14,13,13,13,14%5D,%22string-tagcloud%22:%5B21,20,19,20,19,20,20,20,20,20%5D,%22string-unpack-code%22:%5B22,22,22,21,22,22,22,21,21,21%5D,%22string-validate-input%22:%5B8,8,9,8,8,8,7,8,7,9%5D%7D"&gt;285.9ms +/- 1.8%&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Opera: &lt;a href="http://www.webkit.org/perf/sunspider-0.9.1/sunspider-0.9.1/results.html?%7B%22v%22:%20%22sunspider-0.9.1%22,%20%223d-cube%22:%5B12,13,16,12,12,15,18,13,12,12%5D,%223d-morph%22:%5B16,17,20,17,22,17,17,18,17,17%5D,%223d-raytrace%22:%5B16,15,14,17,19,21,18,14,14,21%5D,%22access-binary-trees%22:%5B5,5,3,4,3,3,3,3,3,3%5D,%22access-fannkuch%22:%5B24,23,27,25,26,26,30,30,22,23%5D,%22access-nbody%22:%5B10,11,11,16,10,11,14,10,11,16%5D,%22access-nsieve%22:%5B9,10,10,12,11,11,12,8,8,8%5D,%22bitops-3bit-bits-in-byte%22:%5B2,2,2,2,2,2,2,1,1,2%5D,%22bitops-bits-in-byte%22:%5B4,4,4,4,7,9,5,3,4,7%5D,%22bitops-bitwise-and%22:%5B2,2,2,2,2,3,2,2,4,2%5D,%22bitops-nsieve-bits%22:%5B11,9,9,11,18,14,10,10,18,15%5D,%22controlflow-recursive%22:%5B4,3,7,5,4,4,6,4,4,10%5D,%22crypto-aes%22:%5B19,19,20,17,13,20,19,14,21,17%5D,%22crypto-md5%22:%5B4,5,5,6,6,10,4,5,5,5%5D,%22crypto-sha1%22:%5B3,4,7,4,8,8,5,4,3,4%5D,%22date-format-tofte%22:%5B17,17,16,16,17,21,17,17,17,16%5D,%22date-format-xparb%22:%5B23,26,22,20,25,30,21,22,21,20%5D,%22math-cordic%22:%5B7,7,7,7,10,7,11,8,7,7%5D,%22math-partial-sums%22:%5B15,16,16,16,16,25,16,26,16,15%5D,%22math-spectral-norm%22:%5B6,5,6,10,12,6,9,6,6,6%5D,%22regexp-dna%22:%5B13,12,15,13,21,13,14,14,13,13%5D,%22string-base64%22:%5B15,10,14,18,17,14,18,13,11,10%5D,%22string-fasta%22:%5B20,21,23,23,26,21,23,18,20,19%5D,%22string-tagcloud%22:%5B35,29,35,29,29,34,31,33,29,29%5D,%22string-unpack-code%22:%5B25,21,21,28,25,25,30,23,29,21%5D,%22string-validate-input%22:%5B20,23,19,23,22,23,18,18,19,19%5D%7D"&gt;353.2ms +/- 4.6%&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    大頁面測試：
    &lt;ul&gt;
      &lt;li&gt;Chromium：0.247s&lt;/li&gt;
      &lt;li&gt;Firefox：2.083s&lt;/li&gt;
      &lt;li&gt;Opera：2.679s&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;測試 2 - CPU 100%（make kernel, -j16）：
&lt;ul&gt;
  &lt;li&gt;
    &lt;a href="http://v8.googlecode.com/svn/data/benchmarks/v6/run.html"&gt;V8 Benchmark Suite&lt;/a&gt;
    &lt;table&gt;
      &lt;thead&gt;
        &lt;tr style="text-align: center; font-weight: bold;"&gt;
          &lt;td&gt;瀏覽器&lt;/td&gt;
          &lt;td&gt;Score&lt;/td&gt;
          &lt;td&gt;Richards&lt;/td&gt;
          &lt;td&gt;DeltaBlue&lt;/td&gt;
          &lt;td&gt;Crypto&lt;/td&gt;
          &lt;td&gt;RayTrace&lt;/td&gt;
          &lt;td&gt;EarleyBoyer&lt;/td&gt;
          &lt;td&gt;RegExp&lt;/td&gt;
          &lt;td&gt;Splay&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;/tbody&gt;
        &lt;tr&gt; 
          &lt;td style="text-align: center;"&gt;Chromium&lt;/td&gt;
          &lt;td style="text-align: right; font-weight: bold;"&gt;1532&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;1488&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;1683&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;1767&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;1264&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;4597&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;708&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;1087&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style="text-align: center;"&gt;Firefox&lt;/td&gt;
          &lt;td style="text-align: right; font-weight: bold;"&gt;1189&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;2079&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;1585&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;1805&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;985&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;1171&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;602&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;812&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style="text-align: center;"&gt;Opera&lt;/td&gt;
          &lt;td style="text-align: right; font-weight: bold;"&gt;1594&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;1224&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;1012&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;1738&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;2532&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;1903&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;640&lt;/td&gt;
          &lt;td style="text-align: right;"&gt;3936&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href="http://www.webkit.org/perf/sunspider/sunspider.html"&gt;Sunspider 0.9.1&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;Chromium: &lt;a href="http://www.webkit.org/perf/sunspider-0.9.1/sunspider-0.9.1/results.html?%7B%22v%22:%20%22sunspider-0.9.1%22,%20%223d-cube%22:%5B81,184,84,63,25,24,24,58,74,95%5D,%223d-morph%22:%5B49,45,56,36,18,16,17,41,33,41%5D,%223d-raytrace%22:%5B99,49,96,40,19,19,19,49,47,145%5D,%22access-binary-trees%22:%5B15,5,5,6,2,2,3,5,5,4%5D,%22access-fannkuch%22:%5B123,86,83,46,20,20,22,43,41,28%5D,%22access-nbody%22:%5B26,101,75,29,15,20,21,34,70,160%5D,%22access-nsieve%22:%5B13,12,26,21,6,7,10,13,16,11%5D,%22bitops-3bit-bits-in-byte%22:%5B6,5,6,6,3,3,4,6,6,6%5D,%22bitops-bits-in-byte%22:%5B14,36,14,14,8,9,12,15,14,11%5D,%22bitops-bitwise-and%22:%5B33,29,34,23,12,13,15,27,32,24%5D,%22bitops-nsieve-bits%22:%5B20,25,29,13,11,11,13,14,20,13%5D,%22controlflow-recursive%22:%5B6,7,16,4,3,3,5,16,6,6%5D,%22crypto-aes%22:%5B27,26,29,27,11,13,14,43,27,27%5D,%22crypto-md5%22:%5B11,12,15,10,5,5,4,16,10,14%5D,%22crypto-sha1%22:%5B12,20,8,17,4,4,3,11,10,8%5D,%22date-format-tofte%22:%5B78,55,55,49,20,20,36,59,46,55%5D,%22date-format-xparb%22:%5B129,55,55,66,21,25,75,74,43,62%5D,%22math-cordic%22:%5B70,35,34,32,17,20,34,31,31,36%5D,%22math-partial-sums%22:%5B117,49,51,38,21,26,45,41,42,50%5D,%22math-spectral-norm%22:%5B19,23,20,16,8,10,20,42,17,16%5D,%22regexp-dna%22:%5B33,27,30,25,14,18,34,37,25,29%5D,%22string-base64%22:%5B18,16,16,14,7,9,19,15,12,15%5D,%22string-fasta%22:%5B53,41,45,35,18,24,37,42,42,37%5D,%22string-tagcloud%22:%5B70,73,71,67,28,23,85,59,67,60%5D,%22string-unpack-code%22:%5B81,78,111,78,32,30,64,142,76,76%5D,%22string-validate-input%22:%5B50,46,55,49,17,18,66,48,45,44%5D%7D"&gt;870.5ms +/- 25.2%&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;Firefox: &lt;a href="http://www.webkit.org/perf/sunspider-0.9.1/sunspider-0.9.1/results.html?%7B%22v%22:%20%22sunspider-0.9.1%22,%20%223d-cube%22:%5B71,58,51,35,55,75,22,57,35,80%5D,%223d-morph%22:%5B17,16,18,18,15,17,10,22,17,47%5D,%223d-raytrace%22:%5B53,48,52,55,45,32,27,80,215,54%5D,%22access-binary-trees%22:%5B14,14,14,13,12,17,7,37,14,14%5D,%22access-fannkuch%22:%5B56,58,86,43,46,62,35,119,61,154%5D,%22access-nbody%22:%5B17,36,27,17,17,18,9,18,16,47%5D,%22access-nsieve%22:%5B23,21,40,20,19,21,12,32,29,54%5D,%22bitops-3bit-bits-in-byte%22:%5B2,3,2,2,2,2,1,2,3,2%5D,%22bitops-bits-in-byte%22:%5B23,23,24,23,26,16,21,29,26,43%5D,%22bitops-bitwise-and%22:%5B5,5,5,5,6,4,3,6,5,9%5D,%22bitops-nsieve-bits%22:%5B15,16,21,34,15,10,10,20,16,19%5D,%22controlflow-recursive%22:%5B9,9,10,10,10,7,5,13,9,9%5D,%22crypto-aes%22:%5B33,32,34,33,32,23,13,58,30,32%5D,%22crypto-md5%22:%5B23,13,14,13,12,13,5,23,27,13%5D,%22crypto-sha1%22:%5B14,11,11,10,10,9,3,10,10,10%5D,%22date-format-tofte%22:%5B98,81,63,76,73,88,25,125,76,73%5D,%22date-format-xparb%22:%5B42,34,30,34,35,36,12,48,53,34%5D,%22math-cordic%22:%5B17,21,11,18,16,12,7,27,19,18%5D,%22math-partial-sums%22:%5B26,55,26,25,25,25,12,57,26,25%5D,%22math-spectral-norm%22:%5B18,26,18,18,18,19,8,18,17,24%5D,%22regexp-dna%22:%5B30,40,43,31,32,25,18,31,34,35%5D,%22string-base64%22:%5B15,15,18,12,11,8,6,11,12,24%5D,%22string-fasta%22:%5B65,51,40,37,37,22,28,35,37,60%5D,%22string-tagcloud%22:%5B108,84,56,57,89,43,32,52,57,60%5D,%22string-unpack-code%22:%5B86,96,74,59,58,59,34,80,90,58%5D,%22string-validate-input%22:%5B36,18,21,18,18,19,12,18,20,18%5D%7D"&gt;811.6ms +/- 17.3%&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Opera: &lt;a href="http://www.webkit.org/perf/sunspider-0.9.1/sunspider-0.9.1/results.html?%7B%22v%22:%20%22sunspider-0.9.1%22,%20%223d-cube%22:%5B45,20,34,57,40,42,20,33,44,44%5D,%223d-morph%22:%5B81,27,43,59,40,69,34,40,57,28%5D,%223d-raytrace%22:%5B39,35,39,55,57,36,50,37,48,29%5D,%22access-binary-trees%22:%5B17,11,6,12,7,6,6,6,21,7%5D,%22access-fannkuch%22:%5B40,51,74,51,91,43,79,60,66,49%5D,%22access-nbody%22:%5B23,26,30,32,31,31,25,22,36,23%5D,%22access-nsieve%22:%5B15,14,17,30,14,15,26,20,14,12%5D,%22bitops-3bit-bits-in-byte%22:%5B4,4,9,4,2,4,4,4,4,3%5D,%22bitops-bits-in-byte%22:%5B9,8,12,8,8,8,5,8,8,5%5D,%22bitops-bitwise-and%22:%5B4,4,5,4,3,4,3,4,4,4%5D,%22bitops-nsieve-bits%22:%5B33,19,27,20,19,34,17,21,27,19%5D,%22controlflow-recursive%22:%5B6,11,10,22,9,13,8,9,10,12%5D,%22crypto-aes%22:%5B24,24,47,59,32,36,25,33,22,40%5D,%22crypto-md5%22:%5B9,11,16,34,8,13,13,11,9,14%5D,%22crypto-sha1%22:%5B9,5,12,9,18,8,7,5,8,9%5D,%22date-format-tofte%22:%5B47,47,44,44,46,48,46,71,46,48%5D,%22date-format-xparb%22:%5B60,58,94,63,37,56,58,58,53,58%5D,%22math-cordic%22:%5B22,15,23,20,18,18,15,15,19,18%5D,%22math-partial-sums%22:%5B36,33,37,37,37,30,34,28,34,39%5D,%22math-spectral-norm%22:%5B10,12,11,13,10,10,11,10,11,11%5D,%22regexp-dna%22:%5B28,29,43,36,29,44,36,27,30,26%5D,%22string-base64%22:%5B27,24,29,34,27,40,25,25,36,18%5D,%22string-fasta%22:%5B45,50,45,48,46,42,46,49,47,41%5D,%22string-tagcloud%22:%5B84,107,55,76,78,58,108,57,76,53%5D,%22string-unpack-code%22:%5B52,58,54,61,68,59,52,46,61,36%5D,%22string-validate-input%22:%5B44,48,62,57,50,53,49,44,65,52%5D%7D"&gt;813.1ms +/- 6.3%&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    大頁面測試：
    &lt;ul&gt;
      &lt;li&gt;Chromium：4.357s&lt;/li&gt;
      &lt;li&gt;Firefox：4.812s&lt;/li&gt;
      &lt;li&gt;Opera：5.524s&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;其中「大頁面測試」一項，是先重整三次（確認檔案讀進了 filesystem buffer），然後再重整三次的成績平均。Chromium 快的很神奇 @@&lt;/p&gt;
&lt;p&gt;為什麼會有在 CPU 100% 下的測試呢？因為我使用 &lt;a href="http://www.gentoo.org/"&gt;Gentoo Linux&lt;/a&gt;，常常會編譯東西。可是在編譯的同時，也會一邊上網、看信... 等等。所以在 CPU 負載高的情況下使用瀏覽器是很常有的事情。&lt;/p&gt;
&lt;p&gt;跑 Sunspider 的時候，Chromium 會更新每個跑完的測試結果，可是 Firefox 完全不會顯示東西（這算是偷吃步嗎？），Opera 會顯示，但是中間的藍色方框內會閃爍。&lt;/p&gt;
&lt;p&gt;對我來說，瀏覽器的速度（網頁顯示速度、分頁切換速度、UI 反應速度）很重要。我無法忍受切換分頁或點個書籤要等一兩秒才看得到東西... 所以「使用心得」主要是速度測試。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;附錄 - 大頁面測試使用的網頁：&lt;/p&gt;
&lt;pre&gt;&amp;lt;html&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;head&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;A very big page!&amp;lt;/title&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script language="javascript"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var startTime = new Date();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function showElapsedTime() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var endTime = new Date();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var elapsedTime = Number(endTime - startTime);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("results").innerHTML =
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"took " + Number(elapsedTime / 1000) + " sec";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/script&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/head&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;body onload="showElapsedTime();"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p id="results"&amp;gt;calculating...&amp;lt;/p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p&amp;gt;這裡是很長很長的段落&amp;lt;/p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p&amp;gt;重複 n 次&amp;lt;/p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p&amp;gt;導致這個檔案長大到 10MB...&amp;lt;/p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-1020579245114471811?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/1020579245114471811/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=1020579245114471811' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1020579245114471811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1020579245114471811'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2011/03/firefox-40.html' title='Firefox 4.0 初步使用心得'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-9167220664228449582</id><published>2011-03-23T23:08:00.010+08:00</published><updated>2011-03-29T04:17:00.060+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><title type='text'>C/C++: i = i++ + ++i;</title><content type='html'>&lt;p&gt;這樣的一段 code，結果應該是什麼呢？&lt;/p&gt;

&lt;p&gt;答案是「&lt;b&gt;不一定&lt;/b&gt;」！&lt;/p&gt;

&lt;p&gt;在 C/C++ 之中，operator + 並不是 sequence point。例如，運算式「f() + g()」之中，是 f() 先執行還是 g() 先執行，順序是不一定的（跟編譯器實做有關）。所以「i++ + ++i」之中，有可能 i++ 先作，亦有可能 ++i 先作。&lt;/p&gt;

&lt;p&gt;並且，如「i=i++;」這樣的式子之中，i 被指派兩次。「i=」的指派動作可能發生在「i++」的指派動作之前、之後、或之間。&lt;/p&gt;

&lt;p&gt;所以，&lt;b&gt;為了節省 debug 耗用的腦細胞，任何程式設計師都不應該寫出這樣的程式碼。&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;====== 囧rz [分隔線] 囧rz ======&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;額外一提，「std::cout &amp;lt;&amp;lt; f() &amp;lt;&amp;lt; g();」這樣的程式碼之中，f() 與 g() 的執行順序也是不一定的。這是由於 C++ 的 operator overload 視為 function call。而 C++ 的 member function 實際上會被轉換成多傳入一個 this 引數的 global function。&lt;/p&gt;

&lt;p&gt;例如（以下程式並非合法的 C++ code，只是為了解釋程式的行為）：&lt;/p&gt;
&lt;blockquote&gt;
std::cout &lt;&lt; f() &lt;&lt; g(); // 1&lt;br /&gt;
可能被轉成&lt;br /&gt;
std::cout.operator &lt;&lt; (f()).operator &lt;&lt; (g()); // 2&lt;br /&gt;
再被轉成&lt;br /&gt;
std::ostream::operator &lt;&lt; (std::ostream::operator&lt;&lt; (std::cout, f()), g()); // 3
&lt;/blockquote&gt;
&lt;p&gt;在上述 3 之中，是「std::ostream::operator&lt;&lt; (std::cout, f())」先執行還是「g()」先執行，順序也是不一定的。&lt;/p&gt;
&lt;p&gt;所以，若 f() 與 g() 裡面都有輸出，則有可能先看到 g() 的輸出才看到 f() 的輸出，或是剛好相反。例如：&lt;/p&gt;
&lt;blockquote&gt;
// 可能性 1:&lt;br /&gt;
&lt;i&gt;tmp1&lt;/i&gt; = f(); // 列印 f() 裡面的輸出&lt;br /&gt;
std::cout &lt;&lt; &lt;i&gt;tmp1&lt;/i&gt;; // 列印 f() 的結果&lt;br /&gt;
&lt;i&gt;tmp2&lt;/i&gt; = g(); // 列印 g() 裡面的輸出&lt;br /&gt;
std::cout &lt;&lt; &lt;i&gt;tmp2&lt;/i&gt;; // 列印 g() 的結果&lt;br /&gt;
// 可能性 2:&lt;br /&gt;
&lt;i&gt;tmp1&lt;/i&gt; = g(); // 列印 g() 裡面的輸出&lt;br /&gt;
&lt;i&gt;tmp2&lt;/i&gt; = f(); // 列印 f() 裡面的輸出&lt;br /&gt;
std::cout &lt;&lt; &lt;i&gt;tmp2&lt;/i&gt;; // 列印 f() 的結果&lt;br /&gt;
std::cout &lt;&lt; &lt;i&gt;tmp1&lt;/i&gt;; // 列印 g() 的結果
&lt;/blockquote&gt;
&lt;p&gt;延伸閱讀：&lt;a href="http://en.wikipedia.org/wiki/Sequence_point"&gt;http://en.wikipedia.org/wiki/Sequence_point&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-9167220664228449582?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/9167220664228449582/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=9167220664228449582' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/9167220664228449582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/9167220664228449582'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2011/03/cc-i-i-i.html' title='C/C++: i = i++ + ++i;'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-1701859714655071223</id><published>2011-02-05T16:28:00.002+08:00</published><updated>2011-02-05T17:20:00.242+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='家用機'/><category scheme='http://www.blogger.com/atom/ns#' term='好東西'/><title type='text'>Need More SpeedRAM</title><content type='html'>&lt;p&gt;最近 4G 的 SO-DIMM DDR3 模組的價錢降低到令人很想買（約 2G 價錢的 1.4 倍），於是我就買了兩條回來插。&lt;/p&gt;
&lt;p&gt;因為我手上這台 Dell Studio 1557，CPU 是 Intel Core-i7 720qm，有八個邏輯核心，所以通常我在 make 東西的時候都是 -j16 下去跑。可是編譯一些 C++ 的東西（例如 Google Chromium 瀏覽器）的時候，常常一個 gcc process 就吃掉 500MB 的 RAM，導致有 4GB 的 RAM 都會 Thrashing。尤其是開了一些 Chromium、Firefox、Thunderbird 之類的東西的時候，瀏覽器還有機會被 OOM Killer 殺掉... = =&lt;/p&gt;
&lt;p&gt;現在都不會了！真好！&lt;/p&gt;
&lt;p&gt;桌機的 4GB 的 DDR3 價錢也降低到很 affordable 了，也許改天可以來買四條 4G 拼一台 16GB 記憶體的桌機 XD~ 噢！桌機的硬碟也快滿了！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-1701859714655071223?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/1701859714655071223/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=1701859714655071223' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1701859714655071223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1701859714655071223'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2011/02/need-more-speed-ram.html' title='Need More &lt;span style=&quot;text-decoration: line-through;&quot;&gt;Speed&lt;/span&gt;&lt;b&gt;RAM&lt;/b&gt;'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-1890919654515714132</id><published>2011-02-03T23:53:00.002+08:00</published><updated>2011-02-03T23:57:19.448+08:00</updated><title type='text'>台灣的女人比美國的豬還不如</title><content type='html'>&lt;p&gt;不是要貶低台灣的女性，請先看完這篇新聞：&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://www.nownews.com/2011/02/02/334-2686690.htm"&gt;美國男子強姦母豬致豬生病　可能獲刑120年(2011/02/02 12:34)&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;綜合報導 | 國際中心 | NOWNews 今日新聞網&lt;/p&gt;
  &lt;p&gt;一名美國農場主人日前發現自己的豬行為異常，因擔心其生病請來獸醫為其診治。檢查的結果卻出人意料，這些豬曾受到性侵犯，農場主人隨即報警。&lt;/p&gt;
  &lt;p&gt;根據美國密西西比格林伍德警方公佈的消息，獸醫表示這些母豬患有嚴重的陰道炎，並且斷定是由性行為「感染」的。除陰道炎外，其中一些母豬的陰道內還存在傷口，懷疑是暴力性行為所致。警方受農場主人委託，在農場內安裝監視器，希望查出這些母豬是如何遭到性侵犯？&lt;/p&gt;
  &lt;p&gt;隨後，農場附近一名52歲的男子出現在鏡頭裏，這名男子名叫安德魯•李•納什。監視器畫面顯示，納什在鏡頭下做出了反常的動作，在豬群後面脫下了內褲。 納什的整個作案過程持續了很長時間。犯罪嫌疑人納什被以12條罪名起訴，如果罪名成立，他恐將面臨120年徒刑。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在中華民國刑法中有關妨害性自主罪, 最高只有十年有期徒刑。這不是擺明了中華民國女性的性自主權，比美國的豬還不如嗎？&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-1890919654515714132?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/1890919654515714132/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=1890919654515714132' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1890919654515714132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1890919654515714132'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2011/02/blog-post.html' title='台灣的女人比美國的豬還不如'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-8576096101683548706</id><published>2011-02-03T23:01:00.000+08:00</published><updated>2011-02-03T23:01:25.646+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GRUB'/><category scheme='http://www.blogger.com/atom/ns#' term='Firmware/BIOS update'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Updating Seagate Harddisk Firmware under Linux</title><content type='html'>&lt;p&gt;Actually this is not really about Linux. It's just about when you have no windows and want to update the firmware of the HDD with the official utility.&lt;/p&gt;
&lt;p&gt;This article is actually about using the loopback support from &lt;a href="http://www.gnu.org/software/grub/"&gt;grub2&lt;/a&gt; to load the official iso, and the &lt;a href="http://syslinux.zytor.com/wiki/index.php/MEMDISK"&gt;memdisk&lt;/a&gt; tool from &lt;a href="http://syslinux.zytor.com/wiki/index.php/The_Syslinux_Project"&gt;syslinux&lt;/a&gt; to load the disk image inside the iso.&lt;/p&gt;
&lt;p&gt;Follow these steps below:
  &lt;ol&gt;
    &lt;li&gt;download the official Seagate firmware update ISO image (for example, &lt;a href="http://www.seagate.com/staticfiles/support/downloads/firmware/MomentusXT-ALL-SD24.iso"&gt;MomentusXT-ALL-SD24.iso&lt;/a&gt;)&lt;/li&gt;
    &lt;li&gt;put the iso image under /boot (or anywhere else that grub2 can access)&lt;/li&gt;
    &lt;li&gt;get syslinux, we actually only need the memdisk tool. put that in /boot/memdisk (or somewhere else that grub2 can access)&lt;/li&gt;
    &lt;li&gt;reboot into grub2 shell&lt;/li&gt;
      &lt;ul&gt;
        &lt;li&gt;upon reboot, keep clicking ESC like crazy, this should bring up the boot entry selection screen&lt;/li&gt;
        &lt;li&gt;when you see that screen, hit 'c' to enter the grub shell (the command prompt)&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;inside the grub shell, run these commands:
      &lt;ul&gt;
        &lt;li&gt;loopback loop /MomentusXL-ALL-SD24.iso&lt;ul&gt;&lt;li&gt;(change this to the path of the iso image)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
        &lt;li&gt;linux16 /memdisk&lt;ul&gt;&lt;li&gt;(change this to the path of the memdisk)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
        &lt;li&gt;initrd16 (loop)/AN-SD24.ima
          &lt;ul&gt;
            &lt;li&gt;(this may vary, just look for the file with a suffix .ima)&lt;/li&gt;
            &lt;li&gt;(if you don't know the filename, `ls (loop)/` to get a list)&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;boot&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;now you're inside the official firmware update tool, follow the on-screen instructions.&lt;/li&gt;
  &lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-8576096101683548706?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/8576096101683548706/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=8576096101683548706' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/8576096101683548706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/8576096101683548706'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2011/02/updating-seagate-harddisk-firmware.html' title='Updating Seagate Harddisk Firmware under Linux'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-6943892732259574115</id><published>2010-12-31T11:20:00.000+08:00</published><updated>2010-12-31T11:20:47.671+08:00</updated><title type='text'>使用習慣真的不好改變</title><content type='html'>&lt;p&gt;我在好幾年前（可能有五、六年吧），在幫家人（我媽、我妹、我外公... 等等）整理電腦（例如解毒、重灌...）的時候，都會推薦他們不要使用容易被裝一些哩哩叩叩東西的 &lt;a href="http://www.microsoft.com/windows/internet-explorer/default.aspx"&gt;Microsoft Internet Explorer&lt;/a&gt;，而改用不容易中毒又有一堆擴充套件可以用的 &lt;a href="http://moztw.org/"&gt;Mozilla Firefox&lt;/a&gt;，那個時候 Firefox 還是 2.x 還是 3.x 吧...&lt;/p&gt;

&lt;p&gt;在不斷洗腦的過程中，我全家人都逐漸改用 Firefox 作為平常使用的網頁瀏覽器。&lt;/p&gt;

&lt;p&gt;在 Google 推出 &lt;a href="http://www.google.com/chrome/"&gt;Google Chrome&lt;/a&gt; 瀏覽器以後，由於的確瀏覽速度更快，於是我又嘗試推薦他們改用 Chrome。尤其是我妹使用小筆電，又是跟我一樣會同時開個幾十個分頁的人，Firefox 很明顯的比 Chrome 慢很多。&lt;/p&gt;

&lt;p&gt;但是，我發現在嘗試說服了一年以後，他們還是在用 Firefox......&lt;/p&gt;

&lt;p&gt;使用習慣真的不好改呀！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-6943892732259574115?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/6943892732259574115/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=6943892732259574115' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/6943892732259574115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/6943892732259574115'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2010/12/blog-post_31.html' title='使用習慣真的不好改變'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-6785938279009530508</id><published>2010-12-20T09:19:00.000+08:00</published><updated>2010-12-20T09:19:16.468+08:00</updated><title type='text'>我發現，我的 blog 有一年沒更新 = =</title><content type='html'>&lt;p&gt;剛才 po 了「&lt;a href="http://palatis.blogspot.com/2010/12/blog-post.html"&gt;這年頭，依法行政也不行...&lt;/a&gt;」以後，才發現上一篇「&lt;a href="http://palatis.blogspot.com/2009/12/cross-compiling-made-easy-with-gentoo.html"&gt;Cross-Compiling Made Easy - with Gentoo Linux&lt;/a&gt;」是一年多前 po 的。&lt;/p&gt;

&lt;p&gt;2010/12/20 - 2009/12/06 = 379 天...&lt;/p&gt;

&lt;p&gt;有夠混... XD&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-6785938279009530508?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/6785938279009530508/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=6785938279009530508' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/6785938279009530508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/6785938279009530508'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2010/12/blog.html' title='我發現，我的 blog 有一年沒更新 = ='/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-5583646048897231235</id><published>2010-12-20T09:00:00.003+08:00</published><updated>2010-12-20T09:14:05.809+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='嘴砲轟'/><category scheme='http://www.blogger.com/atom/ns#' term='新聞評論'/><title type='text'>這年頭，依法行政也不行...</title><content type='html'>&lt;p&gt;最近有一則新聞，是說一位財經法律系的博士研究生撿到某貧婦兩萬多元，在報案以後，要求貧婦要付三成作為報酬。根據&lt;a href="http://law.moj.gov.tw/LawClass/LawSingle.aspx?Pcode=J0070017&amp;FLNO=9"&gt;著作權法第九條&lt;/a&gt;，在這裡全文引用：&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;【何柏均、李姝姮、方佳怡╱台北報導】&lt;/p&gt;
&lt;p&gt;台北縣一名獨自扶養子女的婦人昨領取2萬1千元生活費，卻不慎將裝有手機、金錢的包包遺失，她趕緊撥打自己手機，一名女子接電話後表示會送到警局；婦人原想包紅包答謝對方，未料對方自稱是法律系畢業，要求十分之三報酬、6300元，婦人雖苦苦哀求「能不能拿少一點？」但對方堅持拿6千元，在旁協調的警察看了不禁搖頭：「現在的人眼中只有錢嗎？」&lt;br /&gt;
遺失包包的李姓女子（44歲）昨向《蘋果》投訴，她從事會計工作，幾乎是她獨力扶養念大學一年級的女兒及高中的兒子，為方便照顧子女，選擇在家接案、擔任SOHO族，平均月收入3萬多元。她昨天傍晚騎乘機車去接兒子放學，並領取2萬1千元準備支付水電等雜支，在行經土城市裕民路、捷運海山站附近，掛機車前座吊掛勾的包包突然掉落，遭國立高雄大學財經法律系畢業的潘姓女子（28歲）拾獲。&lt;/p&gt;

&lt;p&gt;&lt;b&gt;撿錢者稱法律系畢業&lt;/b&gt;&lt;br /&gt;
李婦指出，由於遺失的包包裡，除2萬1千元生活費，還有證件、手機、住家鑰匙等財物，立刻以兒子手機撥打自己手機門號，潘女接聽後指稱拾獲其包包，約她於廣福派出所交付，她原本慶幸包包失而復得，欲包紅包答謝，未料潘女自稱是法律系畢業，主動要求6300元、十分之三報酬。&lt;br /&gt;
李婦不懂法律，以為自己聽錯了，雙方在警局碰面後，她向潘女求情，說自己一個人撫養小孩，「能不能不要拿3成？」未料潘女堅持一毛不能少，警員聽了也幫忙求情說：「一定要要求這麼多嗎？不要這樣啦！」但潘女卻冷漠地回說：「我去問學校老師可不可以這麼做。」警員聽了也不敢再幫腔，李婦聽了也十分心酸。警方指出，《民法》如此規定，他們只能道德勸說，無權干涉。&lt;/p&gt;

&lt;p&gt;&lt;b&gt;「教育到底是怎麼了」&lt;/b&gt;&lt;br /&gt;
經半個多小時談判，因李婦沒百元鈔，最後潘女才願妥協只拿6千元，李婦心想，「一個孩子每月生活費是6千元，但『遺失』6千元，總比遺失2萬1千元好」，於是給了潘女6千元並致謝，潘女拿了錢頭也不回就離開，讓一旁協調的警察也直搖頭嘆氣。&lt;br /&gt;
李婦感嘆說，她一直教導自己小孩要拾金不昧，潘女自稱是法律系畢業，卻沒顧及情理，「現在的教育到底是怎麼了？」她認為法律系教授除教導法律，也應該教導一些道德觀念。&lt;br /&gt;
對此，教育專家吳娟瑜感慨地說：「懂得物歸原主代表有良知，但主動說出口要錢，這態度就有失敦厚。」她表示，在人際關係裡，相互扶持、相互關心、善良友愛，才是正確價值觀，但接連發生大學生撿到錢向失主索報酬事件，顯示社會越來越功利、太以錢為重，她給年輕人建議：「不管失主有沒有給酬賞，都不應該主動開口，才是禮貌的表現。」&lt;/p&gt;

&lt;p&gt;&lt;b&gt;留置權不應用於弱勢&lt;/b&gt;&lt;br /&gt;
台大社工系副教授王雲東表示，隨著社會變遷，不可諱言功利比率上升、道德下降，學生容易著眼功利色彩，只問行使留置權違法與否，而忽略此舉是否「道德」。他說，社會功利色彩濃厚當下，若是留置權不再，可能拾獲者更不願意把錢交出來，因此，他認為是否有可能在法律設計上能夠周詳，如留置權是否不要用在弱勢人身上等。&lt;br /&gt;
律師廖芳萱表示，只要撿到錢的人有通知失主，或向警察機關報案，就不算侵占，可向失主主張取得一定報酬及留置權，根據《民法》第805條規定，拾得人要在6個月內請求報酬十分之三，若對方未給報酬，拾得人就對遺失物有留置權。&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;然後，以下是&lt;a href="http://law.moj.gov.tw/LawClass/LawSingle.aspx?Pcode=B0000001&amp;FLNO=805"&gt;民法第八百零五條&lt;/a&gt;的全文：
&lt;blockquote&gt;
&lt;p&gt;遺失物自通知或最後招領之日起六個月內，有受領權之人認領時，拾得人、招領人、警察或自治機關，於通知、招領及保管之費用受償後，應將其物返還之。&lt;br /&gt;
有受領權之人認領遺失物時，拾得人得請求報酬。但不得超過其物財產上價值十分之三；其不具有財產上價值者，拾得人亦得請求相當之報酬。前項報酬請求權，因六個月間不行使而消滅。&lt;br /&gt;
第一項費用之支出者或得請求報酬之拾得人，在其費用或報酬未受清償前，就該遺失物有留置權；其權利人有數人時，遺失物占有人視為為全體權利人占有。&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;首先，我們想想看為什麼民法中要保障拾得人得請求報酬的權力？試想，當一個人撿到東西的時候，他有兩個選擇：還給失主或據為己有。若他還給失主，則失主可以取回遺失物；若他據為己有，則失主 100% 不能取回遺失物。驅動拾得人將遺失物還給失主的誘因之中，消極的誘因是若據為己有則犯&lt;a href="http://law.moj.gov.tw/LawClass/LawSingle.aspx?Pcode=C0000001&amp;FLNO=337"&gt;刑法第三百三十七條&lt;/a&gt;中的侵占遺失物罪，雖然罰的錢不多，但會因此留下前科；積極的誘因則是民法第八百零五條中，有關請求報酬與留置遺失物的權力：&lt;ul&gt;
  &lt;li&gt;據為己有：可以得到全部的遺失物，但是有被抓到判刑的風險&lt;/li&gt;
  &lt;li&gt;還給失主：可以得到至多遺失物 30% 價值的金額，完全沒有風險&lt;/li&gt;
&lt;/ul&gt;
若沒有第二條，雖然有風險，可是當報酬（遺失物的價值）夠高的時候，可能會有人鋌而走險。反正要是真的被抓到也只是被罰伍佰元。但是若有了第二條，因為完全沒有風險就可以取得至多 30% 的報酬，所以有更多人會願意把遺失物拿去還。&lt;/p&gt;

&lt;p&gt;首先，遺失東西完全是失主的責任。這個東西對於失主來說越重要，那麼遺失的後果也應該越嚴重。遺失物之於失主的重要性，與拾得人完全無關，拾得人也無法影響該物品之於失主的重要性。這些道理有點腦子的人應該都懂。所以，當這個物品的重要性越高，對於失主來說的價值也就越高，那麼失主本應付出更多的報酬才能取回遺失物。&lt;/p&gt;

&lt;p&gt;拾得人有要求至多三成報酬的權利，而實際要求多少報酬則看拾得人的心情。若失主覺得報酬不合理，可以跟對方「殺價」。如果一直無法達成共識，最後也可以上法院請法官來決定合理的報酬該是多少。&lt;/p&gt;

&lt;p&gt;在本例中，婦人弄丟的是下個月的生活費。如果沒有這筆錢，接下來的生活會過得很艱難。所以對於該婦人來說，該遺失物是相當重要的。若想要及時取回，則應該付出較高的報酬。而對於拾得人來說，把遺失物「賣回」給失主是一樁「獨門生意」。在商言商，本應將利潤最大化。要求最高的報酬合情合理。我認為沒有理由要求拾得人無償將遺失物還給失主，就像我認為沒有理由要求商人以進貨價格出售貨品一樣。我也認為沒有理由在失主付出報酬之前，就能將遺失物取回，就好像我不認為買方在付錢以前，就能獲得商品的所有權。&lt;/p&gt;

&lt;p&gt;如果說要用商業競爭法來審判潘女也不合理，因為潘女並不是靠「撿遺失物還給失主再要求報酬」這向業務來賺錢的。&lt;/p&gt;

&lt;p&gt;法律不外乎人情，為了避免拾得人直接侵占遺失物，民法保障請求至多三成報酬與留置的權力，是相當合乎人情的。掉了東西能找回來就該是燒高香了，願意把東西還給失主的拾得人更是佛心來的，怎麼能不多給他幾成報酬呢？&lt;/p&gt;

&lt;p&gt;反倒是刑法第三百三十七條的罰金少的很不合理，應該也改成至多遺失物價值三成的專科罰金才對。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-5583646048897231235?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/5583646048897231235/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=5583646048897231235' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/5583646048897231235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/5583646048897231235'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2010/12/blog-post.html' title='這年頭，依法行政也不行...'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-5418190418214309651</id><published>2009-12-06T05:32:00.002+08:00</published><updated>2009-12-06T09:55:17.149+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Cross-Compiler'/><title type='text'>Cross-Compiling Made Easy - with Gentoo Linux</title><content type='html'>&lt;p&gt;用 Gentoo 最開心的地方，就是它非常的 developer friendly。&lt;/p&gt;
&lt;h3&gt;交叉工具鍊 - Cross-Toolchain&lt;/h3&gt;
&lt;p&gt;個人認為這個翻譯很糟糕... 不過要在 Gentoo 下要生出一個可用的 cross-compiler，只需要兩行指令：&lt;/p&gt;
&lt;code&gt;$ sudo emerge crossdev&lt;br /&gt;$ sudo crossdev -t ARCH-VENDOR-OS-LIBC&lt;/code&gt;
&lt;p&gt;請將 ARCH-VENDOR-OS-LIBC 取代成對應的軟硬體設置，具體請參考 `crossdev -t help`。&lt;/p&gt;
&lt;p&gt;不過在這之前，最好先有個本機上的 PORTDIR_OVERLAY. 不然 crossdev 會建立一些檔案根目錄在 PORTDIR_OVERLAY 裡面找到的第一個目錄下。您可以用以下指令直接修改 /etc/make.conf（注意單引號跟雙引號）：&lt;/p&gt;
&lt;code&gt;$ sudo bash -c 'echo PORTDIR_OVERLAY=\"/path/to/overlay \${PORTDIR_OVERLAY}\" &gt;&gt; /etc/make.conf'&lt;/code&gt;
&lt;p&gt;雖然要等一段時間，不過過程可是全自動的！&lt;/p&gt;
&lt;p&gt;做完以後，就會得到一整排的工具了。例如 ARCH-VENDOR-OS-LIBC-{gcc,g++,as,ld,strip,...} 等等。&lt;/p&gt;
&lt;h3&gt;目標檔案系統 - Target Filesystem&lt;/h3&gt;
&lt;p&gt;基本上也是三個指令，不過要等更久...&lt;/p&gt;
&lt;code&gt;$ sudo emerge crossdev-wrappers&lt;br /&gt;$ sudo emerge-wrapper --init&lt;br /&gt;emerge-ARCH-VENDOR-OS-LIBC system -v&lt;/code&gt;
&lt;p&gt;然後系統就會出現在 /usr/ARCH-VENDOR-OS-LIBC 目錄下了。注意喔，千萬別把它移走！即使移走也要作個 symlink 回來，不然 cross-emerge 會找不到路徑。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-5418190418214309651?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/5418190418214309651/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=5418190418214309651' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/5418190418214309651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/5418190418214309651'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2009/12/cross-compiling-made-easy-with-gentoo.html' title='Cross-Compiling Made Easy - with Gentoo Linux'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-8976229466962647995</id><published>2009-12-04T04:39:00.002+08:00</published><updated>2009-12-04T05:17:32.359+08:00</updated><title type='text'>接觸不良</title><content type='html'>&lt;p&gt;由於憂鬱症的關係，我從大約四個月前開始服用 &lt;a href="http://www.effexorxr.com/effexor-xr-treatment.aspx"&gt;惠氏速悅持續性膠囊（Effexor XR）&lt;/a&gt;，其主成分為&lt;a href="http://en.wikipedia.org/wiki/Venlafaxine"&gt;Venlafaxine&lt;/a&gt;。醫師開給我的處方劑量，由一開始的每日一顆，逐步增加到目前的每日三顆。&lt;/p&gt;
&lt;p&gt;藥本身還算有用，下面做成清單不是為了賣弄我知道 html 的 &amp;lt;ul&amp;gt; 與 &amp;lt;li&amp;gt; 標籤，純粹只是我討厭在一長段文字裡面敘述這種明明做成清單就可以一目了然、寫成一大段就看得不清不楚的概念：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;每日 75mg：30% 療效&lt;/li&gt;
  &lt;li&gt;每日 150mg：50% 療效&lt;/li&gt;
  &lt;li&gt;每日 225mg：70% 療效&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這裡的「療效」指的是，我自認與&lt;b&gt;正常沒有神經病的人&lt;/b&gt;相比的相似程度 - 之於我也就是可以在&lt;span style="border-bottom: dashed 1px #cc0000;" title="例如 - 「每週一至週五上午九點至下午五點」或「每個月第一個禮拜天」"&gt;固定的時間&lt;/span&gt;做&lt;span style="border-bottom: dashed 1px #cc0000;" title="例如 - 上班或上課"&gt;固定的事情&lt;/span&gt;，以及不會莫名其妙就想些&lt;span style="border-bottom: dashed 1px #cc0000;" title="為什麼我明明這麼糟糕，卻總是沒有人來殺了我？"&gt;雜七雜八事情&lt;/span&gt;的能力。&lt;/p&gt;
&lt;p&gt;但是... 雖然醫生有給我開連續處方籤，但是你不能期待一個神經病會自己去拿藥來吃是吧？所以每隔一個月左右，我總會有幾天想吃藥卻沒藥吃的時候（例如現在 XD）。&lt;/p&gt;
&lt;p&gt;服用高劑量卻突然「斷糧」的結果，是會有突然停藥的&lt;b&gt;強大&lt;/b&gt;副作用 @@ 感覺就好像是類比電視突然被突波干擾，畫面瞬間跳掉又回來那樣。可是這種狀況發生在你的視覺、聽覺、觸覺上。&lt;/p&gt;
&lt;p&gt;唔...「為什麼你不去拿藥吃就好了呢？」&lt;/p&gt;
&lt;center&gt;&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/fWWbHevl_wI&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=zh_TW&amp;feature=player_embedded&amp;fs=1"&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/fWWbHevl_wI&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=zh_TW&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;/center&gt;
&lt;hr /&gt;
&lt;p&gt;btw，照這個比例來講我吃五顆就會變成&lt;b&gt;超人&lt;/b&gt;了是吧？&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-8976229466962647995?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/8976229466962647995/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=8976229466962647995' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/8976229466962647995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/8976229466962647995'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2009/12/blog-post.html' title='接觸不良'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-5601069391790563854</id><published>2009-11-26T07:19:00.002+08:00</published><updated>2009-11-26T07:32:03.377+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Driver'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='工作'/><title type='text'>rtc-davinci-evm for dm6446 on linux-davinci.git</title><content type='html'>&lt;h1&gt;中文版&lt;/h1&gt;
&lt;p&gt;從 2.6.27-davinci1 開始，由於引進了新的 i2c framework，導致 dm6446evm 上許多走 msp430 的週邊都不能用了，例如 rtc-davinci-evm 與 IR receiver 等等。到今天 2.6.32 都快 release 了，還是沒有人把 driver port 過去...&lt;/p&gt;
&lt;p&gt;沒辦法，公司產品需要，所以咧... 只好自己動手啦！（這也是 Open Source 社群最有趣的地方！）&lt;/p&gt;
&lt;p&gt;悲慘的是，寫好 driver、測試成功以後，居然 linux-davinci 的 mailing-list 不給我寄 @@ 所以只好先放在&lt;a href="http://iworldcom.3322.org/gitphp/index.php?p=dvsdk-dm6446.git&amp;a=blob&amp;h=0958d2d809bec3e7100df022db75ef2f844a2a17&amp;hb=05566601be3e90f96615954220c5dcc0a0bcad32&amp;f=kernel/0002-RTC-DAVINCI-port-rtc-davinci-evm-from-2.6.18_pro500.patch"&gt;公司的 git repository&lt;/a&gt; 上啦。不過這個網址只是暫時的，也許過一陣子會改...&lt;/p&gt;
&lt;h1&gt;English Version&lt;/h1&gt;
&lt;p&gt;Start from 2.6.27-davinci1, linux introduced the new i2c framework, which causes many peripherals of the msp430 chip on dm6446evm stop working, such as rtc-davinci-evm and the IR receiver. As for today, although the 2.6.32 is about to get released, but the driver is still stays unusable...&lt;/p&gt;
&lt;p&gt;Too bad, my company just uses dm6446 in our product, which I just have to port them by my own! (Which is the major fun for an Open Source community!)&lt;/p&gt;
&lt;p&gt;But what bothers me is that, after I successfully wrote the driver, and verified it's working great, I cannot submit it on the linux-davinci mailing-list due to some unknown error (used to be able to send a mail there...) @@ so i just have to put the files on &lt;a href="http://iworldcom.3322.org/gitphp/index.php?p=dvsdk-dm6446.git&amp;a=blob&amp;h=0958d2d809bec3e7100df022db75ef2f844a2a17&amp;hb=05566601be3e90f96615954220c5dcc0a0bcad32&amp;f=kernel/0002-RTC-DAVINCI-port-rtc-davinci-evm-from-2.6.18_pro500.patch"&gt;my company's local git server&lt;/a&gt;. However this is a temporary domain name, it may or may not be changed later, anyway.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-5601069391790563854?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/5601069391790563854/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=5601069391790563854' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/5601069391790563854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/5601069391790563854'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2009/11/rtc-davinci-evm-for-dm6446-on-linux.html' title='rtc-davinci-evm for dm6446 on linux-davinci.git'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-918218691777944170</id><published>2009-09-16T20:08:00.004+08:00</published><updated>2009-09-16T20:22:02.679+08:00</updated><title type='text'>Calm down, please. My heart!</title><content type='html'>&lt;p&gt;If sorry is all you gonna say, I've heard enough.&lt;/p&gt;

&lt;p&gt;Yes, like you can never do nothing for me.&lt;br /&gt;
Damn me.&lt;br /&gt;
Yes, like you just never willing to do nothing for me.&lt;br /&gt;
Damn me, once again.&lt;/p&gt;

&lt;p&gt;You'll never have no idea how much you ruined my life.&lt;br /&gt;
You'll never have no idea how much you messed up my mind.&lt;/p&gt;

&lt;p&gt;How can you be so mean?&lt;br /&gt;
How can you be so selfish?&lt;br /&gt;
How can you be so fucked up?&lt;br /&gt;
Why are you bothering my heart whenever I finally got some calm and peace?&lt;br /&gt;
Why can't you just tell me that you don't even wanna give a shit about me at all?&lt;/p&gt;

&lt;p&gt;Why do I still love you so damn much?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-918218691777944170?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/918218691777944170/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=918218691777944170' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/918218691777944170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/918218691777944170'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2009/09/calm-down-please-my-heart.html' title='Calm down, please. My heart!'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-1524576189433720646</id><published>2009-08-31T10:28:00.005+08:00</published><updated>2009-08-31T11:08:13.049+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='學校'/><category scheme='http://www.blogger.com/atom/ns#' term='RFID'/><title type='text'>救災順利！成功救活四名專題做不出來的學弟！</title><content type='html'>&lt;p&gt;我大學時代的專題老師，今年叫學弟們做 ARM Linux + RFID 相關的專題，主要是用來管理冰箱裡面的東西的保存期限的。&lt;/p&gt;
&lt;p&gt;可是呢，這群學弟...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;「ARM 是什麼？可以吃嗎？」&lt;br /&gt;「Linux 我們不太會耶！」&lt;br /&gt;「RFID Reader 只有 Windows driver (還是 VB.Net 寫的) 耶，可以拿去 Linux 上編嗎？」&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;所以，不知道他們從哪裡找到我，突然來問我要怎麼辦。&lt;/p&gt;
&lt;p&gt;我想說，既然是以前的專題老師，要是這組學弟做不出來或做的不好，他也很丟臉... 而且順便也想看看 RFID 在 Linux 上到底會不會動，所以就決定下去台中一趟幫他們看看。&lt;/p&gt;
&lt;p&gt;不看還好，一看之下才發現，他們使用的 ARM 是 s3c2410 配上一套有夠舊的 Linux（kernel 是 2.4.x......），可是使用的 &lt;a href="http://www.summitco.com.tw/"&gt;SUMMIT&lt;/a&gt; &lt;a href="http://www.summitco.com.tw/reader-1-1.php"&gt;U-Reader&lt;/a&gt; 在我的機器上倒是抓的到也有 driver，只是沒有 user-space tool 去 access 它而已。所以我乾脆就叫他們說，先在 PC Linux 上做，然後把移植到 arm 上當成一個「願景」。盡量使用嵌入式系統上容易找到的軟體（如 boa），如果真的要移植的話也比較方便。&lt;/p&gt;
&lt;p&gt;SUMMIT U-Reader 其實是一個 pc210x 的 USB-to-RS232 晶片，加上他們自己家的 &lt;a href="http://www.summitco.com.tw/reader-1-7.php"&gt;HF 讀卡模組&lt;/a&gt;（使用 RS232 介面，Windows 的 VB.Net 程式也是使用 Serial subsystem 去 access）。既然如此，事情就簡單啦！我只要弄個 serial 程式去操作它就可以了！&lt;/p&gt;
&lt;p&gt;我目前幫他們寫到可以抓到卡號，讀取以及寫入 RFID Block 就要靠他們自己了。以下是 example code（BSD License！）：&lt;/p&gt;
&lt;code&gt;#include&amp;nbsp;&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include&amp;nbsp;&amp;lt;string.h&amp;gt;&lt;br /&gt;
#include&amp;nbsp;&amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include&amp;nbsp;&amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
#include&amp;nbsp;&amp;lt;errno.h&amp;gt;&lt;br /&gt;
#include&amp;nbsp;&amp;lt;termios.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include&amp;nbsp;&amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define&amp;nbsp;TTYDEVICE&amp;nbsp;"/dev/ttyUSB0"&lt;br /&gt;
#define&amp;nbsp;BAUD&amp;nbsp;&amp;nbsp;B19200&lt;br /&gt;
&lt;br /&gt;
int&amp;nbsp;open_port(void)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;int&amp;nbsp;fd&amp;nbsp;=&amp;nbsp;open(TTYDEVICE,&amp;nbsp;O_RDWR&amp;nbsp;|&amp;nbsp;O_NOCTTY&amp;nbsp;|&amp;nbsp;O_NDELAY);&lt;br /&gt;
&amp;nbsp;if&amp;nbsp;(fd&amp;nbsp;==&amp;nbsp;-1)&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;perror("open_port:&amp;nbsp;Unable&amp;nbsp;to&amp;nbsp;open&amp;nbsp;"&amp;nbsp;TTYDEVICE);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;return&amp;nbsp;fd;&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;fcntl(fd,&amp;nbsp;F_SETFL,&amp;nbsp;0);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;//&amp;nbsp;port&amp;nbsp;settings&lt;br /&gt;
&amp;nbsp;struct&amp;nbsp;termios&amp;nbsp;options;&lt;br /&gt;
&amp;nbsp;tcgetattr(fd,&amp;nbsp;&amp;options);&lt;br /&gt;
&amp;nbsp;cfsetispeed(&amp;options,&amp;nbsp;BAUD);&lt;br /&gt;
&amp;nbsp;cfsetospeed(&amp;options,&amp;nbsp;BAUD);&lt;br /&gt;
&amp;nbsp;options.c_cflag&amp;nbsp;&amp;nbsp;|=&amp;nbsp;(CLOCAL&amp;nbsp;|&amp;nbsp;CREAD);&lt;br /&gt;
&amp;nbsp;options.c_lflag&amp;nbsp;&amp;nbsp;&amp;=&amp;nbsp;~(ICANON&amp;nbsp;|&amp;nbsp;ECHO&amp;nbsp;|&amp;nbsp;ECHOE&amp;nbsp;|&amp;nbsp;ISIG);&lt;br /&gt;
&amp;nbsp;options.c_oflag&amp;nbsp;&amp;nbsp;&amp;=&amp;nbsp;~OPOST;&lt;br /&gt;
&amp;nbsp;options.c_iflag&amp;nbsp;&amp;nbsp;|=&amp;nbsp;(INPCK&amp;nbsp;|&amp;nbsp;ISTRIP)&amp;nbsp;&amp;&amp;nbsp;~(IXON&amp;nbsp;|&amp;nbsp;IXOFF&amp;nbsp;|&amp;nbsp;IXANY);&lt;br /&gt;
&amp;nbsp;options.c_cc[VMIN]&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;
&amp;nbsp;options.c_cc[VTIME]&amp;nbsp;=&amp;nbsp;10;&lt;br /&gt;
&amp;nbsp;tcsetattr(fd,&amp;nbsp;TCSANOW,&amp;nbsp;&amp;options);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;//&amp;nbsp;clear&amp;nbsp;I/O&amp;nbsp;buffer&lt;br /&gt;
&amp;nbsp;tcflush(fd,&amp;nbsp;TCIOFLUSH);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;return&amp;nbsp;fd;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int&amp;nbsp;main()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;//&amp;nbsp;get&amp;nbsp;the&amp;nbsp;file&amp;nbsp;descriptor&amp;nbsp;from&amp;nbsp;open_port()&lt;br /&gt;
&amp;nbsp;int&amp;nbsp;fd&amp;nbsp;=&amp;nbsp;open_port();&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;//&amp;nbsp;I/O&amp;nbsp;buffer,&amp;nbsp;let&amp;nbsp;it&amp;nbsp;be&amp;nbsp;the&amp;nbsp;'I'&amp;nbsp;command&amp;nbsp;initially&lt;br /&gt;
&amp;nbsp;char&amp;nbsp;buf[256]&amp;nbsp;=&amp;nbsp;{&amp;nbsp;0x1b,&amp;nbsp;'I',&amp;nbsp;'\r',&amp;nbsp;0&amp;nbsp;};&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;int&amp;nbsp;n;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;//&amp;nbsp;write()&amp;nbsp;the&amp;nbsp;'I'&amp;nbsp;command&lt;br /&gt;
&amp;nbsp;if&amp;nbsp;((n&amp;nbsp;=&amp;nbsp;write(fd,&amp;nbsp;buf,&amp;nbsp;3))&amp;nbsp;&amp;lt;&amp;nbsp;3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;std::cerr&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;"write()&amp;nbsp;of&amp;nbsp;3&amp;nbsp;bytes&amp;nbsp;failed!\n";&lt;br /&gt;
&amp;nbsp;else&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;"write()&amp;nbsp;"&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;n&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;"&amp;nbsp;bytes:&amp;nbsp;";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;i&amp;nbsp;&amp;lt;&amp;nbsp;n;++i)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;"0x";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout.width(2);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout.fill('0');&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::hex&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;static_cast&amp;lt;int&amp;gt;(buf[i])&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;'&amp;nbsp;';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl;&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;//&amp;nbsp;read&amp;nbsp;the&amp;nbsp;result
&amp;nbsp;n&amp;nbsp;=&amp;nbsp;read(fd,&amp;nbsp;buf,&amp;nbsp;255);&lt;br /&gt;
&amp;nbsp;if&amp;nbsp;(n&amp;nbsp;&amp;lt;&amp;nbsp;0)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;fputs("read()&amp;nbsp;failed!\n",&amp;nbsp;stderr);&lt;br /&gt;
&amp;nbsp;else&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;"read()&amp;nbsp;"&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;n&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;"&amp;nbsp;bytes:&amp;nbsp;";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;i&amp;nbsp;&amp;lt;&amp;nbsp;n;++i)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;"0x";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout.width(2);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout.fill('0');&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::hex&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;static_cast&amp;lt;int&amp;gt;(buf[i])&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;'&amp;nbsp;';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl;&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;close(fd);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;return&amp;nbsp;0;&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/10724994-1524576189433720646?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/1524576189433720646/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=1524576189433720646' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1524576189433720646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1524576189433720646'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2009/08/blog-post.html' title='救災順利！成功救活四名專題做不出來的學弟！'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-7576455327927190559</id><published>2009-03-30T08:54:00.003+08:00</published><updated>2009-03-30T09:13:45.742+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Orz'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><title type='text'>Bug wranglers know this bug by heart now</title><content type='html'>&lt;p&gt;之前更新 gcc-4.3.3-r1 之後，編 mplayer 會吐 &lt;a href="http://en.wikipedia.org/wiki/Compilation_error#Internal_Compiler_Errors"&gt;ICE&lt;/a&gt; 出來。今天 emerge world -ua 的時候看到 gcc-4.3.3-r2，在裝之前想說看一下 ChangeLog 有沒有修好這個 bug：&lt;/p&gt;
&lt;code&gt;27 Mar 2009; Peter Alfredsen &lt;loki_val@gentoo.org&gt; -gcc-4.3.3-r1.ebuild,
+gcc-4.3.3-r2.ebuild:
Revbump with broken patch disabled to stop duplicates of bug 262567 from
flowing in. Bug wranglers know this bug by heart now.&lt;/code&gt;
&lt;p&gt;這個 &lt;a href="http://bugs.gentoo.org/show_bug.cgi?id=262567"&gt;#262567&lt;/a&gt; file 的就是這個 bug。點進去看一下... 挖咧！二十幾個 duplicates = = 難怪 Bug wranglers 會 know this bug by heart 了 XD~&lt;/p&gt;
&lt;p&gt;底下是一段 Quote：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;At last, rev-bumped.&lt;/p&gt;
&lt;p&gt;Btw, maybe all those duplicates are not the user's inability to search, but their ability to tell you "please *always* rev-bump fixes that are not build-related to the package itself" :P&lt;/p&gt;
&lt;p&gt;&lt;span style="font-style:italic;font-weight:bold;"&gt;- Nikos Chantziaras&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-7576455327927190559?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/7576455327927190559/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=7576455327927190559' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/7576455327927190559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/7576455327927190559'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2009/03/bug-wranglers-know-this-bug-by-heart.html' title='Bug wranglers know this bug by heart now'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-3497636885382243876</id><published>2009-03-26T22:21:00.002+08:00</published><updated>2009-03-26T22:55:05.279+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='新聞評論'/><title type='text'>言論自由</title><content type='html'>&lt;p&gt;&lt;a href="http://zh.wikipedia.org/wiki/%E7%B4%84%E7%BF%B0%C2%B7%E9%81%94%E7%88%BE%E4%BC%AF%E6%A0%BC-%E9%98%BF%E5%85%8B%E9%A0%93%EF%BC%8C%E7%AC%AC%E4%B8%80%E4%BB%A3%E9%98%BF%E5%85%8B%E9%A0%93%E7%94%B7%E7%88%B5"&gt;阿克頓勳爵&lt;/a&gt;曾經說過：「我不喜歡你的言論，但我誓死保護你的言論自由。」&lt;/p&gt;
&lt;p&gt;若查證「郭冠英」就是「范蘭欽」屬實，那麼他的確該下台，因為他違反公務人員應行政中立的基本規範。但是「范蘭欽」發表的文章倒是沒有任何問題，那是言論自由。雖然美國有針對種族歧視言論的法律，但是很抱歉中華民國剛好沒有... 所以他也沒犯法。&lt;/p&gt;
&lt;p&gt;我不懂的是這些新聞媒體幹嘛拿「高級的外省人」做文章，這也沒什麼大不了。很多產品不是也會在包裝上寫「高級蜜餞」或「高級水果禮盒」嗎？那這些廠商是不是也通通要上新聞接受批判一下？況且他只有說「我是高級的外省人」而已，不知道這些媒體是從哪裡得來「台灣人是低級」的結論。你說「這是部好看的電影」或「這是本內容豐富的書」的時候，也不表示其他的電影不好看、其他的書沒內容啊...&lt;/p&gt;
&lt;p&gt;另外，蔡英文同學，言論自由是憲法保障的，不是你說有就有，你說沒有就沒有的好嗎？&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-3497636885382243876?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/3497636885382243876/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=3497636885382243876' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/3497636885382243876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/3497636885382243876'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2009/03/blog-post.html' title='言論自由'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-7364939295975328756</id><published>2009-02-13T08:06:00.005+08:00</published><updated>2009-02-13T08:31:24.811+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><title type='text'>宅心禪機</title><content type='html'>&lt;p&gt;台灣知名宗教團體&lt;a href="http://www.ddm.org.tw/"&gt;法鼓山&lt;/a&gt;創辦人&lt;a href="http://zh.wikipedia.org/wiki/%E8%81%96%E5%9A%B4%E6%B3%95%E5%B8%AB"&gt;聖嚴法師&lt;/a&gt;，於台北時間中華民國 98 年（西元 2009 年）2 月 9 日因病圓寂。&lt;/p&gt;
&lt;p&gt;雖然我本身並沒有宗教信仰，雖然我沒有參加過法鼓山辦的活動，雖然我也沒上過「&lt;a href="http://www.no-suicide-no.com/"&gt;你可以不必自殺網&lt;/a&gt;」（唔，偶爾想自殺的時候應該去逛逛...），不過衝著這幅字還是得悼念一下：&lt;/p&gt;
&lt;blockquote&gt;&lt;h5&gt;「面對宅、接受宅、處理宅、放下宅」- 法鼓山 聖嚴法師&lt;/h5&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sCIYrLqeyI8/SZS77_Vk_8I/AAAAAAAAACQ/TO0itYWuJDs/s1600-h/facing_otaku_accept_otaku_handle_otaku_forget_otaku.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_sCIYrLqeyI8/SZS77_Vk_8I/AAAAAAAAACQ/TO0itYWuJDs/s320/facing_otaku_accept_otaku_handle_otaku_forget_otaku.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5302069300610531266" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;誰能告訴我為什麼上聖下嚴大法師要把「&lt;span style="font-weight:bold;"&gt;它&lt;/span&gt;」寫成「&lt;span style="font-weight:bold;"&gt;宅&lt;/span&gt;」呢？我搜遍 &lt;a href="http://www.google.com.tw/firefox"&gt;Google&lt;/a&gt; 也找不到一個地方寫兩個字形可以相通的...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-7364939295975328756?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/7364939295975328756/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=7364939295975328756' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/7364939295975328756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/7364939295975328756'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2009/02/blog-post.html' title='宅心禪機'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sCIYrLqeyI8/SZS77_Vk_8I/AAAAAAAAACQ/TO0itYWuJDs/s72-c/facing_otaku_accept_otaku_handle_otaku_forget_otaku.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-703404938000661469</id><published>2009-02-04T23:29:00.009+08:00</published><updated>2009-02-13T00:25:51.316+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='家用機'/><title type='text'>New Weapon - HP Pavilion dv5-1003ax</title><content type='html'>&lt;p&gt;最近，我終於受不了了那台&lt;a href="http://palatis.blogspot.com/2005/11/amd64.html"&gt;四年前買的 NB&lt;/a&gt;。是的，我還是很喜歡它 - 它輕巧、方便攜帶、沒有惱人的鏡面螢幕、可以跑 &lt;a href="http://en.wikipedia.org/wiki/Compositing_window_manager"&gt;Composite Desktop&lt;/a&gt;、效能也不差（至少是我可以接受的速度）。可是它的 512MB DDR-333 * 2 漸漸地不敷使用，開始吃起 swap；螢幕右下角有約 7 個 pixel 的亮塊；硬碟 SMART 也跟我說有一堆 bad block reallocated、電池的使用時間也只剩不到五分鐘...&lt;/p&gt;
&lt;p&gt;所以，我很苦惱。這台機器我很願意多用兩年，但是 &lt;a href="http://moztw.org"&gt;firefox&lt;/a&gt; 多開幾個分頁（嗯... 30~50 個 XD~）就一直 thrashing 是沒辦法接受的事，硬碟開始有壞軌也總是讓人心慌慌（雖然跑 dd if=/dev/zero of=/dev/sda 叫 SMART 修好了），電池只剩五分鐘根本帶不出門（走到門口就沒電了嘛 Orz...）。如果想繼續用下去，就非得換掉這幾個東西：
  &lt;ul&gt;
    &lt;li&gt;RAM 升級到 DDR-333 1GB * 2 ~= $2500&lt;/li&gt;
    &lt;li&gt;2.5' PATA HDD or SSD ~= $2000 or $5000&lt;/li&gt;
    &lt;li&gt;電池也得買新的 ~= $2500&lt;/li&gt;
  &lt;/ul&gt;
可是這麼一來，價錢等於 1/3 ~ 1/2 台新筆電了，可是... 我還是繼續在用舊電腦，實際感覺得出來有差別的可能只有不會那麼 thrashing = = 所以我一直在這三個念頭上打轉：
  &lt;ol&gt;
    &lt;li&gt;不升級不夠用...&lt;/li&gt;
    &lt;li&gt;不想花錢升級統統都舊規格 (DDR-333、IDE PATA) 的東西...&lt;/li&gt;
    &lt;li&gt;買新的又有點浪費，畢竟舊的升級尚且堪用...&lt;/li&gt;
  &lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;於是我就問我老爸，請他出個意見，看我應該怎麼辦才好。結果我親愛的老爸很豪邁的說：「哎唷，你那台機器也是三年多四年前買的，不要傷腦筋了。媽咪店裡也剛好需要一台機器，你就換台機器，這台給她吧！」&lt;/p&gt;
&lt;p&gt;唔... 既然這麼說，那還是換一台好了，把舊電腦換個硬碟給我媽（我後來把 Windows Vista 的授權貼紙都撕起來貼過去了... 開門做生意別留下把柄才是。）。我比較了市面主流的 CPU 跟 GPU，最後決定挑 AMD PUMA 平台的機器，主要是這幾個原因：
  &lt;ul&gt;
    &lt;li&gt;之前 nVidia GPU 有設計瑕疵，焊接的表面會因為鄰接材質膨脹係數不同，熱脹冷縮太多次有機會脫焊，造成硬體故障。雖然 nVidia 宣稱已經修改了設計，但是誰知道晶片裡面是怎樣的呢？所以不考慮 nVidia GPU。&lt;/li&gt;
    &lt;li&gt;Intel CPU 雖然耗電量較低，但是與 AMD 相比同時脈下速度較慢，價錢也較貴。什麼？你說買 2 開頭的？別鬧了，至少也要買 5 或 8 開頭的好嗎，2 開頭實在太舊了啦！雖然 8 開頭的價錢可以壓到三萬，但是都是搭配 Intel GMA，所以還是算了。而不考慮 nVidia GPU 的話，就統統剩下 Intel GMA，不會搭配 ATi 的卡了...&lt;/li&gt;
    &lt;li&gt;AMD CPU 雖然比較耗電，但是他的優點就是便宜肉大塊... 搭配 ATi 顯示卡，效能比 Intel 好多了... ATi 顯示卡的 linux 支援也越來越好，且頻頻對社群釋出善意。之前還放出 r500/r600 的 open source driver（不過... 嗯... 話說 intel driver 一直都是 open source 的 ="=）。&lt;/li&gt;
    &lt;li&gt;4GB 的 RAM！常常編東西的人，thrashing 的話就等到死。反正現在 RAM 這麼便宜，就插到滿吧！但得注意別買到打不開 memory remapping 的機器（例如我媽那台，插 4GB 用 3GB 還蠻囧的）。&lt;/li&gt;
    &lt;li&gt;雖然我老爸好像還蠻有錢的，但是也別浪費... 預算放在 NTD $25,000。&lt;/li&gt;
  &lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;本來看上的是 MSI PX210，但是如果配上 ZM-80 要 $29,000，超出預算太多。HP tx2506 似乎也不錯，但是要 $28,000，也是超出預算，而且顯示卡只有 Radeon HD 3200。&lt;/p&gt;
&lt;p&gt;最後挑來挑去，買了 HP dv5 1003ax，$25,200 帶回家。詳細的規格如下：&lt;/p&gt;
&lt;blockquote&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;b&gt;CPU：&lt;/b&gt;AMD Turion X2 Ultra Dual-Core Mobile ZM-82 @ 2200Mhz&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;RAM：&lt;/b&gt;Transcend DDR2-800 2GB x 2&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;GPU：&lt;/b&gt;ATI Radeon HD 3450 with GDDR2 256MB&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;HDD：&lt;/b&gt;TOSHIBA MK3252GSX - sATA2 320GB 8MB buffer&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;DVD：&lt;/b&gt;LightScribe SuperMulti DVD+/-/RW with Double Layer support&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;Display：&lt;/b&gt;15.4' 1280x800&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;其他不重要的週邊：&lt;/b&gt;
      &lt;ul&gt;
        &lt;li&gt;Vermico WebCam&lt;/li&gt;
        &lt;li&gt;SD/MMC/MS/XD Card Reader&lt;/li&gt;
        &lt;li&gt;Fingerprint Reader&lt;/li&gt;
        &lt;li&gt;HDMI、eSATA、Firewire、遙控器&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;b&gt;Battery：&lt;/b&gt;6 cell&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;Weight：&lt;/b&gt;2.83 KG&lt;/li&gt;
    &lt;li&gt;不得不買的 Windows Vista Home Premium（沒 Activate 過，序號貼紙被我撕給原本那台了）&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;安裝 Linux 的時候遇到一些問題，能解的都解決了，剩下指紋辨識器沒 driver... 安裝時遇到的問題與解決方法紀錄在 &lt;a href="http://en.gentoo-wiki.com/wiki/HP_Pavilion_DV5_(PUMA)"&gt;Gentoo Wiki&lt;/a&gt;，主要是 kernel module 設定，沒有太多 Gentoo specific 的東西。其他 distro 應該有很多用的上的地方才是。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-703404938000661469?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/703404938000661469/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=703404938000661469' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/703404938000661469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/703404938000661469'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2009/02/new-weapon-hp-pavilion-dv5-1003ax.html' title='New Weapon - HP Pavilion dv5-1003ax'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-7891385489272097939</id><published>2009-01-02T11:43:00.006+08:00</published><updated>2009-01-02T12:39:23.562+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MacOSX'/><category scheme='http://www.blogger.com/atom/ns#' term='嘴砲轟'/><category scheme='http://www.blogger.com/atom/ns#' term='Apple'/><title type='text'>Hackintosh, Psystar, and Apple</title><content type='html'>&lt;p&gt;&lt;a href="http://www.apple.com/"&gt;林檎公司&lt;/a&gt;在 2006 年的時候，逐漸將&lt;a href="http://zh.wikipedia.org/w/index.php?title=%E9%BA%A6%E9%87%91%E5%A1%94%E7%94%B5%E8%84%91&amp;variant=zh-tw"&gt;小麥們都改成&lt;/a&gt; &lt;a href="http://www.intel.com/"&gt;Intel&lt;/a&gt; 平台。如此一來，以往 x86 上的作業系統統統可以拿去小麥上面跑，程式本身不需要作任何修改，只需要多加一個用 EFI 模擬 BIOS 的 bootloader 就好了。&lt;/p&gt;
&lt;p&gt;如此一來，就有很多人想說，既然硬體大部分都相同，我是不是可以把 &lt;a href="http://www.apple.com/macosx/"&gt;Mac OS X&lt;/a&gt; 裝到一般的 PC 上咧？結果是可以的，只要透過很小的修改，就可以把 Mac OS X 裝到你自己去&lt;a href="http://www.arclink.com.tw/"&gt;光華商場&lt;/a&gt;拼（血拼、拼湊）來的電腦上。&lt;/p&gt;
&lt;p&gt;後來又有一家公司做了個叫 &lt;a href="http://www.efi-x.com/index.php?option=com_content&amp;view=article&amp;id=21&amp;language=english"&gt;EFi-X&lt;/a&gt; 出來，把這個東西插在主機板的 USB 擴充埠上，就可以直接啟動官方的 OS X Kernel。更有 &lt;a href="http://store.psystar.com/"&gt;Psystar&lt;/a&gt; 公司，就直接在 online store 販售預裝 Mac OS X 的桌上型電腦。&lt;/p&gt;
&lt;p&gt;但是「將 Mac OS X 裝在非林檎神發售的硬體上」這件事情，本身是違反 Mac OS X 的 EULA 的，所以於是就&lt;a href="http://search.aol.tw/aol/search?invocationType=advancedSearch&amp;as_sitesearch=chinese.engadget.com&amp;query=psystar&amp;sa=AOL.tw+%E6%90%9C%E5%B0%8B"&gt;鬧上了法院&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;一件事情合不合理，只要先把這件事情抽象化，將邏輯提煉出來以後，再帶入其他對應的實體即可。以這次的例子來說，讓我們這樣代換一下：&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;某罐頭廠商在販售自家鮪魚罐頭的時候，附上了一份 EULA，裡面寫著「請勿將本罐頭以非本罐頭廠商出售的食譜作成菜餚」以及「若開啟此罐頭，表示接受本授權協議。」芸芸。可是某個歐巴桑自己在做菜的時候用到這個罐頭，又不是罐頭廠商出的食譜的指定菜單。於是，這家罐頭廠商有權力告他，因為他違反本罐頭的 EULA。如果罐頭廠商勝訴，這位歐巴桑以後都不能用這個罐頭做菜以外，還可能必須賠錢給罐頭廠商。&lt;/p&gt;
  &lt;p&gt;另外，又有一家食譜出版社，因為覺得這個罐頭還不錯，所以針對這個罐頭設計了一系列的菜單，並且販售食譜。於是罐頭公司可以告這家出版社，因為罐頭公司&lt;b&gt;誘使&lt;/b&gt;使用者將罐頭使用在自家提供的菜單以外，侵犯了罐頭公司的利益。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果作個代換...
  &lt;ul&gt;
    &lt;li&gt;「罐頭公司」改成「Apple 公司」&lt;/li&gt;
    &lt;li&gt;「鮪魚罐頭」改成「Mac OS X 作業系統」&lt;/li&gt;
    &lt;li&gt;「食譜」改成「硬體」&lt;/li&gt;
    &lt;li&gt;「製作成菜餚」改成「安裝作業系統」&lt;/li&gt;
    &lt;li&gt;「食譜出版社」改成「Phystar」&lt;/li&gt;
  &lt;/ul&gt;
&lt;p&gt;
&lt;p&gt;恩... 無限上綱。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-7891385489272097939?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/7891385489272097939/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=7891385489272097939' title='4 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/7891385489272097939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/7891385489272097939'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2009/01/hackintosh-psystar-and-apple.html' title='Hackintosh, Psystar, and Apple'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-1689402844504178356</id><published>2008-11-26T20:34:00.003+08:00</published><updated>2008-11-26T23:54:30.288+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Chrasis'/><title type='text'>Chrasis 白工開發紀錄</title><content type='html'>&lt;p&gt;拿起荒廢超過半年的 &lt;a href="http://chrasis.blogspot.com/"&gt;Chrasis&lt;/a&gt;，想藉由更換核心演算法來改進辨識率。&lt;/p&gt;
&lt;p&gt;本來想以筆劃的角度向量來比對，寫下去之後發現要比對的資料哭爸多，跑起來跟烏龜一樣。&lt;/p&gt;
&lt;p&gt;所以我這個週末做的事情有一半是白做了 = =&lt;/p&gt;
&lt;p&gt;目前想到的辦法是使用 2-pass 的 matching，先由一個正確率低但是速度快的演算法來作 1st-pass，再丟給這隻烏龜作 2nd-pass。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-1689402844504178356?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/1689402844504178356/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=1689402844504178356' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1689402844504178356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1689402844504178356'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/11/chrasis.html' title='Chrasis 白工開發紀錄'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-1111613697780765748</id><published>2008-10-21T23:31:00.004+08:00</published><updated>2008-10-22T00:30:22.841+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='網路'/><category scheme='http://www.blogger.com/atom/ns#' term='tun'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='VirtualBox'/><category scheme='http://www.blogger.com/atom/ns#' term='tuntap'/><category scheme='http://www.blogger.com/atom/ns#' term='tap'/><title type='text'>VirtualBox 與 tuntap interface</title><content type='html'>&lt;p&gt;從純 User 的角度來看，比起 &lt;a href="https://www.vmware.com/"&gt;VMWare&lt;/a&gt;，&lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt; 的好處是，不必載入一堆有的沒有的核心模組（只有一個 vboxdrv），而且少了一堆 init script。付出的代價是... 某些方面的設定多了一些，不過這些設定並不複雜，只是麻煩些罷了。&lt;/p&gt;
&lt;p&gt;如果您也跟我一樣不想讓 VirtualBox 用內部的 NAT，而是透過 Host Interface 直接上網，可以這麼作。首先假設網路拓樸長這樣：&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sCIYrLqeyI8/SP3_Asa7LEI/AAAAAAAAAB8/Z1bpX1p8Qdw/s1600-h/vbox_topology.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sCIYrLqeyI8/SP3_Asa7LEI/AAAAAAAAAB8/Z1bpX1p8Qdw/s320/vbox_topology.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5259640327227780162" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;b&gt;增加一個 bridge 介面&lt;/b&gt;&lt;br /&gt;
    這個根據系統，會有不同的設定。在 Gentoo（baselayout-2）下，請安裝 usermode-utilities 與 bridge-utils，並修改 /etc/conf.d/net 這個檔案：&lt;br /&gt;
    &lt;code&gt;config_eth0="null" # eth0 設為 null，並且把其他跟 eth0 有關的設定都拿掉&lt;br /&gt;
bridge_br0="eth0" # 讓 bridge 由 eth0 組成&lt;br /&gt;
config_br0=( "192.168.1.254/24" ) # 改成您的 IP&lt;br /&gt;
#config_br0=( "dhcp" ) # 如果您要讓這台機器走 dhcp&lt;br /&gt;
brctl_br0=(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"setfd 0"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"sethello 0"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"stp off"&lt;br /&gt;
)&lt;br /&gt;
routes_br0=( 'default via 192.168.1.1' ) # 如果用 dhcp，請註解掉。&lt;br /&gt;
fallback_br0=( "apipa" ) # 可有可無...&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
link_ppp0="br0" # 如果有 adsl 撥接，請改成透過 br0。&lt;br /&gt;
&lt;br /&gt;
...&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;b&gt;增加相應的 init script&lt;/b&gt;&lt;br /&gt;
    &lt;code&gt;$ sudo ln -s /etc/init.d/net.{lo,br0}&lt;/code&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;b&gt;修改 /etc/sudoers&lt;/b&gt;&lt;br /&gt;
    加入以下這行：&lt;br /&gt;
    &lt;code&gt;%vboxusers ALL=(ALL) NOPASSWD: /usr/bin/VBoxAddIF, /usr/bin/VBoxDeleteIF&lt;/code&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;b&gt;加入一個 helper script&lt;/b&gt;&lt;br /&gt;
    放在哪裡都可以。為了讓所有的 User 都可以用，我放在 /usr/bin/VBoxIFManager.sh，別忘了 chmod +x 喔！&lt;br /&gt;
    &lt;code&gt;#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
IF="${1}"&lt;br /&gt;
ACTION="${2}"&lt;br /&gt;
BRIDGE="br0"&lt;br /&gt;
&lt;br /&gt;
case "${ACTION}" in&lt;br /&gt;
up)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sudo VBoxAddIF "${IF}" "${LOGNAME}" "${BRIDGE}" &gt; /dev/null 2&gt;&amp;1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;;&lt;br /&gt;
down)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sudo VBoxDeleteIF "${IF}" &gt; /dev/null 2&gt;&amp;1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
echo "${IF}"&lt;/code&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;b&gt;VirtualBox 內的設定&lt;/b&gt;&lt;br /&gt;
    在 Virtual Machine Settings 裡的 Networking 下...
    &lt;ul&gt;
      &lt;li&gt;Attached to 選 Host Interface&lt;/li&gt;
      &lt;li&gt;Interface name 留空白&lt;/li&gt;
      &lt;li&gt;Setup Application 填入「/path/to/VBoxIFManager.sh &lt;i&gt;vbox0&lt;/i&gt; up」&lt;/li&gt;
      &lt;li&gt;Terminate Application 填入「/path/to/VBoxIFManager.sh &lt;i&gt;vbox0&lt;/i&gt; down」
    &lt;/ul&gt;
    其中 vbox0 可以改成任意字串，如 winxp、fbsd、palatis_is_very_handsome 之類的。&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-1111613697780765748?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/1111613697780765748/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=1111613697780765748' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1111613697780765748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1111613697780765748'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/10/virtualbox-tuntap-interface.html' title='VirtualBox 與 tuntap interface'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sCIYrLqeyI8/SP3_Asa7LEI/AAAAAAAAAB8/Z1bpX1p8Qdw/s72-c/vbox_topology.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-103212310164743471</id><published>2008-10-20T13:34:00.004+08:00</published><updated>2008-10-20T13:38:23.620+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>[R] Ubuntu: Linux for Human Being!</title><content type='html'>&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm4.static.flickr.com/3057/2909136949_55c8e2e987_o.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px;" src="http://farm4.static.flickr.com/3057/2909136949_55c8e2e987_o.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;來吧！&lt;a href="http://www.ubuntu.com/getubuntu/releasenotes/810"&gt;Ubuntu 8.10&lt;/a&gt;！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-103212310164743471?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/103212310164743471/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=103212310164743471' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/103212310164743471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/103212310164743471'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/10/r-ubuntu-linux-for-human-being.html' title='[R] Ubuntu: Linux for Human Being!'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-164375874279305955</id><published>2008-08-29T02:08:00.002+08:00</published><updated>2008-08-29T02:14:06.815+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='嘴砲轟'/><category scheme='http://www.blogger.com/atom/ns#' term='新聞評論'/><title type='text'>這就是為什麼越重要的組織越不能用 Microsoft Windows!</title><content type='html'>&lt;blockquote&gt;
  &lt;h2&gt;&lt;a href="http://tw.news.yahoo.com/article/url/d/a/080828/1/14xzo.html"&gt;電腦病毒無孔不入 國際太空站也無法倖免&lt;/a&gt;&lt;/h2&gt;
  &lt;h3&gt;28 Aug 2008&lt;/h3&gt;
  &lt;p&gt;NASA 的科學家今天忙得焦頭爛額，因為國際太空站上一台筆記型電腦被病毒入侵。基於安全的顧慮，NASA拒絕透露入侵太空站的病毒來歷及路徑。不過一個專門報導太空新知和新聞的網站透露，那個撈過界、上了太空的病毒，可能是透過磁碟，入侵太空站的電腦。它是視窗系統大約一年前出現的一隻病毒，設計者的目的是要盜取線上遊戲的資訊，那些被鎖定的線上遊戲有一部份只有中文版，包括征途、煌易及洛汗。&lt;/p&gt;
  &lt;p&gt;在被病毒入侵之後，國際太空站上的電腦，已經裝了新的防毒軟體。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;不是反微軟，而是他潛在的危險性比其他作業系統高太多了。不管是漏洞的數量、修理的速度、病毒的量... 等，都比其他系統來的糟糕。&lt;/p&gt;
&lt;p&gt;不知道 NASA 有沒有順手把那台電腦升級成 Windows Vista？&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-164375874279305955?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/164375874279305955/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=164375874279305955' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/164375874279305955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/164375874279305955'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/08/microsoft-windows.html' title='這就是為什麼越重要的組織越不能用 Microsoft Windows!'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-532999692430844083</id><published>2008-08-20T07:52:00.005+08:00</published><updated>2008-08-21T07:49:10.226+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='藍牙'/><category scheme='http://www.blogger.com/atom/ns#' term='家用機'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Bluetooth'/><title type='text'>不值錢的硬碟、不值錢的記憶體、難喬的滑鼠</title><content type='html'>&lt;p&gt;我媽是幫人家作美容的，所以時常需要儲存大量的膚質檢測的照片、化妝過程的影片、資料、與一些課程的錄音。可想而之，這些都是動輒數百 MB、甚至數 GB 大傢伙。而她那台 120GB 硬碟的 &lt;a href="http://tw.asus.com/products.aspx?l1=5&amp;l2=26&amp;l3=270&amp;l4=0&amp;model=1409&amp;modelmenu=1"&gt;ASUS A8Je&lt;/a&gt;（這台機器又大又重又沒有比較快，在我看來一無可取，還有一些哩哩叩叩的問題，不過那些又是另一個故事了！）根本放不下這麼多東西。&lt;/p&gt;
&lt;p&gt;再來就是我妹的 &lt;a href="http://global.acer.com/t_chinese/products/notebook/tm3000.htm"&gt;Acer TravelMate3000&lt;/a&gt;，有點古早的機器，只有 512MB 的 RAM。配上一顆 4200rpm 的 60G 硬碟，跑起來跟烏龜有的拼。玩 &lt;a href="http://en.wikipedia.org/wiki/Anno_1503"&gt;ANNO 1503&lt;/a&gt; 都氣喘吁吁，所以決定幫她升級個 RAM。&lt;/p&gt;
&lt;p&gt;總之呢，就殺去光華買了以下東西...
  &lt;ul&gt;
    &lt;li&gt;Maxtor Basic 1TB：本來打算隨便挑個最便宜的 500GB 的，但是找來找去都要三千台票上下。後來看到這個只要 $4990，繞來繞去還是決定買這個。個人覺得相當划算！一開始老闆報 $4990 給我們的時候還猶豫要不要買，後來回去的時候老闆剛好離開，店員因為單子上印的是 $5390 不敢賣。老闆回來以後才知道說本來今天要調整售價，但是代理商說明天才調整，但是單子已經印了，所以今天還是 $4990。我就開玩笑的說「哇！明天就漲價了，那趕快多買一顆！」結果老闆跟店員都急忙說「要用再買啦！不要急著買。」阻止我買。哈！&lt;/li&gt;
    &lt;li&gt;Transcend So-DIMM DDR2-667 2GB x 2：JetRam 的，一條 999。這兩條換給我媽，把我媽的一條舊 1G 加上新買 1G 給我妹。&lt;/li&gt;
    &lt;li&gt;Transcend So-DIMM DDR2-667 1GB：也是 JetRam 的，一條 550。配上我媽換下來的 1G，湊成 2G 給我妹。&lt;/li&gt;
    &lt;li&gt;Logitech V470：順便買給自己的藍牙鼠～ $1180 新台票。&lt;/li&gt;
  &lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;硬碟拿回家當然是先 benchmark 一下。用 h2benchw 跑了 read test，速度很神奇的從頭到尾都在 34.5 ~ 35.5 MB/s 之間晃盪，看來這顆硬碟的速度超過 USB 的極限，沒辦法更快了... 跑完以後我就懶得跑 write test 了，因為 1TB/35MBps = 460min，我懶得再等他跑一遍 = =&lt;/p&gt;
&lt;p&gt;RAM 的部份，A8Je 這個爛東西，BIOS 不支援 memory remapping（已經更新到最新版了），所以只能讀到 2944MB。是的，意思是說有 500 元的 RAM 沒有用到。但是至少雙通道沒問題，就將就用吧！該死的 A8Je。&lt;/p&gt;
&lt;p&gt;剩下 1GB x 2 就塞給我妹電腦（什麼？你問我幹嘛不按槓下來？其實我也很想啊～可是我的是 DDR 不能插 QQ）。可是根據我妹的證詞指出，升級 RAM 以後機器變熱了！？奇怪，難道 1GB 模組比 256MB 模組熱嗎？&lt;/p&gt;
&lt;p&gt;藍牙滑鼠很不錯，羅技新的雷射光學鼠，在什麼鬼地方用都感應的到。只是 BlueZ 3.36 的 Service Framework 怪怪的，bluez-gnome 也怪怪的，所以加起來就有時候連的上有時候連不上。如果您使用 bluez-gnome 或 kdebluetooth 卻沒有辦法連上藍牙鼠，又試過一般步驟（`hcitool cc &amp;lt;bdaddr&amp;gt;' 一類的）也不會動，可以試試以下的步驟...&lt;/p&gt;
&lt;p&gt;先用以下的 python script 試試看...&lt;/p&gt;
&lt;code&gt;import dbus&lt;br /&gt;
bus = dbus.SystemBus()&lt;br /&gt;
&lt;br /&gt;
# service activation&lt;br /&gt;
bmgr = dbus.Interface(bus.get_object('org.bluez', '/org/bluez'), 'org.bluez.Manager')&lt;br /&gt;
bus_id = bmgr.ActivateService('input')&lt;br /&gt;
imgr = dbus.Interface(bus.get_object(bus_id, '/org/bluez/input'), 'org.bluez.input.Manager')&lt;br /&gt;
&lt;br /&gt;
# devices&lt;br /&gt;
devices = imgr.ListDevices()&lt;br /&gt;
for path in devices:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;idev = dbus.Interface(bus.get_object(bus_id, path), 'org.bluez.input.Device')&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if idev.IsConnected():&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print 'Path: ' + path + ' [connected]'&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print 'Path: ' + path + ' [not connected]'&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print ' bdaddr: ' + idev.GetAddress()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print ' Name: ' + idev.GetName() + ' [' + str(idev.GetVendorId()) + ':' + str(idev.GetProductId()) + ']'&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# try connect unconnected devices&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if not idev.IsConnected():&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print 'trying to connect...'&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;idev.Connect()&lt;/code&gt;
&lt;p&gt;如果還是不行，再跑這個 python script，別忘了把 "XX:XX:XX:XX:XX:XX" 換成您的 bdaddr：&lt;/p&gt;
&lt;code&gt;import dbus&lt;br /&gt;
bus = dbus.SystemBus()&lt;br /&gt;
&lt;br /&gt;
# service activation&lt;br /&gt;
bmgr = dbus.Interface(bus.get_object('org.bluez', '/org/bluez'), 'org.bluez.Manager')&lt;br /&gt;
bus_id = bmgr.ActivateService('input')&lt;br /&gt;
imgr = dbus.Interface(bus.get_object(bus_id, '/org/bluez/input'), 'org.bluez.input.Manager')&lt;br /&gt;
&lt;br /&gt;
# create and connect to device&lt;br /&gt;
path = imgr.CreateDevice('XX:XX:XX:XX:XX:XX')&lt;br /&gt;
idev = dbus.Interface(bus.get_object(bus_id, path), 'org.bluez.input.Device')&lt;br /&gt;
idev.Connect()&lt;/code&gt;
&lt;p&gt;如果還是不行...... 就&lt;b&gt;沒轍&lt;/b&gt;啦！把 /etc/init.d/dbus 跟 /etc/init.d/bluetooth 都 restart 一次再試試看！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-532999692430844083?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/532999692430844083/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=532999692430844083' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/532999692430844083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/532999692430844083'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/08/mb-gb-120gb-asus-a8je-acer.html' title='不值錢的硬碟、不值錢的記憶體、難喬的滑鼠'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-6663092197564757890</id><published>2008-08-09T02:39:00.009+08:00</published><updated>2008-08-10T06:28:12.910+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Driver'/><category scheme='http://www.blogger.com/atom/ns#' term='系統調校'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='好東西'/><title type='text'>壓榨您的記憶體 - CompCache</title><content type='html'>&lt;p&gt;您可能沒有辦法在 1 公升的茶壺裡裝下 1.5 公升的水，但是現在您有機會在 1GB 的記憶體裡面塞進 1.5GB 的資料！與 &lt;a href="http://www.microsoft.com/taiwan/windows/products/windowsvista/default.mspx"&gt;Windows Vista&lt;/a&gt; 的 &lt;a href="http://en.wikipedia.org/wiki/ReadyBoost"&gt;ReadyBoost&lt;/a&gt; 不同，&lt;a href="http://www.kernel.org"&gt;Linux&lt;/a&gt; 的 &lt;a href="http://code.google.com/p/compcache/"&gt;CompCache&lt;/a&gt; 試圖在不須外加任何硬體下，把更多資料塞進記憶體裡面。&lt;/p&gt;
&lt;p&gt;與許多先進的作業系統一樣，Linux 以分頁（page）來管理記憶體。Linux 的分頁大致上可分為：
  &lt;ol&gt;
    &lt;li&gt;核心分頁（kernel pages）：核心分頁永遠不會被放到虛擬記憶體中，不管是不是在拉屎，反正總是在實體記憶體中佔一個茅坑。某些 Unix 系統可以把核心分頁放到虛擬記憶體，但是 Linux 的開發者們覺得這太囉唆了，會大幅增加 VMM 的複雜度，所以沒有這麼做。&lt;/li&gt;
    &lt;li&gt;程式內容（program texts）：程式內容就是一個程式實際會被執行的東西，例如 /bin/bash 或 /lib/libc.so.6 裡面的東西。這些是唯讀的資料，亦即，這些資料從被載入到卸除之間，內容都不會改變。呃，您不會希望 ls 執行到一半突然變成 rm 吧 @@ 想當然 kernel developers 不可能讓這種事情發生！&lt;/li&gt;
    &lt;li&gt;檔案分頁（file-backed pages）：這種分頁也是從某個實際的檔案讀進來，但是它們的內容並不是唯讀的。如果在記憶體中的內容改變了的話，則必須找機會寫回檔案裡面。&lt;/li&gt;
    &lt;li&gt;匿名分頁（anonymous pages）：由於這些分頁沒有對應到實際的檔案，所以被叫做「匿名」的分頁，stack 跟 heap 就是屬於這種類型。如果您的程式使用 malloc() 或 new，那麼配置的記憶體就屬於這種。&lt;/li&gt;
    &lt;li&gt;快取分頁（cached page）：Linux 並沒有專門的 disk cache，取而代之 Linux 會將最近用到的磁碟資料放在快取分頁（cached page）中。Linux 通常不會直接讀寫磁碟，而是先在記憶體中操作，再找機會沖（flush）回磁碟中。&lt;/li&gt;
    &lt;li&gt;未使用記憶體池（free pool）：目前沒有被使用，裡面沒什麼重要資料的記憶體。這種記憶體可以直接分配給需要的程式。&lt;/li&gt;
  &lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;如果某個記憶體分頁中的資料與磁碟上的一樣，我們叫這種分頁乾淨的分頁（clean pages），即使挪作他用也不必擔心等下找不回來，再從磁碟上讀取就好了。但是如果分頁中的資料跟磁碟上的不一樣，就是髒的分頁（dirty pages）。髒分頁要變成乾淨的分頁很簡單，把資料寫進磁碟就好了，這個動作被稱為「收回（eviction）」。&lt;/p&gt;
&lt;p&gt;回到主題，在程式配置記憶體的時候，核心會先嘗試在 free pool 中找看看有沒有合適的空間。若 free pool 中剩下的記憶體太少，核心就必須釋放一些 clean page 出來。如果沒有 clean page，則必須找一些 dirty page，把它們弄乾淨，再釋放回 free pool 中。file-backed pages 即使是 dirty 的，在寫回磁碟變成 clean 以後就可以直接釋放。但是 anonymous pages 就沒那麼好運，因為在定義中，anonymous pages 就是不屬於實際檔案的記憶體。這些記憶體，想當然就會被寫進置換記憶體（swap memory）中。由於寫回 swap memory 比寫進檔案輕鬆（不必穿越整個 VFS 系統、更新 mtime、atime 一類的雜事），所以釋放的順序通常是：
  &lt;ol&gt;
    &lt;li&gt;clean anonymous pages：直接釋放&lt;/li&gt;
    &lt;li&gt;clean file-backed pages：直接釋放&lt;/li&gt;
    &lt;li&gt;dirty anonymous pages：寫回磁碟後釋放&lt;/li&gt;
    &lt;li&gt;dirty file-backed pages：寫回磁碟後釋放&lt;/li&gt;
  &lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;由於磁碟跟記憶體的速度簡直是烏龜比火箭，當您需要使用大於電腦實體記憶體的儲存空間的時候，就會發生 thrashing。亦即，核心好不容易把資料 A 寫進硬碟，騰出空間給資料 B，但是您馬上又要使用資料 A，只好又把資料 B 寫進硬碟，讀取資料 A，可是過一會兒又要用到資料 B... 於是硬碟怒吼、滑鼠呆滯、機殼好像瘋了一樣隨硬碟起舞...&lt;/p&gt;
&lt;p&gt;CompCache 就是解救這個狀況的救星！它的基本概念很簡單，擠不出多餘空間的時候，把 dirty 的 anonymous pages 壓縮起來 swap 回 ram，再把節省下來的空間分配給需要的程式使用。在大部分的電腦配置下，即使壓縮、解壓縮再怎麼慢，通常也比磁碟存取快的多。&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sCIYrLqeyI8/SJynY7aEKbI/AAAAAAAAAB0/HwjmS7tYXok/s1600-h/compcache.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sCIYrLqeyI8/SJynY7aEKbI/AAAAAAAAAB0/HwjmS7tYXok/s400/compcache.png" border="0" alt="此圖直接從 CompCache 官網偷來..." title="此圖直接從 CompCache 官網偷來..." id="BLOGGER_PHOTO_ID_5232240913803389362" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;如果您知道如何編譯核心，那麼安裝 CompCache 並不困難。首先，您必須有一套支援 CompCache 的核心（例如 &lt;a href="http://zen-sources.org/"&gt;zen-sources 2.6.25+&lt;/a&gt;），然後打開 CONFIG_BLK_DEV_COMPCACHE 即可，我是編譯成模組（m）。使用新的核心開機，然後執行
  &lt;code&gt;
# modprobe compcache&lt;br /&gt;
# swapon -p 9999 /dev/ramzswap0&lt;br /&gt;
  &lt;/code&gt; 即可。CompCache 預設會將佔用的記憶體上限設為實體記憶體的 25%，如果要調整，可以在 modprobe 的時候指定 compcache_size_kbytes 參數，例如 modprobe compcache compcache_size_kbytes=524288 即使用 512MB 作為上限。&lt;/p&gt;
&lt;p&gt;在&lt;a href="http://palatis.blogspot.com/2005/11/amd64.html"&gt;我的機器&lt;/a&gt;上的實測，這台機器目前是 A-Data DDR SDRam 512MB 兩條。&lt;/p&gt;
&lt;code&gt;// 寫入 ram（事實上是寫入 tmpfs，速度很接近直接記憶體讀取）&lt;br /&gt;
# dd if=/dev/zero of=/dev/shm/bigfile bs=32768 count=16384&lt;br /&gt;
16384+0 records in&lt;br /&gt;
16384+0 records out&lt;br /&gt;
536870912 bytes (537 MB) copied, 1.18726 s, 452 MB/s&lt;br /&gt;
// 再把它讀出來&lt;br /&gt;
# dd if=/dev/shm/bigfile of=/dev/null bs=32768 count=16384&lt;br /&gt;
16384+0 records in&lt;br /&gt;
16384+0 records out&lt;br /&gt;
536870912 bytes (537 MB) copied, 0.452667 s, 1.2 GB/s&lt;br /&gt;
// 寫入 compcache&lt;br /&gt;
# dd if=/dev/zero of=/dev/ramzswap0 bs=32768 count=15384&lt;br /&gt;
16384+0 records in&lt;br /&gt;
16384+0 records out&lt;br /&gt;
536870912 bytes (537 MB) copied, 2.53538 s, 212 MB/s&lt;br /&gt;
// 從 compcache 讀取&lt;br /&gt;
# dd if=/dev/ramzswap0 of=/dev/null bs=32768 count=15384&lt;br /&gt;
16384+0 records in&lt;br /&gt;
16384+0 records out&lt;br /&gt;
536870912 bytes (537 MB) copied, 2.82894 s, 190 MB/s&lt;br /&gt;
// 寫入硬碟的 swap 分區&lt;br /&gt;
# dd if=/dev/zero of=/dev/sda1&lt;br /&gt;
16384+0 records in&lt;br /&gt;
16384+0 records out&lt;br /&gt;
536870912 bytes (537 MB) copied, 22.4473 s, 23.9 MB/s&lt;br /&gt;
// 從硬碟 swap 分區讀取&lt;br /&gt;
# dd if=/dev/sda1 of=/dev/null&lt;br /&gt;
16384+0 records in&lt;br /&gt;
16384+0 records out&lt;br /&gt;
536870912 bytes (537 MB) copied, 21.3317 s, 25.2 MB/s&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;由此可見，在我的機器上，直接存取記憶體最高有 1.2GB/s，但是硬碟卻只有 25 MB/s。使用 CompCache 則有 200MB/s 以上的速度，記憶體的 1/6、但是硬碟的 8 倍。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-6663092197564757890?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/6663092197564757890/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=6663092197564757890' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/6663092197564757890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/6663092197564757890'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/08/compcache.html' title='壓榨您的記憶體 - CompCache'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sCIYrLqeyI8/SJynY7aEKbI/AAAAAAAAAB0/HwjmS7tYXok/s72-c/compcache.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-3389426482828982827</id><published>2008-07-22T12:56:00.002+08:00</published><updated>2008-07-22T13:20:21.587+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='印象深刻的夢'/><title type='text'>印象深刻的夢 - 要不要丟掉一個？</title><content type='html'>&lt;p&gt;一開始是像美食節目那樣，跑去一家專門賣生魚片的餐廳吃東西（生魚片餐廳當然吃生魚片）。那個廚師切切切，準備準備準備很久，終於要上菜。他先拿了一塊魚，切的好小好小... 每個魚片大概只有指甲蓋那麼大... 放在一個很和風的小碟子裡。再配上非常超級多的芥末，大概有一整碗牛丼那麼大，再灑上一些醬油... 吃的時候把魚生拿去沾醬，掉進去就整個找不到了... = = 一邊吃還要一邊聽廚師濠洨說為什麼要把魚生切這麼小，是為了方便品嚐，能吃到魚的鮮美芸芸，整個就是吃得很不過癮...&lt;p&gt;
&lt;p&gt;接著就說要去一家極簡風的生魚片餐廳，而且店長從山下引入山泉水，可以一邊聽水聲一邊吃飯，要坐火車去，結果就跑上火車。火車坐一坐就有像是料理東西軍在介紹日本各地有名的店那樣，旁邊有人指著窗外說「就是那家！在那裡！在那裡！」，可是經過我們要去的店以後，&lt;b&gt;火車快飛火車快飛穿過高山飛過小溪～&lt;/b&gt;，等了好久才到下一站...&lt;/p&gt;
&lt;p&gt;下火車要坐回來的時候，就變成搭乘公車。車上的人不少，都是穿掉嘎戴斗笠的老頭子跟包頭巾老太婆，大部分的人都拿著大包小包的東西，不知道為什麼我媽跟我妹也跑出來跟我一起搭（而且也拿著大包小包）。因為剛才實在是過了好久，所以我一邊搭一邊抱怨「為什麼我們要來這種鳥不拉屎的深山吃生魚片？」。終於快要下車的時候，我們一按下車鈴，整車的人都站起來...... &lt;b&gt;全車都要下是怎樣！？&lt;/b&gt;可是沒辦法，站起來拿東西準備下車。耶？前面椅子上掛著的包包，好像是我媽咪不小心留下來的耶？「媽咪！媽咪！這兩包東西是我們的嗎？」叫了兩三次，我媽都不理我，我就想說算了，走去前面準備下車。可是我親愛的妹妹怎麼不見了呢？原來她聽到我的聲音，跑去拿那兩包東西。我們三個終於下車以後，我媽就罵我妹「你怎麼那麼慢？大家都在等你下車。」沒想到我妹居然說...&lt;/p&gt;
&lt;p&gt;「我在想這兩包東西那一包比較不重要，是不是要把它們丟掉一包。」XD～&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-3389426482828982827?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/3389426482828982827/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=3389426482828982827' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/3389426482828982827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/3389426482828982827'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/07/blog-post.html' title='印象深刻的夢 - 要不要丟掉一個？'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-8722667165275104984</id><published>2008-06-30T07:56:00.003+08:00</published><updated>2008-06-30T08:20:11.543+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='新聞評論'/><title type='text'>是央圖太混還是工程師太混？</title><content type='html'>&lt;p&gt;今天的新聞「&lt;a href="http://tw.news.yahoo.com/article/url/d/a/080630/78/128bx.html"&gt;上網查央圖藏書 網頁落伍」&lt;/a&gt;。&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sCIYrLqeyI8/SGgh-4PoX7I/AAAAAAAAABs/uTZRdkuC-Go/s1600-h/%E4%B8%8A%E7%B6%B2%E6%9F%A5%E5%A4%AE%E5%9C%96%E8%97%8F%E6%9B%B8%E7%B6%B2%E9%A0%81%E8%90%BD%E4%BC%8D.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sCIYrLqeyI8/SGgh-4PoX7I/AAAAAAAAABs/uTZRdkuC-Go/s400/%E4%B8%8A%E7%B6%B2%E6%9F%A5%E5%A4%AE%E5%9C%96%E8%97%8F%E6%9B%B8%E7%B6%B2%E9%A0%81%E8%90%BD%E4%BC%8D.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5217457532442271666" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;其中
  &lt;ul&gt;
    &lt;li&gt;向央圖資訊室人員詢問，對方建議她改用 IE 6.0 以下或其他瀏覽器&lt;/li&gt;
    &lt;li&gt;館藏書目查詢系統及資料庫龐大，更新期間必須兼顧圖書館內部作業，也不能影響讀者權益，3月份起，每週一閉館日執行升級計畫，3個月僅佔12個工作天&lt;/li&gt;
  &lt;/ul&gt;讓我覺得很扯...
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;首先，開發網頁服務卻綁定瀏覽器是很不道德的做法。就好像規定某條路只有福特的車可以走，裕隆不能走一樣。&lt;/li&gt;
  &lt;li&gt;我相信館藏書目查詢系統及資料庫龐大，但是更新期間必須兼顧圖書館內部作業是很奇怪的事情。看他最後寫「已經要求系統廠商加快腳步」，表示這項工程應該是外包的。既然是外包的，那就是開發商在別的地方把程式寫好，到時候直接丟上來就可以上線使用。而且... 把目前輸出的 html 轉換成標準的格式（html5+css3！？），讓 ie7/ff3 可以正常顯示，有工程浩大到要花三個月，並且要下線三天來升級嗎？&lt;/li&gt;
  &lt;li&gt;若只是改改 html 而已，應該跟後端資料庫大小沒有關係。如果是寫新的系統的話，資料庫的大小應該也不會影響到開發時程吧... 這感覺很像「因為我家電視比較大，所以看電影要花比較久的時間。」&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-8722667165275104984?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/8722667165275104984/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=8722667165275104984' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/8722667165275104984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/8722667165275104984'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/06/blog-post.html' title='是央圖太混還是工程師太混？'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sCIYrLqeyI8/SGgh-4PoX7I/AAAAAAAAABs/uTZRdkuC-Go/s72-c/%E4%B8%8A%E7%B6%B2%E6%9F%A5%E5%A4%AE%E5%9C%96%E8%97%8F%E6%9B%B8%E7%B6%B2%E9%A0%81%E8%90%BD%E4%BC%8D.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-989384648583798018</id><published>2008-06-30T03:13:00.004+08:00</published><updated>2008-06-30T06:51:52.914+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='家用機'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>3 CPUs (7 cores), 11GB of RAM, 900GB of Storage, Shitty GPU...</title><content type='html'>&lt;p&gt;最近心情不是很好，主要的原因是大學要延畢... 為了振奮精神，決定添購新的電腦設備。嗯？你說「為什麼心情不好要買新電腦」嗎？哎唷，就像有人心情不好去飆車，有的人去大吃大喝，添購新電腦應該是不傷身體（嗯... 傷荷包 XD～）、健康、又可以刺激經濟發展的方法... 再說，目前桌機也舊的該換了，不但效能已經不敷使用，耗電量也較高，每瓦效能就更難看了...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;前桌機：&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;ul&gt;
      &lt;li&gt;CPU：AMD AthlonXP (Barton) 2600+ @ 1933Mhz&lt;/li&gt;
      &lt;li&gt;Ram：DDR-333 256MB x 1、DDR-400 512MB x 1（total 768MB）&lt;/li&gt;
      &lt;li&gt;MB：Gigabyte 7VT600P-RZ&lt;/li&gt;
      &lt;li&gt;GPU：GeForce 7300GT 256MB&lt;/li&gt;
      &lt;li&gt;Storage：Seagate Barracuda 7200.10 320GB x 2&lt;/li&gt;
      &lt;li&gt;PWS：EQUAL ISO-400D (300W)&lt;/li&gt;
      &lt;li&gt;OS：Gentoo Linux 2007.0&lt;/li&gt;
    &lt;/ul&gt;&lt;/li&gt;
    &lt;li&gt;&lt;ul&gt;
      &lt;li&gt;CPU：AMD AthlonXP 1800+ @ 1150Mhz（因為板子不支援 133Mhz 的 FSB，只好跑 100Mhz）&lt;/li&gt;
      &lt;li&gt;Ram：256MB PC-133 SDRam x 3&lt;/li&gt;
      &lt;li&gt;MB：Gigabyte GA-7ZX&lt;/li&gt;
      &lt;li&gt;GPU：GeForce FX 5200 128MB&lt;/li&gt;
      &lt;li&gt;Storage：Seagate Barracuda 7200.8 200GB&lt;/li&gt;
      &lt;li&gt;NIC：Realtek RTL8139B&lt;/li&gt;
      &lt;li&gt;PWS：Delta GPS-300AB-100E (300W)&lt;/li&gt;
      &lt;li&gt;OS：Ubuntu 8.04&lt;/li&gt;
    &lt;/ul&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;比較快的那台桌機，編譯 glibc 要花一個多小時，根據 AthlonXP 的 &lt;a href="http://zh.wikipedia.org/wiki/TDP" target="_blank"&gt;TDP&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/CPU_power_dissipation#AMD_Athlon_XP" target="_blank"&gt;68.3w&lt;/a&gt; 來計算，68.3w * 1.25hr = 85.375w-hr，如果 glibc 改版個 12 次，我就要&lt;a href="http://co2.saveoursky.org.tw/chinese/01_knowledge/03_detail.aspx?MID=4&amp;SID=12&amp;ID=74" target="_blank"&gt;排放 0.638kg 的 CO&lt;sub&gt;2&lt;/sub&gt;&lt;/a&gt;，而這些還不包括 MB、RAM 等週邊消耗的電。&lt;/p&gt;
&lt;p&gt;比較慢的那台機器雖然比較少編譯東西，但是設備老舊到我不知道該拿他來幹什麼（因為幹什麼都慢...），所以除了偶爾玩玩 &lt;a href="http://www.reptilelabour.com/software/chromium/" target="_blank"&gt;Chromium BSU&lt;/a&gt;、開 &lt;a href="http://www.moztw.org" target="_blank"&gt;Firefox&lt;/a&gt; 上上網以外，大部分時間只是浪費能源...&lt;/p&gt;
&lt;p&gt;而且兩台都是超過五年的機器，當時的設備比較不注重能源管理，所以都沒有省電功能，搞得我不開冷氣電費還要兩千多塊...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;今桌機：&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;ul&gt;
      &lt;li&gt;CPU：AMD Phenom X4 9550 @ 1.1Ghz ~ 2.2Ghz&lt;/li&gt;
      &lt;li&gt;Ram：Transcend DDR2-800 2GB x 4&lt;/li&gt;
      &lt;li&gt;MB：ASUS M3A&lt;/li&gt;
      &lt;li&gt;GPU：GeForce 8500GT 256MB&lt;/li&gt;
      &lt;li&gt;Storage：Seagate Barracuda 7200.10 320GB x 2（原來的）&lt;/li&gt;
      &lt;li&gt;PWS：Seasonic SS-380GB (380W)&lt;/li&gt;
      &lt;li&gt;OS：Gentoo Linux 2007.0&lt;/li&gt;
    &lt;/ul&gt;&lt;/li&gt;
    &lt;li&gt;&lt;ul&gt;
      &lt;li&gt;CPU：AMD Athlon64 X2 4600+ @ 1.0Ghz ~ 2.4Ghz&lt;/li&gt;
      &lt;li&gt;Ram：Transcend DDR2-800 1GB x 2&lt;/li&gt;
      &lt;li&gt;MB：Gigabyte GA-M56S-S3&lt;/li&gt;
      &lt;li&gt;GPU：GeForce 8400GS 512MB&lt;/li&gt;
      &lt;li&gt;Storage：Seagate Barracuda 7200.10 320GB x 2（用舊的）&lt;/li&gt;
      &lt;li&gt;PWS：EQUAL ISO-400D (300W)（用舊的）&lt;/li&gt;
      &lt;li&gt;OS：Hack1nt0sh（預定）&lt;/li&gt;
    &lt;/ul&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;Phenom 的 TDP 有 &lt;a href="http://en.wikipedia.org/wiki/CPU_power_dissipation#AMD_Phenom_.28Phenom_64.29" target="_blank"&gt;89w&lt;/a&gt;，Idle 時的 power consumption 約 21w，但是現在 glibc 十四分鐘可以編完，換算起來是 89w x 0.25hr + 21w x 1.0hr = 43.25w-hr，大約省了一半左右的碳，而 DDR2 也比 &lt;a href="http://www.konami.jp/bemani/ddr/" target="_blank"&gt;DDR&lt;/a&gt; 省約 50% 的電，新 Power 也號稱有 85% 以上的能源轉換效率。&lt;/p&gt;
&lt;p&gt;而且換了新電腦，現在從開機到進入圖形介面，大約只要 30~40 秒，若再配合一些加速開機的 tuning，應該可以降低到 20 秒以內。這讓我想要再弄一台更省電的機器&lt;a href="http://mldonkey.sourceforge.net/Main_Page" target="_blank"&gt;養動物&lt;/a&gt;，最好是插個像手機充電器那樣的變壓器就可以跑，桌機不用時就可以關機了。&lt;/p&gt;
&lt;p&gt;再加上&lt;a href="http://palatis.blogspot.com/2005/11/amd64.html"&gt;筆電&lt;/a&gt;（後來被我升級成 1GB RAM）的話，共有...
&lt;ul&gt;
  &lt;li&gt;三顆 CPU&lt;li&gt;
  &lt;li&gt;七個運算核心&lt;/li&gt;
  &lt;li&gt;11GB 的記憶體&lt;/li&gt;
  &lt;li&gt;980GB 的硬碟空間&lt;/li&gt;
  &lt;li&gt;不怎麼樣的顯示卡兩張（不過 GDDR2 加一加也有 768MB = =）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;話說 GeForce 8400GS 這張卡跑起 3D 真的不怎麼樣... 如果預算充足，多花個 500~1000 買到 8600GT，Quake4 engine 可以多跑 4 倍的 FPS。8400GS:8500GT:8600GT 效能約 1:2:4，但是價格是 1:1.3:1.9。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-989384648583798018?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/989384648583798018/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=989384648583798018' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/989384648583798018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/989384648583798018'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/06/3-cpus-7-cores-11gb-of-ram-900gb-of.html' title='3 CPUs (7 cores), 11GB of RAM, 900GB of Storage, Shitty GPU...'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-2921088328146690018</id><published>2008-06-19T12:04:00.004+08:00</published><updated>2008-06-19T12:15:06.921+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Driver'/><category scheme='http://www.blogger.com/atom/ns#' term='nVidia'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>NVRM: pmd not present for addr %x</title><content type='html'>&lt;p&gt;如果您使用 nVidia 的顯示卡與官方驅動程式，dmesg 中又一直出現這個訊息的話，表示您忘記載入 cpufreq 驅動程式了。可是... 為什麼明明就是顯示卡的 module，可是卻使用 cpufreq 的東西咧？&lt;/p&gt;
&lt;p&gt;真是令人不解！&lt;/p&gt;
&lt;p&gt;無論如何，只要載入 cpufreq 的 module，dmesg 中就不會再一直出這個訊息了。&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;// 我的是 powernow-k8，請自己改成適當的 driver：
# modprobe powernow-k8&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-2921088328146690018?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/2921088328146690018/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=2921088328146690018' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/2921088328146690018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/2921088328146690018'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/06/nvrm-pmd-not-present-for-addr-x.html' title='NVRM: pmd not present for addr %x'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-3338409856818979966</id><published>2008-05-12T16:54:00.007+08:00</published><updated>2008-05-12T17:55:35.532+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='網路'/><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>怠惰的程式員設計的 php template engine</title><content type='html'>&lt;p&gt;想要從&lt;a href="http://www.csie.cyut.edu.tw/"&gt;敝系&lt;/a&gt;畢業的話，必須先考過系上的&lt;a href="http://163.17.10.7/news_sub_t.aspx?No=385"&gt;程式能力檢定&lt;/a&gt;。雖然他有提供&lt;a href="http://163.17.10.7/news_sub_t.aspx?No=378"&gt;練習用伺服器&lt;/a&gt;，但是用起來很囉唆，要裝一堆軟體、設定 IP 等等有的沒的。&lt;/p&gt;
&lt;p&gt;為了讓拙荊方便練習，上學期中我就抽空寫了個&lt;a href="http://palatis.iiiii.info/%7Epalatis/fake_progtest/"&gt;功能目標類似的小網站&lt;/a&gt;給她，還有其他程檢沒過的同學們玩。不過... 到最後來玩的都是過的，沒過的都懶得玩 = =&lt;/p&gt;
&lt;p&gt;Anyway，這門零學分不上課的必修課可是系上唯一有開暑修的課，意思是說這些沒過的傢伙暑假又得再考一次。於是我想把上學期寫的這個東西拿出來整理一下，看看有沒有可以改進的地方...&lt;/p&gt;
&lt;p&gt;想進化的第一個門檻就是，之前寫的時候時間有點趕，整個程式以 procedural 為主，完全沒有考慮到安全性、擴充性、與維護等等議題。首先把 Program 與 Presentation 分開，就需要用到一個 template engine。但是 php 的 template engine 都是 &lt;a href="http://www.smarty.net/"&gt;Smarty&lt;/a&gt; 一類的大傢伙，我實在不想也懶得把他抓進來放到我這只有兩三個檔案的小專案裡面。於是，這個東西就誕生了！&lt;/p&gt;
&lt;code&gt;&amp;lt;?php&lt;br /&gt;
// 設定 Template 檔案所在目錄&lt;br /&gt;
define('_STUPIDITY_TEMPLATE_DIR_', '/home/username/public_html/project_name/stupidity');&lt;br /&gt;
&lt;br /&gt;
class Stupidity&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function assign($key, $value)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$this-&gt;_assigned[$key] = $value;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function get($key)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return $this-&gt;_assigned[$key];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function say($key)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo $this-&gt;_assigned[$key];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function render()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;global $stupidity;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;include_once(_STUPIDITY_TEMPLATE_DIR_ . '/' .&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;$this-&gt;template_filename);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$stupidity = new Stupidity();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;/code&gt;
&lt;p&gt;用起來也很簡單，在程式的部份先 include stupidity.php，設定 template filename，assign 資料以後，再 render 就行了：&lt;/p&gt;
&lt;code&gt;====== index.php ======&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
include('stupidity.php');&lt;br /&gt;
$stupidity-&gt;template_filename = 'index.stupid';&lt;br /&gt;
$stupidity-&gt;assign('author', 'Palatis');&lt;br /&gt;
$stupidity-&gt;render();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== stupidity/index.stupid ======&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;I N D E X&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;h1&amp;gt;I N D E X&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p&amp;gt;Copyright 2008 by &amp;lt;?php $stupidity-&gt;say('author'); ?&amp;gt;.&amp;gt;/p&amp;lt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;
&lt;p&gt;BSD License！不過我沒有對它作過任何測試，如果爆掉的話就... 好自為之喔！&lt;/p&gt;
&lt;p&gt;BTW... 這個檢定系統 &lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt; 會想買嗎？XD～&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-3338409856818979966?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/3338409856818979966/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=3338409856818979966' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/3338409856818979966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/3338409856818979966'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/05/php-template-engine.html' title='怠惰的程式員設計的 php template engine'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-5902038905914006694</id><published>2008-05-12T10:51:00.004+08:00</published><updated>2008-05-12T17:53:39.001+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='告訴你系列'/><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><title type='text'>[Palatis 告訴你] 什麼是 DoS、DDoS 攻擊？</title><content type='html'>&lt;p&gt;DoS 是 Denial of Service 的縮寫，翻譯成中文就是「阻斷服務攻擊」。這個種類的攻擊，應該大部分的未成年人都遭受過：
&lt;blockquote&gt;你半夜偷偷上網，結果老媽進來把電源拔掉。&lt;/blockquote&gt;
應該是最常發生也最常見的 DoS。&lt;/p&gt;
&lt;p&gt;至於 DDoS 則是 Distributed Denial of Service，即「分散式阻斷服務攻擊」：
&lt;blockquote&gt;你半夜偷偷上網，結果老爸老媽姑姑嬸嬸叔叔伯伯一起進來，一個抓住你的手、一個抓你腳、一個擋住你眼睛、一個拔掉你電源線、一個拔掉網路線。&lt;/blockquote&gt;
這樣就是 DDoS。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-5902038905914006694?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/5902038905914006694/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=5902038905914006694' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/5902038905914006694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/5902038905914006694'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/05/palatis-dosddos.html' title='[Palatis 告訴你] 什麼是 DoS、DDoS 攻擊？'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-381336801741426272</id><published>2008-05-05T04:42:00.004+08:00</published><updated>2008-05-05T05:23:20.490+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='印象深刻的夢'/><title type='text'>印象深刻的夢 - 死小孩篇</title><content type='html'>&lt;p&gt;昨天（2008/05/03）早上做了個夢，如果拍成電影應該可以算是恐怖片一類的，但是起來以後並沒有被嚇到的感覺，只是覺得震驚。&lt;/p&gt;
&lt;p&gt;我夢到我媽在開車（一直都是那台香檳色的 Toyota Camery），我坐在後座右邊的位置。總覺得車上還有另外一個人，可是記不清楚了，有可能是我妹，第三個人坐在哪裡也記不清楚了。&lt;p&gt;
&lt;p&gt;我媽開著車子走在一條雙向六線道的路上，路很寬，中間有安全島，有點像高速公路，可是兩邊有四層的房子跟店家，安全島也沒有高速公路那麼高。路上車子很多，前後車距只有約不到一個車身，而且三條線都有車，我媽的車以不慢的車速開在快車道上。&lt;/p&gt;
&lt;p&gt;突然間，從右前方的車子前面衝出一個五、六歲穿白色 T-Shirt、深藍色短褲的小男孩（應該是男孩，他留著普通的旁分短髮），我媽就緊急煞車，然後把車撞向安全島。但是還是閃避不及，後輪輾過那個小男孩的頭。&lt;/p&gt;
&lt;p&gt;車子停下來以後，我們趕緊下車查看，我叫車上的第三個人打電話報警，我自己則是一邊找那個小男孩在哪裡，一邊叫救護車。只記得那個小男孩從脖子以上都沒有東西，身上的白色 T-Shirt 從領口到胸口沾滿血跡，轎車的後輪也有一道血痕，地上有模糊的血肉，不過車子本身似乎並沒有什麼事。&lt;/p&gt;
&lt;p&gt;從右手邊的車縫中，又跑出來一些（兩三個吧！）看似男孩家屬的人出來五子哭墓，並斥責我媽要她負責。不過我媽的立場是，她認為已經做了她該做的事（緊急煞車並且把車撞向安全島），而小孩的家長也沒把小孩看好，讓她跑來快車道，所以家屬要負大部分的責任，所以在兩邊快要打起來的狀況下跟對方&lt;b&gt;理論&lt;/b&gt;。&lt;/p&gt;
&lt;p&gt;不過奇怪的是，本來我媽在開車的時候是現在（五十歲）的樣子，可是在下了車跟對方理論的時候，卻變成我小的時候的媽媽（三十幾歲）的樣子了。而且我覺得我也不是現在的我，而是三、四年前的我。&lt;/p&gt;
&lt;p&gt;我在看到小孩衝出來的時候，並沒有什麼太緊張的感覺，只是很平靜的想「耶？怎麼會有小朋友衝出來？」，下車之後要打電話吆喝車上的第三人的時候，也不是因為緊張而大聲吆喝，而是因為緊急所以聲音比平常急。&lt;/p&gt;
&lt;p&gt;最後，夢就在我媽跟對方家屬理論、有點生氣的述說自己已經煞車、打方向盤云云後結束了。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-381336801741426272?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/381336801741426272/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=381336801741426272' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/381336801741426272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/381336801741426272'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/05/blog-post.html' title='印象深刻的夢 - 死小孩篇'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-380715740529206434</id><published>2008-04-30T19:32:00.006+08:00</published><updated>2008-04-30T20:05:30.237+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='嘴砲轟'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrasis'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='學校'/><title type='text'>戰鬥即將結束，抬頭仰望星空～</title><content type='html'>&lt;p&gt;耗時兩年，做得不怎麼樣的畢業專題 - &lt;a href="http://chrasis.blogspot.com"&gt;Chrasis&lt;/a&gt;，終於在昨天展完。剩下的只有把程式碼燒進光碟（應該燒成 &lt;a href="http://zh.wikipedia.org/w/index.php?title=%E8%97%8D%E5%85%89%E5%85%89%E7%A2%9F&amp;variant=zh-tw"&gt;Blue-ray Disk&lt;/a&gt;，充分浪費儲存空間！），跟成果報告書一起塞進圖書館陰暗角落的書櫃中。&lt;/p&gt;
&lt;code&gt;$ du chrasis/ -hs&lt;br /&gt;
35924 chrasis/&lt;/code&gt;
&lt;p&gt;程式碼有 36MB 呢！真是佩服我自己，花了兩年居然只能寫這麼點東西，都不知道在混什麼... = =&lt;/p&gt;
&lt;p&gt;不過我在展的時候... 好像都沒有被老師ㄉㄧㄤ到咧？據說別組被ㄉㄧㄤ的很慘...&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: bold;"&gt;--- Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz 分隔線 ---&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;據說有更屌的... 某組別的同學在評分老師（下稱 TeacherQ）&lt;span style="font-weight: bold;"&gt;質詢&lt;/span&gt;的時候，該組的指導老師（下稱 TeacherM，同時也是敝系主任）剛好在旁邊。結果 TeacherQ 問的問題全都是 TeacherM 在回答。哇咧！？這是怎樣？那我找指導老師來顧攤就好了嘛，絕對問不倒的！&lt;/p&gt;
&lt;p&gt;還有就是，這次專題展系上每組僅提供一台電腦，而且這台電腦是於 90 年 11 月 22 日以 $50000 採購，使用年限四年的機器。意思是說，這個東西已經過了線性折舊期，可以拿去報銷了。那我如果&lt;span style="font-weight: bold;"&gt;不小心&lt;/span&gt;把它弄壞的話，只要賠 $0 囉？&lt;/p&gt;
&lt;p&gt;另外，因為我們的展覽有分兩個梯次，下一組展覽的同學把我們借的設備也拿去用了（奇怪，我們需要三台電腦要自己出兩台，他們只要出一台就好，是怎麼回事？）。可是因為專題需要，我把那台電腦灌成 &lt;a href="http://www.ubuntu.org.tw"&gt;Ubuntu&lt;/a&gt; 了耶！！！&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: bold;"&gt;--- Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz 分隔線 ---&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;還有一件想起來的時候已經來不及的事情... 本來想說要利用專題展的時候&lt;span style="font-weight: bold;"&gt;偷偷&lt;/span&gt;蒐集 stroke data 的，可是展覽結束我居然忘記把他們複製出來 = = 白忙一場了...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-380715740529206434?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/380715740529206434/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=380715740529206434' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/380715740529206434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/380715740529206434'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/04/blog-post_30.html' title='戰鬥即將結束，抬頭仰望星空～'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-726615668845189942</id><published>2008-04-30T19:02:00.004+08:00</published><updated>2008-04-30T20:00:41.694+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='網路'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='好東西'/><title type='text'>Gentoo 下的 DNS 設定（Modular Network）</title><content type='html'>&lt;p&gt;在 &lt;a href="http://www.gentoo.org/"&gt;Gentoo&lt;/a&gt; 下，設定網路是那麼容易也那麼的不容易。不經大腦的把 /etc/conf.d/net 砍掉的話，一切就使用美好的預設設定。但是若要更改一點點東西，就很令人 OOXX。&lt;/p&gt;
&lt;p&gt;最近想把 dns server 換成 &lt;a href="http://www.opendns.com/"&gt;OpenDNS&lt;/a&gt;，但是每次 dhcp 跟 ppp 都把我的 resolv.conf 亂改成自己想要的內容（如 192.168.1.1 或 hinet dns），真是令人火大。&lt;/p&gt;
&lt;p&gt;好在有 openresolv 這個好東西，裝了以後就沒煩惱了！雖說這個主要是給 vpn 用的...&lt;/p&gt;
&lt;p&gt;首先安裝：&lt;/p&gt;
&lt;code&gt;# emerge openresolv&lt;/code&gt;
&lt;p&gt;然後設定：&lt;/p&gt;
&lt;code&gt;# echo -e 'nameserver 208.67.222.222\nnameserver 208.67.220.220' | resolvconf -a $INTERFACE&lt;/code&gt;
&lt;p&gt;請把 $INTERFACE 換成您的 interface，如 eth0 或 ppp0：&lt;/p&gt;
&lt;code&gt;# echo -e 'nameserver 208.67.222.222\nnameserver 208.67.220.220' | resolvconf -a eth0&lt;br /&gt;
# echo -e 'nameserver 208.67.222.222\nnameserver 208.67.220.220' | resolvconf -a ppp0&lt;/code&gt;
&lt;p&gt;然後讓他更新：&lt;/p&gt;
&lt;code&gt;# resolvconf -u&lt;/code&gt;
&lt;p&gt;這麼一來，就可以用 OpenDNS 查 domain name 了！&lt;/p&gt;
&lt;code&gt;# host -v palatis.iiiii.info&lt;br /&gt;
Trying "palatis.iiiii.info"&lt;br /&gt;
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 55262&lt;br /&gt;
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0&lt;br /&gt;
&lt;br /&gt;
;; QUESTION SECTION:&lt;br /&gt;
;palatis.iiiii.info.  IN A&lt;br /&gt;
&lt;br /&gt;
;; ANSWER SECTION:&lt;br /&gt;
palatis.iiiii.info. 28 IN A 220.141.34.251&lt;br /&gt;
&lt;br /&gt;
Received 52 bytes from 208.67.222.222#53 in 157 ms&lt;br /&gt;
Trying "palatis.iiiii.info"&lt;br /&gt;
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 14133&lt;br /&gt;
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0&lt;br /&gt;
&lt;br /&gt;
;; QUESTION SECTION:&lt;br /&gt;
;palatis.iiiii.info.  IN AAAA&lt;br /&gt;
&lt;br /&gt;
Received 36 bytes from 208.67.222.222#53 in 156 ms&lt;br /&gt;
Trying "palatis.iiiii.info"&lt;br /&gt;
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 16198&lt;br /&gt;
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0&lt;br /&gt;
&lt;br /&gt;
;; QUESTION SECTION:&lt;br /&gt;
;palatis.iiiii.info.  IN MX&lt;br /&gt;
&lt;br /&gt;
Received 36 bytes from 208.67.222.222#53 in 168 ms&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-726615668845189942?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/726615668845189942/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=726615668845189942' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/726615668845189942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/726615668845189942'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/04/gentoo-dns-modular-network.html' title='Gentoo 下的 DNS 設定（Modular Network）'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-943281293643279794</id><published>2008-04-28T21:53:00.005+08:00</published><updated>2008-04-28T22:22:55.533+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='天馬行空'/><title type='text'>偶發性思考</title><content type='html'>&lt;p&gt;好久沒寫 blog 了，再不更新不知道會不會被 &lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt; 刪帳號...&lt;/p&gt;
&lt;p&gt;專題展正在展，現在稍微比較閒一點。人肚子餓就想找東西吃，吃飽了就想東想西。最近就想到個奇怪的東西...&lt;/p&gt;
&lt;p&gt;這個奇怪的... 恩... 姑且稱為產品好了。我想在衣服背後用 e-ink 之類的東西印一個 display，配合 wlan 或其他定位技術，可以用來指向某個特定的位置。例如去參加某活動（&lt;a href="http://coscup.org/2007/"&gt;COSCUP&lt;/a&gt;/&lt;a href="http://osdc.tw/"&gt;OSDC&lt;/a&gt;/&lt;a href="http://www.comicworld.com.tw/"&gt;CWT&lt;/a&gt;...?）的時候，通常都要東找西找某個設施，如會場或廁所。於是讓工作人員穿上這樣的衣服，直接有個箭頭指向會場或週邊的重要設施，參加的來賓看到就知道要往哪裡走了。甚至可以配合顯示還有多遠這樣... （謎之聲：幹嘛不放個告示牌就好了？我：唔......）或是可以讓講者攜帶定位裝置，這樣要找某位講者，可以讓大家衣服上的箭頭都指向那個講者。可能還有其他應用，暫時沒想到。不過基本上是電子墨水跟無線網路的 mash-up。&lt;/p&gt;
&lt;p&gt;這種衣服還有個好處，可以上網下載花紋... 例如我今天要穿紅色的花紋，就上網下載以後顯示在衣服上。如果我突然想要其他顏色，就去下載些其他圖案，就像換桌布那樣。於是你要開正式會議的時候，就讓它變成什麼都沒有的白襯衫，開完會換個圖案馬上就可以去夜店，多好！像 &lt;a href="http://blog.linux.org.tw/~jserv/archives/001998.html"&gt;jserv 這種人&lt;/a&gt;（剛好想起前幾個禮拜拜讀他這篇文章，並無冒犯之意...）就得救了！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-943281293643279794?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/943281293643279794/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=943281293643279794' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/943281293643279794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/943281293643279794'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2008/04/blog-post.html' title='偶發性思考'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-1193048536282128174</id><published>2007-06-07T05:19:00.000+08:00</published><updated>2007-06-07T05:25:54.420+08:00</updated><title type='text'>Chrasis 0.1.0 alpha!</title><content type='html'>&lt;p&gt;嗯... 廣告文 XD~&lt;/p&gt;
&lt;p&gt;這兩天把散落一地的 code 整理了一下，作成了可以放到 /usr/lib 底下的 library。又另外拼湊了一個 Trainer 出來，看起來比較「動感（interactive）」一點，可以 online 告訴你辨識率（這樣感覺比較像有在辨識）。&lt;/p&gt;
&lt;p&gt;想玩玩看嗎？請見 &lt;a href="http://chrasis.blogspot.com/"&gt;Chrasis 首頁&lt;/a&gt;！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-1193048536282128174?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/1193048536282128174/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=1193048536282128174' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1193048536282128174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1193048536282128174'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/06/chrasis-010-alpha.html' title='Chrasis 0.1.0 alpha!'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-151700481421349815</id><published>2007-06-04T12:32:00.000+08:00</published><updated>2007-06-04T12:44:20.616+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='網路'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><category scheme='http://www.blogger.com/atom/ns#' term='好東西'/><title type='text'>喂喂，別盜用我的無線網路！</title><content type='html'>&lt;p&gt;在 oftc 的 #dot，pnt 兄分享了&lt;a href="http://www.ex-parrot.com/~pete/upside-down-ternet.html"&gt;一篇文章&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;喂喂！這也太狠了吧？XD~&lt;/p&gt;
&lt;p&gt;看吧，只要稍微學會 Linux，你就可以做&lt;a href="http://www.ex-parrot.com/~pete/shot3.png"&gt;這種事&lt;/a&gt;惡整盜用你家 wlan 的鄰居！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-151700481421349815?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/151700481421349815/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=151700481421349815' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/151700481421349815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/151700481421349815'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/06/blog-post_04.html' title='喂喂，別盜用我的無線網路！'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-1909830413189383828</id><published>2007-06-01T19:47:00.000+08:00</published><updated>2007-06-01T19:52:28.973+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='嘴砲轟'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><title type='text'>換湯不換藥</title><content type='html'>&lt;p&gt;ㄟ... 這會不會太扯？&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sCIYrLqeyI8/RmAH8XGIjcI/AAAAAAAAAAk/0RLqjqTYL68/s1600-h/screen20070601194609.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sCIYrLqeyI8/RmAH8XGIjcI/AAAAAAAAAAk/0RLqjqTYL68/s320/screen20070601194609.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5071061913992465858" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;課程名稱一個樣，課程內容另一個樣...&lt;/p&gt;
&lt;p&gt;不知道什麼時候可以改好一點 = = &lt;a href="http://www.tcca.org.tw/tc2/a_02_01.asp?so=20&amp;manes=Linux%BA%F4%AF%B8%BA%DE%B2z%B5%D7%AD^%AFS%B0V%AFZ"&gt;網址在這裡&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-1909830413189383828?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/1909830413189383828/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=1909830413189383828' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1909830413189383828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1909830413189383828'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/06/blog-post.html' title='換湯不換藥'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_sCIYrLqeyI8/RmAH8XGIjcI/AAAAAAAAAAk/0RLqjqTYL68/s72-c/screen20070601194609.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-3004468653150558254</id><published>2007-05-08T04:04:00.000+08:00</published><updated>2007-05-08T04:51:27.627+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='系統調校'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='好東西'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>讓 Firefox 開快點 - 關掉啟動時的自動更新</title><content type='html'>&lt;p&gt;即使我已經&lt;a href="http://palatis.blogspot.com/2006/12/blog-post.html"&gt;無所&lt;/a&gt;&lt;a href="http://blog.twpug.org/post/30/280"&gt;不用&lt;/a&gt;&lt;a href="http://people.redhat.com/mingo/cfs-scheduler/sched-design-CFS.txt"&gt;其極&lt;/a&gt;的想辦法讓程式載入的速度快點，但是碰上 Firefox 這頭怪獸，把他從磁碟裡拖到螢幕上裡還是得花個兩三秒。&lt;/p&gt;
&lt;p&gt;後來，我發現 Firefox 會嘗試在啟動的時候（程式已經啟動、但是視窗跳出之前）更新附加元件與搜尋引擎。這麼一來，若有更新，可以不必在你已經開了一堆視窗以後，跳個對話方塊出來要求你重新啟動 Firefox。&lt;/p&gt;
&lt;p&gt;但是，由於網路的 latency，檢查更新的速度快則半秒，慢則一兩秒，可以說在我 Firefox 的啟動過程中，佔掉了 20~50% 的等待時間。於是，我決定將它關掉，並安裝另一個 extension 來檢查更新。（反正又不是一天到晚有更新檔要裝，但是我可是一天到晚都會關閉、開啟 Firefox 啊！）&lt;/p&gt;
&lt;p&gt;怎麼關呢？請至「編輯 =&gt; 偏好設定 =&gt; 進階 =&gt; 更新」下，將「自動檢查是否有更新」下的所有東西（應該有三個，分別是「Firefox」、「以安裝的附加元件」、「搜尋引擎」）取消選取。如下圖所示：&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sCIYrLqeyI8/Rj-PWf2K52I/AAAAAAAAAAc/4csDgNNaSIU/s1600-h/screenshot3.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sCIYrLqeyI8/Rj-PWf2K52I/AAAAAAAAAAc/4csDgNNaSIU/s320/screenshot3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5061922122856327010" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;可是這樣 Firefox 不就不會幫我更新這些東西了嗎？沒關係，讓我們裝上「&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/2098"&gt;Update Notifier&lt;/a&gt;」來負責這件苦差事：
&lt;ul&gt;
  &lt;li&gt;首先按下「Install Now」來安裝&lt;/li&gt;
  &lt;li&gt;可憐的你必須重開 Firefox 了！&lt;/li&gt;
  &lt;li&gt;重開以後，右上角會多出一個小圖示，請你點他一下&lt;/li&gt;
  &lt;li&gt;按一下「選項」進入設定頁面&lt;/li&gt;
  &lt;li&gt;於「一般」頁面，將「當 Firefox 啟動時，檢查有無更新檔可用。」&lt;b&gt;取消&lt;/b&gt;選取&lt;/li&gt;
  &lt;li&gt;在「通知」頁面，將「設定 Firefox 多久檢查一次更新。」選取，並依照您雞皮的程度設定每次檢查的間隔時間。&lt;/li&gt;
  &lt;li&gt;按下「確定」！&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;這麼一來，每次啟動 Firefox 至少又可以快個 0.5 秒啦！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-3004468653150558254?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/3004468653150558254/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=3004468653150558254' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/3004468653150558254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/3004468653150558254'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/05/firefox.html' title='讓 Firefox 開快點 - 關掉啟動時的自動更新'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sCIYrLqeyI8/Rj-PWf2K52I/AAAAAAAAAAc/4csDgNNaSIU/s72-c/screenshot3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-5482116227321698578</id><published>2007-05-05T01:45:00.000+08:00</published><updated>2007-05-05T03:28:16.731+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='嘴砲轟'/><category scheme='http://www.blogger.com/atom/ns#' term='學校'/><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><title type='text'>美勞課考卷發了！</title><content type='html'>&lt;p&gt;&lt;a href="http://palatis.blogspot.com/2007/04/blog-post_20.html"&gt;&lt;span style="text-decoration: line-through;"&gt;美勞&lt;/span&gt;嵌入式系統&lt;/a&gt;期中考時，有類似這樣的題組：&lt;/p&gt;
&lt;blockquote&gt;
  &lt;code&gt;
# ls -al&lt;br /&gt;
Total 20&lt;br /&gt;
drwxr-xr-x 2 tblanku users 4096 May  5 02:20 .&lt;br /&gt;
drwxr-xr-x 9 root    root  4096 Mar 24 08:26 ..&lt;br /&gt;
-rw-r--r-- 1 tblanku users  127 Mar  4 07:32 .bash_logout&lt;br /&gt;
-rw-r--r-- 1 tblanku users  193 Mar  4 07:32 .bash_profile&lt;br /&gt;
-rw-r--r-- 1 tblanku users  551 Mar  4 07:32 .bashrc&lt;br /&gt;
-rw-r--r-- 1 root    root     0 May  5 02:20 somefile&lt;br /&gt;
-rw-r--r-- 1 root    root   213 May  5 02:20 other file
  &lt;/code&gt;
  &lt;p&gt;請問 tblanku 可否刪除 somefile 這個檔案？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我當然是寫「是，因為刪除檔案是看目錄權限。」可是，老師在檢討考卷的時候居然說：「因為 somefile 的擁有者是 root，tblanku 只有讀取的權限，所以不能刪除。」所以就被改錯了 XD~&lt;/p&gt;
&lt;p&gt;這種 well-known 的 gotcha 也會掉進去！？ @@ 而且，他&lt;b&gt;果然&lt;/b&gt;出了「不能使用空格」這種題目...&lt;/p&gt;
&lt;p&gt;Linux 的檔案系統並沒有硬性規定檔名使用的編碼（或是，哪些字元可用、哪些不可用），而是把這部份的決定留給了使用者。除了「/」這個目錄分隔符號以外，其他字元都可以拿來當檔名。&lt;/p&gt;
&lt;p&gt;還有一些被說得很好笑的答案：&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Q: 如果要把「install.sh」更名為「setup.sh」，要下什麼指令？&lt;/p&gt;
  &lt;p&gt;A: mv {install,setup}.sh&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;結果被批「沒有人會這樣用」... &lt;/p&gt;
&lt;p&gt;還有一題...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Q: 雖然圖形介面簡單好用，為什麼在開發嵌入式系統的時候需要使用指令模式？&lt;/p&gt;
  &lt;p&gt;A: &lt;span style="font-size: large;"&gt;因為你不會用！&lt;/span&gt;還是有很多圖形介面的工具可以輔助嵌入式系統開發的。Open Source, Open Mind!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;結果上課的時候被說「有人跟我嗆聲，說是因為我不會用」XD~&lt;/p&gt;
&lt;p&gt;嗯... 我想你還是繼續放 &lt;a href="http://www.nttdocomo.com/"&gt;NTT DoCoMo&lt;/a&gt; 的&lt;a href="http://www.youtube.com/results?search_query=docomo&amp;search=Search"&gt;宣傳影片&lt;/a&gt;好了...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-5482116227321698578?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/5482116227321698578/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=5482116227321698578' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/5482116227321698578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/5482116227321698578'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/05/blog-post.html' title='美勞課考卷發了！'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-4911648192518776189</id><published>2007-05-02T00:41:00.000+08:00</published><updated>2007-05-05T04:10:24.003+08:00</updated><title type='text'>題意 XD</title><content type='html'>&lt;p&gt;前幾天（May 1, 2007）系上舉辦&lt;a href="http://163.17.10.7/news_sub_t.aspx?No=293"&gt;程式設計比賽&lt;/a&gt;，出了四道題目。其中一題大概是這樣的（題目卷收回去了，所以只能列出大概...）：&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;今天有一由英文字母與括號組成的字串 S，可以對他們作 HEAD 與 TAIL 兩種操作，行為是這樣：若 S=a(bc)，則 HEAD(S)=a、TAIL(S)=bc，若 S=(bc) 則 HEAD(S)=NULL、TAIL(S)=bc，&lt;span style="text-decoration: underline;" title="這一段"&gt;若 S=a，則 HEAD(S)=NULL&lt;/span&gt;。&lt;/p&gt;
  &lt;p&gt;範例輸入：&lt;br /&gt;a(b(cd)))&lt;br /&gt;TAIL&lt;br /&gt;HEAD&lt;/p&gt;
  &lt;p&gt;範例輸出：&lt;br /&gt;b&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;恩... 不要問我為什麼出這麼簡單的題目，因為我也不知道 = = 總之，看到這個題目，我想到類似以下的表格：&lt;/p&gt;
&lt;blockquote&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;td&gt;S&lt;/td&gt;
      &lt;td&gt;HEAD&lt;/td&gt;
      &lt;td&gt;TAIL&lt;/td&gt;
    &lt;/thead&gt;
    &lt;tr&gt;
      &lt;td&gt;a(bc)&lt;/td&gt;
      &lt;td&gt;a&lt;/td&gt;
      &lt;td&gt;bc&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;(bc)&lt;/td&gt;
      &lt;td&gt;NULL&lt;/td&gt;
      &lt;td&gt;bc&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;a&lt;/td&gt;
      &lt;td&gt;NULL（題目這樣說嘛！）&lt;/td&gt;
      &lt;td&gt;a（猜的）&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
&lt;/blockquote&gt;
&lt;p&gt;於是，寫出程式碼以後，驗證失敗... 花了些時間修改以後，最後還是錯誤。&lt;/p&gt;
&lt;p&gt;比賽結束後，就去問&lt;a href="http://palatis.blogspot.com/2006/03/blog-post_10.html"&gt;監考老師&lt;/a&gt;，看能不能取得測試資料，順便問他我們到底錯在哪。當時他看了看題目以後，說「喔，應該是題目錯了，如果沒有這行（S=a HEAD(S)=NULL）就對了。」&lt;/p&gt;
&lt;p&gt;那... 廢話嘛 = = 哪有「題目錯了，我們也就跟著錯了」這種事，當然要想辦法補救（至少要能讓人家覺得這是場公平的比賽）。可是當時老師跟助教就一付息事寧人的態度，對我們說「不然你是想要我怎樣？向全校公開道歉嗎？」實在很無言。就這樣，我們當天在系辦吵了兩個多小時。&lt;/p&gt;
&lt;p&gt;後來，老師、助教、我們自己又調備份資料出來看，才終於弄懂到底錯在哪。原來題目跟測試資料都沒問題，是我們誤解了題意。如果 S=a(bc) 是 general case，括號前面的是 HEAD、裡面的是 TAIL。而 S=(bc) 是只有 TAIL 時的 special case, HEAD 是 NULL、TAIL 是括號中剩下的東西。而 S=a 是只有 HEAD 的 special case，不但 TAIL=NULL、連 HEAD 也一併變成 NULL 了。&lt;/p&gt;
&lt;p&gt;嗯，好吧！的確是自己會錯題意，既然這樣就沒話說了。雖然我好像也測過 S=a HEAD=NULL TAIL=NULL 這種組合... 可能是其他部份的程式碼有問題吧！&lt;/p&gt;
&lt;p&gt;後來我問我的&lt;a href="http://palatis.blogspot.com/2005/10/blog-post_30.html" title="告訴我心得那位同學"&gt;隊友&lt;/a&gt;「我是不是很龜毛？」，他說「是，我當時就想叫你算了」。我告訴他的理由是，「因為這是比賽，我不願意在不明不白的狀況下贏過別人，也不能不明不白讓別人贏過我」。他後來也就理解了，也陪我跟老師囉唆了兩天 XD~&lt;/p&gt;
&lt;p&gt;不過題外話... 有另外一題大概是這樣：&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;小明走在海邊檢石頭，每次只能撿比目前石頭重，而且不能往回走。而且為了避免一下子拿太重手臂負荷不了，所以只能拿比現在重十公斤以內的石頭。例如目前拿的石頭是 5kg，那麼下一次只能換成 6~15kg 的石頭。請問怎樣的拿法，可以達到最多交換次數？&lt;/p&gt;
  &lt;p&gt;範例輸入：&lt;br /&gt;3 2 21 60 4 6 8 70 44 7 5 10 33 9 11&lt;/p&gt;
  &lt;p&gt;範例輸出：&lt;br /&gt;6&lt;br /&gt; 2 4 6 8 10 11（我沒有實際算，這裡的答案是隨便唬嚨的...）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我一看到這個題目，就跟隊友說「這個可能有兩組最佳解吧？」，於是他就問老師「如果有兩組以上最佳解怎麼辦？」結果老師跟助教很肯定的跟我說「測試資料只有一組最佳解。」&lt;/p&gt;
&lt;p&gt;很好，跑出來他的一些測試資料裡會有兩到三組最佳解 = = 嗯... 驗證失敗 XD~&lt;/p&gt;
&lt;p&gt;搞成這樣我也不知道該說什麼，不過老師最後還是給我們對，但是時間就不知道該怎麼算了...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-4911648192518776189?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/4911648192518776189/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=4911648192518776189' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/4911648192518776189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/4911648192518776189'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/05/xd.html' title='題意 XD'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-5665143118785142085</id><published>2007-04-20T16:37:00.000+08:00</published><updated>2007-04-20T17:36:50.557+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='嘴砲轟'/><category scheme='http://www.blogger.com/atom/ns#' term='學校'/><title type='text'>嵌入式系統 之於 美勞</title><content type='html'>&lt;blockquote&gt;
  &lt;p&gt;「如果你那麼想玩（ARM9 的）板子，可以自己去買。」&lt;/p&gt;
  &lt;p style="text-align: right;"&gt;朝陽科技大學 95 學年度&lt;br /&gt;資訊工程系「嵌入式系統」課程&lt;br /&gt;講師 - &lt;a href="http://www.csie.cyut.edu.tw/~honda/index.htm"&gt;陳宏達&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://www.csie.cyut.edu.tw/"&gt;我們系上&lt;/a&gt;本學期的選修課之一「嵌入式系統」，預定的開發環境是 Embedded Linux。&lt;/p&gt;
&lt;p&gt;無可厚非的，前幾次上課是在作「嵌入式系統」與「Linux 基本操作」的簡介，恩... 考慮到他幫忙推廣 Linux，就... 先算了吧。不過，他還是宣導了許多不知道哪裡發明的謬論...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;「你們可以先去下載 &lt;a href="http://www.vmware.com/"&gt;VMWare&lt;/a&gt; 回來灌（Linux），不過他要註冊，而且只能用 30 天。不過我知道你們一定很有辦法，去一些大陸網站找一下就可以永遠試用下去。」&lt;br /&gt;（我的天啊！身為一個資訊工程系的教師，不但避免使用無授權的軟體，還在課堂上變相要大家想辦法找破解？拜託，資訊工程系的學生，以後出社會可是要寫軟體的。如果連自己都使用盜版軟體，以後寫出來的產品要賣給誰？）&lt;/p&gt;
  &lt;p&gt;「你們在灌（Linux）的時候，只要用文字介面就好。高手都用文字介面，只有新手才需要圖形介面。」&lt;br /&gt;（怎樣？把全世界的 Linux 桌面使用者都當新手是吧？唔... 沒有啦，我承認我是新手 XD~）&lt;/p&gt;
  &lt;p&gt;「Linux 下無法建立以 "-" 開頭的檔案，也不能建立中間有 "*"、"?" 或 " "（空格）的檔案。」&lt;br /&gt;（我已經打算，他如果在期中考出這題，又把我改錯，我就當場問他「如果我現在建出來，是不是全班送分？」。）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;好，這些都可以算了，畢竟不關我的事。第一，我電腦裡沒有盜版軟體；第二，我是 Linux 新手（XD~）；第三，我知道怎麼建立這些檔案。&lt;/p&gt;
&lt;p&gt;可是，都已經要期中考（意思就是開學到現在經過了約兩個月了）了，大家還沒看到板子長什麼樣子。於是我就問了...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;「老師，請問到底什麼時候可以玩到板子？」&lt;/p&gt;
  &lt;p&gt;「Linux 都不會用就想玩板子？」&lt;/p&gt;
  &lt;p&gt;「我已經用一陣子，也大概會用了。」&lt;/p&gt;
  &lt;p&gt;「還有 Toolchain 啊，那個都沒弄好就想玩板子？」&lt;/p&gt;
  &lt;p&gt;「那個我已經都編好等著了。」&lt;/p&gt;
  &lt;p&gt;「總是要配合其他同學的進度啊！」&lt;/p&gt;
  &lt;p&gt;「......」（&lt;span style="font-weight: bolder; color: red;"&gt;幹&lt;/span&gt;，我繳學費來學校，是為了配合大家的進度？）&lt;/p&gt;
  &lt;p&gt;「如果你真的那麼想玩板子，可以自己去買。」&lt;/p&gt;
  &lt;p&gt;「............」（&lt;span style="font-size: xx-large; font-weight: bolder; color: red;"&gt;幹&lt;/span&gt;，如果我去買了塊板子放家裏，還需要來上你的課？）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;接著，又說了些...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;「有一個研究生學長，為了專題，花了十多萬買硬體。」&lt;/p&gt;
  &lt;p&gt;「普通的開發版，大概一兩萬就買的到了。」&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;其實想想，從小到大...&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;上美勞課要自己買彩色筆&lt;/li&gt;
  &lt;li&gt;上工藝課要自己買材料&lt;/li&gt;
  &lt;li&gt;上程式設計可以自己買台電腦&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以此類推...&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;上嵌入式系統要自己買開發版&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;似乎還蠻合理的！&lt;/p&gt;
&lt;p&gt;幹，宏達老師，您怎麼不&lt;a href="http://palatis.blogspot.com/2005/03/blog-post.html"&gt;多感冒幾次&lt;/a&gt;？&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-5665143118785142085?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/5665143118785142085/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=5665143118785142085' title='5 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/5665143118785142085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/5665143118785142085'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/04/blog-post_20.html' title='嵌入式系統 之於 美勞'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-8446381420427476856</id><published>2007-04-18T01:02:00.000+08:00</published><updated>2007-04-18T01:07:21.438+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><category scheme='http://www.blogger.com/atom/ns#' term='好東西'/><title type='text'>嚴重的女性傾向......</title><content type='html'>&lt;p&gt;來吧！測測你的 blog 是男是女？&lt;/p&gt;
&lt;p&gt;我輸入&lt;a href="http://palatis.blogspot.com/atom.xml"&gt;本站的 atom&lt;/a&gt; 以後，居然出來這種結果：&lt;/p&gt;
&lt;blockquote&gt;
&lt;table style="background-color: #FFFFFF;border: 1px solid #E7E7E7;" border=0 cellpadding=0 cellspacing=7 width=225&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=center&gt;Palatis's Kafooster&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;table style="background-color: #F6F9FF;text-align: center;font-size: 12px;color: #323232;" border=0 cellpadding=0 cellspacing=0 height=74 width=100% &gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=bottom&gt;6.0%男性倾向,94.0%女性倾向&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=center&gt;&lt;table style="background-color: #F6F9FF;text-align: center;font-size: 12px;color: #323232;" border=0 cellpadding=0 cellspacing=0 width=165&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor=#91cdff height=9 width=9&gt;&lt;/td&gt;&lt;td bgcolor=#ffb1cd height=9 width=155&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=left&gt;评点：明净雅致的语言让人为之倾倒，人生的感悟、生活情趣都融合在其中，自有一番细腻的心思在其间。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a style="color: #799DCE;text-decoration: none;" href="http://www.yodao.com/" target=_blank&gt;yodao&lt;/a&gt; | &lt;a style="color: #799DCE;text-decoration: none;" href="http://www.yodao.com/blogender/" target=_blank&gt;博客男女&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;/blockquote&gt;
&lt;p&gt;奇怪，一大堆技術文章居然也可以被評為「有一番細膩的心思在其間」，真是搞不懂大陸人 = =&lt;/p&gt;
&lt;p&gt;還是說我根本是個娘砲...！？（淚奔 QoQ）&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-8446381420427476856?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/8446381420427476856/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=8446381420427476856' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/8446381420427476856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/8446381420427476856'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/04/blog-post.html' title='嚴重的女性傾向......'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-1472621192028873285</id><published>2007-04-05T21:01:00.000+08:00</published><updated>2007-04-07T17:22:10.233+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Algorithm'/><category scheme='http://www.blogger.com/atom/ns#' term='AI'/><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Heuristic'/><title type='text'>啟發式搜尋演算法 - A* Algorithm</title><content type='html'>&lt;p&gt;恩... AI 的作業 - &lt;a href="http://en.wikipedia.org/wiki/A%2A_algorithm"&gt;A* Search Algorithm&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;老師是要我們寫&lt;a href="http://en.wikipedia.org/wiki/N-puzzle"&gt;八陣圖&lt;/a&gt;啦！不過我看到 A* 的時候想，其實 A* 需要的也就是這些東西：
  &lt;ul&gt;
    &lt;li&gt;當前的 state&lt;/li&gt;
    &lt;li&gt;接下來可能的 state&lt;/li&gt;
    &lt;li&gt;要能計算兩個 state 之間的距離&lt;/li&gt;
  &lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;所以，我把 code 提煉成一個 template function，只要餵他一個 start 一個 target，他就會把中間要走的路找出來。而這個 template function 需要：
  &lt;ul&gt;
    &lt;li&gt;NODE_T：表示 state&lt;/li&gt;
    &lt;li&gt;distance(NODE_T, NODE_T)：用來計算兩個 state 之間的距離&lt;/li&gt;
    &lt;li&gt;solution(NODE_T, NODE_T)：驗證是否能從一個 state 走到另一個 state&lt;/li&gt;
    &lt;li&gt;NODE_T::childs()：接下來可以走的 state&lt;/li&gt;
  &lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;board.h：這是用來測試的 node class 與 distance() function 實做：
&lt;code&gt;#ifndef&amp;nbsp;_BOARD_H&lt;br /&gt;
#define&amp;nbsp;_BOARD_H&lt;br /&gt;
&lt;br /&gt;
#include&amp;nbsp;&amp;lt;vector&amp;gt;&lt;br /&gt;
#include&amp;nbsp;&amp;lt;algorithm&amp;gt;&lt;br /&gt;
#include&amp;nbsp;&amp;lt;iostream&amp;gt;&lt;br /&gt;
#include&amp;nbsp;&amp;lt;set&amp;gt;&lt;br /&gt;
&lt;br /&gt;
template&amp;nbsp;&amp;lt;int&amp;nbsp;SIZE&amp;gt;&lt;br /&gt;
class&amp;nbsp;basic_board&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typedef&amp;nbsp;std::vector&amp;lt;&amp;nbsp;char&amp;nbsp;&amp;gt;&amp;nbsp;storage_t;&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;class&amp;nbsp;INDEX_HELPER&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public:&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;INDEX_HELPER(int&amp;nbsp;const&amp;nbsp;x,&amp;nbsp;const&amp;nbsp;storage_t&amp;nbsp;&amp;&amp;nbsp;s):&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;idx_x_(x),&amp;nbsp;storage_(s)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;}&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;const&amp;nbsp;operator[]&amp;nbsp;(int&amp;nbsp;const&amp;nbsp;idx_y)&amp;nbsp;const&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;storage_[idx_y&amp;nbsp;*&amp;nbsp;SIZE&amp;nbsp;+&amp;nbsp;idx_x_];&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private:&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;idx_x_;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;storage_t&amp;nbsp;const&amp;nbsp;&amp;&amp;nbsp;storage_;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;
public:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;basic_board(storage_t&amp;nbsp;const&amp;nbsp;&amp;&amp;nbsp;prototype):&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;storage_(prototype)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;basic_board(bool&amp;nbsp;random_init&amp;nbsp;=&amp;nbsp;false):&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;storage_(SIZE*SIZE)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;i=0;i&amp;lt;storage_.size();++i)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;storage_[i]&amp;nbsp;=&amp;nbsp;i;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(random_init)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::random_shuffle(storage_.begin(),&amp;nbsp;storage_.end());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template&amp;nbsp;&amp;lt;int&amp;nbsp;S&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;friend&amp;nbsp;class&amp;nbsp;board_distance;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template&amp;nbsp;&amp;lt;int&amp;nbsp;S&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;friend&amp;nbsp;class&amp;nbsp;board_solution;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool&amp;nbsp;operator&amp;nbsp;!=&amp;nbsp;(basic_board&amp;nbsp;const&amp;nbsp;&amp;&amp;nbsp;rhs)&amp;nbsp;const&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;storage_&amp;nbsp;!=&amp;nbsp;rhs.storage_;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INDEX_HELPER&amp;nbsp;const&amp;nbsp;operator&amp;nbsp;[]&amp;nbsp;(int&amp;nbsp;const&amp;nbsp;idx_x)&amp;nbsp;const&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;INDEX_HELPER(idx_x,&amp;nbsp;storage_);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::vector&amp;lt;&amp;nbsp;basic_board&amp;nbsp;&amp;gt;&amp;nbsp;childs()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::vector&amp;lt;&amp;nbsp;basic_board&amp;nbsp;&amp;gt;&amp;nbsp;ret;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;first&amp;nbsp;find&amp;nbsp;empty&amp;nbsp;node&amp;nbsp;and&amp;nbsp;its&amp;nbsp;(x,&amp;nbsp;y)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;storage_t::iterator&amp;nbsp;e&amp;nbsp;=&amp;nbsp;std::find(storage_.begin(),&amp;nbsp;storage_.end(),&amp;nbsp;0);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;e_x&amp;nbsp;=&amp;nbsp;(&amp;nbsp;e&amp;nbsp;-&amp;nbsp;storage_.begin()&amp;nbsp;)&amp;nbsp;%&amp;nbsp;SIZE,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e_y&amp;nbsp;=&amp;nbsp;(&amp;nbsp;e&amp;nbsp;-&amp;nbsp;storage_.begin()&amp;nbsp;)&amp;nbsp;/&amp;nbsp;SIZE;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;basic_board&amp;nbsp;tmp(*this);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;storage_t::iterator&amp;nbsp;ee&amp;nbsp;=&amp;nbsp;tmp.storage_.begin()&amp;nbsp;+&amp;nbsp;e_y&amp;nbsp;*&amp;nbsp;SIZE&amp;nbsp;+&amp;nbsp;e_x,&amp;nbsp;ii;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(e_y&amp;nbsp;-&amp;nbsp;1&amp;nbsp;&amp;gt;=&amp;nbsp;0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;move&amp;nbsp;up?&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ii&amp;nbsp;=&amp;nbsp;tmp.storage_.begin()&amp;nbsp;+&amp;nbsp;(e_y&amp;nbsp;-&amp;nbsp;1)&amp;nbsp;*&amp;nbsp;SIZE&amp;nbsp;+&amp;nbsp;e_x;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::iter_swap(ee,&amp;nbsp;ii);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret.push_back(tmp);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::iter_swap(ee,&amp;nbsp;ii);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(e_y&amp;nbsp;+&amp;nbsp;1&amp;nbsp;&amp;lt;&amp;nbsp;SIZE)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;move&amp;nbsp;down?&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ii&amp;nbsp;=&amp;nbsp;tmp.storage_.begin()&amp;nbsp;+&amp;nbsp;(e_y&amp;nbsp;+&amp;nbsp;1)&amp;nbsp;*&amp;nbsp;SIZE&amp;nbsp;+&amp;nbsp;e_x;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::iter_swap(ee,&amp;nbsp;ii);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret.push_back(tmp);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::iter_swap(ee,&amp;nbsp;ii);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(e_x&amp;nbsp;-&amp;nbsp;1&amp;nbsp;&amp;gt;=&amp;nbsp;0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;move&amp;nbsp;left?&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ii&amp;nbsp;=&amp;nbsp;tmp.storage_.begin()&amp;nbsp;+&amp;nbsp;e_y&amp;nbsp;*&amp;nbsp;SIZE&amp;nbsp;+&amp;nbsp;e_x&amp;nbsp;-&amp;nbsp;1;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::iter_swap(ee,&amp;nbsp;ii);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret.push_back(tmp);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::iter_swap(ee,&amp;nbsp;ii);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(e_x&amp;nbsp;+&amp;nbsp;1&amp;nbsp;&amp;lt;&amp;nbsp;SIZE)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;move&amp;nbsp;right?&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ii&amp;nbsp;=&amp;nbsp;tmp.storage_.begin()&amp;nbsp;+&amp;nbsp;e_y&amp;nbsp;*&amp;nbsp;SIZE&amp;nbsp;+&amp;nbsp;e_x&amp;nbsp;+&amp;nbsp;1;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::iter_swap(ee,&amp;nbsp;ii);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret.push_back(tmp);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::iter_swap(ee,&amp;nbsp;ii);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;ret;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;storage_t&amp;nbsp;storage_;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
template&amp;nbsp;&amp;lt;int&amp;nbsp;SIZE&amp;gt;&lt;br /&gt;
std::ostream&amp;nbsp;&amp;&lt;br /&gt;
operator&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;(std::ostream&amp;nbsp;&amp;&amp;nbsp;lhs,&amp;nbsp;basic_board&amp;lt;SIZE&amp;gt;&amp;nbsp;const&amp;nbsp;&amp;&amp;nbsp;rhs)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;SIZE;&amp;nbsp;++i)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;j&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;j&amp;nbsp;&amp;lt;&amp;nbsp;SIZE;&amp;nbsp;++j)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lhs&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;rhs[j][i]&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;,&amp;nbsp;&amp;quot;;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;lhs&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//&amp;nbsp;solution&amp;nbsp;verifier&lt;br /&gt;
template&amp;nbsp;&amp;lt;int&amp;nbsp;SIZE&amp;gt;&lt;br /&gt;
class&amp;nbsp;board_solution&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool&amp;nbsp;operator()&amp;nbsp;(basic_board&amp;lt;SIZE&amp;gt;&amp;nbsp;lhs,&amp;nbsp;basic_board&amp;lt;SIZE&amp;gt;&amp;nbsp;rhs)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;move&amp;nbsp;both&amp;nbsp;empty&amp;nbsp;cell&amp;nbsp;to&amp;nbsp;upper-left&amp;nbsp;corner&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;typename&amp;nbsp;basic_board&amp;lt;SIZE&amp;gt;::storage_t::iterator&amp;nbsp;e,&amp;nbsp;i;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;e_x,&amp;nbsp;e_y;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;e&amp;nbsp;=&amp;nbsp;std::find(lhs.storage_.begin(),&amp;nbsp;lhs.storage_.end(),&amp;nbsp;0);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;e_x&amp;nbsp;=&amp;nbsp;(&amp;nbsp;e&amp;nbsp;-&amp;nbsp;lhs.storage_.begin()&amp;nbsp;)&amp;nbsp;%&amp;nbsp;SIZE;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;e_y&amp;nbsp;=&amp;nbsp;(&amp;nbsp;e&amp;nbsp;-&amp;nbsp;lhs.storage_.begin()&amp;nbsp;)&amp;nbsp;/&amp;nbsp;SIZE;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&amp;nbsp;(e_y&amp;nbsp;-&amp;nbsp;1&amp;nbsp;&amp;gt;=&amp;nbsp;0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;move&amp;nbsp;up?&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;lhs.storage_.begin()&amp;nbsp;+&amp;nbsp;(e_y&amp;nbsp;-&amp;nbsp;1)&amp;nbsp;*&amp;nbsp;SIZE&amp;nbsp;+&amp;nbsp;e_x;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::iter_swap(e,&amp;nbsp;i);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e&amp;nbsp;=&amp;nbsp;i;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e_x&amp;nbsp;=&amp;nbsp;(&amp;nbsp;e&amp;nbsp;-&amp;nbsp;lhs.storage_.begin()&amp;nbsp;)&amp;nbsp;%&amp;nbsp;SIZE;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e_y&amp;nbsp;=&amp;nbsp;(&amp;nbsp;e&amp;nbsp;-&amp;nbsp;lhs.storage_.begin()&amp;nbsp;)&amp;nbsp;/&amp;nbsp;SIZE;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&amp;nbsp;(e_x&amp;nbsp;-&amp;nbsp;1&amp;nbsp;&amp;gt;=&amp;nbsp;0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;move&amp;nbsp;left?&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;lhs.storage_.begin()&amp;nbsp;+&amp;nbsp;e_y&amp;nbsp;*&amp;nbsp;SIZE&amp;nbsp;+&amp;nbsp;e_x&amp;nbsp;-&amp;nbsp;1;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::iter_swap(e,&amp;nbsp;i);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e&amp;nbsp;=&amp;nbsp;i;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e_x&amp;nbsp;=&amp;nbsp;(&amp;nbsp;e&amp;nbsp;-&amp;nbsp;lhs.storage_.begin()&amp;nbsp;)&amp;nbsp;%&amp;nbsp;SIZE;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e_y&amp;nbsp;=&amp;nbsp;(&amp;nbsp;e&amp;nbsp;-&amp;nbsp;lhs.storage_.begin()&amp;nbsp;)&amp;nbsp;/&amp;nbsp;SIZE;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;e&amp;nbsp;=&amp;nbsp;std::find(rhs.storage_.begin(),&amp;nbsp;rhs.storage_.end(),&amp;nbsp;0);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;e_x&amp;nbsp;=&amp;nbsp;(&amp;nbsp;e&amp;nbsp;-&amp;nbsp;rhs.storage_.begin()&amp;nbsp;)&amp;nbsp;%&amp;nbsp;SIZE;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;e_y&amp;nbsp;=&amp;nbsp;(&amp;nbsp;e&amp;nbsp;-&amp;nbsp;rhs.storage_.begin()&amp;nbsp;)&amp;nbsp;/&amp;nbsp;SIZE;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&amp;nbsp;(e_y&amp;nbsp;-&amp;nbsp;1&amp;nbsp;&amp;gt;=&amp;nbsp;0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;move&amp;nbsp;up?&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;rhs.storage_.begin()&amp;nbsp;+&amp;nbsp;(e_y&amp;nbsp;-&amp;nbsp;1)&amp;nbsp;*&amp;nbsp;SIZE&amp;nbsp;+&amp;nbsp;e_x;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::iter_swap(e,&amp;nbsp;i);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e&amp;nbsp;=&amp;nbsp;i;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e_x&amp;nbsp;=&amp;nbsp;(&amp;nbsp;e&amp;nbsp;-&amp;nbsp;rhs.storage_.begin()&amp;nbsp;)&amp;nbsp;%&amp;nbsp;SIZE;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e_y&amp;nbsp;=&amp;nbsp;(&amp;nbsp;e&amp;nbsp;-&amp;nbsp;rhs.storage_.begin()&amp;nbsp;)&amp;nbsp;/&amp;nbsp;SIZE;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&amp;nbsp;(e_x&amp;nbsp;-&amp;nbsp;1&amp;nbsp;&amp;gt;=&amp;nbsp;0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;move&amp;nbsp;left?&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;rhs.storage_.begin()&amp;nbsp;+&amp;nbsp;e_y&amp;nbsp;*&amp;nbsp;SIZE&amp;nbsp;+&amp;nbsp;e_x&amp;nbsp;-&amp;nbsp;1;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::iter_swap(e,&amp;nbsp;i);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e&amp;nbsp;=&amp;nbsp;i;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e_x&amp;nbsp;=&amp;nbsp;(&amp;nbsp;e&amp;nbsp;-&amp;nbsp;rhs.storage_.begin()&amp;nbsp;)&amp;nbsp;%&amp;nbsp;SIZE;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e_y&amp;nbsp;=&amp;nbsp;(&amp;nbsp;e&amp;nbsp;-&amp;nbsp;rhs.storage_.begin()&amp;nbsp;)&amp;nbsp;/&amp;nbsp;SIZE;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;lhs&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;rhs&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;checking&amp;nbsp;parity&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;p(0);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(e&amp;nbsp;=&amp;nbsp;lhs.storage_.begin()&amp;nbsp;+&amp;nbsp;1;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e&amp;nbsp;!=&amp;nbsp;lhs.storage_.end();&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;++e)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;std::find(rhs.storage_.begin()+1,&amp;nbsp;rhs.storage_.end(),&amp;nbsp;*e);&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(typename&amp;nbsp;basic_board&amp;lt;SIZE&amp;gt;::storage_t::iterator&amp;nbsp;j&amp;nbsp;=&amp;nbsp;e;&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;&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;j&amp;nbsp;!=&amp;nbsp;lhs.storage_.end();&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;&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;++j)&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;&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;if&amp;nbsp;(std::find(rhs.storage_.begin()+1,&amp;nbsp;i,&amp;nbsp;*j)&amp;nbsp;!=&amp;nbsp;i)&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;++p;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;Parity:&amp;nbsp;&amp;quot;&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;p&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;&amp;nbsp;(&amp;quot;&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;p%2&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;)&amp;quot;&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;(p%2)&amp;nbsp;!=&amp;nbsp;((SIZE*SIZE)%2);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//&amp;nbsp;manhatten&amp;nbsp;distance&lt;br /&gt;
template&amp;nbsp;&amp;lt;int&amp;nbsp;SIZE&amp;gt;&lt;br /&gt;
class&amp;nbsp;board_distance&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;board_distance(basic_board&amp;lt;SIZE&amp;gt;&amp;nbsp;const&amp;nbsp;&amp;&amp;nbsp;target):&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;pos_cache_(SIZE*SIZE)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;i=0;i&amp;lt;SIZE*SIZE;++i)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typename&amp;nbsp;basic_board&amp;lt;SIZE&amp;gt;::storage_t::const_iterator&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;&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;t&amp;nbsp;=&amp;nbsp;std::find(target.storage_.begin(),&amp;nbsp;target.storage_.end(),&amp;nbsp;i);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pos_cache_[i]&amp;nbsp;=&amp;nbsp;std::make_pair(&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;&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;t&amp;nbsp;-&amp;nbsp;target.storage_.begin()&amp;nbsp;)&amp;nbsp;%&amp;nbsp;SIZE,&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;&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;t&amp;nbsp;-&amp;nbsp;target.storage_.begin()&amp;nbsp;)&amp;nbsp;/&amp;nbsp;SIZE&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;operator()&amp;nbsp;(basic_board&amp;lt;SIZE&amp;gt;&amp;nbsp;const&amp;nbsp;&amp;&amp;nbsp;lhs)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;ret(0);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;i=1;i&amp;lt;SIZE*SIZE;++i)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typename&amp;nbsp;basic_board&amp;lt;SIZE&amp;gt;::storage_t::const_iterator&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;&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;l&amp;nbsp;=&amp;nbsp;std::find(lhs.storage_.begin(),&amp;nbsp;lhs.storage_.end(),&amp;nbsp;i);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret&amp;nbsp;+=&amp;nbsp;std::abs(&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pos_cache_[i].first&amp;nbsp;-&amp;nbsp;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&amp;nbsp;(&amp;nbsp;l&amp;nbsp;-&amp;nbsp;lhs.storage_.begin()&amp;nbsp;)&amp;nbsp;%&amp;nbsp;SIZE&amp;nbsp;)&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;&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;std::abs(&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pos_cache_[i].second&amp;nbsp;-&amp;nbsp;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&amp;nbsp;(&amp;nbsp;l&amp;nbsp;-&amp;nbsp;lhs.storage_.begin()&amp;nbsp;)&amp;nbsp;/&amp;nbsp;SIZE&amp;nbsp;)&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;&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;);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;ret;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;operator()&amp;nbsp;(basic_board&amp;lt;SIZE&amp;gt;&amp;nbsp;const&amp;nbsp;&amp;&amp;nbsp;lhs,&amp;nbsp;basic_board&amp;lt;SIZE&amp;gt;&amp;nbsp;const&amp;nbsp;&amp;&amp;nbsp;rhs)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;ret(0);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;i=1;i&amp;lt;SIZE*SIZE;++i)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typename&amp;nbsp;basic_board&amp;lt;SIZE&amp;gt;::storage_t::const_iterator&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;&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;l&amp;nbsp;=&amp;nbsp;std::find(lhs.storage_.begin(),&amp;nbsp;lhs.storage_.end(),&amp;nbsp;i),&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;&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;r&amp;nbsp;=&amp;nbsp;std::find(rhs.storage_.begin(),&amp;nbsp;rhs.storage_.end(),&amp;nbsp;i);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret&amp;nbsp;+=&amp;nbsp;std::abs(&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&amp;nbsp;(&amp;nbsp;l&amp;nbsp;-&amp;nbsp;lhs.storage_.begin()&amp;nbsp;)&amp;nbsp;%&amp;nbsp;SIZE&amp;nbsp;)&amp;nbsp;-&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&amp;nbsp;(&amp;nbsp;r&amp;nbsp;-&amp;nbsp;rhs.storage_.begin()&amp;nbsp;)&amp;nbsp;%&amp;nbsp;SIZE&amp;nbsp;)&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;&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;std::abs(&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&amp;nbsp;(&amp;nbsp;l&amp;nbsp;-&amp;nbsp;lhs.storage_.begin()&amp;nbsp;)&amp;nbsp;/&amp;nbsp;SIZE&amp;nbsp;)&amp;nbsp;-&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&amp;nbsp;(&amp;nbsp;r&amp;nbsp;-&amp;nbsp;rhs.storage_.begin()&amp;nbsp;)&amp;nbsp;/&amp;nbsp;SIZE&amp;nbsp;)&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;&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;);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;ret;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
private:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::vector&amp;lt;&amp;nbsp;std::pair&amp;lt;int,&amp;nbsp;int&amp;gt;&amp;nbsp;&amp;gt;&amp;nbsp;pos_cache_;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
typedef&amp;nbsp;basic_board&amp;lt;3&amp;gt;&amp;nbsp;Board_3x3;&lt;br /&gt;
typedef&amp;nbsp;basic_board&amp;lt;4&amp;gt;&amp;nbsp;Board_4x4;&lt;br /&gt;
typedef&amp;nbsp;basic_board&amp;lt;5&amp;gt;&amp;nbsp;Board_5x5;&lt;br /&gt;
&lt;br /&gt;
typedef&amp;nbsp;board_distance&amp;lt;3&amp;gt;&amp;nbsp;Distance_3x3;&lt;br /&gt;
typedef&amp;nbsp;board_distance&amp;lt;4&amp;gt;&amp;nbsp;Distance_4x4;&lt;br /&gt;
typedef&amp;nbsp;board_distance&amp;lt;5&amp;gt;&amp;nbsp;Distance_5x5;&lt;br /&gt;
&lt;br /&gt;
typedef&amp;nbsp;board_solution&amp;lt;3&amp;gt;&amp;nbsp;Solution_3x3;&lt;br /&gt;
typedef&amp;nbsp;board_solution&amp;lt;4&amp;gt;&amp;nbsp;Solution_4x4;&lt;br /&gt;
typedef&amp;nbsp;board_solution&amp;lt;5&amp;gt;&amp;nbsp;Solution_5x5;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;/code&gt;
&lt;p&gt;astar.h：這是 A* 演算法與一個 helper class。&lt;/p&gt;
&lt;code&gt;#ifndef&amp;nbsp;_ASTAR_H&lt;br /&gt;
#define&amp;nbsp;_ASTAR_H&lt;br /&gt;
&lt;br /&gt;
#include&amp;nbsp;&amp;lt;map&amp;gt;&lt;br /&gt;
#include&amp;nbsp;&amp;lt;vector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
template&amp;nbsp;&amp;lt;typename&amp;nbsp;COST_T,&amp;nbsp;typename&amp;nbsp;NODE_T&amp;gt;&lt;br /&gt;
class&amp;nbsp;NODE_HELPER&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NODE_HELPER(COST_T&amp;nbsp;c,&amp;nbsp;NODE_T&amp;nbsp;const&amp;nbsp;&amp;&amp;nbsp;s,&amp;nbsp;int&amp;nbsp;p):&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;cost_(c),&amp;nbsp;state_(s),&amp;nbsp;parent_(p)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;parent()&amp;nbsp;const&amp;nbsp;{&amp;nbsp;return&amp;nbsp;parent_;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;cost()&amp;nbsp;const&amp;nbsp;{&amp;nbsp;return&amp;nbsp;cost_;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NODE_T&amp;nbsp;&amp;&amp;nbsp;state()&amp;nbsp;{&amp;nbsp;return&amp;nbsp;state_;&amp;nbsp;};&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::vector&amp;lt;&amp;nbsp;NODE_T&amp;nbsp;&amp;gt;&amp;nbsp;childs()&amp;nbsp;{&amp;nbsp;return&amp;nbsp;state_.childs();&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;parent_;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;parent&amp;nbsp;step&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;COST_T&amp;nbsp;cost_;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;cost&amp;nbsp;from&amp;nbsp;start&amp;nbsp;to&amp;nbsp;this&amp;nbsp;state&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NODE_T&amp;nbsp;state_;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;current&amp;nbsp;state&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
template&amp;nbsp;&amp;lt;typename&amp;nbsp;NODE_T,&amp;nbsp;typename&amp;nbsp;DISTANCE_T,&amp;nbsp;typename&amp;nbsp;VERIFIER_T&amp;gt;&lt;br /&gt;
std::vector&amp;lt;&amp;nbsp;NODE_T&amp;nbsp;&amp;gt;&lt;br /&gt;
astar_search(NODE_T&amp;nbsp;const&amp;nbsp;&amp;&amp;nbsp;start,&amp;nbsp;NODE_T&amp;nbsp;const&amp;nbsp;&amp;&amp;nbsp;target,&amp;nbsp;DISTANCE_T&amp;nbsp;dist,&amp;nbsp;VERIFIER_T&amp;nbsp;sol)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!sol(start,&amp;nbsp;target))&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;std::vector&amp;lt;&amp;nbsp;NODE_T&amp;nbsp;&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::multimap&amp;lt;int,&amp;nbsp;NODE_HELPER&amp;lt;int,&amp;nbsp;NODE_T&amp;gt;&amp;nbsp;&amp;gt;&amp;nbsp;pending;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pending.insert(std::make_pair(dist(start,&amp;nbsp;target),&amp;nbsp;NODE_HELPER&amp;lt;int,&amp;nbsp;NODE_T&amp;gt;(0,&amp;nbsp;start,&amp;nbsp;0)));&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::vector&amp;lt;&amp;nbsp;NODE_HELPER&amp;lt;int,&amp;nbsp;NODE_T&amp;gt;&amp;nbsp;&amp;gt;&amp;nbsp;solution;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;n_iter(0);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while(dist(pending.begin()-&amp;gt;second.state()))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;solution.push_back(pending.begin()-&amp;gt;second);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;cost_so_far&amp;nbsp;=&amp;nbsp;pending.begin()-&amp;gt;second.cost();&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;pending.erase(pending.begin());&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::vector&amp;lt;&amp;nbsp;NODE_T&amp;nbsp;&amp;gt;&amp;nbsp;tmp_cld&amp;nbsp;=&amp;nbsp;solution.rbegin()-&amp;gt;childs();&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(typename&amp;nbsp;std::vector&amp;lt;&amp;nbsp;NODE_T&amp;nbsp;&amp;gt;::iterator&amp;nbsp;i&amp;nbsp;=&amp;nbsp;tmp_cld.begin();&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i&amp;nbsp;!=&amp;nbsp;tmp_cld.end();&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;++i)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;cost&amp;nbsp;=&amp;nbsp;cost_so_far&amp;nbsp;+&amp;nbsp;dist(solution.rbegin()-&amp;gt;state(),&amp;nbsp;*i);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pending.insert(&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;&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;std::make_pair(&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cost&amp;nbsp;+&amp;nbsp;dist(*i),&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NODE_HELPER&amp;lt;int,&amp;nbsp;NODE_T&amp;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;&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;&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;cost,&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;&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;&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;*i,&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;&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;&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;solution.size()&amp;nbsp;-&amp;nbsp;1)&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;&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;)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::vector&amp;lt;&amp;nbsp;NODE_T&amp;nbsp;&amp;gt;&amp;nbsp;ret;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret.push_back(pending.begin()-&amp;gt;second.state());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;p_idx&amp;nbsp;=&amp;nbsp;pending.begin()-&amp;gt;second.parent();&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;p_idx&amp;nbsp;!=&amp;nbsp;0;&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;p_idx&amp;nbsp;=&amp;nbsp;solution[p_idx].parent())&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret.push_back(solution[p_idx].state());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret.push_back(start);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::reverse(ret.begin(),&amp;nbsp;ret.end());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;ret;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#endif&lt;/code&gt;
&lt;p&gt;main.cpp：用來測試的...&lt;/p&gt;
&lt;code&gt;#include&amp;nbsp;&amp;lt;iostream&amp;gt;&lt;br /&gt;
#include&amp;nbsp;&amp;lt;vector&amp;gt;&lt;br /&gt;
#include&amp;nbsp;&amp;lt;sstream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include&amp;nbsp;&amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include&amp;nbsp;&amp;quot;board.h&amp;quot;&lt;br /&gt;
#include&amp;nbsp;&amp;quot;astar.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef&amp;nbsp;Board_4x4&amp;nbsp;BOARD_T;&lt;br /&gt;
typedef&amp;nbsp;Distance_4x4&amp;nbsp;DIST_T;&lt;br /&gt;
typedef&amp;nbsp;Solution_4x4&amp;nbsp;SOL_T;&lt;br /&gt;
&lt;br /&gt;
int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char*&amp;nbsp;argv[])&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;random_seed&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(argc&amp;nbsp;&amp;gt;&amp;nbsp;1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::stringstream&amp;nbsp;ss(argv[1]);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;ss&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;random_seed;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;srand(random_seed);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;Random&amp;nbsp;seed:&amp;nbsp;&amp;quot;&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;random_seed&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOARD_T&amp;nbsp;b(true),&amp;nbsp;t(false);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;Start:&amp;quot;&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;b&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;End:&amp;quot;&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;t&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;Trying&amp;nbsp;hard&amp;nbsp;to&amp;nbsp;solve&amp;nbsp;(with&amp;nbsp;A*)...&amp;quot;&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::vector&amp;lt;&amp;nbsp;BOARD_T&amp;nbsp;&amp;gt;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;astar_search(b,&amp;nbsp;t,&amp;nbsp;DIST_T(t),&amp;nbsp;SOL_T()&amp;nbsp;);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;Solution&amp;nbsp;steps:&amp;nbsp;&amp;quot;&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;result.size()&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(std::vector&amp;lt;&amp;nbsp;BOARD_T&amp;nbsp;&amp;gt;::iterator&amp;nbsp;i&amp;nbsp;=&amp;nbsp;result.begin();&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;i&amp;nbsp;!=&amp;nbsp;result.end();&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;++i)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;//sleep(1);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;*i&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br /&gt;
}&lt;/code&gt;
&lt;p&gt;如果編不起來，那是&lt;b&gt;你&lt;/b&gt;的問題！&lt;a href="http://www.opensource.org/licenses/bsd-license.php"&gt;BSD License&lt;/a&gt;！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-1472621192028873285?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/1472621192028873285/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=1472621192028873285' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1472621192028873285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1472621192028873285'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/04/algorithm.html' title='啟發式搜尋演算法 - A* Algorithm'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-6234284560552535060</id><published>2007-03-27T18:13:00.000+08:00</published><updated>2007-03-27T18:49:08.856+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='家用機'/><title type='text'>螢幕燒掉了 @o@</title><content type='html'>&lt;p&gt;昨天（March 26, 2007）中午左右，在我回味老動畫 - &lt;a href="http://zh.wikipedia.org/wiki/%E7%95%B0%E5%9F%9F%E5%A4%A9%E4%BD%BF"&gt;MADLAX&lt;/a&gt; 的時候，突然螢幕一黑，伴隨而來一陣燒焦的味道。我首先以為是顯示卡燒了，所以馬上去按著主機上的 Power Button 四秒（感謝 Journaling Filesystem 的加持，沒有 dataloss。）然後又想到也可能是螢幕的問題，所以馬上又伸手按下螢幕的電源開關。&lt;/p&gt;
&lt;p&gt;後來靠近聞主機屁股，並沒有半導體的焦味，再去聞一下螢幕... 果然是 &lt;a href="http://www.neovo.com/taiwan/products/E-19STD.htm" target="_blank"&gt;AG Neovo E19 A&lt;/a&gt; 燒了...... 幸好機板跟面板都是三年保固，May 2004 買的，差兩個月就過期了 = = 趕快打他網頁上的電話，問他要怎麼辦。&lt;/p&gt;
&lt;p&gt;AG Neovo 的處理還蠻迅速的，昨天下午打電話，今天上午在我睡夢中就來拿了。不過他沒有收件的單子給我，也不知道要多久才會送回來，看來我這兩個禮拜電話要開著了 @@&lt;/p&gt;
&lt;p&gt;所以，這台電腦現在完全從 MultiMedia Center + Server 退化成 Server 了 QQ，主要跑的服務剩下：
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;動物&lt;/b&gt;&lt;/li&gt;
  &lt;li&gt;NAT&lt;/li&gt;
  &lt;li&gt;mpd&lt;/li&gt;
  &lt;li&gt;apache2 + php&lt;/li&gt;
  &lt;li&gt;dante&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-6234284560552535060?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/6234284560552535060/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=6234284560552535060' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/6234284560552535060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/6234284560552535060'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/03/o.html' title='螢幕燒掉了 @o@'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-7364884550632220319</id><published>2007-03-25T16:57:00.000+08:00</published><updated>2007-03-25T20:08:29.307+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='網路'/><category scheme='http://www.blogger.com/atom/ns#' term='Driver'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='好東西'/><title type='text'>netconsole &amp; syslog-ng</title><content type='html'>&lt;p&gt;最近我的筆電動不動就 kernel panic，也不知道到底出了什麼問題。想看 backtrace 也不行，因為總是在 X 底下死掉，沒有 console 讓我看 log。而 kernel panic 的時候 print 出來那些東西，也不會跑進 syslog 裡。所以啦，只好讓他 log 到 remote 了...&lt;/p&gt;
&lt;p&gt;其實，在 Gentoo 要用 netconsole 是很簡單的。因為是 "NET"console，所以當然會有一台 client 一台 server。首先假設我們的環境看起來像這樣：&lt;p&gt;
&lt;ul&gt;
  &lt;li&gt;Server：192.168.1.1:6667&lt;/li&gt;
  &lt;li&gt;Client：192.168.1.99:6665&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Client 端（Kernel module 與 cancd）&lt;/h2&gt;
&lt;p&gt;首先在 client 上，編譯核心的時候，選擇 netconsole 模組（記得選 M 唷！）：&lt;/p&gt;
&lt;code&gt;&amp;nbsp;&amp;nbsp;Device Drivers&amp;nbsp;&amp;nbsp;---&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Network device support&amp;nbsp;&amp;nbsp;---&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;M&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Network console logging support (EXPERIMENTAL)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[*] Netpoll support for trapping incoming packets&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[*] Netpoll traffic trapping&lt;/code&gt;
&lt;p&gt;好啦，雖然我不知道最下面兩個是幹嘛的，不過還是把他們打開吧（反正打開也不用錢...）！順便打開 Magic SysRq：&lt;/p&gt;
&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Kernel hacking&amp;nbsp;&amp;nbsp;---&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[*] Magic SysRq key&lt;/code&gt;
&lt;p&gt;編譯並安裝，請把 {N} 替換為您的 cpu core 數量 +1：&lt;/p&gt;
&lt;code&gt;# make modules -j{N} &amp;&amp; make modules_install&lt;/code&gt;
&lt;p&gt;然後，裝上 cancd（CA NetConsole Daemon）...&lt;/p&gt;
&lt;code&gt;# emerge cancd -va&lt;/code&gt;
&lt;p&gt;設定 /etc/conf.d/netconsole：&lt;/p&gt;
&lt;code&gt;# 填入 Server 的 IP，這裡以 192.168.1.1 為例：&lt;br /&gt;
TGT_IP='192.168.1.1'&lt;br /&gt;
&lt;br /&gt;
# 與該 IP 對應的 device&lt;br /&gt;
DEVICE=eth0&lt;br /&gt;
&lt;br /&gt;
# 如果沒寫的話，會用該 device 的第一個 IP 位置。&lt;br /&gt;
# 如果該設備在開機時不會拿到 IP 位置，則您必須在這裡輸入它。&lt;br /&gt;
SRC_IP=''&lt;br /&gt;
&lt;br /&gt;
# Client 要使用的 Port，可以隨便給。以下為預設值！&lt;br /&gt;
SRC_PORT=6665&lt;br /&gt;
&lt;br /&gt;
# Server 端的 Port，當然要與 Server 上設定的相同&lt;br /&gt;
TGT_PORT=6667&lt;br /&gt;
&lt;br /&gt;
# 如果要使用廣播，則輸入 'broadcast'。但是要注意安全性！&lt;br /&gt;
# 我們不用，所以就不輸入了...&lt;br /&gt;
TGT_MAC=''&lt;br /&gt;
&lt;br /&gt;
# 紀錄的等級，從 [0..7] 分為：&lt;br /&gt;
# EMERG, ALERT, CRIT, ERR, WARNING, NOTICE, INFO, DEBUG&lt;br /&gt;
# 恩... 我選了 7 (DEBUG)&lt;br /&gt;
LOGLEVEL='7'&lt;/code&gt;
&lt;p&gt;將 netconsole 加入 default runlevel 並啟動它...&lt;/p&gt;
&lt;code&gt;# rc-update add netconsole default&lt;br /&gt;
# /etc/init.d/netconsole start&lt;/code&gt;
&lt;p&gt;「咦～」您也許會問，「就這樣丟 log 出去不會連線失敗嗎？那 Server 咧？」。別急別急，反正也不會直接有訊息丟出來（唔，如果您很倒楣的，Client 在此時 Kernel Panic 了，那我只能說很抱歉 = =），馬上接著來設定 Server！&lt;/p&gt;

&lt;h2&gt;Server 端（Syslog-ng）&lt;/h2&gt;
&lt;p&gt;編輯 /etc/syslog-ng/syslog-ng.conf，「加入」以下設定（別把上面之前的東西刪掉喔，不然本來系統的 log 就不知道要記到哪裡去了 = =）：&lt;/p&gt;
&lt;code&gt;# 首先是 ip 與 port，如果不知道要改哪裡，&lt;br /&gt;
# 請把 Linux 分區 format 掉，去買套 &lt;a href="http://www.microsoft.com/taiwan/windows/products/windowsvista/default.mspx"&gt;Windows Vista&lt;/a&gt;。&lt;br /&gt;
source net_src { udp(ip(192.168.1.1) port(6667)); };&lt;br /&gt;
&lt;br /&gt;
# 在這裡設定紀錄檔，此以 /var/log/net_msgs 為例。&lt;br /&gt;
destination net_msgs { file("/var/log/net_msgs"); };&lt;br /&gt;
&lt;br /&gt;
# 接著是要從哪裡紀錄到哪裡...&lt;br /&gt;
log { source(net_src); destination(net_msgs); };&lt;br /&gt;
&lt;br /&gt;
# 如果要順便寫到 tty12，就加入以下這行：&lt;br /&gt;
# （一般來說都是 tty12 吧？要看之前上面的設定。）&lt;br /&gt;
log { source(net_src); destination(console_all); };&lt;/code&gt;
&lt;p&gt;好啦，重新啟動 syslog-ng 吧！用 reload 他就會重新讀取設定檔了，不必用 restart。&lt;/p&gt;
&lt;code&gt;# /etc/init.d/syslog-ng reload&lt;/code&gt;

&lt;h2&gt;測試一下！&lt;/h2&gt;
&lt;p&gt;恩... 我想，您剛才應該有把 Magic SysRq 打開吧？如果有的話，請在 Client 按下 Alt-SysRq-m，然後去 Server 看一下 /var/log/net_msgs 從 Client 傳來的訊息！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-7364884550632220319?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/7364884550632220319/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=7364884550632220319' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/7364884550632220319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/7364884550632220319'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/03/netconsole-syslog-ng.html' title='netconsole &amp; syslog-ng'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-772879518530053460</id><published>2007-03-17T10:54:00.000+08:00</published><updated>2007-03-20T10:18:20.935+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>如果你想知道磁碟 I/O 到底會拖慢多少啟動程式的速度</title><content type='html'>&lt;p&gt;那就這麼作吧！&lt;/p&gt;
&lt;code&gt;
// 首先當然是關掉你要測的那個程式, 別忘了先把重要資料存檔&lt;br /&gt;
# killall -9 firefox-bin&lt;br /&gt;
// 呼叫 sync 把重要資料寫入硬碟&lt;br /&gt;
# sync&lt;br /&gt;
// 然後清掉 buffer/cache&lt;br /&gt;
# echo 3 &gt; /proc/sys/vm/drop_caches&lt;br /&gt;
// 重新啟動（Enjoy the waiting :P ）！&lt;br /&gt;
$ firefox
&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-772879518530053460?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/772879518530053460/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=772879518530053460' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/772879518530053460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/772879518530053460'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/03/io.html' title='如果你想知道磁碟 I/O 到底會拖慢多少啟動程式的速度'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-2609680656101389929</id><published>2007-03-04T07:35:00.000+08:00</published><updated>2007-03-04T09:15:46.890+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Driver'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='天馬行空'/><title type='text'>令我日思夜想的檔案系統</title><content type='html'>&lt;p&gt;奇怪，怎麼都沒人想到呢？&lt;/p&gt;
&lt;p&gt;&lt;a href="http://palatis.blogspot.com/2006/12/blog-post.html"&gt;先前提到&lt;/a&gt;說，適當的將檔案系統壓縮，可以提高磁碟的存取效率 - 尤其是 CPU 速度與 IO 速度差很多的時候。雖然沒有完整的數據顯示到底快多少，不過 RANMA K 兄有&lt;a href="http://ranmak.blogspot.com/2007/01/reiser4-cryptcompress.html"&gt;初步&lt;/a&gt;的&lt;a href="http://ranmak.blogspot.com/2007/01/reiser4-cryptcompress_23.html"&gt;測試&lt;/a&gt;過不壓縮與壓縮時的寫入、讀取速度。況且還有個良好的副作用 - 同樣大的硬碟空間裡，可以裝的東西更多了&lt;span style="text-decoration: line-through"&gt;，而且&lt;a href="http://myvlog.im.tv/?id=780017&amp;mid=463272&amp;album=0"&gt;完全不會變重&lt;/a&gt;&lt;/span&gt;！&lt;/p&gt;
&lt;p&gt;根據用屁股思考就可以領悟的常識，我們知道：
  &lt;ol&gt;
    &lt;li&gt;CPU 的 IO 速度非常快（相對於硬碟）&lt;/li&gt;
    &lt;li&gt;Disk 的 IO 速度非常慢（相對於 CPU）&lt;/li&gt;
    &lt;li&gt;大部分人的 Desktop PC，CPU 使用率並不會常保 100%...&lt;/li&gt;
    &lt;li&gt;越大的檔案越有機會產生 Fragmentation，而 Fragmentation 會增加 Seek Time。&lt;/li&gt;
    &lt;li&gt;若資料已經壓縮過了，再壓一次只是浪費時間。（呃... 廢話！ = =）&lt;/li&gt;
  &lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;所以，希望有一種檔案系統的，會根據檔案的狀態來選擇性的壓縮檔案，大概像這樣：
  &lt;ol&gt;
    &lt;li&gt;首先有個選項來針對檔案設定是否壓縮，例如 compress_attribute：
      &lt;ul&gt;
        &lt;li&gt;Always：總是壓縮&lt;/li&gt;
        &lt;li&gt;Automatic：根據下述規則決定是否壓縮&lt;/li&gt;
        &lt;li&gt;Never：絕對不要壓縮&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;如果檔案太小，就不壓縮。&lt;/li&gt;
    &lt;li&gt;如果檔案已經被壓縮過，就不壓縮。例如：
      &lt;ul&gt;
        &lt;li&gt;一般壓縮檔：ace, bz2, gz, rar, tbz2, tgz, zip... etc.&lt;/li&gt;
        &lt;li&gt;壓縮過的多媒體檔案：avi, mpg, mpeg, mp3, wma, wmv... etc.&lt;/li&gt;
        &lt;li&gt;壓縮過的圖片檔：gif, jpg, mng, png... etc.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;其他還沒想到的規則...&lt;/li&gt;
  &lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;當然，這個檔案系統要有現代檔案系統該有的功能，例如：
  &lt;ul&gt;
    &lt;li&gt;Journaling&lt;/li&gt;
    &lt;li&gt;Online Repacker&lt;/li&gt;
    &lt;li&gt;POSIX ACL&lt;/li&gt;
    &lt;li&gt;Online resizing (grow and shrink)&lt;/li&gt;
    &lt;li&gt;其他還沒想到的功能...&lt;/li&gt;
  &lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;如果有相關的資料或論文，還請不吝留個言... 多謝！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-2609680656101389929?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/2609680656101389929/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=2609680656101389929' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/2609680656101389929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/2609680656101389929'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/03/blog-post.html' title='令我日思夜想的檔案系統'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-384148531822417613</id><published>2007-02-22T10:45:00.000+08:00</published><updated>2007-02-22T11:27:17.597+08:00</updated><title type='text'>小時候寫的作文</title><content type='html'>&lt;p&gt;過年嘛，總是要掃除一下。雖然我沒有想要打掃的意思，但是還是把櫃子裡的東西拿出來，東翻翻西翻翻以後再放回去，假裝有整理過些什麼。&lt;/p&gt;
&lt;p&gt;翻一翻，找到了國小五年級的作文簿！真感謝我媽沒把他當資源垃圾拿去回收，讓我看到我以前有多麼無厘頭。下面還只是其中一篇（其實我懶得打字，而且其他幾篇寫的還蠻丟臉的 |||&amp;gt;_&amp;lt;b）...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;h4&gt;冬天&lt;/h4&gt;
  &lt;p&gt;今天是冬天。（啊！說錯台詞！？現場直播！不能改了。繼續編下去吧！）那一顆松是在搖。對，他在姚。它是咖啡色的，葉子也是。很醜。對！很... 什麼？很醜？你... 算了。我有一個故事，我們來分享一下：&lt;/p&gt;
  &lt;p&gt;在一個大雪紛飛的冬天，在那個森林裡...。「那個」森林是什麼東東？就是「這個」森林！有一對父子，在打獵。嗯！廁所在哪裡。廁所？你說「廁所」做什麼？你「嗯！」不是要「便」魔術嗎？你不必管！繼續說！經過一天，也打不到東西，卻在森林中迷路了。在那時，他們看到一間小屋，就近去了。這時，他們因為很累，就睡了下來。到了半夜，兒子看到了一個「石膏色」的女人，從們旁邊的牆中飛了進來。向他爸爸吹了一口氣。他爸爸的血液就結冰了！雪女說：「我不要你的命。但是你把今天的事情說出去，你也是我牙下的客人。」說完，就走了。這個小男孩長大以後，在十二月十二日的晚上十二點十二分十二秒，遇到了一個名叫「小雪」的女孩。這個小男孩就和這女孩結婚了。在洞房的那一天，那個小男孩說：「我...，」那小雪的眼睛為之一亮！「就是『怪歐吉桑』！」結果，在外面的爸爸靈魂跌了一跤「掉」進來，這場戲再也演不下去了。&lt;/p&gt;
  &lt;p style="text-align:right;"&gt;完！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
  現在看看，發現...
  &lt;ul&gt;
    &lt;li&gt;&lt;b&gt;我以前一定很討厭寫字&lt;/b&gt; - 加超多標點符號（很多單引號跟驚嘆號）跟簡單的字（十二月十二日的晚上十二點十二分十二秒）撐篇幅。&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;喜歡自言自語&lt;/b&gt; - 第一段沒用的前導跟故事開始的第一段，因為一直在跟讀者說話，所以搞不清楚到底要表達些什麼。&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;故事中的人物也搞不清楚自己在幹嘛&lt;/b&gt; - 雪女說「你也是我牙下的客人」，但是她並沒有&lt;b&gt;嚼食&lt;/b&gt;他爸爸啊...！&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;從頭爛到尾&lt;/b&gt; - 一定是因為老師說要寫四頁，所以我一寫超過四頁，馬上就隨便作個結束 = =&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;導師評語&lt;/b&gt; - &lt;span style="color:red;font-weight:bold;font-size:larger;"&gt;文章形式特殊，但似乎沒有表達出「冬天」！&lt;/span&gt;（哪有！看完後不覺得很冷嗎？想想其實蠻切題的 = =）&lt;/li&gt;
  &lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;PS. 『怪歐吉桑』是&lt;a href="http://zh.wikipedia.org/w/index.php?title=%E5%BF%97%E6%9D%91%E5%A4%A7%E7%88%86%E7%AC%91&amp;variant=zh-tw"&gt;志村大爆笑&lt;/a&gt;裡，由志村健飾演的那個怪叔叔。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-384148531822417613?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/384148531822417613/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=384148531822417613' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/384148531822417613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/384148531822417613'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/02/blog-post_22.html' title='小時候寫的作文'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-1267293300511922801</id><published>2007-02-13T00:38:00.000+08:00</published><updated>2007-02-13T01:43:50.367+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='網路'/><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><category scheme='http://www.blogger.com/atom/ns#' term='天馬行空'/><title type='text'>圖片加密函式庫</title><content type='html'>&lt;p&gt;最近&lt;a href="http://www.wretch.cc/blog/phopicking"&gt;獨孤木前輩&lt;/a&gt;弄了個 &lt;a href="http://www.diggirl.net"&gt;Diggirl.Net&lt;/a&gt; 出來，服務的內容... 恩... 連過去玩一圈就知道了。於是，就搞得一些&lt;a href="http://www.wretch.cc/blog/phopicking&amp;article_id=8180036#comment101030856"&gt;相簿的主人不開心&lt;/a&gt;了！&lt;/p&gt;
&lt;p&gt;其實，我也認為任何資料只要放到網路上（應該說，資料公開以後），就不能再做什麼進一步的禁止行為了。因為網路本身是一種類似「群播（broadcast）」的機制，放出去的東西就是放出去了，沒什麼好限制的。就好像你想到台北車站前面大喊「我腦殘啊！」，卻又不想讓任何人聽到，是不可能的事情一樣。所以，圖片如果不想流出去，就好好收在自己的硬碟裡吧！&lt;/p&gt;
&lt;p&gt;Okay... 以上是前言，接下來進入我實際想到的東西。&lt;/p&gt;
&lt;p&gt;也許，在某些時候，你會希望能在相簿上分享某些圖片，卻又只想給指定的某些人看到。其實有很多 &lt;a href="http://en.wikipedia.org/wiki/Public_Key_Infrastructure"&gt;PKI&lt;/a&gt; 早已行之有年，也在很多關鍵應用上扮演重要的角色。所以，應該也可以應用到這個狀況上來！&lt;/p&gt;
&lt;p&gt;讓我們拿 Alice 跟 Bob 來當例子，他們是我眾多虛擬朋友中的兩位：&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Alice 想傳一些裸照給 Bob，可是又怕被別人看。因為有幾萬張照片要傳，用 email 又太花時間了。於是，她決定選用由 Palatis Inc. 所開發的圖片加密函式庫！&lt;/p&gt;
  &lt;p&gt;首先，他使用程式提供的兩套軟體，產生適當的 keypair，並使用該 keypair 將資料加密：
    &lt;ol&gt;
      &lt;li&gt;使用函式庫提供的 keygen 產生 keypair (pubkey, prikey)&lt;/li&gt;
      &lt;li&gt;將自己的裸照 (naked*.{jpg,png,gif,bmp,tiff, ... }) 經程式轉為 bitmap (naked*.bmp)，並使用 pubkey 加密以後，轉回 png 一類非破壞性壓縮的圖檔 (naked*_secured.png)。於是，轉出來的東西用其他圖形函式庫看起來，就像是白胡椒鹽撒在黑胡椒鹽（... 總之就是胡椒鹽）上一樣。&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/p&gt;
  &lt;p&gt;再來，將這些胡椒鹽照片傳送到適合大量下載的網路空間（如網頁、相簿、ftp、bt）上。&lt;/p&gt;
  &lt;p&gt;使用另外的管道（如 email）將 prikey 送給 Bob，並祈求 Bob 不會把她的裸照洩漏出去。當然，該 email 會用其他軟體（如 GnuPG）加密。（或簽章，否則 Bob 可能也不知道收到的是否真的是 Alice 的裸照。）&lt;/p&gt;
  &lt;p&gt;Bob 本來去 Alice 的相簿看到的只是一堆胡椒鹽的裸照，但是當他拿到 Alice 送來的 prikey 以後，世界頓時亮了起來！
    &lt;ol&gt;
      &lt;li&gt;Bob 把 Alice 給他的 prikey 放到函式庫搜尋 key 的資料夾（如 /home/bob/.libsecreatpic/received_keys/）底下。&lt;/li&gt;
      &lt;li&gt;然後用他心愛的網頁瀏覽器（順便廣告一下 &lt;a href="http://www.moztw.org/firefox/"&gt;Firefox&lt;/a&gt;！）開啟 Alice 的相簿。&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/p&gt;
  &lt;p&gt;Yeah～胡椒鹽都不見了，取而代之的，是 Alice 性感火辣（？）的曲線！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;至於實做細節的部份，因為沒空，所以以後再想 *flee*。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-1267293300511922801?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/1267293300511922801/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=1267293300511922801' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1267293300511922801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1267293300511922801'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/02/blog-post.html' title='圖片加密函式庫'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-8044967745852273531</id><published>2007-01-06T18:49:00.000+08:00</published><updated>2007-01-06T19:03:17.996+08:00</updated><title type='text'>Hidden 火星文++</title><content type='html'>&lt;p&gt;之前提到我們學校某教授在&lt;a href="http://seafood.csie.cyut.edu.tw/seafood/"&gt;個人網頁&lt;/a&gt;上弄了&lt;a href="http://palatis.blogspot.com/2006/03/blog-post_10.html"&gt;這個東西&lt;/a&gt;，今天又因緣際會的去到了他的網站。耶～他把那篇文章拿掉了耶！&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sCIYrLqeyI8/RZ-BZ33hyFI/AAAAAAAAAAM/yemHwzgSwd8/s1600-h/screen20070106185322-small.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sCIYrLqeyI8/RZ-BZ33hyFI/AAAAAAAAAAM/yemHwzgSwd8/s200/screen20070106185322-small.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5016870791407585362" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;可是... 直接輸入 &lt;a href="http://seafood.csie.cyut.edu.tw/seafood/HSIEN.htm"&gt;http://seafood.csie.cyut.edu.tw/seafood/HSIEN.htm&lt;/a&gt; 的話，還是連的到說... 因為看起來的跟之前一樣，所以就不重複貼了。&lt;/p&gt;
&lt;p&gt;恩... 這就是所謂的「眼不見為淨」嗎？&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-8044967745852273531?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/8044967745852273531/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=8044967745852273531' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/8044967745852273531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/8044967745852273531'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/01/hidden.html' title='Hidden 火星文++'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sCIYrLqeyI8/RZ-BZ33hyFI/AAAAAAAAAAM/yemHwzgSwd8/s72-c/screen20070106185322-small.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-1441715194046546555</id><published>2007-01-01T23:36:00.000+08:00</published><updated>2007-01-01T23:51:01.534+08:00</updated><title type='text'>libata - 新的 ata 子系統！</title><content type='html'>&lt;p&gt;赫然發現我的 Linux 還在用舊的 ATA Subsystem，而使用 SCSI Layer 的 &lt;a href="http://www.kernel.org/pub/linux/kernel/people/jgarzik/libata/"&gt;libATA&lt;/a&gt; 已經出來很久了！&lt;/p&gt;
&lt;p&gt;所以，今天來升級！&lt;/p&gt;
&lt;p&gt;因為我是個懶得作 initrd 的懶人，所以底下的支援都編進核心。如果您要編譯成模組，則必須自己想辦法作 initrd。&lt;/p&gt;
&lt;code&gt;Device Drivers  ---&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SCSI device support  ---&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;*&amp;gt;&amp;nbsp;SCSI disk support&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Serial ATA (prod) and Parallel ATA (experimental) drivers  ---&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;*&amp;gt;&amp;nbsp;ATA device support&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:red;"&gt;// 這邊請選與您 IDE 晶片對應的驅動程式&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;*&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ATI PATA support (Experimental)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;*&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Generic ATA support&lt;/code&gt;
&lt;p&gt;然後去 /boog/grub/grug.conf 與 /etc/fstab 或其他設定檔中，把用到 hdXY 的地方統統改成 sdXY 就可以了！&lt;/p&gt;
&lt;p&gt;不知道用新的 ATA Layer，會不會有感覺得到 performance boost？&lt;/p&gt;
&lt;p&gt;sdparm 的使用方法徵求中！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-1441715194046546555?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/1441715194046546555/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=1441715194046546555' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1441715194046546555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/1441715194046546555'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2007/01/libata-ata.html' title='libata - 新的 ata 子系統！'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-6698602116304633227</id><published>2006-12-27T18:54:00.000+08:00</published><updated>2006-12-31T15:52:54.542+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Driver'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='好東西'/><title type='text'>擠壓你的檔案系統</title><content type='html'>&lt;p&gt;&lt;span style="color:red;"&gt;&lt;b&gt;/***********************************&lt;br /&gt;
 大肥警告！&lt;br /&gt;
 Big Fat Warning!&lt;br /&gt;
&lt;br /&gt;
 這篇文章裡提到的技術可能讓您的資料爆炸，請斟酌使用！&lt;br /&gt;
 The techniques introduced in this article may blow your data, use them at your own risk!&lt;br /&gt;
 ***********************************/&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;最近總覺得硬碟很慢... 應該說，作一些需要磁碟 I/O 的動作的時候，感覺硬碟一直嘎啦嘎啦的上氣不接下氣。所以有了這樣的想法：&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;現在 CPU 速度呈指數成長&lt;/li&gt;
  &lt;li&gt;磁碟傳輸速度呈線性成長（大部分的瓶頸在磁頭讀寫動作）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;既然如此，何不適當的要求 CPU 作多一點計算，減少磁碟 I/O 呢？於是就想到要壓縮檔案系統。&lt;/p&gt;
&lt;p&gt;可是... 要怎麼壓縮呢？可以從兩個地方著手：&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;u&gt;Loop Device Level&lt;/u&gt;：使用如 &lt;a href="http://en.wikipedia.org/wiki/Cloop"&gt;cloop&lt;/a&gt; 或 &lt;a href="http://parallel.vub.ac.be/~johan/compFUSEd/"&gt;compFUSEd&lt;/a&gt; 等辦法，在 regular filesystem 的 regular file 上再多加一層間接層來壓縮。&lt;/li&gt;
  &lt;li&gt;&lt;u&gt;Block Device Level&lt;/u&gt;：在 Device Driver 加上一層間接層來壓縮，例如使用 &lt;a href="http://www.saout.de/misc/dm-crypt/"&gt;dm-crypt&lt;/a&gt; 與 &lt;a href="http://luks.endorphin.org/dm-crypt"&gt;cryptsetup-luks&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;u&gt;Filesystem Level&lt;/u&gt;：讓 Filesystem Driver 來負責處理壓縮，例如使用 &lt;a href="http://sourceware.org/jffs2/"&gt;jffs2&lt;/a&gt;、ext2compr 或 &lt;a href="http://www.namesys.com/v4/v4.html"&gt;Reiser4&lt;/a&gt; 的 &lt;a href="ftp://ftp.namesys.com/pub/tmp/cryptcompress/"&gt;experimental cryptcompress plugin&lt;/a&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我的想法是，我是要來&lt;b&gt;增進&lt;/b&gt;磁碟效能的，所以不應該搞一大堆間接層來&lt;b&gt;拖慢&lt;/b&gt;系統速度，所以 cloop 那種東西就根本不考慮了。後來又想從 Block Device Level 來做的，可是 dm-crypt 與 cryptsetup-luks 非常悲慘，還真的只能作 &lt;b&gt;CRYPT&lt;/b&gt;ographic，沒辦法做 &lt;b&gt;COMPRESS&lt;/b&gt;ion。我嘗試用 cryptsetup -c lzf luksFormat 來建立 lzf compressed block device，可是殘念的失敗了 XD~&lt;/p&gt;
&lt;p&gt;於是，只好讓 Filesystem 來壓啦！可是 &lt;a href="http://gentoo-wiki.com/Mounting_a_block_device_with_JFFS2"&gt;jffs2 的間接更多&lt;/a&gt;，必須先有個 loopfile map 到 mtd（Memory Technology Device）上，再 mount mtdblock 來用。處理起來速度比沒壓縮的 ext3 還慢，所以... 還是算了吧！而 ext2compr 這個東西實在太老了，只有在 google 搜尋的時候隱約發現他的蹤跡，可是真的想要找 howto 的時候卻什麼也找不到。所以... 這個也算了吧 = =&lt;/p&gt;
&lt;p&gt;最後的救星是 Reiser4 的 Cryptcompress plugin，也是要 patch kernel source，也要升級 reiser4progs。&lt;/p&gt;
&lt;p&gt;安裝的方法比想像中簡單的多。首先，你需要一個支援 Reiser4 與 cryptcomress 的 kernel，再來就是支援 cryptcompress 的 {mkfs,fsck,debugfs,measurefs}.reiser4。讓我們從 kernel 開始：&lt;/p&gt;
&lt;code&gt;// 如果您已經有裝 app-portage/layman，可以省略這個步驟：&lt;br /&gt;
# emerge app-portage/layman&lt;br /&gt;
// 如果您已經有加入該 custom-kernels overlay，可以省略這個步驟：&lt;br /&gt;
# layman -a custom-kernels&lt;br /&gt;
// 最後，這是支援 reiser4 與 cryptcompress 的 kernel：&lt;br /&gt;
# emerge sys-kernel/beyond-sources&lt;/code&gt;
&lt;p&gt;然後，在 make *config 的時候，把 reiser4 support 打開（廢話！），編譯您的新 kernel，然後用它開機。&lt;/p&gt;
&lt;p&gt;再來是 userspace tools - 新版的 reiser4progs。這個我沒有找到任何 overlay 裡面有（其實它也還沒有正式 release），所以先貼在這吧！&lt;/p&gt;
&lt;code&gt;# Copyright 1999-2006 Gentoo Foundation&lt;br /&gt;
# Distributed under the terms of the GNU General Public License v2&lt;br /&gt;
# $Header: /var/cvsroot/gentoo-x86/sys-fs/reiser4progs/reiser4progs-1.0.5.ebuild,v 1.5 2006/08/20 21:23:43 vapier Exp $&lt;br /&gt;
&lt;br /&gt;
inherit toolchain-funcs&lt;br /&gt;
&lt;br /&gt;
MY_P=${PN}-${PV/_p/-}&lt;br /&gt;
DESCRIPTION="reiser4progs: mkfs, fsck, etc..."&lt;br /&gt;
HOMEPAGE="http://www.namesys.com/v4/v4.html"&lt;br /&gt;
#SRC_URI="ftp://ftp.namesys.com/pub/reiser4progs/${MY_P}.tar.gz"&lt;br /&gt;
SRC_URI="ftp://ftp.namesys.com/pub/tmp/cryptcompress/2.6.19-rc4-mm1/${MY_P}.tar.gz"&lt;br /&gt;
&lt;br /&gt;
LICENSE="GPL-2"&lt;br /&gt;
SLOT="0"&lt;br /&gt;
#KEYWORDS="amd64 ppc ppc64 -sparc x86"&lt;br /&gt;
KEYWORDS="~amd64"&lt;br /&gt;
IUSE="static debug readline"&lt;br /&gt;
&lt;br /&gt;
DEPEND="&gt;=sys-libs/libaal-1.0.5&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;readline? ( sys-libs/readline )"&lt;br /&gt;
&lt;br /&gt;
S=${WORKDIR}/${MY_P}&lt;br /&gt;
&lt;br /&gt;
src_unpack() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unpack ${A}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cd "${S}"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# bundled libtool sucks, so rebuild autotools #74817&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aclocal &amp;&amp; libtoolize -c -f &amp;&amp; autoconf &amp;&amp; automake || die "autotools failed"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cat &lt;&lt;-EOF &gt; run-ldconfig&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#!/bin/sh&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;true&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EOF&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
src_compile() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;econf \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(use_enable static full-static) \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(use_enable static mkfs-static) \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(use_enable static fsck-static) \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(use_enable static debugfs-static) \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(use_enable static measurefs-static) \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(use_enable static cpfs-static) \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(use_enable static resizefs-static) \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(use_enable debug) \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(use_with readline) \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--enable-libminimal \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--sbindir=/sbin \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|| die "configure failed"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emake || die "make failed"&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
src_install() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;make DESTDIR="${D}" install || die&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dodoc AUTHORS BUGS CREDITS ChangeLog NEWS README THANKS TODO&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#resizefs binary doesnt exist in this release&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rm -f "${D}"/usr/share/man/man8/resizefs*&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# move shared libs to /&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dodir /$(get_libdir)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mv "${D}"/usr/$(get_libdir)/lib*.so* "${D}"/$(get_libdir)/ || die&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gen_usr_ldscript libreiser4-minimal.so libreiser4.so librepair.so&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;
&lt;p&gt;把這個檔案放到 /usr/local/portage/sys-fs/reiser4progs/reiser4progs-1.0.6.ebuild，然後...&lt;/p&gt;
&lt;code&gt;# cd /usr/local/portage/sys-fs/reiser4progs&lt;br /&gt;
# ebuild reiser4progs-1.0.6.ebuild digest&lt;br /&gt;
# emerge reiser4progs -va&lt;/code&gt;
&lt;p&gt;編完以後，就可以來作新的分割區了！別忘了將各參數改成您的設定。&lt;/p&gt;
&lt;code&gt;// 先將檔案備份起來&lt;br /&gt;
# cd /&lt;br /&gt;
# tar cp /path/to/mounted_dir &gt; /path/to/backup_file.tar&lt;br /&gt;
// 卸載檔案系統&lt;br /&gt;
# umount /dev/hdXY&lt;br /&gt;
// 建立檔案系統（使用 lzo 壓縮演算法）&lt;br /&gt;
# mkfs.reiser4 -o create=ccreg40 /dev/hdXY&lt;br /&gt;
// 建立檔案系統（使用 gzip 壓縮演算法，較耗費 CPU）&lt;br /&gt;
# mkfs.reiser4 -o create=ccreg40,compress=gzip1 /dev/hdXY&lt;br /&gt;
// 掛載檔案系統&lt;br /&gt;
# mount /dev/hdXY&lt;br /&gt;
// 還原備份檔&lt;br /&gt;
# cd /&lt;br /&gt;
# tar xf /path/to/backup_file.tar&lt;br /&gt;
# sync&lt;/code&gt;
&lt;p&gt;在 umount 之前可以先 df 紀錄用掉的空間，跟改用 cryptcompress 以後比較看看。我的狀況是 855M 變成 524M，省了 331M 的空間。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-6698602116304633227?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/6698602116304633227/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=6698602116304633227' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/6698602116304633227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/6698602116304633227'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/12/blog-post.html' title='擠壓你的檔案系統'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-6624992249293997120</id><published>2006-11-12T03:38:00.000+08:00</published><updated>2006-12-23T16:28:24.783+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><category scheme='http://www.blogger.com/atom/ns#' term='好東西'/><title type='text'>用 webSnarp 在網頁上顯示小預覽圖</title><content type='html'>&lt;p&gt;&lt;a href="http://www.websnapr.com/"&gt;webSnarp 2.0&lt;/a&gt; 是個提供網頁預覽圖服務的網站，詳情請上該網站去了解... 底下有提供一些小玩具，可以在網頁上加上一些特殊功能，讓滑鼠經過連結的時候跳出該連結的預覽圖。&lt;/p&gt;
&lt;p&gt;但是我試圖將它套用在 &lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt; 上的時候，若是想在以前的文章上也套用該功能，就必須去修改之前的所有文章。想當然我沒那麼勤勞，所以就把其中 &lt;a href="http://www.frequency-decoder.com/2006/10/25/link-preview-v2/"&gt;Link Preview V2&lt;/a&gt; 提供的 JavaScript 改了一下，放在&lt;a href="http://dev.gentoo.tw/%7Epalatis/websnapr/websnapr.tar.bz2"&gt;這裡&lt;/a&gt;，有需要的人可以去下載來用。&lt;/p&gt;
&lt;p&gt;不過有一點需要注意，因為是寫來套用在 Blogger Beta 上的舊文章的，所以我讓他掃描&lt;b&gt;所有的&lt;/b&gt;網址，並依照一定的規則排除要跳出預覽圖的網址。詳情請見 websnapr.js 內的「excludeDomains」與「excludeExtensions」兩個變數。&lt;/p&gt;
&lt;p&gt;這是適合 &lt;a href="http://beta.blogger.com/start"&gt;Blogger beta&lt;/a&gt; 的版本，請不要套用在其他地方。安裝的步驟如下：
  &lt;ol&gt;
    &lt;li&gt;至 &lt;a href="http://dev.gentoo.tw/%7Epalatis/websnapr/websnapr.tar.bz2"&gt;這裡&lt;/a&gt; 下載 websnapr.tar.bz2&lt;/li&gt;
    &lt;li&gt;修改「websnarp.js」中的「myBaseURI」變數至您的網頁空間&lt;/li&gt;
    &lt;li&gt;將所有檔案放到自己網頁空間下，記得要放在同一個資料夾裡！&lt;/li&gt;
    &lt;li&gt;去 Blogger 範本中修改 html 的地方，找到 &amp;lt;title&amp;gt; 標籤，在底下插入：
      &lt;code&gt;&amp;lt;style media='screen' type='text/css'&amp;gt;@import &amp;quot;&lt;span style="color: red;"&gt;[您的網頁空間]/websnapr.css&lt;/span&gt;&amp;quot;;&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;script src='&lt;span style="color: red;"&gt;[您的網頁空間]/websnapr.js&lt;/span&gt;' type='text/javascript'/&amp;gt;&lt;/code&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
  最後，顯示出來的效果&lt;a href="http://palatis.blogspot.com"&gt;就像這樣&lt;/a&gt;！
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-6624992249293997120?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/6624992249293997120/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=6624992249293997120' title='4 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/6624992249293997120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/6624992249293997120'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/11/websnarp.html' title='用 webSnarp 在網頁上顯示小預覽圖'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-116213907077027632</id><published>2006-10-29T22:57:00.000+08:00</published><updated>2006-10-30T03:56:16.651+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='好東西'/><title type='text'>COSCUP 2006~~</title><content type='html'>&lt;p&gt;去 &lt;a href="http://coscup.tossug.org/"&gt;COSCUP 2006&lt;/a&gt; 晃了一圈回來，感覺功力增進了不少！&lt;span style="text-decoration: line-through;"&gt;不同於那個&lt;a href="http://www.slat.org/"&gt;偽．OSS 社群&lt;/a&gt;，&lt;/span&gt;本次的議程採雙軌制，一邊以技術議程為主，另一邊則是從 User &amp;&amp;amp; Promotor 的角度切入。會外還附點心、午餐、跟晚餐，最重要的是「這些統統都是免費的」！！！話雖如此，由於這次的主辦單位透露經費還是赤字，所以我丟了 TWD$100 進捐款箱...（是... 我知道很少... 我知道我吃了很多點心、喝了很多飲料、還拿了&lt;span style="text-decoration: line-through;"&gt;兩&lt;/span&gt;個便當......）&lt;/p&gt;
&lt;p&gt;想當然爾，我聽的當然全都是技術議程啦！（程式設計之神來演講，去聽什麼 &lt;a href="http://coscup.tossug.org/index.php?option=com_content&amp;task=view&amp;amp;id=16&amp;Itemid=37"&gt;Open Source 數位生活&lt;/a&gt;還是&lt;a href="http://coscup.tossug.org/index.php?option=com_content&amp;amp;task=view&amp;id=20&amp;amp;Itemid=41"&gt;Open Source 最佳實踐&lt;/a&gt;的，實在太浪費了！）我聽的是「&lt;a href="http://coscup.tossug.org/index.php?option=com_content&amp;task=view&amp;id=15&amp;Itemid=38"&gt;中文輸入工作坊&lt;/a&gt;」、「&lt;a href="http://coscup.tossug.org/index.php?option=com_content&amp;task=view&amp;id=18&amp;Itemid=39"&gt;羽量級桌面&lt;/a&gt;」、與「&lt;a href="http://coscup.tossug.org/index.php?option=com_content&amp;task=view&amp;id=17&amp;Itemid=42"&gt;Web-Oriented Architecture&lt;/a&gt;」三項，議題內容就不再贅述，只提一下自己覺得有趣的東西好了～&lt;/p&gt;
&lt;p&gt;首先一開始介紹的輸入法技術，真是&lt;b&gt;救了我一條命&lt;/b&gt; @@ 我的畢業專題是 &lt;a href="http://developer.berlios.de/projects/chrasis/"&gt;OSS 的手寫輸入法&lt;/a&gt;（目前有一點點 code 可以從 &lt;a href="http://developer.berlios.de/svn/?group_id=7425"&gt;svn checkout&lt;/a&gt;），而今天的議程有提到許多數學模型與相關演算法，給了我個大方向！其中提到目前中文分詞技術的進展，講了許多技術性的議題，非常有意思。&lt;/p&gt;
&lt;p&gt;接下來的羽量級桌面，jserv 與 pcman 發表了一堆好玩的東西，包括如何從根本的設計上改善桌面效能，還有 &lt;a href="http://freedesktop.org/"&gt;FreeDesktop.org&lt;/a&gt; 這個&lt;span style="text-decoration: line-through;"&gt;邪惡&lt;/span&gt;組織公佈的&lt;span style="text-decoration: line-through;"&gt;黑心&lt;/span&gt;&lt;a href="http://freedesktop.org/wiki/Standards"&gt;標準&lt;/a&gt;是&lt;span style="text-decoration: line-through;"&gt;有多可惡&lt;/span&gt;怎樣讓效能好不起來。&lt;/p&gt;
&lt;p&gt;然後是 Web-Oriented Architecture，介紹了目前很紅（比 &lt;a href="http://www.google.com/search?q=britney%20spears"&gt;Britney Spears&lt;/a&gt; 還要&lt;a href="http://www.google.com/search?q=web%202.0"&gt;紅上好幾倍&lt;/a&gt;）的 &lt;a href="http://people.debian.org.tw/~chihchun/2006/04/06/what-is-web20/"&gt;Web 2.0&lt;/a&gt;。先前有在構思一個&lt;a href="http://palatis.blogspot.com/2006/08/blog-post_13.html"&gt;線上翻譯網站&lt;/a&gt;，其技術實現的部份，就很想朝 Web 2.0 與 &lt;a href="http://zh.wikipedia.org/wiki/AJAX"&gt;AJAX&lt;/a&gt; 的方向走。而為了縮短開發時間，應該會使用某些既有的 Framework，如 &lt;a href="http://www.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;、&lt;a href="http://www.cakephp.org/"&gt;CakePHP&lt;/a&gt; 等。雖然目前已經申請了&lt;a href="http://developer.berlios.de/projects/weotrans/"&gt;專案網頁&lt;/a&gt;，但是目前還沒有開始動手作。想想，應該也是時候開始了，就在&lt;span style="text-decoration: line-through;"&gt;期中考週&lt;/span&gt;有空的時候 來作吧！&lt;/p&gt;
&lt;p&gt;另外... 必須對 jserv 的筆記型電腦表達哀悼之意，它被 PingYeh 踢到地上以後，就不會開機了...&lt;/p&gt;
&lt;p&gt;總覺得，來這裡聽一天演講，學到的東西比&lt;span style="text-decoration: line-through;"&gt;去學校聽&lt;a href="http://kahwang.nc.cyut.edu.tw/"&gt;黃國安&lt;/a&gt;、&lt;a href="http://www.csie.cyut.edu.tw/~clc/"&gt;陳金鈴&lt;/a&gt;、&lt;a href="http://www.csie.cyut.edu.tw/~cdliou/cdliou_index.htm"&gt;劉啟東&lt;/a&gt;、&lt;a href="http://www.csie.cyut.edu.tw/~honda/index.htm"&gt;陳宏達&lt;/a&gt;這些&lt;b&gt;爛教授&lt;/b&gt;上課&lt;/span&gt; 自己在家猛 k 文件 得到的東西多的多！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-116213907077027632?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/116213907077027632/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=116213907077027632' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/116213907077027632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/116213907077027632'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/10/coscup-2006.html' title='COSCUP 2006~~'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-116177909640296316</id><published>2006-10-25T20:18:00.000+08:00</published><updated>2006-10-30T03:56:16.589+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><category scheme='http://www.blogger.com/atom/ns#' term='好東西'/><title type='text'>恩... Orz Microkernel...</title><content type='html'>&lt;p&gt;順應 &lt;a href="http://blog.linux.org.tw/~jserv/archives/001692.html"&gt;Orz Microkernel&lt;/a&gt; 推出 &lt;a href="http://blog.linux.org.tw/~jserv/archives/001820.html"&gt;0rz 版&lt;/a&gt;，有幸受到 &lt;a href="http://blog.linux.org.tw/~jserv/" target="_blank"&gt;jserv&lt;/a&gt; 的邀稿，做了個 Logo：&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7150/841/1600/logo.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7150/841/200/logo.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;當然是 &lt;a href="http://palatis.blogspot.com/2006/04/orz-programming-certified.html"&gt;Orz Programming (2.0?) Certified&lt;/a&gt;！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-116177909640296316?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/116177909640296316/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=116177909640296316' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/116177909640296316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/116177909640296316'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/10/orz-microkernel.html' title='恩... Orz Microkernel...'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-116011380555615277</id><published>2006-10-06T13:43:00.000+08:00</published><updated>2006-10-30T03:56:16.524+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='學校'/><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><title type='text'>愛因斯坦他老師</title><content type='html'>&lt;p&gt;今天上通識課（中國經籍與說話藝術）的時候，老師跟我們講了個愛因斯坦的故事...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;大家都知道愛因斯坦小時候是個不討老師喜愛的學生吧？有一次上勞作課的時候，老師要求每個同學作一張小板凳當作業。當愛因斯坦交出他所作的板凳給老師的時候，老師對他說：「我想，在這個世界上，大概找不出比這張板凳更爛的作品了。」&lt;/p&gt;
  &lt;p&gt;但是「不，」愛因斯坦說道，「老師你錯了！」。接著，他從旁邊拿出另外兩張板凳，「這張是我第一次做的，這張是第二次做的。」&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;說完這個故事，老師要求我們在一張紙上寫下一句話的啟發，並交上來當成一次課堂成績。於是我寫下了...&lt;/p&gt;
&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;當老師的不要太機車。&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;
&lt;p&gt;就交過去了......&lt;/p&gt;
&lt;p&gt;哎呀... 真糟糕... 不知道會不會被當 = =&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-116011380555615277?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/116011380555615277/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=116011380555615277' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/116011380555615277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/116011380555615277'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/10/blog-post.html' title='愛因斯坦他老師'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-115867676802689885</id><published>2006-09-19T21:52:00.000+08:00</published><updated>2006-10-30T03:56:16.464+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='網路'/><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><title type='text'>你會上網買新台幣 $236,600,000 的東西嗎？</title><content type='html'>&lt;p&gt;知名網路公司 &lt;a href="http://shopping.pchome.com.tw/"&gt;PCHome&lt;/a&gt; 在網路上&lt;a href="http://shopping.pchome.com.tw/pcv/"&gt;賣遊艇&lt;/a&gt;耶！&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7150/841/1600/screen20060919214342.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7150/841/320/screen20060919214342.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;有誰會在網路上買一台價值超過兩億三千萬的遊艇呢？即使買了，要怎麼付錢呢？如果刷卡，有什麼卡一個月可以刷六百五十萬（36 期 0 利率）的嗎？如果有，我還真想知道 XD~~&lt;/p&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;p&gt;照 PCHome 標錯價格的機率，等他少標個幾個零就可以趕快去下標了。&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-115867676802689885?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/115867676802689885/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=115867676802689885' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115867676802689885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115867676802689885'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/09/236600000.html' title='你會上網買新台幣 $236,600,000 的東西嗎？'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-115840074296317054</id><published>2006-09-16T17:14:00.000+08:00</published><updated>2006-10-30T03:56:16.399+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='嘴砲轟'/><category scheme='http://www.blogger.com/atom/ns#' term='學校'/><title type='text'>圖書館排擠我，不准我推薦書～</title><content type='html'>&lt;p&gt;我們學校圖書館有個立意甚好的服務，叫做「&lt;a href="http://libsys.lib.cyut.edu.tw/recommend/IOrderBook.asp"&gt;線上圖書薦購系統&lt;/a&gt;」。可是這個立意甚好的服務，被這個兩光的網頁設計公司（好啦，我不知道這個是外包給外面的廠商，還是「外包」給我們學校資管系的...）一搞，變得亂七八糟...&lt;/p&gt;
&lt;p&gt;怎麼說是亂七八糟呢？因為...
  &lt;ol&gt;
    &lt;li&gt;縮排亂七八糟，想 trace 還要先整理一次。&lt;/li&gt;
    &lt;li&gt;檔頭趾高氣昂的說自己是 XHTML，可是卻用了一堆 HTML 的 tag（如 center、font... 等等）。（不能因為是 Transitional 就這樣惡搞吧？）&lt;/li&gt;
    &lt;li&gt;使用 VBScript 作為 User 端的驗證，搞得只有用 IE 的使用者有辦法推薦...&lt;/li&gt;
  &lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;我只是百無聊之中想看一下 ARM（The Annotated C++ Reference Manual），所以想說去圖書館找找，卻找不到這本書，想讓他們下次買個幾本放著生菇。不能推薦實在不方便，於是寫了封信給圖書館...（個人資料部份消音）&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;Subject: 圖書薦購系統能不能不要使用 VBScript 作驗證？

辛勞的圖書館採編組工作人員您們好，

能不能不要用 VBScript 作用戶端資料驗證？因為敝人並非使用微軟作業系統，沒有 Internet Explorer。如果有需要，我可以寫好有相同功能的 JavaScript 讓您替換就好。

因為此 VBScript 驗證碼的緣故，造成敝人在推薦書籍時的不便，所以懇請您們換用其他方法。

諸多感謝！&lt;/pre&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;pre&gt;**同學,您好!

先謝謝你的來信建議!

圖書薦購系統開發之初，由於上線時間急迫，確實僅能以大多數用者作業環境為優先考量，以求立竿見影之效。在本館戮力於提供更便利、多元、精緻的服務過程中，"人力" 問題則是我們經常感到捉襟見肘之處；若你真願意義務性提供協助，我們則熱誠的歡迎，一起來嘗試並努力，以期能縮短過程、增進時效。

後續就有請你主動與本館資訊組**小姐聯繫
(分機:****, mail address :   *****@cyut.edu.tw)。

謝謝您!!

圖書館採編組 敬上&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;基本上，我實在看不出什麼原因會導致上線時間急迫就必須採用 ASP+VBScript。說實在 Server 端用什麼系統跟 Client 端一點關係也沒有，反正 Server 就那麼一台（一群？），關起門來愛怎麼搞都沒差。不過丟出來給 Client 的東西，難道不值得多考慮一下嗎？還是因為「上線時間急迫，所以省去評估的時間，直接下去 Coding」？&lt;/p&gt;
&lt;p&gt;我一直以為，「網路服務」應該要以「能服務越多客戶越好」為目標。採取開放規格開發出來的東西，總是能比較簡單的符合各式客戶的需求。無論如何，支援 JavaScript 的瀏覽器再怎樣也比支援 VBScript 的多吧？&lt;/p&gt;
&lt;p&gt;好啦，可能廠商要賺錢，賣 MS 的東西賺比較多，所以最後搞出來這個亂七八糟的系統吧 = =&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-115840074296317054?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/115840074296317054/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=115840074296317054' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115840074296317054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115840074296317054'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/09/blog-post_16.html' title='圖書館排擠我，不准我推薦書～'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-115835445699174880</id><published>2006-09-16T04:00:00.000+08:00</published><updated>2006-11-17T01:35:15.666+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><title type='text'>測試編譯器功力的九九乘法表原始碼</title><content type='html'>&lt;p&gt;最近迷上 template meta-programming，所以百無聊之中（相對於百忙之中...）寫了個入門等級的小程式。類似功能的程式應該很多程式設計師還沒出茅廬的時候就都寫過了吧！&lt;/p&gt;
&lt;p&gt;為什麼說是測試「編譯器」的功力呢？因為這個程式用到了一些高階的 template 功能，並不是所有 compiler 都支援。如果您手上的編譯器是 VC6 的話，請去 Program Files 底下把它拖曳進資源桶，然後改用 &lt;a href="http://www.bloodshed.net/devcpp.html"&gt;dev-c++&lt;/a&gt;（它使用 GCC 3.4.2）。使用 GCC 4.1.1（我是用這個編譯、測試的）是完全沒有問題的 :)&lt;/p&gt;
&lt;p&gt;本來想稍微講解，可是想想又覺得沒什麼好說的，畢竟只是無聊的小作業 = = 如果有什麼問題，歡迎留言、MSN、Email、電話討論。以下附上程式碼！&lt;/p&gt;
&lt;hr /&gt;
&lt;code&gt;/*&lt;br /&gt;
&amp;nbsp;* Meta-programming Infrastructure&lt;br /&gt;
&amp;nbsp;*/&lt;br /&gt;
&lt;br /&gt;
struct NullType { };&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;typename Head, typename Tail&amp;gt;&lt;br /&gt;
struct Typelist { };&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
&amp;nbsp;* meta-(data structure) to store "X x Y = Z"&lt;br /&gt;
&amp;nbsp;*/&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;unsigned int X, unsigned int Y&amp;gt;&lt;br /&gt;
struct ChartNode&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;enum { first = X, second = Y, product = X * Y };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
&amp;nbsp;* Chart Maker...&lt;br /&gt;
&amp;nbsp;*&lt;br /&gt;
&amp;nbsp;* @param X, Y: current X and Y&lt;br /&gt;
&amp;nbsp;* @param XN, YN: max X and Y&lt;br /&gt;
&amp;nbsp;*/&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;unsigned int X, unsigned int Y, unsigned int XN, unsigned int YN&amp;gt;&lt;br /&gt;
struct makeChart&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typedef Typelist&amp;lt; ChartNode&amp;lt;X, Y&amp;gt;, typename makeChart&amp;lt;X+1, Y, XN, YN&amp;gt;::Result &amp;gt; Result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;unsigned int Y, unsigned int XN, unsigned int YN&amp;gt;&lt;br /&gt;
struct makeChart&amp;lt;XN, Y, XN, YN&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typedef Typelist&amp;lt; ChartNode&amp;lt;XN, Y&amp;gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Typelist&amp;lt; NullType, typename makeChart&amp;lt;1, Y+1, XN, YN&amp;gt;::Result &amp;gt; &amp;gt; Result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;unsigned int XN, unsigned int YN&amp;gt;&lt;br /&gt;
struct makeChart&amp;lt;XN, YN, XN, YN&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typedef Typelist&amp;lt; ChartNode&amp;lt;XN, YN&amp;gt;, NullType &amp;gt; Result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
&amp;nbsp;* Algorithm to write a ChartNodeList to an Ostream&lt;br /&gt;
&amp;nbsp;*/&lt;br /&gt;
template &amp;lt;typename TList&amp;gt;&lt;br /&gt;
struct toOstream;&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;typename X, typename XS&amp;gt;&lt;br /&gt;
struct toOstream&amp;lt; Typelist&amp;lt;X, XS&amp;gt; &amp;gt; : toOstream&amp;lt; XS &amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template &amp;lt;typename OST, typename DELIM&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OST &amp; operator() (OST &amp; dest, DELIM delim1, DELIM delim2)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dest &amp;lt;&amp;lt; X::first &amp;lt;&amp;lt; "x" &amp;lt;&amp;lt; X::second &amp;lt;&amp;lt; "=" &amp;lt;&amp;lt; X::product &amp;lt;&amp;lt; delim1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return toOstream&amp;lt;XS&amp;gt;::operator()(dest, delim1, delim2);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;typename XS&amp;gt;&lt;br /&gt;
struct toOstream&amp;lt; Typelist&amp;lt;NullType, XS&amp;gt; &amp;gt; : toOstream&amp;lt; XS &amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template &amp;lt;typename OST, typename DELIM&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OST &amp; operator() (OST &amp; dest, DELIM delim1, DELIM delim2)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dest &amp;lt;&amp;lt; delim2;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return toOstream&amp;lt;XS&amp;gt;::operator()(dest, delim1, delim2);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;&amp;gt;&lt;br /&gt;
struct toOstream&amp;lt;NullType&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template &amp;lt;typename OST, typename DELIM&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OST &amp; operator() (OST &amp; dest, DELIM, DELIM delim2)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dest &amp;lt;&amp;lt; delim2;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return dest;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
&amp;nbsp;* Main Program...&lt;br /&gt;
&amp;nbsp;*/&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;iterator&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;enum { x = 9, y = 9 };&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt;&amp;lt; "make a Chart from [(1x1=1) .. (" &amp;lt;&amp;lt; x &amp;lt;&amp;lt; "x" &amp;lt;&amp;lt; y &amp;lt;&amp;lt; "=" &amp;lt;&amp;lt; x*y &amp;lt;&amp;lt; ")]:" &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typedef makeChart&amp;lt;1, 1, x, y&amp;gt;::Result ChartList;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;toOstream&amp;lt;ChartList&amp;gt; generator;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;generator(cout, ", ", "\n");&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0;&lt;br /&gt;
}&lt;/code&gt;
&lt;hr /&gt;
&lt;p&gt;整個演算法包裝成一系列的 template objects，最後再丟給 toOstream&lt;&gt; 這個唯一有被具現化的 template object，其他程式碼全部都在編譯時期被展開了！帶入 x = 9, y = 9 的結果：&lt;/p&gt;
&lt;code&gt;$ ./ninenine&lt;br /&gt;
make a Chart from [(1x1=1) .. (9x9=81)]:&lt;br /&gt;
1x1=1, 2x1=2, 3x1=3, 4x1=4, 5x1=5, 6x1=6, 7x1=7, 8x1=8, 9x1=9,&lt;br /&gt;
1x2=2, 2x2=4, 3x2=6, 4x2=8, 5x2=10, 6x2=12, 7x2=14, 8x2=16, 9x2=18,&lt;br /&gt;
1x3=3, 2x3=6, 3x3=9, 4x3=12, 5x3=15, 6x3=18, 7x3=21, 8x3=24, 9x3=27,&lt;br /&gt;
1x4=4, 2x4=8, 3x4=12, 4x4=16, 5x4=20, 6x4=24, 7x4=28, 8x4=32, 9x4=36,&lt;br /&gt;
1x5=5, 2x5=10, 3x5=15, 4x5=20, 5x5=25, 6x5=30, 7x5=35, 8x5=40, 9x5=45,&lt;br /&gt;
1x6=6, 2x6=12, 3x6=18, 4x6=24, 5x6=30, 6x6=36, 7x6=42, 8x6=48, 9x6=54,&lt;br /&gt;
1x7=7, 2x7=14, 3x7=21, 4x7=28, 5x7=35, 6x7=42, 7x7=49, 8x7=56, 9x7=63,&lt;br /&gt;
1x8=8, 2x8=16, 3x8=24, 4x8=32, 5x8=40, 6x8=48, 7x8=56, 8x8=64, 9x8=72,&lt;br /&gt;
1x9=9, 2x9=18, 3x9=27, 4x9=36, 5x9=45, 6x9=54, 7x9=63, 8x9=72, 9x9=81,&lt;/code&gt;
&lt;p&gt;&lt;a href="http://blog.linux.org.tw/~jserv/archives/001780.html"&gt;令人驚豔的囉唆&lt;/a&gt;... @@&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-115835445699174880?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/115835445699174880/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=115835445699174880' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115835445699174880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115835445699174880'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/09/blog-post.html' title='測試編譯器功力的九九乘法表原始碼'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-115604156320018785</id><published>2006-08-20T10:20:00.000+08:00</published><updated>2006-10-30T03:56:16.136+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='好東西'/><title type='text'>這東西只要 USD $18,500！</title><content type='html'>&lt;p&gt;之前&lt;a href="http://palatis.blogspot.com/2005/09/quantum-optical-cpu.html"&gt;提到&lt;/a&gt;過，使用 Quantum-Optimized CPU 的 &lt;a href="http://atomchip.com/_wsn/page4.html"&gt;Super Notebook&lt;/a&gt;，一台只要 $18,500！&lt;/p&gt;

&lt;blockquote&gt;
  &lt;a href="http://photos1.blogger.com/blogger/7150/841/1600/SG220-2-x.jpg" rel="lightbox" title="AtomChip® SG220-2"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7150/841/320/SG220-2-x.jpg" border="0" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;規格好像有點變化...&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;中央處理器：AtomChip® Quantum® II @ 6.8GHz&lt;/li&gt;
  &lt;li&gt;主記憶體：AtomChip® Quantum-Optical 非揮發性記憶體 1TB&lt;/li&gt;
  &lt;li&gt;螢幕： 12.1" WXGA (1280x800, 16:10) TFT 背光 LCD 顯示器&lt;/li&gt;
  &lt;li&gt;顯示晶片：整合式圖形控制器 [ 支援 AtomChip® DVM（動態顯示記憶體）]&lt;/li&gt;
  &lt;li&gt;輔助儲存媒體：AtomChip® Quantum Storage 2TB&lt;/li&gt;
  &lt;li&gt;光碟機：DVD Super Multi&lt;/li&gt;
  &lt;li&gt;網路介面：802.11 無線網路 [ Intel® PRO/Wireless 2100/2200GB/2915ABG ]、藍牙、GPS、LAN、Modem&lt;/li&gt;
  &lt;li&gt;連線介面：IEEE1394A x 1、USB 2.0 x 3、SVGA-out、立體聲耳機孔&lt;/li&gt;
  &lt;li&gt;插槽：PCMCIA x 1、四合一讀卡機 [ SDIO、SD、MS Pro、MS ]&lt;/li&gt;
  &lt;li&gt;其他週邊：內建 1.3 百萬像素相機、立體聲喇叭、麥克風&lt;/li&gt;
  &lt;li&gt;輸入介面：多媒體鍵盤 [ E-Mail、Internet、Capture、WLAN 按鍵 ]、內建 4 方向捲動按鈕的 Synaptics 觸控版&lt;/li&gt;
  &lt;li&gt;大小：(寬)320.0 x (長)242.0 x (高)22.0mm/28.0mm (前/後)&lt;/li&gt;
  &lt;li&gt;重量：約 4.18lb (1900g)&lt;/li&gt;
  &lt;li&gt;作業系統：Windows XP 或 Linux&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;不知道什麼時候開始出貨...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-115604156320018785?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/115604156320018785/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=115604156320018785' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115604156320018785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115604156320018785'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/08/usd-18500.html' title='這東西只要 USD $18,500！'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-115542771910772748</id><published>2006-08-13T08:08:00.000+08:00</published><updated>2006-10-30T03:56:16.061+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><category scheme='http://www.blogger.com/atom/ns#' term='天馬行空'/><title type='text'>線上翻譯網站</title><content type='html'>&lt;p&gt;不，你錯了！我並不是要介紹什麼類似 &lt;a href="http://babelfish.altavista.com/"&gt;AltaVista - Babel Fish Translation&lt;/a&gt; 的線上翻譯網站，而只是在這裡貼上一點個人想法與計畫。我可能會在不久以後的將來動手實做軟體的部份，不過資料可能就得靠大家幫忙一起輸入。&lt;/p&gt;
&lt;p&gt;想做的東西，是可以讓有意幫忙翻譯 Linux 軟體的使用者直接在線上翻譯軟體的介面網站。這個網站跟一般認領軟體的 .pot、回家翻譯好、再上傳給翻譯協調者的作法不一樣，而是讓你直接在網站上翻譯軟體！作法有點類似 &lt;a href="http://windowsupdate.62nds.com/"&gt;WindizUpdate&lt;/a&gt; 的翻譯方法，他隨機列出網頁上的一句英文讓使用者翻譯，收集了許多使用者的回饋以後，由演算法決定最適當的翻譯。&lt;/p&gt;
&lt;p&gt;我想做的東西也有點類似這樣！也許您今天閒的發慌，想作些本地化（Localization）的工作。於是，來到了這個線上翻譯網站。或是，您是專程為了翻譯某個軟體，或是發現某個軟體的翻譯有不完全、翻譯錯誤的部份想要幫忙修改。首先您可能會看到個這樣的畫面...&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;歡迎您的到來，在這裡您可以讓世界更美好云云...&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;u&gt;我想翻譯特定軟體&lt;/u&gt;&lt;br /&gt;&lt;small&gt;經由搜尋、清單... 等功能，直接進入該軟體的翻譯區。&lt;/small&gt;&lt;/li&gt;
  &lt;li&gt;&lt;u&gt;沒有特定的目標&lt;/u&gt;&lt;br /&gt;&lt;small&gt;由系統隨機選取需要翻譯的軟體，讓使用者翻譯。&lt;/small&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;選定了想翻譯的軟體（隨便舉一個簡單的範例，例如 &lt;a href="http://windowsupdate.62nds.com/"&gt;gcalctool&lt;/a&gt; 好了！），網頁上會列出目前翻譯的狀態與累計的翻譯。您可以直接選擇使用已經有的翻譯，也可以加入新的翻譯。若是不想翻譯，可以在前面的核取方塊設定。&lt;/p&gt;
&lt;blockquote&gt;
&lt;table&gt;
  &lt;thead&gt;
    &lt;td&gt;全選&lt;br /&gt;&lt;input type="checkbox" name="select_all" /&gt;&lt;/td&gt;
    &lt;td&gt;原文&lt;/td&gt;
    &lt;td&gt;翻譯&lt;/td&gt;
  &lt;/thead&gt;
  &lt;tr&gt;
    &lt;td colspan="3" style="text-align:center;"&gt;......&lt;/td&gt;
  &lt;/td&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;input type="checkbox" name="somemd5_enabled" checked /&gt;&lt;/td&gt;
    &lt;td&gt;Set numeric base to binary (base 2)&lt;/td&gt;
    &lt;td&gt;
        &lt;input type="radio" name="somemd5" value="0" /&gt;&lt;select name="somemd5_old"&gt;
          &lt;optgroup label="100 人建議："&gt;
            &lt;option value="0" selected&gt;用 2 進制數字進行計算&lt;/option&gt;
            &lt;option value="1"&gt;將進制設為 2（二進制）&lt;/option&gt;
          &lt;/optgroup&gt;
          &lt;optgroup label="1 人建議："&gt;
            &lt;option value="2"&gt;亂翻的，我想不到了...&lt;/option&gt;
          &lt;/optgroup&gt;
        &lt;/select&gt;&lt;br /&gt;
        &lt;input type="radio" name="somemd5" value="1" /&gt;&lt;input type="text" name="somemd5_new" /&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td colspan="3" style="text-align:center;"&gt;......&lt;/td&gt;
  &lt;/td&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;input type="checkbox" name="someothermd5_enabled" /&gt;&lt;/td&gt;
    &lt;td&gt;Set display type to engineering format&lt;/td&gt;
    &lt;td&gt;
        &lt;input type="radio" name="someothermd5" value="0" disabled /&gt;&lt;select name="someothermd5_old" disabled&gt;
          &lt;optgroup label="1 人建議："&gt;
            &lt;option value="2" selected&gt;將顯示模式設定為工程模式&lt;/option&gt;
          &lt;/optgroup&gt;
        &lt;/select&gt;&lt;br /&gt;
        &lt;input type="radio" name="someothermd5" value="1" disabled /&gt;&lt;input type="text" name="someothermd5_new" disabled /&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td colspan="3" style="text-align:center;"&gt;......&lt;/td&gt;
  &lt;/td&gt;
&lt;/table&gt;
&lt;p style="text-align:center;"&gt;&lt;input type="button" value="確認" /&gt; &lt;input type="button" value="重設" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;翻好之後，使用者就暫時沒事了，輪到翻譯協調者啦！翻譯協調者可以從下載系統產生的 .po，將它回饋給更上游的軟體設計團隊。&lt;/p&gt;
&lt;p&gt;此篇文章只描述 Use Case，系統內部的資料格式、介面呈現等還需要另外設計，如何從上游取得需要翻譯的資料也必須另外考慮（是直接從 cvs/svn/git checkout、還是由翻譯協調者手動輸入、還是有其他作法？），如何與上游協調更是想都沒想到。不過... 算是先起個頭！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-115542771910772748?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/115542771910772748/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=115542771910772748' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115542771910772748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115542771910772748'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/08/blog-post_13.html' title='線上翻譯網站'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-115536147912551826</id><published>2006-08-12T13:38:00.000+08:00</published><updated>2006-10-30T03:56:15.994+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='轉貼'/><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><title type='text'>愁緒...</title><content type='html'>&lt;p&gt;這似乎是一篇很老的文章，個人覺得（從文學的角度分析）寫的很好，情節緊湊並押韻、也用了許多修辭學的技巧。原作者不可考，不過似乎一開始是貼在巴哈 Kuso 版。Google 搜尋只找到兩個來源，為避免他就這樣銷聲匿跡，還是轉貼一下！&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;國中生老趙，穿著制服... 白上衣藍短褲。在他家到學校這段路的中間點有一間廟，每天老趙就從家裡出發，走過台北吵雜的街道，目送穿著淺黃制服的女高中生上公車，經過那座不知名不曉得拜什麼神的廟，買過校門口的美而美早餐後到達學校。&lt;/p&gt;

  &lt;p&gt;某天，老趙下午放學，美而美已經不賣早餐了。老趙有感時光之匆匆啊！想要在年輕的臉龐之上，試圖流露出成熟深沉的笑容。&lt;/p&gt;

  &lt;p&gt;「哎唷喂呀！」難道是這個年紀不適合這樣的表情，突然一陣腹痛如絞、冷汗直流。國中生老趙此時若是回到學校上廁所，難保不在同學與可愛的宜靜面前丟了顏面。只好，他只好忍著痛往前走，同學們一一從後頭超車。漸漸的，老趙落後了，回家的路好遙遠、好漫長！&lt;/p&gt;

  &lt;p&gt;這時，中間點的那座廟出現了！此時，老趙感覺到腹痛如絞、冷汗直流。重要的是呼之欲出的那陣軟黃已經蠢蠢欲動，頗有千軍萬馬之勢。不曉得是急中生智還是學校老師有教，國中生老趙想「廟裡有廁所！」不管了！什麼都不管了！老趙忍住，忍住那些不該此時此地出現的東西，加速向前... 走去！來不及看看廟裡供奉的什麼神，來不及向香火舖示意，來不及心存敬意，直奔廟後的廁所。&lt;/p&gt;

  &lt;p&gt;廁所有兩間，老趙打開一間，裡面有前人的遺跡。想必是遺跡的威力太過強大，老趙開門才剛剛看見，幾欲被那遺跡的味道之強大的威力震倒，震倒前管理直腸的那幾條肌肉還突然鬆開了一下！好樣兒的老趙，不虧是強者。在那東西將出未出之際，猛然一蹲，在感受到地心引力的招喚之前，再次縮緊那幾條肌肉，就這麼硬生生的由外而內接住了那坨，呼之欲出的、萬頭鑽洞的、有如猛虎出閘的東西。這下來不及高興，老趙心想禁不起再一次了。好樣兒的老趙拿的起放的下，馬上關上門，拉開隔壁那間！&lt;/p&gt;

  &lt;p&gt;..............................&lt;/p&gt;
  &lt;p&gt;拉不動？再試，還是拉不動。莫非......？&lt;/p&gt;
  &lt;p&gt;老趙敲門...&lt;/p&gt;
  &lt;p&gt;「叩？」&lt;/p&gt;
  &lt;p&gt;「叩！」&lt;/p&gt;
  &lt;p&gt;「叩叩？？」&lt;/p&gt;
  &lt;p&gt;「叩叩！！」&lt;/p&gt;
  &lt;p&gt;「叩叩叩！？！？」&lt;/p&gt;
  &lt;p&gt;「五郎啦！但基勒啦！」&lt;/p&gt;

  &lt;p&gt;說時遲，來不及，還來不及但基勒！老趙放了個屁，一切，一切都白費了。從肛門、從內褲、由大腿內側到小腿、到白襪、到過年買的球鞋，就這樣緩緩流到廟後的水泥地上。塵歸塵，土歸土，化作春泥（？）更護花。&lt;/p&gt;

  &lt;p&gt;國中生老趙呆了，就這麼杵在那兒，就這麼杵著。右手還在不死心的敲著門，但是目光已經沒有焦距。嘴巴微張，腦中閃過一幕幕畫面，同時不斷蒐詢他十幾年有記憶以來的所有經驗法則，想要試圖解決此時此刻的問題。&lt;/p&gt;

  &lt;p&gt;沒有用，人腦當機，剩下的是機械式的敲門。張開的嘴，還有遲遲找不到焦距的眼。一切都好安靜... 霎時，門開了！&lt;/p&gt;

  &lt;p&gt;「嘎哩共五郎，哩洗謀聽丟洗喔 ？」&lt;/p&gt;
  &lt;p&gt;「......」&lt;/p&gt;
  &lt;p&gt;「............. 哩挫賽喔？」&lt;/p&gt;

  &lt;p&gt;出來的那人，說完就走了...&lt;/p&gt;

  &lt;p&gt;老趙不走！他不能走！不能只是走！突然，他放棄一切的跑回家，不顧一切的向前跑去，不管在身後飛揚的是塵土還是什麼，不顧一切的朝家裡跑去。在空中，彷彿看見由大腿內側到小腿間，在空中的一絲絲黃色的線... 飛揚，如老趙十來歲的青春，那麼自由、那麼奔放！但是就在那條線就在剛落地那一剎那，卻是一記記忘記聲響的雨點。無奈、委屈、還有濃的化不開的... 愁緒。&lt;/p&gt;

  &lt;p&gt;「這就是青春嗎？」&lt;/p&gt;

  &lt;p&gt;才回到家的老趙，來開門後吃驚又憤怒的母親，在門口就把老趙給脫個精光，把全身的衣褲都丟到垃圾桶裡，試圖忘記這一切。可是，母親卻忘了，那個站在門口，仍在當機狀態下的老趙。夕陽西下，倦鳥歸巢時，仍有一隻年輕的雛鳥，一面映著夕陽，一面無聲的把影子扔在門上。&lt;/p&gt;

  &lt;p&gt;老趙傻傻的站在屋前，公車剛過，黃制服的女孩才下公車。出現在她眼前的，便是這一幕。蒼白而略顯孱弱的少年，孤獨又悲傷的站在迎接她回家的夕陽下。還有，不管是女孩還是老趙這一生的不能忘記的，那股濃的化不開的... 稠 Shit...&lt;/p&gt;

  &lt;p&gt;................................ &lt;/p&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-115536147912551826?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/115536147912551826/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=115536147912551826' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115536147912551826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115536147912551826'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/08/blog-post_12.html' title='愁緒...'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-115525950554582761</id><published>2006-08-11T08:52:00.000+08:00</published><updated>2006-10-30T03:56:15.929+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='嘴砲轟'/><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><title type='text'>灌票</title><content type='html'>&lt;p&gt;這次的「&lt;a href="http://praise2006.icos.org.tw/?page=vote"&gt;2006 自由軟體傑出應用推廣選拔大賽&lt;/a&gt;」似乎有點... 呃～不說了，因為已經被&lt;a href="http://freesf.tnc.edu.tw/modules/news/article.php?storyid=2735"&gt;罵得很慘&lt;/a&gt;了。&lt;/p&gt;
&lt;p&gt;只是這次的灌票，讓我想起在我國中（還是高中）的時候（超過五年以前）曾經發生的一件趣事...&lt;/p&gt;
&lt;p&gt;Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz&lt;/p&gt;
&lt;p&gt;某音樂製作公司（因為年代久遠，我已經忘記是哪個公司了...）在網站上舉辦了票選活動，票選的內容大致如下：&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;今年暑假，您最希望我們能邀請哪位國外藝人來台灣？&lt;ul&gt;
    &lt;li&gt;阿豆仔藝人甲 - 123 票&lt;/li&gt;
    &lt;li&gt;阿豆仔藝人乙 - 234 票&lt;/li&gt;
    &lt;li&gt;阿豆仔藝人丙 - 456 票&lt;/li&gt;
    &lt;li&gt;阿豆仔藝人丁 - 345 票&lt;/li&gt;
  &lt;/ul&gt;（實際要邀請哪些藝人我忘記了，票數也是胡謅的，不過很確定是暑假！）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我的某個同學非常喜歡... ㄟ... 當作是目前得票最少的藝人甲好了，於是就 IM 我，叫我幫他投票。&lt;/p&gt;
&lt;p&gt;舉手之勞嘛！當然就幫他投一下啦！&lt;/p&gt;
&lt;p&gt;結果左鍵點點點的，發現他可以重複投票，於是我就用 php 寫了個灌票的小程式。當時還很得意的跟同學拍胸脯保證，有了我的灌票程式，藝人甲一定有機會高票當選！&lt;/p&gt;
&lt;p&gt;好啦～放著電腦出去看電視... 過一陣子回來...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;今年暑假，您最希望我們能邀請哪位國外藝人來台灣？&lt;ul&gt;
    &lt;li&gt;阿豆仔藝人甲 - 56789 票&lt;/li&gt;
    &lt;li&gt;阿豆仔藝人乙 - XXX 票&lt;/li&gt;
    &lt;li&gt;阿豆仔藝人丙 - 67890 票&lt;/li&gt;
    &lt;li&gt;阿豆仔藝人丁 - XXX 票&lt;/li&gt;
  &lt;/ul&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;「吶尼！？怎麼藝人丙的票也增加的那麼恐怖？難不成有人也跟我一樣在灌票嗎！？」奇怪，把灌票程式先關掉看看。&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;今年暑假，您最希望我們能邀請哪位國外藝人來台灣？&lt;ul&gt;
    &lt;li&gt;阿豆仔藝人甲 - 56890 票&lt;/li&gt;
    &lt;li&gt;阿豆仔藝人乙 - XXX 票&lt;/li&gt;
    &lt;li&gt;阿豆仔藝人丙 - 67912 票&lt;/li&gt;
    &lt;li&gt;阿豆仔藝人丁 - XXX 票&lt;/li&gt;
  &lt;/ul&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;「... 怎麼我灌他也灌，我不灌他就不灌了？」不相信，再把灌票開起來...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;今年暑假，您最希望我們能邀請哪位國外藝人來台灣？&lt;ul&gt;
    &lt;li&gt;阿豆仔藝人甲 - 123456 票&lt;/li&gt;
    &lt;li&gt;阿豆仔藝人乙 - XXX 票&lt;/li&gt;
    &lt;li&gt;阿豆仔藝人丙 - 134567 票&lt;/li&gt;
    &lt;li&gt;阿豆仔藝人丁 - XXX 票&lt;/li&gt;
  &lt;/ul&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;後來，我發現不管怎樣，藝人丙的得票一定比藝人甲多出 10%。聰明的您一定知道是怎麼一回事了吧？&lt;/p&gt;
&lt;p&gt;「繼續灌吧」，我這麼想著「反正等下吃完晚飯回來，網站的人應該就會發現了吧。」結果果然如我所料，吃完飯再回來，那個投票的活動就從此消失了。&lt;/p&gt;
&lt;p&gt;Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz&lt;/p&gt;
&lt;p&gt;沒有任何影射任何其他活動的意思，只是突然想起這件很久以前的往事...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-115525950554582761?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/115525950554582761/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=115525950554582761' title='4 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115525950554582761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115525950554582761'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/08/blog-post.html' title='灌票'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-115294013308093068</id><published>2006-07-15T11:04:00.000+08:00</published><updated>2006-10-30T03:56:15.866+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='嘴砲轟'/><title type='text'>教育是魚還是釣竿？</title><content type='html'>&lt;p&gt;上星期六因為我媽的關係，我參加了「九五暫行綱要新課程配套暨九十八學年度大學指考加考公民與社會座談會」（好長的名字 =.=+）。會中有許多家長、老師、教育部的官員、記者等人到場，學生倒是沒幾個。根據他們討論的認知，大家對考試的概念似乎還停留在「讓學生背書，記比較多的人贏！」。我反而有不同的看法。&lt;/p&gt;
&lt;p&gt;我們都知道，科舉這種制度，是唐朝就流傳下來，已經用了幾千年的東西。在唐宋那時候，可謂「熟讀唐詩三百首，不會作詩也會吟」。所以要求學生背東背西，反正以前有的東西全部背下來就是了！到了今天，社會也用這種制度分辨「有出息的好學生」與「沒出息的壞學生」。但是大家都忽略了一點 -「唐詩三百首」到頭來也就那麼「三百首」。在二十一世紀的今天，每個月出版的報章雜誌加起來，恐怕都超過過去幾千年那些唐詩、宋詞、元曲、小說... 哩哩叩叩阿里不達加起來要多。這麼龐大的資訊，要叫學生全部記起來，到了考試測試你記得百分之幾，實在是很無聊也很不公平的作法。&lt;/p&gt;
&lt;p&gt;現在是資訊爆炸的時代，任何人在隨時隨地都可能產生新資訊。而傳佈資訊與儲存資料的媒體也夠發達，能有效將資料存下來，並在需要的時候在幾乎任何地方存取。這時候，只顧著讓人類重複其他一些非人類科技產品就能達到的功能，實在很無聊也無意義。就像最近在&lt;a href="http://www.rdasiafeatures.com/chitw.htm"&gt;讀者文摘&lt;/a&gt;（註）上看到一個新竹縣新埔鎮的白痴，背了包括學校、郵局、戶政事務所、自來水廠、監理所、電信局等各機構電話一樣（居然還有更白痴的送匾額給他，真是瘋了！金氏世界紀錄如果有「白痴」這項，他們一定是第一名！）。&lt;/p&gt;
&lt;p&gt;我認為目前的教育，不應只侷限於「從一大堆資料中，挑一些符合各階段（國小、國中、高中、大學）學習過程的資訊出來，編成課本教學生，然後考他們記得多少」這樣的辦法，而是應該教導學生「如何從一大堆資料中，挑出需要的東西」，也就是「資訊檢索」的方法，適當建立團隊合作分工協調的概念，並且&lt;b&gt;不要再考選擇題了&lt;/b&gt;！&lt;/p&gt;
&lt;p&gt;
  考試當然還是評斷學生學習成果的標準，只是考試的辦法應該有所改變：
  &lt;ul&gt;
    &lt;li&gt;取消選擇題這種猜猜都會對的測驗方法，或是降低選擇題配分所佔比例，並採取倒扣機制。&lt;/li&gt;
    &lt;li&gt;增加簡答與申論題的比重，並增加讓考生表達自己看法的機會。&lt;/li&gt;
    &lt;li&gt;採 Open Book 制度，讓考生可以從資料中擷取所需資訊來回答問題。而參考的資料由考生自己準備。&lt;/li&gt;
    &lt;li&gt;讓考生有與他人合作的機會，提供一至兩題申論題是要由小組討論回答的。而分組則由考生自己決定。&lt;/li&gt;
  &lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
  這裡針對以上辦法說明：
  &lt;ul&gt;
    &lt;li&gt;選擇題全部由單選改成複選，可以選零個、一個、或多個選項，並增加「以上皆非」來判斷「已作答」與「未作答」的題目。選項可以採加權記分法，例如某題有四個選項，第一個選項 5 分，第二個 3 分，其他 0 分這樣。&lt;/li&gt;
    &lt;li&gt;針對簡答與申論題可能產生的標準不公，可以讓多個老師批改一部分考卷，然後將批改後的結果與樣本輸入電腦，建立類神經網路批改剩下的部份。讓二十個老師批改同一份考卷，每個老師有五分的權重。而批改的老師由電腦隨機選擇，有可能台北的老師改到高雄的考卷，台中的老師改到花蓮的考卷這樣。&lt;/li&gt;
    &lt;li&gt;Open Book 則符合　國父「立足點平等」精神，讓學生自己準備要參考的資料，沒準備資料就來考試... 考試ㄟ～叫你準備不準備，考不好死死算了！&lt;/li&gt;
    &lt;li&gt;共同申論題由學生自己選擇合作的隊友。沒朋友找不到隊友的自己去死，在二十一世紀的今天人際關係處理不好，不是想辦法自己把所有事情作掉，就是自己去死。而某些能力較強的將題目回答得很漂亮也沒關係，這個社會本來就是能者多勞。共同回答題目的成績將與單獨回答的成績作比較，若「共同回的很好，單獨卻答的很爛」，就表示可能是隊友回答的，則這題的分數要打折。又若「單獨答的很好，共同卻回的很爛」，那... 你活該嘛，誰叫你不好好回答？共同回答的考試要與單獨回答的分開，避免考生修改答案。&lt;/li&gt;
  &lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;以上概念還在草稿階段，可能還有很多弊端，不過應該不會有什麼「絕對無法修正的重大缺陷」。我覺得可行度應該有 70% 以上，只是可能那些八股的老人家不能接受。所以，若你不能接受，不是我的辦法不好，而是因為&lt;b&gt;你太八股&lt;/b&gt;，瞭解了嗎？&lt;/p&gt;
&lt;p&gt;註、讀者文摘二零零六年六月，第十一頁「活人電話簿」&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-115294013308093068?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/115294013308093068/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=115294013308093068' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115294013308093068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/115294013308093068'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/07/blog-post.html' title='教育是魚還是釣竿？'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-114888279294726639</id><published>2006-05-29T13:52:00.000+08:00</published><updated>2006-10-30T03:56:15.805+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='轉貼'/><category scheme='http://www.blogger.com/atom/ns#' term='嘴砲轟'/><title type='text'>接軌國際標準 台灣 OSS 慢半拍</title><content type='html'>&lt;p&gt;新聞一則：「&lt;a href="http://cpro.com.tw/channel/news/content/?news_id=49760"&gt;CPRO 資傳網--接軌國際標準 台灣OSS慢半拍&lt;/a&gt;」&lt;/p&gt;
&lt;p&gt;同樣，全文引用：&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;接軌國際標準 台灣OSS慢半拍&lt;/h2&gt;
&lt;h3&gt;面臨執行單位未定、預算有限，人才無著落窘境。&lt;/h3&gt;
&lt;h3&gt;2006-5-29/ 侯俊宇/ 撰文&lt;/h3&gt;
&lt;p&gt;在今年的 Linux  台灣計畫(Linux Taiwan Project)中，四大工作重心之一為「一項共通標準規範」，希冀建立Linux台灣的文件維護機制，以及示範應用系統測試驗證規範，以求奠定自由軟體未來產業的發展基礎。為求不落於國際社群以外，民間業者也提出與國際標準組織的接軌的聲浪，然而，儘管政策要求，卻面臨實際執行單位未定、預算有限，人才亦無著落的窘境，業者搖頭說，「要談參與國際標準組織，台灣還是慢半拍。」&lt;/p&gt;
&lt;p&gt;在此次Linux Taiwan計畫中，分別列出一項共通標準規範、二個技術研發中心、三類重點應用領域，及四組示範應用服務體系等四項計畫重心，而列在首位的就是「一項共通標準」，其他亦有相關規劃在「國際社群能量」上，針對國際標準組織訂定兩岸中文共通平台規格，加強國際標準宇社群接軌的技術交流。然而，儘管口號喊的響，實際的作為卻不被業界人士所認同。&lt;/p&gt;
&lt;p&gt;「先看預算就好了，位居未來台灣開原碼軟體( OSS ) 基礎核心的平台標準，一年只有新台幣1,000萬，要怎麼做事？」相關人士指出，儘管多次政策指導台灣OSS應走向與國際接軌、或是從既有硬體優勢發展出更多加值產品與服務，才能帶來商機，不過在基礎平台未能獲得共識之前，業者間仍然各行其是。誰也不服誰的情況，就是未來面臨產品的互不相容，或是需要額外的整合工夫。&lt;/p&gt;
&lt;p&gt;再看執行單位，每天汲汲營營在開創商機的開原碼民間業者，早已透露出對創立標準興趣缺缺的態勢。而Linux促進會等組織，也透露出希望由政府單位擬定，主導標準走向的意願。然而，相關人士透露，儘管今年Linux Taiwan計畫明定與國際標準接軌為計畫成果之一，卻未見到實際的執行單位接手。&lt;/p&gt;
&lt;p&gt;「如果單以標準議題來看，似乎應該是中央標準局的業務範圍，但是如果從研發角度來看，中研院與國科會似乎能夠扮演的更好，而事實上，若是資策會能夠培養更多人才，態度更為中立，也不失為可以加強與國際自由軟體社群連結的一大組織。」&lt;/p&gt;
&lt;p&gt;不過，業者也說，儘管可以運作的組織不少，實際上已經開始動作的卻仍闕如，「目前為止，我們並未看到台灣OSS社群與國際組織的接洽，不管是官方或是非官方的接觸都不頻繁，也是我們最為憂心的地方。」&lt;/p&gt;
&lt;p&gt;Linux促進會副會長劉龍龍這麼說，「我們一直試圖尋找，『台灣OSS社群為國際社群做了什麼？』的答案，不過可惜的是我們尚未見到。」劉龍龍說，在缺乏積極接洽，彼此連結又有限的情況之下，台灣OSS與國際間的接軌仍屬緩慢。&lt;/p&gt;
&lt;p&gt;稍早時在Linux Taiwan計畫中，提及一項共通標準規範分別在共通規範及文件維護機制上投入700萬元，示範應用系統測試驗證機制投入300萬元；而國際社群能量上，也希望參與如OSDL、LSB、OASIS與ODF Alliance等相關組織，亦預期加強兩岸中文共通平台規格的建立，預計經費亦約1,000萬元。&lt;/p&gt;
&lt;p&gt;而在缺乏雙方互動的前提之下，國內OSS業者要談產品的連結、平台標準的建立，都有一定難度。究竟OSS在台灣是能夠乘勢而起或是難以抬頭，仍看主事者的智慧。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;胡說八道些「台灣 OSS 社群都沒做事」就想跟政府要錢？一千兩百萬還不如分給真的有在 contribute 的 developer.&lt;/p&gt;
&lt;p&gt;為避免某些官員連 Google 都懶得上，放兩句話就有人幫他整理好資料可以拿去交報告，所以在這裡不列出有參與國際專案，並有貢獻的 contributers。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-114888279294726639?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/114888279294726639/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=114888279294726639' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114888279294726639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114888279294726639'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/05/oss.html' title='接軌國際標準 台灣 OSS 慢半拍'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-114863619781727544</id><published>2006-05-26T17:32:00.000+08:00</published><updated>2006-10-30T03:56:15.746+08:00</updated><title type='text'>Atomic Copy</title><content type='html'>&lt;p&gt;今天檢查 dmesg 的時候，赫然發現裡面有 Suspend2 的 Debugging info：&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;[   36.450825] Suspend2 debugging info:
[   36.450828] - SUSPEND core   : 2.2.5
[   36.450830] - Kernel Version : 2.6.16-suspend2-r6-palatis
[   36.450832] - Compiler vers. : 3.4
[   36.450833] - Attempt number : 1
[   36.450834] - Parameters     : 0 32 0 1 0 0
[   36.450835] - Overall expected compression percentage: 0.
[   36.450836] - Compressor lzf enabled.
[   36.450837]   Compressed 1001496576 bytes into 493573087 (50 percent compression).
[   36.450838] - Swapwriter active.
[   36.450839]   Swap available for image: 250817 pages.
[   36.450841] - I/O speed: &lt;b&gt;Write 50 MB/s, Read 48 MB/s.&lt;/b&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;沒想到這台 nb 的硬碟（Model=TOSHIBA MK6025GAS, FwRev=KA200A, SerialNo=Z4PN3916S）居然可以跑出 50MB/48MB 的成績... 而且寫入還比讀取快！？&lt;/p&gt;
&lt;p&gt;傻眼中...&lt;/p&gt;
&lt;p&gt;（也許 suspend2 才是最好的純磁碟效能測試軟體？）&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-114863619781727544?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/114863619781727544/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=114863619781727544' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114863619781727544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114863619781727544'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/05/atomic-copy.html' title='Atomic Copy'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-114755819099219930</id><published>2006-05-14T05:08:00.000+08:00</published><updated>2006-10-30T03:56:15.686+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='嘴砲轟'/><title type='text'>生命的鬥士？還是分數的鬥士？</title><content type='html'>&lt;p&gt;今天在 FreeNode IRC 的 #dot 看到 chiashin 貼了「&lt;a href="http://video.google.com/videoplay?docid=-9003096138909033936"&gt;與時間競賽的人 - 俊翰的故事&lt;/a&gt;」出來。的確，乍看起來的確很感人，可是仔細想想... 這不過是另一個填鴨式教育造成的悲劇表揚劇...&lt;/p&gt;
&lt;p&gt;分成三個部份來看 - 他媽媽、本身困苦的生理狀況、世人認知的成就。的確我佩服他媽媽不放棄自己小孩的偉大精神，這是本劇中唯一一點讓我打從心底 100% 佩服的地方。這種犧牲奉獻的愛真正可歌可泣。&lt;/p&gt;
&lt;p&gt;從生理狀況的角度切入，如果你一生下來就是某個樣子（例如少一條腿、多一隻手、或其他「與別人不同的地方」），這有什麼好值得自怨自艾的？如果你天生就是 A 罩杯或老二只有 5 公分（的確啦，這兩個「缺陷？」不會對你造成生命威脅）或是同性戀，除了接受「這就是我」以外還能怎麼辦？每個人本來就應該接受自己的全部，不管是（世人認定的）優點還是缺點，因為他們沒有好壞，只是一個「現象」。&lt;/p&gt;
&lt;p&gt;至於我最厭惡也最看不起的，就是貫穿全劇的「成績優異」。如果今天主角是去搶銀行（不管有沒有搶到），我也還是會很佩服他（跟他媽媽，當然！）。重點是他「克服困難，造成某些成就」的精神，而不是「成績很好就是優秀的人」。而且真的要說他成績好嗎...？？「要是我國小到大學都被媽媽盯著上課，下課回家也沒有任何休閒活動（想看漫畫、小說，可是媽媽不買、想看電視媽媽不准... etc）、哪裡也去不了（也不能去網咖、不能跟同學逛街、不能做什麼運動... etc），吃了飯就念兩小時的書，我也可以每次都考第一名。」&lt;/p&gt;
&lt;p&gt;這樣一想，也許他自己（還有許多看到這個故事的人）認為他成就非凡是由於自己不畏艱難的上進心。可是，我覺得這是這個「高分導向社會」造就出來的悲慘學生罷了。也許，如果他小時候父母沒有一直灌輸「萬般皆下品，唯有讀書高」的觀念，他今天會成為一個作曲家、程式設計師、作家、發明家、思想家... 等，比律師、法官、會計師有趣些的優秀精英。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-114755819099219930?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/114755819099219930/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=114755819099219930' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114755819099219930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114755819099219930'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/05/blog-post.html' title='生命的鬥士？還是分數的鬥士？'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-114597278702814135</id><published>2006-04-25T21:41:00.000+08:00</published><updated>2006-10-30T03:56:15.625+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><title type='text'>測試點兮廿二行，編譯錯誤兮信息：長長長兮、過份長兮、姬兮兮</title><content type='html'>&lt;p&gt;沒想到我過了一年才看到這篇...&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://osxchat.blogspot.com/2005/03/long-long-long-is-too-long.html"&gt;本日金句：「Long Long Long is Too Long」&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;的而且確，自認為一個程式設計師，很多時候還是需要些 Orz Programming 與 XD Programming...!!!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-114597278702814135?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/114597278702814135/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=114597278702814135' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114597278702814135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114597278702814135'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/04/blog-post_25.html' title='測試點兮廿二行，編譯錯誤兮信息：長長長兮、過份長兮、姬兮兮'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-114569410885251553</id><published>2006-04-22T16:12:00.000+08:00</published><updated>2006-10-30T03:56:15.561+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><category scheme='http://www.blogger.com/atom/ns#' term='好東西'/><title type='text'>Orz Programming Certified</title><content type='html'>&lt;p&gt;有鑑 &lt;a href="http://blog.linux.org.tw/~jserv/"&gt;Jserv's Blog&lt;/a&gt; 中 &lt;a href="http://blog.linux.org.tw/~jserv/archives/001611.html"&gt;Orz Programming&lt;/a&gt; 與 &lt;a href="http://blog.linux.org.tw/~jserv/archives/001632.html"&gt;Orz Programming Certified 標籤&lt;/a&gt;，做了這個東西：&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7150/841/1600/orz_certified_textc.png"&gt;&lt;img style="cursor:pointer; cursor:hand; width: 350px; height: 350px;" src="http://photos1.blogger.com/blogger/7150/841/1600/orz_certified_textc.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;請隨意利用，Licence 是 &lt;a href="http://creativecommons.org/licenses/by-sa/2.0/tw/deed.zh_TW"&gt;CC-BY-SA&lt;/a&gt;。這裡有 svg 的版本，要的人請聯絡我。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-114569410885251553?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/114569410885251553/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=114569410885251553' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114569410885251553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114569410885251553'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/04/orz-programming-certified.html' title='Orz Programming Certified'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-114445355044502694</id><published>2006-04-08T07:37:00.000+08:00</published><updated>2006-10-30T03:56:15.495+08:00</updated><title type='text'>金耳？木耳？</title><content type='html'>&lt;p&gt;在 &lt;a href="http://eason.be/blog/post/1/449"&gt;Eason's Blog&lt;/a&gt; 看到的，測看看你是金耳還是木耳！&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.klippel.de/aura/default.html"&gt;Interactive Listening Test&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我的分數是...&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7150/841/1600/screen20060408073508-chart.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7150/841/320/screen20060408073508-chart.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;附帶一提，音效卡是 Gigabyte 7VAXP 內建的 Realtek AC97，喇叭是 JS 的 J9915，音量 Master 在 50%，PCM 100%，喇叭上 Volumn 約轉到 9:30 的位置，Treble 跟 Bass 都在 12:00 位置，3D 那個殘害聲音的按鈕當然是沒按下去。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-114445355044502694?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/114445355044502694/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=114445355044502694' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114445355044502694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114445355044502694'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/04/blog-post_08.html' title='金耳？木耳？'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-114445134947969008</id><published>2006-04-08T06:20:00.000+08:00</published><updated>2006-10-30T03:56:15.433+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='轉貼'/><category scheme='http://www.blogger.com/atom/ns#' term='網路'/><title type='text'>盡信新聞不如無新聞</title><content type='html'>&lt;p&gt;嗯... 不是因為它說 Linux 壞話我才跳出來，是因為這起新聞「&lt;a href="http://www.ithome.com.tw/itadm/article.php?c=36451" target="_blank"&gt;IThome - 愚人節駭客惡搞Linux網站&lt;/a&gt;」（相關的還有「&lt;a href="http://news.chinatimes.com/Chinatimes/newslist/newslist-content/0,3546,110501+112006040600035,00.html" target="_blank"&gt;中時電子報：一至四日 入侵比例佔全球七成 攻擊台灣 國際駭客發動網路戰&lt;/a&gt;」等）實在太扯了。&lt;/p&gt;
&lt;p&gt;根據&lt;a href=""&gt;中華民國著作權法&lt;/a&gt;的&lt;a href="http://law.moj.gov.tw/Scripts/Query1B.asp?no=1J00700179"&gt;第九條&lt;/a&gt;，新聞著作可以全文引用。為了避免這些新聞網站怕丟臉撤下原 post，所以這裡把中時的報導貼過來（因為它比較短...）。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;2006.04.06　 中國時報&lt;br /&gt;一至四日 入侵比例佔全球七成 攻擊台灣 國際駭客發動網路戰&lt;br /&gt;趙國明/台北報導&lt;/p&gt;
&lt;p&gt;台灣的電腦資訊能力世界聞名，卻被國際電腦駭客組織列為主要侵入攻擊目標。調查局日前發現，國內共有近二百個網站遭到自稱un-root的國際駭客組織入侵，並置換網站首頁，受害單位包括政府部門、民間企業及學校，台灣已被國際駭客組織列為全球主要的攻擊入侵目標之一。&lt;/p&gt;
&lt;p&gt;調查局指出，自四月一日至四月四日，陸續發現國內網站遭到自稱un-root的國際駭客組織入侵，並置換網站首頁，受害單位包括政府部門、民間企業、大學院校、國中小學，初步研判應是駭客為了證明自己的駭客功力，所進行的炫耀式攻擊。&lt;/p&gt;
&lt;p&gt;調查局電腦犯罪偵辦科目前除針對尚未恢復的網站進行通知，並針對遭入侵網站進行清查過濾及分析比對，以進一步瞭解攻擊發生的原因與駭客入侵之目的，是否有重要政府機密資料或企業機密遭竊。&lt;/p&gt;
&lt;p&gt;近二百個網站遭攻擊&lt;/p&gt;
&lt;p&gt;調查局經分析後發現，此次受攻擊的網站遍佈全世界，共約有三百多個網站遭受攻擊，台灣部分則近二百個網站，接近七成，顯然台灣已經成為亞洲地區，甚至於是全世界主要的被攻擊國家，其中九五％的電腦設備是以Linux系統為主。&lt;/p&gt;
&lt;p&gt;過去一般使用者的電腦作業系統多是安裝微軟視窗（Windows）平台，但隨著開放原始碼的興起，企業基於預算的考量，免費的Linux逐漸成為市場的主流，但是因為Linux的維護與防毒能力大多是靠有志之士自動自發的維護，品質難以與微軟視窗作業系統匹敵，也自然成為駭客攻擊的對象。去年以前，Linux遭受攻擊的比率還低於兩成，現在因為使用逐漸普及，導致攻擊的頻率逐漸升高，目前已接近四成。&lt;/p&gt;
&lt;p&gt;防駭危機感亟待加強&lt;/p&gt;
&lt;p&gt;調查局在處理類似案件時，曾與某重要的資訊安全Ａ級單位（資訊安全要求最高的等級）聯繫，通知可能因為網站權限設定有問題，導致任何人都可以在網站上放入任何的檔案，該單位卻質疑表示權限本來就是開放的，不以為意，令調查局對國內資訊防駭觀念的淡薄，深感憂心。&lt;/p&gt;
&lt;p&gt;網頁遭駭客置換的情況最易被發現，據現有網頁遭攻擊情形分析，台灣地區每月約有五百至一千個網站遭駭客置換成功，但潛在性的犯罪黑數更難發現，尤其是被植入木馬的狀況恐怕更為嚴重，這種入侵方式從外觀上很難發現，此類入侵事件，可能遠遠超過置換網頁模式的數十倍。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;而根據 &lt;a href="http://people.debian.org.tw/~chihchun/2006/04/07/the-un-root-crew/" target="_blank"&gt;chihchun 的調查&lt;/a&gt;，其中許多東西都是胡扯亂寫的。&lt;/p&gt;
&lt;p&gt;其中提到，台灣地區有兩百餘網站被入侵（接近七成）一事，根本就是胡扯。一般人以為「網址不同 = 不同伺服主機」就算了，寫資訊新聞的人不知道就該抓去重修電腦網路。不同 dn 是可以指向相同一個 ip 的。如 palatis.blogspot.com 與 freesamael.blogspot.com。在 4/1 ~ 4/4 被攻擊的兩百個台灣網站，其實只是兩百個不同的 dn，實際上只有 17 台機器。&lt;/p&gt;
&lt;p&gt;再者，文中也提到被攻擊的機器中有 95% 是 Linux 機器........ 他們是眼睛瞎了看不到&lt;a href="http://www.zone-h.org/en/defacements/filter/filter_defacer=un-root/"&gt;統計資料&lt;/a&gt;中那堆 Win 2003 嗎！？好啦，如果只算台灣區 + 兩百個網站被入侵來算，的確是 95%。可是這只能推斷出兩點 - (1) 台灣的公司為了省錢大部分都用 Linux，可是卻沒請網管（或是請到等於沒請的網管）。(2) 台灣的網管普遍 Linux 訓練不足。&lt;/p&gt;
&lt;p&gt;不過政府機關的資安控制也很扯，之前&lt;a href="http://www.ettoday.com/2003/03/29/303-1432211.htm" target="_blank"&gt;總統府網站也曾經被入侵&lt;/a&gt;，宣佈 4/1 愚人節為國定假日放假一天。後來查出是一名高中生做的，而當時的總統府網站跑的是 Windows 2000。政府的作法是最後把總統府網站丟給中研院管理。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-114445134947969008?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/114445134947969008/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=114445134947969008' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114445134947969008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114445134947969008'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/04/blog-post.html' title='盡信新聞不如無新聞'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-114277123276530229</id><published>2006-03-19T20:07:00.000+08:00</published><updated>2006-10-30T03:56:15.372+08:00</updated><title type='text'>強迫自己開始用 vim...</title><content type='html'>&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Linux"&gt;Linux&lt;/a&gt; 用快三年了，&lt;a href="http://www.vim.org/"&gt;VIM&lt;/a&gt; 跟 &lt;a href="http://www.gnu.org/software/emacs/"&gt;EMacs&lt;/a&gt; 卻都還不是很熟。因為... &lt;a href="http://www.gentoo.org/"&gt;Gentoo&lt;/a&gt; 預設的 EDITOR 是 &lt;a href="http://www.nano-editor.org/"&gt;nano&lt;/a&gt; 嘛！Orz...（為什麼用大寫？「echo $EDITOR」就知道了！XD~~）&lt;/p&gt;
&lt;p&gt;決定先從 Vi IMproved 開始，所以把 /etc/rc.conf 中的 EDITOR 改成了 /usr/bin/vim。&lt;/p&gt;
除此之外，還在 /etc/bash/bashrc 加了一行...&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;alias nano='printf "LEARN vim!\n"'&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;很暴力而且骯髒的作法...&lt;/p&gt;
&lt;p&gt;附上 vimrc...&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;set nu
set exrc
set nohlsearch

map #2 :wq&lt;span style="color: blue;"&gt;^M&lt;/span&gt;
map! #2 &lt;span style="color: blue;"&gt;^[&lt;/span&gt;:wq&lt;span style="color: blue;"&gt;^M&lt;/span&gt;
map #3 :q!&lt;span style="color: blue;"&gt;^M&lt;/span&gt;
map! #2 &lt;span style="color: blue;"&gt;^[&lt;/span&gt;:q!&lt;span style="color: blue;"&gt;^M&lt;/span&gt;

au VimLeave *.sh !chmod +x %&lt;span style="color: blue;"&gt;^M&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;給不會用 VIM 的人... 要輸入 &lt;span style="color: blue;"&gt;^[&lt;/span&gt; 跟 &lt;span style="color: blue;"&gt;^M&lt;/span&gt;，不是直接打 ^ 跟 [ 或 M，而是必須按下 Ctrl-v 再按 Esc 或 Enter。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-114277123276530229?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/114277123276530229/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=114277123276530229' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114277123276530229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114277123276530229'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/03/vim.html' title='強迫自己開始用 vim...'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-114246460335315480</id><published>2006-03-16T07:14:00.000+08:00</published><updated>2006-10-30T03:56:15.311+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><title type='text'>網站邪惡度測試</title><content type='html'>&lt;p&gt;由於參加 ICTC Linux 講師訓練班（第一期 XD~~），有個作業是要寫個個人網站，所以... 就寫吧！&lt;/p&gt;
&lt;p&gt;網址是：&lt;a href="http://main.advice.com.tw/~palatis/"&gt;http://main.advice.com.tw/~palatis/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;無聊之下又跑去測了一下邪惡度...&lt;/p&gt;
&lt;blockquote&gt;&lt;a href="http://homokaasu.org/gematriculator/rate.gas?mode=1&amp;rateurl=http://main.advice.com.tw/~palatis/" target="_blank"&gt;&lt;img src="http://homokaasu.org/pics/g/e1.jpg" width="175" height="80" alt="This site is certified 1% EVIL by the Gematriculator" /&gt;&lt;/a&gt;&lt;a href="http://homokaasu.org/gematriculator/rate.gas?mode=1&amp;rateurl=http://main.advice.com.tw/~palatis/" target="_blank"&gt;&lt;img src="http://homokaasu.org/pics/g/g99.jpg" width="175" height="80" alt="This site is certified 99% GOOD by the Gematriculator" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;哇哇哇哇哇！！！！！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-114246460335315480?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/114246460335315480/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=114246460335315480' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114246460335315480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114246460335315480'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/03/blog-post_16.html' title='網站邪惡度測試'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-114195342682646801</id><published>2006-03-10T08:41:00.000+08:00</published><updated>2006-10-30T03:56:15.253+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><title type='text'>C# &amp;&amp; Glade# &amp;&amp; Mono</title><content type='html'>&lt;p&gt;這學期的資料庫系統，老師要求使用 VB.Net。撇開「不太會寫」先不談，Linux 上「根本沒有」VB.Net 的可行（usable）方案！所以... 雖然不太會用 GTK、不太懂 Glade、更不會寫 C#。但還是硬著頭皮啃了下來。&lt;/p&gt;
&lt;p&gt;首先安裝 .Net Environment，很自然的選了 &lt;a href="http://www.mono-project.com" target="_blank"&gt;Mono Project&lt;/a&gt;，因為他是 Only Solution（Wine 不算的話 XD~~）。順手裝了 IDE - &lt;a href="http://monodevelop.com/" target="_blank"&gt;MonoDevelop&lt;/a&gt; 跟 &lt;a href="http://glade.gnome.org/" target="_blank"&gt;Glade&lt;/a&gt;。&lt;/p&gt;
&lt;blockquote&gt;&lt;pre style="background-color: black; font-color: silver;"&gt;&lt;span style="font-color: blue;"&gt;#&lt;/span&gt; emerge mono monodevelop glade&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;MonoDevelop 還在發展階段，雖然尚嫌陽春，不過算堪用了。Mono 的 &lt;a href="http://www.go-mono.com/docs/" target="_blank"&gt;Online Documentation&lt;/a&gt; 做的雖然不怎樣，不過大部分的東西還是查的到（有許多 Entries 還是 Undocumented...）。&lt;/p&gt;
&lt;p&gt;我的作業是&lt;a href="http://www.cyut.edu.tw/~s9327040/Homework1學期成績計算.pdf"&gt;這個&lt;/a&gt;，好啦！我知道很無聊，因為我自己也這麼覺得... 當成複雜一點的 HelloWorld 摟！&lt;/p&gt;
&lt;p&gt;丟臉的是，弄 Mono、Glade、C# 等一堆東西，花了我 5、6 個小時才做出來（而且自己還不是很滿意...）。&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7150/841/1600/screen20060310083839.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7150/841/320/screen20060310083839.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;不滿意的地方...（按照不爽度排序）&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;C#！！！！！！！！！！！！&lt;/li&gt;
  &lt;li&gt;不知道老師會不會讓我用 C# + Gtk# + Glade# 交作業 = =&lt;/li&gt;
  &lt;li&gt;中間那堆「if (Convert.ToDouble(EntryHwTimes.Text) &gt;= 1) total += Convert.ToDouble(EntryHw1.Text);」&lt;/li&gt;
  &lt;li&gt;不知道怎樣過濾 KeyPress event，讓 Entry 只能輸入數字（跟 BackSpace）。也不會用 KeySnoop... QQ&lt;/li&gt;
  &lt;li&gt;不知道 Windows 上到底能不能編... = =&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-114195342682646801?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/114195342682646801/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=114195342682646801' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114195342682646801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114195342682646801'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/03/c-glade-mono.html' title='C# &amp;&amp; Glade# &amp;&amp; Mono'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-114192948440263080</id><published>2006-03-10T02:26:00.000+08:00</published><updated>2006-10-30T03:56:15.187+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><title type='text'>火星文++</title><content type='html'>&lt;p&gt;之前大學學測一篇火星文的考題被罵的臭頭（小站還有幫他弄個&lt;a href="http://palatis.blogspot.com/2006/01/blog-post_24.html" target="_blank"&gt;修訂版&lt;/a&gt;），沒想到今天又看到另我哭笑不得的東西...&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7150/841/1600/screen20060310022125-window.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7150/841/320/screen20060310022125-window.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;這是我們學校&lt;a href="http://seafood.csie.cyut.edu.tw/seafood/index.htm" target="_blank"&gt;某教授的個人網頁&lt;/a&gt;。看來他不但懶得寫網站（原始碼裡有「&amp;lt;meta name="GENERATOR" content="Microsoft FrontPage 4.0"&amp;gt;」字樣），還懶得把中文打好。&lt;/p&gt;
&lt;p&gt;為什麼會跑去找他網頁呢？因為這學期的資料庫系統他要求使用 VB.NET。但是我的 Linux 沒有 VB.NET 可以跑，於是裝了 &lt;a href="http://www.mono-project.com/Main_Page" target="_blank"&gt;Mono&lt;/a&gt;，想用 GTK# 來交作業。但是不知道老師收不收這個環境的東西（也許他不會用？），想寫信請他裝起來編我交的程式。沒想到居然讓我看到這麼個鬼東西，真是太出乎意料了 XD~~&lt;/p&gt;
&lt;p&gt;還不知道他&lt;a href=""&gt;會不會同意&lt;/a&gt;咧...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-114192948440263080?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/114192948440263080/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=114192948440263080' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114192948440263080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114192948440263080'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/03/blog-post_10.html' title='火星文++'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-114179148684082854</id><published>2006-03-08T12:14:00.000+08:00</published><updated>2006-10-30T03:56:15.110+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='轉貼'/><category scheme='http://www.blogger.com/atom/ns#' term='嘴砲轟'/><title type='text'>[轉載] 卡奴什麼都不必負責!?</title><content type='html'>&lt;p&gt;我在網路上逛來逛去，還是找不到原作者。如果有人知道來源，請告訴我。如果您就是原作，又不希望我散佈此篇文章，也請告訴我，我將馬上把它拿掉。謝謝！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;卡奴自己又負了什麼責任？&lt;/p&gt;
&lt;p&gt;十四歲的外甥女兒回家說 :「我們班同學都覺得當卡奴沒什麼不好，可以買很多名牌，然後上電視哭一哭說不定就不用還錢了，反正大家都在幫卡奴想辦法。」聽聽，這是下一代卡奴說的話。
當各立委、民意代表、理財專家一面倒地幫卡奴出聲時，可曾想過奉公守法市井小民的心情？卡奴的負面教育還要繼續下去嗎？&lt;/p&gt;
&lt;p&gt;筆者的月薪六萬五千元，每個月在貸款、生活費中量入為出，從來不敢欠過信用卡公司一塊錢。我們每個週末到大賣場都盡量挑特價促銷品，百貨公司沒有打折絕不敢買，工作近十年連一個名牌包包都沒有買過，我並不是沒有慾望，而是在我的能力範圍內很辛苦地克制自己。&lt;/p&gt;
&lt;p&gt;反觀在電視新聞中泣訴的卡奴楊小姐，臉上掛著上萬元的古馳鏡框、手上拎著比我一個月薪水還高貴的 LV提包，口口聲聲她活不下去、看不到明天，要求銀行寬貸、政策救命。&lt;/p&gt;
&lt;p&gt;憑什麼？我們的心中只有一句，憑什麼？ 妳又願意付出什麼來得到這些救援？是獻身公益？還是義務勞動？社會幫了卡奴，卡奴們要付出什麼來換？&lt;/p&gt;
&lt;p&gt;社會上有很多經濟弱勢者，像失業的單親父母、繳不起營養午餐錢的偏遠地區兒童，他們都得不到社會資源的妥善照顧，筆者不明白這些卡奴憑什麼在享受奢華生活以後，竟以厚顏要求社會資源協助？&lt;/p&gt;
&lt;p&gt;當他們佔用大量媒體曝光、煩擾許多財經專家出面研商時，正是變相在消費高昂的社會成本，但 卡奴們自身又付出了什麼代價？&lt;/p&gt;
&lt;p&gt;卡奴原本就是相對沒有責任感的一群人，如今他們在享受不屬於自己的繁華富貴以後，反過來可憐兮兮地要求銀行、政府為其善後，依然不需為自己的行為負責任，未來難道不會出現更多的卡奴嗎？&lt;/p&gt;
&lt;p&gt;我們的義務教育中對於理財、稅法等生活教育極度貧乏，很多大學生連基礎的財務知識都不具備，再加上社會風氣盡是向錢看，也難怪年輕不懂事的卡奴越來越多，一出社會就累積了完全無力償還的巨額債務。&lt;/p&gt;
&lt;p&gt;既然卡奴風暴已經形成，國、高中學校正應該藉此機會，教導學生基本理財知識和正確的理財觀念，除了救卡奴救經濟，更重要的是提早預防下一代的小小卡奴繼續出現。&lt;/p&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-114179148684082854?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/114179148684082854/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=114179148684082854' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114179148684082854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114179148684082854'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/03/blog-post_08.html' title='[轉載] 卡奴什麼都不必負責!?'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-114135008865362433</id><published>2006-03-03T09:27:00.000+08:00</published><updated>2006-10-30T03:56:15.030+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='嘴砲轟'/><title type='text'>2006 年中區春季電腦展一元愛心參觀券</title><content type='html'>&lt;p&gt;我收到學校寄給我一封 email，標題是「Fw: 2006中區春季電腦展ㄧ元愛心參觀券數量有限,索完為止!」。點進去看看...&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7150/841/1600/screen20060303093303-small.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7150/841/320/screen20060303093303-small.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;其中提到「看展一元,所得將捐贈台中生命線協會」。所以...&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;他發給我們學校 500 張，最多也不過募到新台幣 $500。&lt;/li&gt;
  &lt;li&gt;如果全中區算 30 所學校、每個學校都發 500 張，他也不過募到 $15000。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我的看法是...&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;要募款幹麼不弄 $10、$20，應該還是很多人搶，可是就可以募到 10 倍、20 倍的錢。&lt;/li&gt;
  &lt;li&gt;台中生命線真不值錢...&lt;/li&gt;
  &lt;li&gt;教育部宣導「增強國文素養，避免使用火星文、注音文」的活動似乎不太成功，標題跟內文中都用了注音文 XD~~&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-114135008865362433?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/114135008865362433/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=114135008865362433' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114135008865362433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114135008865362433'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/03/2006.html' title='2006 年中區春季電腦展一元愛心參觀券'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-114134053828765627</id><published>2006-03-03T06:52:00.000+08:00</published><updated>2006-10-30T03:56:14.951+08:00</updated><title type='text'>前面比後面快！</title><content type='html'>&lt;p&gt;由於 64bit 的機器會使用比較多記憶體（Pointer、Data Type 佔用的記憶體都比 32bit 機器來的多些），所以我的小筆電總是會吃到 swap。今天無聊的時候上網逛了一圈，發現&lt;a href="http://www.faqs.org/docs/securing/chap6sec74.html"&gt;這篇文章&lt;/a&gt;中提到「Putting your swap partitions near the beginning of your drive may give you some acceptable improvement.」（將置換分割區放在磁碟的前端將增進一些磁碟效能），差異可以高達 3mb/s！可是... 那裡才是磁碟的前端呢？&lt;/p&gt;
&lt;p&gt;於是... 做了以下測試：&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;# hdparm -tT /dev/hda9

/dev/hda9:
 Timing cached reads:   2608 MB in  2.00 seconds = 1302.24 MB/sec
 Timing buffered disk reads:   58 MB in  3.02 seconds =  19.23 MB/sec
# hdparm -tT /dev/hda1

/dev/hda1:
 Timing cached reads:   2592 MB in  2.00 seconds = 1294.26 MB/sec
 Timing buffered disk reads:   74 MB in  3.04 seconds =  24.36 MB/sec&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;看來... 我的磁碟前端是數字較小的分區。剛好，我把 swap 放在 hda3！&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;# hdparm -tT /dev/hda3

/dev/hda3:
 Timing cached reads:   2592 MB in  2.00 seconds = 1295.55 MB/sec
 Timing buffered disk reads:   74 MB in  3.05 seconds =  24.30 MB/sec&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;不過，/ 放在 hda2 似乎有點浪費，畢竟它是很少用到的分區。算了！才 500mb...&lt;/p&gt;
&lt;p&gt;結論... 下次配置磁碟分區時，應該把 / 拿到最後去，中間分給 LVM 才對。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-114134053828765627?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/114134053828765627/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=114134053828765627' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114134053828765627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/114134053828765627'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/03/blog-post.html' title='前面比後面快！'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113808263714272786</id><published>2006-01-24T13:52:00.000+08:00</published><updated>2006-10-30T03:56:14.880+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><title type='text'>火星文</title><content type='html'>&lt;p&gt;原文...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;h3&gt;一、語文修正（佔 9 分）&lt;/h3&gt;
  &lt;p&gt;語文的使用需要注意場合、對象的分別， 不同的場合、不同的對象， 都有它不同的語文表達方式。例如上台演講和平日死黨之間說話便大不相同， 而寫作文章和口語敘述也絕不應該完全沒有差別。&lt;/p&gt;
  &lt;p&gt;下面是一篇題為「運氣」的中學生作文， 即使暫不考慮文字的優美與否，其中除了以下說明文字的範例之外，尚有九處應予修正――或使用了不當的俗語、口語、外來語， 或犯了語法上的錯誤， 或是受媒體、網路流行用語誤導，或以圖案代替文字， 請加以挑出， 並依序標號（ 1、2、3… … 9） 改正之。&lt;/p&gt;
  &lt;p&gt;【說明】例如文中「3Q得Orz」即為不當用法， 3Q意指thank you」， Orz則藉三字母表示「跪拜在地」之狀。改正之方式如下：3Q得Orz → 感謝得五體投地&lt;/p&gt;
  &lt;p&gt;今天我們班的運氣實在有夠衰，開朝會時被學務主任點名， 說我們班秩序不良而且教室環境髒亂。我們班導師氣到不行，回到班上嚴辭訓斥大家一頓，問我們究竟安什麼心？ 林大同立刻舉手發言說， 我們一定會好好做反省的動作。衛生股長漲紅著臉幾乎快 ::&gt;_&lt;:: 了， 他拜託大家每天確實打掃，他一定3Q得Orz。王明問班上的星座達人到底我們班為何如此時運不，接二連三被挨罵受罰。更慘的是， 班上的蒸飯箱莫名其妙又壞了，害得全班只好吃冷便當。偶氣ㄉ 要死， 媽媽昨天為我準備的便當， 本來粉不錯吃滴， 卻變成難以下嚥的冷飯。想不到今天這麼倒楣，昨天真不該聽信風紀股長的話， 到學校理髮部去理一顆一百塊的頭， 今天還不是一樣諸事不順！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;真正的火星文版...&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;尖天5ㄇ搬ㄉ運氣實在有夠衰，開朝會十倍學物主任點名，說我ㄇ搬秩序ㄅ涼而且教室環境髒亂，5ㄇ搬導師\_/到抓狂，回到班上言詞訓斥ㄌ大家一頓，問5ㄇ究竟安什麼新？林大同立刻舉手發言說，5ㄇ一定惠好好做反省的動作。衛生股長*&gt;_&lt;*幾乎快::&gt;_&lt;::ㄌ，ㄊ_nO大家每天確實打掃，ㄊ一定3Q的Orz。王名問班上的星座達人到底為何我們搬如此時運不濟，接二聯三倍挨罵受罰。更慘ㄉ是，班上ㄉ蒸飯箱莫名其妙又壞了，害ㄉ全班只好吃冷便當。偶ㄑㄉ要死，ㄇㄇ昨天為偶準備ㄉ便當，本來粉ㄅ錯吃低，卻變成難以下研ㄉ冷飯。想不到今天這ㄇ倒楣，昨天真ㄅ該聽信封技股長ㄉ話，到學校理髮部去理一顆一百塊ㄉ頭，今天還ㄅ是一樣豬是ㄅ順！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果覺得其他地方有待加強，歡迎提出討論...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113808263714272786?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113808263714272786/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113808263714272786' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113808263714272786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113808263714272786'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/01/blog-post_24.html' title='火星文'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113794426771660347</id><published>2006-01-22T23:30:00.000+08:00</published><updated>2006-10-30T03:56:14.813+08:00</updated><title type='text'>三隻小豬快跑！（3D 加速）</title><content type='html'>&lt;p&gt;&lt;a href="http://palatis.blogspot.com/2006/01/3d.html" target="_blank"&gt;之前提到&lt;/a&gt;過，換了 X.org 7.0 以後，這台電腦喪失了 render 3D 能力...&lt;/p&gt;
&lt;p&gt;今天做例行更新的時候，發現 ati-drivers 有了 8.21.7 版。&lt;/p&gt;
&lt;p&gt;於是，熊熊給他更新下去以後，現在...&lt;/p&gt;
&lt;blockquote&gt;&lt;pre style="background: black;color: silver;"&gt;&lt;span style="color: blue;"&gt;$&lt;/span&gt; X -version

X Window System Version 7.0.0
Release Date: 21 December 2005
X Protocol Version 11, Revision 0, Release 7.0
Build Operating System:Linux 2.6.14-gentoo-r4-palatis x86_64
Current Operating System: Linux Nichelle 2.6.14-gentoo-r4-palatis #2 PREEMPT Thu Dec 15 15:24:19 CST 2005 x86_64
Build Date: 13 January 2006
        Before reporting problems, check http://wiki.x.org
        to make sure that you have the latest version.
Module Loader present
&lt;span style="color: blue;"&gt;$&lt;/span&gt; glxinfo | grep rendering
direct rendering: Yes
&lt;span style="color: blue;"&gt;$&lt;/span&gt; glxgears
6685 frames in 5.0 seconds = 1336.886 FPS
6792 frames in 5.0 seconds = 1358.380 FPS
6852 frames in 5.0 seconds = 1370.342 FPS
6853 frames in 5.0 seconds = 1370.418 FPS
&lt;span style="color: blue;"&gt;$&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113794426771660347?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113794426771660347/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113794426771660347' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113794426771660347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113794426771660347'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/01/3d_22.html' title='三隻小豬快跑！（3D 加速）'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113733530702412312</id><published>2006-01-15T22:10:00.000+08:00</published><updated>2006-10-30T03:56:14.688+08:00</updated><title type='text'>無法精確的說最大支援多少</title><content type='html'>&lt;p&gt;我外公的電腦不知道出了什麼問題，昨天吵著要重灌（視窗千禧版）。可是那個東西太舊了，我找不到光碟... 於是，就想說幫他灌視窗經驗版好了。可是似乎因為 &lt;a href="http://www.abit.com.tw/"&gt;ABIT&lt;/a&gt; &lt;a href="http://www.abit.com.tw/page/ta/motherboard/motherboard_detail.php?pMODEL_NAME=BE6&amp;fMTYPE=Slot%201&amp;pPRODINFO=Specifications"&gt;BE6&lt;/a&gt; 這片主機板上 &lt;a href="http://www.highpoint-tech.com/"&gt;HighPoint&lt;/a&gt; HPT366 IDE 控制器似乎跟不知道什麼東西衝到了，只要那兩顆 IBM Deskstar 60G 接上，視窗經驗就怎樣也進不去（卡在開機那條光棒）。&lt;/p&gt;
&lt;p&gt;於是，想說更新一下 BIOS，來到了 &lt;a href="http://www.abit.com.tw/page/ta/download/download_bios_detail.php?pFILE_TYPE=Bios&amp;pMAIN_TYPE=Motherboard&amp;pTITLE_ON_SCREEN=BE6&amp;pSOCKET_TYPE=SlotÉ"&gt;ABIT BE6 的 BIOS 下載網頁&lt;/a&gt;，沒想到居然看到這種字樣...&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7150/841/1600/screen20060115220041.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7150/841/320/screen20060115220041.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;雖然已經是很久以前的東西了，不過還是每日一笑吧... :P&lt;/p&gt;
&lt;p&gt;覺得看不懂或不好笑的，請檢討自己的幽默感。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113733530702412312?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113733530702412312/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113733530702412312' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113733530702412312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113733530702412312'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/01/blog-post_113733530702412312.html' title='無法精確的說最大支援多少'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113728135729793972</id><published>2006-01-15T07:26:00.000+08:00</published><updated>2006-10-30T03:56:14.623+08:00</updated><title type='text'>性向測驗</title><content type='html'>剛剛在 &lt;a href="http://blog.linux.org.tw/~jserv/archives/001433.html" target="_blank"&gt;Jserv&lt;/a&gt; 那邊看見的&lt;a href="http://home.kimo.com.tw/yihjongchen/p2/311.html" target="_blank"&gt;性向測驗&lt;/a&gt;，我的選項是...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;兔、蛇、貓、獅、羊、牛、獵豹、貓&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;覺得還蠻準的，除了牛那個以外。&lt;/p&gt;
&lt;p&gt;來玩玩吧！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113728135729793972?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113728135729793972/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113728135729793972' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113728135729793972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113728135729793972'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/01/blog-post_15.html' title='性向測驗'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113715165904764749</id><published>2006-01-13T19:08:00.000+08:00</published><updated>2006-10-30T03:56:14.557+08:00</updated><title type='text'>難怪沒 3D 加速...</title><content type='html'>&lt;p&gt;不知道為什麼，使用 Xorg 6.8 的時候，一直給我出：&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;Elf_RelocateEntry() Unsupported relocation type 10&lt;br /&gt;Elf_RelocateEntry() Unsupported relocation type 10&lt;br /&gt;Elf_RelocateEntry() Unsupported relocation type 10&lt;br /&gt;...&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;於是，我只好更新到 Xorg 7.0。&lt;/p&gt;
&lt;p&gt;但是，&lt;a href="http://www.ati.com/"&gt;ATI&lt;/a&gt; 的 &lt;a href="https://support.ati.com/ics/support/KBAnswer.asp?questionID=3380"&gt;propertiary Linux Driver&lt;/a&gt; 卻不支援 Xorg 7.0。所以，想說用 &lt;a href="http://www.mesa3d.org"&gt;mesa&lt;/a&gt; 的 software GLX Driver，可是卻遇到了這個情況...&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;(WW) RADEON(0): Enabling DRM support

        *** Direct rendering support is highly experimental for Radeon 9500
        *** and newer cards. The 3d mesa driver is not provided in this tree.
        *** A very experimental (and incomplete) version is available from Mesa CVS.
        *** Additional information can be found on http://r300.sourceforge.net
        *** This message has been last modified on 2005-08-07.&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;煩死啦~~ 降回 xorg 6.8.2 再試一次好了......&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113715165904764749?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113715165904764749/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113715165904764749' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113715165904764749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113715165904764749'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/01/3d.html' title='難怪沒 3D 加速...'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113704504596750811</id><published>2006-01-12T13:28:00.000+08:00</published><updated>2006-10-30T03:56:14.489+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='學校'/><title type='text'>系統程式 part2</title><content type='html'>&lt;table style="text-align:center;"&gt;
  &lt;tr&gt;
    &lt;td&gt;曠課&lt;/td&gt;&lt;td&gt;補假&lt;/td&gt;&lt;td&gt;事假&lt;/td&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;2&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;4.00&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;首先... 我覺得我一個月只去兩三次，這裡居然只記到兩次曠課跟四次病假（我去請的）...&lt;/p&gt;
&lt;table style="text-align:center;"&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;&lt;td&gt;學期成績&lt;/td&gt;&lt;td&gt;平時-1&lt;/td&gt;&lt;td&gt;平時_2&lt;/td&gt;&lt;td&gt;期中考&lt;/td&gt;&lt;td&gt;平時_3&lt;/td&gt;&lt;td&gt;平時_4&lt;/td&gt;&lt;td&gt;平時_5&lt;/td&gt;&lt;td&gt;實作_1&lt;/td&gt;&lt;td&gt;期末考&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;個人成績&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;99&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;95&lt;/td&gt;&lt;td&gt;64&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;全班最高&lt;/td&gt;&lt;td&gt;95&lt;/td&gt;&lt;td&gt;85&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;99&lt;/td&gt;&lt;td&gt;95&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;95&lt;/td&gt;&lt;td&gt;95&lt;/td&gt;&lt;td&gt;64&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;全班平均&lt;/td&gt;&lt;td&gt;66&lt;/td&gt;&lt;td&gt;63&lt;/td&gt;&lt;td&gt;63&lt;/td&gt;&lt;td&gt;42&lt;/td&gt;&lt;td&gt;69&lt;/td&gt;&lt;td&gt;72&lt;/td&gt;&lt;td&gt;67&lt;/td&gt;&lt;td&gt;43 &lt;/td&gt;&lt;td&gt;31&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;及格分數&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;然後... 期中考莫名其妙的考了 99 分（本來以為只有 7X 分），那是個美麗的意外... 讓我不解的是期末考，全班平均 31 可是及格分數卻只要 24 是怎麼回事？？另外，上次那個&lt;a href="http://palatis.blogspot.com/2005/12/blog-post_31.html"&gt;組合語言作業&lt;/a&gt;，明明就做了一半，最後還是唬過去的，居然真的被唬住了，給了我 95 分...&lt;/p&gt;
&lt;p&gt;曠課一堆，缺一堆平時考，居然期末成績有 90 分......&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113704504596750811?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113704504596750811/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113704504596750811' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113704504596750811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113704504596750811'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/01/part2.html' title='系統程式 part2'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113704321975077172</id><published>2006-01-12T13:07:00.000+08:00</published><updated>2006-10-30T03:56:14.417+08:00</updated><title type='text'>本週運勢</title><content type='html'>&lt;blockquote&gt;
  &lt;p&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;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;雖然已經星期四了，不過還是貼一下。&lt;/p&gt;
&lt;p&gt;ps. 我考完啦！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113704321975077172?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113704321975077172/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113704321975077172' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113704321975077172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113704321975077172'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2006/01/blog-post.html' title='本週運勢'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113596681955807047</id><published>2005-12-31T01:04:00.000+08:00</published><updated>2006-10-30T03:56:14.346+08:00</updated><title type='text'>近況與挖礦</title><content type='html'>&lt;p&gt;我們的&lt;a href="http://163.17.30.65/kahwang/" target="_blank"&gt;系統程式老師&lt;/a&gt;，在學期初給了我們一個「x86 組譯器」專題，讓我們回來做。&lt;/p&gt;
&lt;p&gt;組譯器做了一半（照我的人月粗估，大約 5%~10% 吧...），deadline 就到了，沒的玩啦！反正我是班上進度最快的，很多人什麼都沒寫就去 demo 了... 有可以執行的 code base 的只有兩個人，我朝 ELF Binary Format 走，它朝 parser 跟 assembler 走。（說不定我們兩個人合作，剛好可以弄出完整的東西...）&lt;/p&gt;
&lt;p&gt;總之，花了我四天不眠不休 trace &lt;a href="http://www.x86.org/ftp/manuals/tools/elf.pdf" target="_blank"&gt;ELF Specification&lt;/a&gt; 跟 &lt;a href="http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_739_7044,00.html" target="_blank"&gt;AMD64 Architecture Programmer's Manual&lt;/a&gt;，寫出了半個有點可以跑的東西（其實還稍微差一點）。&lt;/p&gt;
&lt;p&gt;如果有人想看的話，以下是報告跟程式碼（需要 x86-64 平台）：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://dev.gentoo.org.tw/~palatis/palasm/palasm.pdf" target="_blank"&gt;專題報告書&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://dev.gentoo.org.tw/~palatis/palasm/palasm.tar.bz2"&gt;程式碼&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;這個作業告一段落以後，找到了一個讓我玩了很久還在玩的 flash game -「&lt;a href="http://www.xgenstudios.com/play/motherload" target="_blank"&gt;Mother Load&lt;/a&gt;」。目前挖到五千多呎，碰到瓦斯就爆掉了。&lt;/p&gt;
&lt;p&gt;這個遊戲的玩法是，慢慢往下挖... 然後挖礦回來賣錢、升級船。要注意的是，若燃料（Fuel）用完或殼（Hull）壞掉船就會爆炸。挖到 3000 呎以後要小心岩漿，挖到五千呎以後可能會挖到瓦斯，記得多帶點備用燃料跟修護包，身上準備個傳送器也會比較安全。船挖太多礦石可能會太重飛不起來，要小心。&lt;/p&gt;
&lt;p&gt;就這樣啦！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113596681955807047?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113596681955807047/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113596681955807047' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113596681955807047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113596681955807047'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2005/12/blog-post_31.html' title='近況與挖礦'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113483627875493755</id><published>2005-12-18T00:00:00.000+08:00</published><updated>2006-10-30T03:56:14.274+08:00</updated><title type='text'>63% Evil, 37% Good</title><content type='html'>&lt;blockquote&gt;
  &lt;p&gt;http://palatis.blogspot.com is 63% evil, 37% good&lt;/p&gt;
  &lt;p&gt;&lt;a href="http://homokaasu.org/gematriculator/?referer" target="_blank"&gt;&lt;img src="http://homokaasu.org/pics/g/e63.jpg" alt="This site is certified 63% EVIL by the Gematriculator" height="80" width="175" /&gt;&lt;/a&gt; &lt;a href="http://homokaasu.org/gematriculator/?referer" target="_blank"&gt;&lt;img src="http://homokaasu.org/pics/g/g37.jpg" alt="This site is certified 37% GOOD by the Gematriculator" height="80" width="175" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;為什麼我有 63% 的邪惡度，可是 &lt;a href="http://homokaasu.org/gematriculator/rate.gas?mode=1&amp;amp;rateurl=http://www.microsoft.com/"&gt;Microsoft.com&lt;/a&gt; 只有 20%？？？&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113483627875493755?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113483627875493755/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113483627875493755' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113483627875493755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113483627875493755'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2005/12/63-evil-37-good.html' title='63% Evil, 37% Good'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113481311437499840</id><published>2005-12-17T17:05:00.000+08:00</published><updated>2006-10-30T03:56:14.211+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><title type='text'>變態軟體</title><content type='html'>&lt;p&gt;今天（Dec 17, 2005）的 &lt;a href="http://tw.news.yahoo.com/"&gt;Yahoo! 奇摩新聞&lt;/a&gt; 裡，有「&lt;a href="http://tw.news.yahoo.com//051217/19/2nhov.html"&gt;全球第二例 我首宗BT侵權案 分享電影檔案台灣論壇遭法辦&lt;/a&gt;」。礙於版權不能貼出全文，不過該文其中一段...&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7150/841/1600/bittorrent.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7150/841/320/bittorrent.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;原來 BitTorrent 是「變態軟體」... 這個記者真應該被抓去打屁股 = =&lt;/p&gt;
&lt;h3&gt;話說回來...&lt;/h3&gt;
&lt;p&gt;不過話說回來，現在的著作權法應該是管不太到這種 torrent 交流論壇。目前的中華民國著作權法要有「重製」與「公開散佈」的情事，才能起訴當事人。但是根據 p2p 技術，這種站台只是告訴使用者「那裡可以下載到什麼東西」，而沒有實際的經手重製與散佈（就像人家來問你「那裡可以找到 xxx 影片」，你回答「百事達有！」一般）。&lt;/p&gt;
&lt;p&gt;如果真的要若要考慮 torrent 檔的著作權，也不屬於唱片、電影、軟體公司，而是該 torrent 的原作者。&lt;/p&gt;
&lt;p&gt;要說協助散佈？如果有個殺手搭計程車去殺人，那計程車司機也是共犯嗎？如果這司機事前不知道他要去殺人，他當然什麼也不能做。即使這司機知道了他要去殺人，也不能怎樣啊...（難不成要送他去警察局嗎？）&lt;/p&gt;
&lt;p&gt;那到底是誰在散佈？答案是「有用 BitTorrent Client &lt;u&gt;並且&lt;/u&gt;有使用那些 torrent 的人。」畢竟，也不能說所有拿著刀子的人都是殺人犯啊！&lt;/p&gt;
&lt;p&gt;好啦，我也討厭盜版。畢竟生為一個程式設計師，若人人都使用盜版，那寫的程式該賣給誰呢？我只是想澄清，若從技術的角度看來，那些「torrent site」是沒有構成任何犯罪行為的。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113481311437499840?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113481311437499840/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113481311437499840' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113481311437499840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113481311437499840'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2005/12/blog-post_113481311437499840.html' title='變態軟體'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113475752335069918</id><published>2005-12-17T02:01:00.000+08:00</published><updated>2006-10-30T03:56:14.149+08:00</updated><title type='text'>聖誕禮物</title><content type='html'>&lt;p&gt;我那遠在美國的舅舅每年聖誕節都會回家一趟，今年聖誕節他理所當然的要回來。回來之前呢，他寄了 email 問我跟我妹想要什麼聖誕禮物。&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;其威, 琪聆,&lt;/p&gt;
  &lt;p&gt;我下個月中旬要回台北, 不知道要帶些什麼回去. 你媽媽叫我直接問你們, 有那些類東西是喜歡的或是想要的? 那些類東西是不喜歡的?&lt;/p&gt;
  &lt;p&gt;喜歡想要的東西不能保證一定找的到, 但是可以避免帶些不喜歡的東西回去.&lt;/p&gt;
  &lt;p&gt;可別說要 xBox, PSP,  或 iPod.&lt;/p&gt;
  &lt;p&gt;舅舅&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;然後是我的回信...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;我想要 PSP 跟 iPod, 不想要 xBox XD~~&lt;/p&gt;
  &lt;p&gt;hmm...&lt;br /&gt;
    我想要美國買的到最大包的洋芋片（吃完的也沒關係, 我只想要包裝袋.）&lt;/p&gt;
  &lt;p&gt;威&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;於是，他這樣對我說...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;PSP太傷眼,  iPod太傷耳, 所以我帶洋芋片好了.&lt;/p&gt;
  &lt;p&gt;我們都不吃洋芋片, 所以沒有空袋子. 我會帶找到最大包的洋芋片 (20 oz./包).  只是洋芋片可能會變成洋芋"碎"片.&lt;/p&gt;
  &lt;p&gt;沒關係, 也許可以泡牛奶或豆漿吃.&lt;/p&gt;
  &lt;p&gt;--&lt;br /&gt;Cosmos Wang&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;今天我舅舅一家人回來，果然就帶了這包洋芋片來給我。（聽說被我表妹壓到，所以現在似乎真的變成了粉。）非常的大包，有 567 克重！從照片也許可以看出些端倪...（下面那個銀色的東西是我的筆記型電腦跟滑鼠。）&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7150/841/1600/Lays-SuperSize.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7150/841/320/Lays-SuperSize.jpg" border="0" alt="" /&gt;&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/10724994-113475752335069918?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113475752335069918/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113475752335069918' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113475752335069918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113475752335069918'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2005/12/blog-post_17.html' title='聖誕禮物'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113382057486595236</id><published>2005-12-06T05:59:00.000+08:00</published><updated>2006-10-30T03:56:14.091+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='好東西'/><title type='text'>Matrox DualHead2Go</title><content type='html'>&lt;p&gt;大家還記得 Matrox 這家公司嗎？他們的新產品 - &lt;a href="http://www.matrox.com/graphics/products/dh2go/home.cfm"&gt;&lt;img alt="DualHead2Go" src="http://www.matrox.com/graphics/media/dh2go/logo/dh2go_black_logo.gif"&gt;&lt;/a&gt; 似乎還蠻有意思的。真想弄一個來玩玩！&lt;/p&gt;
&lt;p&gt;如果在 $3000 以內的話...（因為還得多弄台螢幕！）&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113382057486595236?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113382057486595236/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113382057486595236' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113382057486595236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113382057486595236'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2005/12/matrox-dualhead2go.html' title='Matrox DualHead&lt;i&gt;2Go&lt;/i&gt;'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113347180211829773</id><published>2005-12-02T05:05:00.000+08:00</published><updated>2006-10-30T03:56:14.026+08:00</updated><title type='text'>Firefox 1.5</title><content type='html'>&lt;p&gt;跟大家說的一樣，&lt;a href="http://www.mozilla.com/firefox/releases/1.5.html"&gt;Firefox 1.5&lt;/a&gt; 的 Gecko 真是非常的快！&lt;a href="http://www.mozilla.org/projects/deerpark/releases/alpha1.html"&gt;新引擎&lt;/a&gt;果然不一樣！&lt;/p&gt;
&lt;p&gt;可是升級的代價是... 瀏覽網頁時字型變得很小...&lt;/p&gt;
&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7150/841/1600/firefox-1.5_smallfont.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7150/841/320/firefox-1.5_smallfont.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;我不知道這是 bug 還是只是自己電腦的問題。不過如果有人發現跟我一樣的困擾的話，可以在「~/.mozilla/firefox/&amp;lt;profile&amp;gt;/chrome/userContent.css」加入以下這段解決（我是改成 12pt，如果您覺得太大或不夠大，請改成其他數字）：&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;* {
  font-size: 12pt !important
}&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113347180211829773?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113347180211829773/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113347180211829773' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113347180211829773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113347180211829773'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2005/12/firefox-15.html' title='Firefox 1.5'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113345932571016543</id><published>2005-12-02T01:46:00.000+08:00</published><updated>2006-10-30T03:56:13.904+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kuso'/><title type='text'>藏於民間的高手</title><content type='html'>&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7150/841/1600/%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F07.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7150/841/320/%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F07.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;說不定他正在看的是我的 blog......&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113345932571016543?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113345932571016543/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113345932571016543' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113345932571016543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113345932571016543'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2005/12/blog-post.html' title='藏於民間的高手'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113294593604358767</id><published>2005-11-26T02:01:00.001+08:00</published><updated>2008-06-30T06:42:05.794+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='家用機'/><category scheme='http://www.blogger.com/atom/ns#' term='好東西'/><title type='text'>AMD64 筆記型電腦</title><content type='html'>&lt;p&gt;最近一場車禍，把我撞進醫院躺了一個多禮拜。到現在雖然可以下床了，但是右腳骨折不能走。同學、教官看到我機車斷成三截，都說「人只有這樣算命大了！」。我媽來醫院看我的時候，這樣消遣我：「給你台機車嘛，你就把自己弄得破破爛爛的。還是給你台電腦比較有生產力。」我老爸聽說了，就弄了台之前肖想很久的 &lt;a href="http://cweb.msi.com.tw/program/products/notebook/nb/pro_nb_selling.php?UID=608"&gt;&lt;img src="http://cweb.msi.com.tw/images/page/products/nb/product_nb_logo.gif" /&gt; MEGABOOK S270&lt;/a&gt; 給我。&lt;/p&gt;
&lt;p&gt;這台其實是 &lt;a href="http://tw.bid.yahoo.com/"&gt;Yahoo!奇摩拍賣&lt;/a&gt;標來的二手機，而且說是 MSI Megabook s270，其實是德國 &lt;a href="http://www.medion.de/"&gt;MEDION&lt;/a&gt; 公司 OEM 的機器（神奇的是，我在 MEDION 的網站上找不到這台電腦，只找到一堆 &lt;a href="http://www.medionusa.com/product_information/page/Our_Products/disney_products.htm"&gt;Disney PC&lt;/a&gt;），所以上面打的 Mark 是個大大的「MEDION」，其餘都與 MSI Megabook s270 一模一樣。反正... Mark 這種東西... 我應該還是會弄個「請勿拍打餵食」的貼紙上去吧～ XD~~&lt;/p&gt;
&lt;p&gt;根據原本賣家的說法，這台電腦是他在公司用員工價標到的電腦，原本的配備是非常陽春的 Sempron 2800+、256MB RAM、並沒附作業系統。後來他有升級一些東西，下面列個清單吧！我拿到手的東西也很簡單，什麼配備也沒有，就一台電腦與電源線而已。&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;CPU：&lt;/b&gt;Mobile AMD Athlon64 3000+ @ 2GHz（原本是 Sempron，升級成了 Mobile A64，可能 Turion64 買不到吧？L2 只有 512KB... 用了一會感覺有點熱...... 62W 與 35W/25W 的 TDP 果然不能比...）&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;RAM：&lt;/b&gt;256MB DDR SD-Ram x2（本來只有一條，後來加成兩條。）&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;GPU：&lt;/b&gt;ATI Radeon Xpress 200M（分享主記憶體 QQ...）&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;HDD：&lt;/b&gt;Toshiba MK6025GAS（60G/8M/4200RPM）&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;*D-ROM：&lt;/b&gt;QSI CDRW/DVD SBW242B&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Battery：&lt;/b&gt;鋰電池 4 cells, 2200mAh&lt;/li&gt;
  &lt;li&gt;其他東西大概就不會變了。&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Price：&lt;/b&gt;NTD $32,000.-（以這等級的東西說來，可算是非常便宜！而且原賣家只用了兩個月，可說非常新。）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;接下來，就是要想辦法放 Gentoo 上去。反正我會想玩的電動，&lt;a href="http://www.winehq.org/"&gt;Wine&lt;/a&gt; 應該都可以跑（附帶一提，經過十年的 Alpha，Wine 終於 &lt;a href="http://www.winehq.org/?issue=297#News:%20Beta%20Release,%20CrossOver%20Office%205.0"&gt;Beta&lt;/a&gt; 囉！）。目前正在想辦法把 Gentoo AMD64 Minimum CD 用這台內建的燒錄機燒成光碟（Windows 真不好用...），祝我好運吧！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113294593604358767?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113294593604358767/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113294593604358767' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113294593604358767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113294593604358767'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2005/11/amd64.html' title='AMD64 筆記型電腦'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113101616193710142</id><published>2005-11-03T18:53:00.000+08:00</published><updated>2006-10-30T03:56:13.697+08:00</updated><title type='text'>妳1、妳2、與我</title><content type='html'>&lt;p&gt;當妳&lt;sub&gt;1&lt;/sub&gt;迷惘的時候，我沒能體諒妳&lt;sub&gt;1&lt;/sub&gt;，所以選擇離開。&lt;br /&gt;
當妳&lt;sub&gt;2&lt;/sub&gt;沒能說出心裡話的時候，我沒能體諒妳&lt;sub&gt;2&lt;/sub&gt;，所以還是選擇離開。&lt;/p&gt;
&lt;p&gt;當妳&lt;sub&gt;1&lt;/sub&gt;想通的時候，我跟妳&lt;sub&gt;2&lt;/sub&gt;在一起。&lt;br /&gt;當我離開妳&lt;sub&gt;2&lt;/sub&gt;的時候，妳&lt;sub&gt;1&lt;/sub&gt;有了另一個他。&lt;/p&gt;
&lt;p&gt;妳&lt;sub&gt;1&lt;/sub&gt;幸福嗎？跟一個覺得還 ok 的他在一起，我不知道。&lt;br /&gt;妳&lt;sub&gt;2&lt;/sub&gt;不幸福嗎？至少我不會再逼妳&lt;sub&gt;2&lt;/sub&gt;。&lt;br /&gt;他幸福嗎？與覺得他還 ok 的妳&lt;sub&gt;1&lt;/sub&gt;在一起，也許可以給妳&lt;sub&gt;1&lt;/sub&gt;幸福。&lt;br /&gt;我幸福嗎？幸福過，因為妳&lt;sub&gt;1&lt;/sub&gt;跟妳&lt;sub&gt;2&lt;/sub&gt;都是我深愛過，也深愛過我的人。&lt;/p&gt;
&lt;p&gt;剩下的，都是我不成熟的代價。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113101616193710142?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113101616193710142/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113101616193710142' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113101616193710142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113101616193710142'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2005/11/12.html' title='妳&lt;sub&gt;1&lt;/sub&gt;、妳&lt;sub&gt;2&lt;/sub&gt;、與我'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113099736120535641</id><published>2005-11-03T13:51:00.000+08:00</published><updated>2006-10-30T03:56:13.626+08:00</updated><title type='text'>後輪加大鎖</title><content type='html'>&lt;p&gt;今天牽車以前，忘記開大鎖... 幸好我還沒摧油門，只是立著中架的時候踩到檔，所以輕輕的卡進去而已。無論如何，因為還是卡進去了，普通的辦法是拿不出來的...&lt;/p&gt;
&lt;p&gt;所以，我就把後輪放氣，於是就可以轉了...&lt;/p&gt;
&lt;p&gt;也許，您騎車也會忘記先開大鎖，不過如果還沒卡得很死，說不定把輪胎放氣以後可以拿的出來。&lt;/p&gt;
&lt;p&gt;給各位做個參考！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113099736120535641?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113099736120535641/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113099736120535641' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113099736120535641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113099736120535641'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2005/11/blog-post.html' title='後輪加大鎖'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113061931202659646</id><published>2005-10-30T01:52:00.000+08:00</published><updated>2006-10-30T03:56:13.556+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><title type='text'>程式、設計與程式設計</title><content type='html'>&lt;p&gt;從大學一年級開始，我就常常被同學抓去問程式。不過，我從來不直接寫好程式給人家抄，都是要看到寫好的程式碼才會幫忙指出邏輯上的錯誤。（或是看到註解，卻發現動作似乎不是那麼回事的程式碼。）拜此「只教你釣魚卻不給你魚」的邏輯之賜，漸漸的，來要作業的人少了，留下了真正想學東西的人。&lt;/p&gt;
&lt;p&gt;最近跟同學吃飯的時候，聊到他們來問我程式的「感想」- 雖然被我冷嘲熱諷，但還是覺得有學到東西。尤其是最近程式越寫越大，聽到我說的一段話，覺得感觸良多：&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;「程式設計」為什麼叫做程式「設計」，就是因為重點在「設計」。否則它就會叫「程式撰寫」之類的東西了。&lt;/p&gt;
  &lt;p&gt;寫程式如果不先設計，很容易花很多時間卻只寫出一個爛程式。你也許會認為，不設計可以節省時間，但是那是錯的。不先設計只會讓你寫到一半的時候不知道該怎麼辦，然後花更多時間思考。卻又因為沒經過完整的設計，最後寫出一個不怎麼樣的（爛）程式。看著這個爛程式，你當然會想再花時間把它改好，卻因為沒有設計不知該如何下手。但是這是你「已經」花了很多時間寫出來的程式，捨不得把它丟掉。於是花下比之前還多的時間下去除錯、增刪功能，最後還是做出一個不怎麼樣的爛程式。然後你覺得它還是不夠好，可是又更捨不得把它丟掉（因為你已經為它付出太多了！），於是花下更多時間修改，然後更捨不得，然後修改，然後更捨不得... 可是總歸要變成個爛程式，因為缺乏設計。死馬當活馬醫不是不行，但是可能會比直接換匹馬來的麻煩。就算真的醫好了，遇上你們這些實習醫生，這匹馬也不會變的活跳跳，大概還是個半死不活的樣子，絕對不會比經過適當調教的健康馬跑的好。&lt;/p&gt;
  &lt;p&gt;所以，如果你們給我一個程式，我看了以後叫你重寫，意思不是叫你直接去重寫，而是我覺得你必須重新設計你的邏輯，然後重寫。寫程式之前要先設計，是天經地義的道理。為什麼程式設計一開始要教流程圖？為什麼計概一開始要教流程圖？為什麼組語一開始要教流程圖？都只是為了教你一套設計程式的方法。我不是說一定要畫什麼鬼流程圖，因為我自己也不畫那個東西，但是至少要先設計過才開始寫程式。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;後來，有位同學告訴我他的心得...&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;你知道第一次我來問你程式的時候，也是一直被罵「上課沒專心聽」、「去看課本第 xx 頁」之類的。也許當時我問的只是一些「for 迴圈怎麼用」或「switch ... case 的語法是什麼」的問題，上課老師一定教過、課本上也一定有。但是當時我只覺得「如果我上課都聽的懂、課本都看的懂，幹麻還來問你？」&lt;/p&gt;
  &lt;p&gt;後來有一個比較大的作業，也是寫到一半拿來問你。當時你看了一眼程式碼以後，指著螢幕問我「這幾行程式碼在幹什麼？」的時候，我整個人傻掉，因為真的回答不出來。當時你只說了「連你都不知道在作什麼的碼，寫它幹麻？」後來，你一點一點的改我的程式，一點一點告訴我哪裡可能該怎麼寫，一點一點把東西加進去，寫出來的東西，我只覺得「這根本不是我寫的！」。&lt;/p&gt;
  &lt;p&gt;最後終於全部寫完、可以正確跑出結果，但是我還是霧煞煞。這個時候你又做了另一件讓我吐血的事 - 把視窗整個關掉，跟我說「好啦！我已經告訴你該怎麼寫了，回去以後自己重寫一次。」當時我整個人抓狂，那是我花了三天才寫出來的東西，你看了兩個小時、改了一堆東西以後叫我重寫？&lt;/p&gt;
  &lt;p&gt;後來我回去以後當然沒重寫，又抓著原來那塊半死不活的程式屍體改來改去，花了一個晚上，寫出了一個勉強可以跑，但是很多功能做不到的爛程式。當時的感覺，就真的是捨不得把它丟掉重寫一個。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;突然之間，我終於知道為什麼新手容易寫出爛程式，除了技術功力以外，最根本的問題就是他們懶的作設計。許多老師在一開始給的都只是小程式（Hello World!），幾乎一看就可以知道該怎麼寫，或是只要照著黑板抄就會跑，不需要什麼設計。很多時候，連為什麼要這樣寫都不知道。但是，隨著課程的深入，依樣畫葫蘆已經不能作出作業。可是因為之前沒有設計解法的能力，所以想破頭也不知道該怎麼把答案弄出來。&lt;/p&gt;
&lt;p&gt;後來繼續聊下去，發現大家都不知道該怎樣作設計才好。我是覺得，雖然有許多文章要你&lt;a href="http://bbs.ee.ntu.edu.tw/boards/Programming/6/20.html" target="_blank"&gt;別再畫流程圖了&lt;/a&gt;，但是那是寫給已經畫過幾百張流程圖的老手看的，新手還是得從流程圖開始。所以，畫流程圖的時候...&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;不要超過一張 A4 紙（即使有那些「至下頁」的小圓點，你還是不會知道自己在畫些什麼的！相信我。）&lt;/li&gt;
  &lt;li&gt;不要過度詳細（如果一個方塊對一行程式碼，直接去寫就好了，別浪費時間畫圖。）&lt;/li&gt;
  &lt;li&gt;從大問題開始畫起（例如，直接畫「程式開始 -&gt; 擷取聲音 -&gt; 傅立葉轉換 -&gt; RLE 編碼 -&gt; 赫夫曼編碼 -&gt; 存檔 -&gt; 結束」，別把 FFT、RLE、Huffman Encoding 到底怎麼做畫進同一張圖內。）&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;p&gt;所以... 新手們...... 看看&lt;a href="http://chinesetrad.joelonsoftware.com/PainlessSpecs/1.html" target="_blank"&gt;這篇文章&lt;/a&gt;，然後回去畫流程圖吧！！！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113061931202659646?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113061931202659646/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113061931202659646' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113061931202659646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113061931202659646'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2005/10/blog-post_30.html' title='程式、設計與程式設計'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10724994.post-113045377002982533</id><published>2005-10-28T06:47:00.000+08:00</published><updated>2006-10-30T03:56:13.493+08:00</updated><title type='text'>void operator-(工程數學, 微積分一年份);</title><content type='html'>&lt;p&gt;這個禮拜要交工程數學第一章的作業 -「分離係數法」與「正合微分方程」。&lt;/p&gt;
&lt;p&gt;分離係數法還蠻能理解的，雖然不能算的很快，但是至少寫的出東西（七題寫了五小時...）。&lt;/p&gt;
&lt;p&gt;可是正合... 嗯... 還勉勉強強，但是配上三角函數（或雙曲線函數）就把我吃得死死的了... 積分因子就更糟糕了，先算積分因子再用正合求解真是要我的命 = =&lt;/p&gt;
&lt;p&gt;很沒有效率的寫了十五小時，也才寫完一半的作業。剩下的一半是白努力等式（Bernoulli Equation），完全（100%）不會寫。&lt;/p&gt;
&lt;p&gt;算了... 看開吧！對微積分被當一年份的我來說，能做到這樣已經另自己很滿意了...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10724994-113045377002982533?l=palatis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palatis.blogspot.com/feeds/113045377002982533/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10724994&amp;postID=113045377002982533' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113045377002982533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10724994/posts/default/113045377002982533'/><link rel='alternate' type='text/html' href='http://palatis.blogspot.com/2005/10/void-operator.html' title='void operator-(工程數學, 微積分一年份);'/><author><name>【Palatis】</name><uri>http://www.blogger.com/profile/17047456909774114284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
