<?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-14489808</id><updated>2012-01-30T17:09:35.076+08:00</updated><category term='Fedora'/><category term='Picture'/><category term='Oneiric'/><category term='Desktop'/><category term='Game'/><category term='C'/><category term='BetaRadio'/><category term='upnp'/><category term='Math'/><category term='Kernel'/><category term='Wine'/><category term='Windows'/><category term='Nightmare'/><category term='Mercurial'/><category term='Skype'/><category term='Fon'/><category term='BitTorrent'/><category term='audio'/><category term='SCons'/><category term='GCC'/><category term='Flash'/><category term='yum'/><category term='Trac'/><category term='Git'/><category term='Console'/><category term='Mac'/><category term='Launchpad'/><category term='vim'/><category term='openSUSE'/><category term='libtool'/><category term='alltray'/><category term='Video'/><category term='BIOS'/><category term='Planet'/><category term='Anti-virus'/><category term='jQuery'/><category term='SSH'/><category term='MSN'/><category term='Gadget'/><category term='CSS'/><category term='PDF'/><category term='Subversion'/><category term='Bugfix'/><category term='Tips'/><category term='Perl'/><category term='Driver'/><category term='algorithm'/><category term='SuSE'/><category term='bash'/><category term='Blogger'/><category term='Parallels'/><category term='Gnome'/><category term='USB'/><category term='Automake'/><category term='Tax'/><category term='Drupal'/><category term='GnuPG'/><category term='Hinet'/><category term='xrandr'/><category term='Firefox'/><category term='Vala'/><category term='Upgrade'/><category term='alert'/><category term='Eclipse'/><category term='HTML'/><category term='pcmanx'/><category term='X200'/><category term='wicd'/><category term='JavaScript'/><category term='ScribeFire'/><category term='nvidia'/><category term='OSDC'/><category term='Installation'/><category term='Redmine'/><category term='Genie'/><category term='Python'/><category term='NTFS'/><category term='Wireless'/><category term='LibreOffice'/><category term='EeePC'/><category term='yahoo widget'/><category term='Autotools'/><category term='VirtualBox'/><category term='Slide'/><category term='Acrobat'/><category term='Packaging'/><category term='Programming'/><category term='Font'/><category term='C++'/><category term='XWindow'/><category term='GObject'/><category term='hdmi'/><category term='Chrome'/><category term='Mozilla'/><category term='FreedomHEC'/><category term='GTK+'/><category term='COSCUP'/><category term='IRC'/><category term='Software'/><category term='AMD'/><category term='CyanogenMod'/><category term='Preseed'/><category term='InternetRadio'/><category term='Android'/><category term='pulseaudio'/><category term='Mail'/><category term='ydict'/><category term='zenity'/><category term='Network'/><category term='JNI'/><category term='Redhat'/><category term='Gcin'/><category term='Script'/><category term='Debian'/><category term='Music'/><category term='C/C++'/><category term='Pidgin'/><category term='Radio'/><category term='scm'/><category term='Extension'/><category term='2010'/><category term='OpenMahjong'/><category term='Bazaar'/><category term='Java'/><category term='Google'/><category term='Printer'/><category term='hiChannel.sh'/><category term='Command'/><category term='PHP'/><category term='Package'/><category term='Fontconfig'/><category term='GitHub'/><category term='MiniCM'/><category term='Markdown'/><category term='Install'/><category term='Ruby'/><category term='Meld'/><category term='Linux'/><category term='GStreamer'/><category term='Hardware'/><category term='Glib'/><category term='Ubuntu'/><category term='qt'/><category term='PPA'/><title type='text'>FourDollars Blog</title><subtitle type='html'>GNU/Linux, Debian/Ubuntu, Mac OS X, Free Software/Open Source Software, Freeware, and Programming.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default?start-index=101&amp;max-results=100'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>253</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-14489808.post-9061398938115057920</id><published>2012-01-18T17:32:00.000+08:00</published><updated>2012-01-30T17:09:35.085+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Package'/><title type='text'>要求 Ubuntu 開發中版本同步 Debian 上面的套件</title><content type='html'>Ubuntu 是個每半年釋出一個版本的 GNU/Linux 發行套件，因此每次正式版本釋出的同時代表的是下一個版本開發的開始，因此每個 Ubuntu 版本的開發總是依循著同樣的步調跟大同小異的規則。&lt;br /&gt;&lt;br /&gt;Ubuntu 開發中版本上面的套件大多是來是 Debian testing/unstable 的自動同步，不過等到 &lt;a href="https://wiki.ubuntu.com/DebianImportFreeze" target="_blank"&gt;DebianImportFreeze&lt;/a&gt; 之後跟 &lt;a href="https://wiki.ubuntu.com/FeatureFreeze" target="_blank"&gt;FeatureFreeze&lt;/a&gt; 之前，如果還有新版本的套件在 Debian testing/unstable 上面出現時，就要透過 &lt;a href="https://wiki.ubuntu.com/SyncRequestProcess" target="_blank"&gt;SyncRequestProcess&lt;/a&gt; 來要求 Ubuntu 開發中版本同步 Debian 上面的套件，&lt;a href="https://wiki.ubuntu.com/FeatureFreeze" target="_blank"&gt;FeatureFreeze&lt;/a&gt; 之後就不能再要求同步套件了，只能夠修正程式的錯誤。&lt;br /&gt;&lt;br /&gt;以下示範三種情況。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;狀況一：&lt;/b&gt;Ubuntu 開發中版本的套件並沒有包含 Ubuntu 社群的錯誤修正&lt;br /&gt;&lt;br /&gt;使用 ubuntu-dev-tools 套件底下的 requestsync 指令&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ requestsync -C -d unstable --lp betaradio precise&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;然後會看到以下內容：&lt;br /&gt;&lt;pre class="brush: text"&gt;Summary (one line):&lt;br /&gt;Sync betaradio 1.4-1 (universe) from Debian unstable (main)&lt;br /&gt;&lt;br /&gt;Description:&lt;br /&gt;Please sync betaradio 1.4-1 (universe) from Debian unstable (main)&lt;br /&gt;&lt;br /&gt;Changelog entries since current precise version 1.3-1:&lt;br /&gt;&lt;br /&gt;XXX FIXME: add changelog here XXX                                 &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;要將最後一行改掉，加上 Debian testing/unstable 套件裡面的訊息，所以就變成了：&lt;br /&gt;&lt;pre class="brush: text"&gt;Summary (one line):&lt;br /&gt;Sync betaradio 1.4-1 (universe) from Debian unstable (main)&lt;br /&gt;&lt;br /&gt;Description:&lt;br /&gt;Please sync betaradio 1.4-1 (universe) from Debian unstable (main)&lt;br /&gt;&lt;br /&gt;Changelog entries since current precise version 1.3-1:&lt;br /&gt;&lt;br /&gt;betaradio (1.4-1) unstable; urgency=low&lt;br /&gt;&lt;br /&gt;  * New upstream release.&lt;br /&gt;  * debian/patches/00_dont_install_header: Don't install header file into the&lt;br /&gt;    system.&lt;br /&gt;&lt;br /&gt; -- Shih-Yuan Lee (FourDollars) &amp;lt;fourdollars[at]gmail.com&amp;gt; Sat, 14 Jan 2012 20:58:32 +0800&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;最後就會產生一個 Launchpad Bug 像是 &lt;a href="https://bugs.launchpad.net/ubuntu/+source/betaradio/+bug/918059" target="_blank"&gt;Bug #918059 in betaradio (Ubuntu): “Sync betaradio 1.4-1 (universe) from Debian unstable (main)”&lt;/a&gt; 這樣就做好了，之後就是去注意這個 Bug 的變化，適時的去回應 Ubuntu Developer 提出的問題(如果有的話)。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;狀況二：&lt;/b&gt;Ubuntu 開發中版本的套件已經有包含了一些 Ubuntu 社群的錯誤修正&lt;br /&gt;&lt;br /&gt;在這種情況底下 Ubuntu 不會自動去同步 Debian testing/unstable 上面的套件，以防有些 Ubuntu 社群所做的錯誤修正遺失。&lt;br /&gt;&lt;br /&gt;使用跟上面一樣的指令：&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ requestsync -C -d unstable --lp ibus-chewing precise&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;然後會看到以下內容：&lt;br /&gt;&lt;pre class="brush: text"&gt;Summary: Sync ibus-chewing 1.3.10+clean-1 (main) from Debian unstable (main)&lt;br /&gt;Description:&lt;br /&gt;Please sync ibus-chewing 1.3.10+clean-1 (main) from Debian unstable (main)&lt;br /&gt;&lt;br /&gt;Explanation of the Ubuntu delta and why it can be dropped:&lt;br /&gt;  * debian/patches/IBusChewingEngine-def-fix-SIGSEGV-on-preference-save.patch:&lt;br /&gt;    Fix misuse of g_value_get_gtype in g_value_to_g_variant. (LP: #874028)&lt;br /&gt;  * debian/patches/escape-to-close-candidate-window-on-plain-&lt;br /&gt;     zhuyin.patch: Fix plain zhuyin with space as selection problem.&lt;br /&gt;     (https://github.com/definite/ibus-chewing/pull/8/) (LP: #843619)&lt;br /&gt;[這邊有一行我忘了原本寫些什麼了，總之要你改掉寫上你的解釋]&lt;br /&gt;&lt;br /&gt;Changelog entries since current precise version 1.3.9.2-3ubuntu2:&lt;br /&gt;&lt;br /&gt;XXX FIXME: add changelog here XXX                                 &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;跟前面一樣加上 Debian testing/unstable 套件裡面的訊息，還有解釋一下為什麼 Ubuntu 社群的錯誤修正都被拿掉了，然後就變成了：&lt;br /&gt;&lt;pre class="brush: text"&gt;Please sync ibus-chewing 1.3.10+clean-1 (main) from Debian unstable (main)&lt;br /&gt;&lt;br /&gt;Explanation of the Ubuntu delta and why it can be dropped:&lt;br /&gt;  * debian/patches/IBusChewingEngine-def-fix-SIGSEGV-on-preference-save.patch:&lt;br /&gt;    Fix misuse of g_value_get_gtype in g_value_to_g_variant. (LP: #874028)&lt;br /&gt;  * debian/patches/escape-to-close-candidate-window-on-plain-&lt;br /&gt;     zhuyin.patch: Fix plain zhuyin with space as selection problem.&lt;br /&gt;     (https://github.com/definite/ibus-chewing/pull/8/) (LP: #843619)&lt;br /&gt;These patches are already included in ibus-chewing 1.3.10+clean-1.&lt;br /&gt;&lt;br /&gt;Changelog entries since current precise version 1.3.9.2-3ubuntu2:&lt;br /&gt;&lt;br /&gt;ibus-chewing (1.3.10+clean-1) unstable; urgency=low&lt;br /&gt;&lt;br /&gt;  * New upstream release.&lt;br /&gt;  * All Debian patcheds dropped.&lt;br /&gt;  * Add Osamu as uploaders.&lt;br /&gt;  * Repackaged upstream tar with normal tar and removing .swo&lt;br /&gt;&lt;br /&gt; -- Osamu Aoki &amp;lt;osamu[at]debian.org&amp;gt; Mon, 26 Dec 2011 00:17:58 +0900&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;最後就會產生一個 Launchpad Bug 像是 &lt;a href="https://bugs.launchpad.net/ubuntu/+source/ibus-chewing/+bug/918061" target="_blank"&gt;Bug #918061 in ibus-chewing (Ubuntu): “Sync ibus-chewing 1.3.10+clean-1 (main) from Debian unstable (main)” &lt;/a&gt; ，之後就是去注意這個 Bug 的變化，適時的去回應 Ubuntu Developer 提出的問題(如果有的話)。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;狀況三：&lt;/b&gt; Ubuntu 開發中版本並沒有包含這個套件&lt;br /&gt;&lt;br /&gt;在這種情況下應該是最單純的，應該不會有額外的動作要做，都是按下 Enter 就可以做到完。&lt;br /&gt;&lt;br /&gt;使用跟上面一樣的指令：&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ requestsync -C -d unstable --lp hime precise&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;然後會看到以下內容：&lt;br /&gt;&lt;pre class="brush: text"&gt;'hime' doesn't exist in 'Ubuntu precise'.&lt;br /&gt;Do you want to sync a new package?&lt;br /&gt;Press [Enter] to continue or [Ctrl-C] to abort.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;當然是按下 Enter 到下一步&lt;br /&gt;&lt;pre class="brush: text"&gt;Your sync request shall require an approval by a member of the appropriate&lt;br /&gt;sponsorship team, who shall be subscribed to this bug report.&lt;br /&gt;This must be done before it can be processed by a member of the Ubuntu Archive&lt;br /&gt;team.&lt;br /&gt;If the above is correct please press [Enter] &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;再按下 Enter 到下一步&lt;br /&gt;&lt;pre class="brush: text"&gt;Currently the report looks as follows:&lt;br /&gt;Summary (one line):&lt;br /&gt;Sync hime 0.9.9-1 (universe) from Debian unstable (main)&lt;br /&gt;&lt;br /&gt;Description:&lt;br /&gt;Please sync hime 0.9.9-1 (universe) from Debian unstable (main)&lt;br /&gt;&lt;br /&gt;All changelog entries:&lt;br /&gt;&lt;br /&gt;hime (0.9.9-1) unstable; urgency=low&lt;br /&gt;&lt;br /&gt;  * Initial release (Closes: #652022)&lt;br /&gt;&lt;br /&gt; -- Yao Wei (魏銘廷) &amp;lt;mwei[at]lxde.org&amp;gt;  Sat, 14 Jan 2012 00:24:08 +0800&lt;br /&gt;&lt;br /&gt;Do you want to edit the report [y/N]?&lt;/pre&gt;並沒有修改的必要，所以還是按下 Enter 到下一步&lt;br /&gt;&lt;pre class="brush: text"&gt;The final report is:&lt;br /&gt;Summary: Sync hime 0.9.9-1 (universe) from Debian unstable (main)&lt;br /&gt;Description:&lt;br /&gt;Please sync hime 0.9.9-1 (universe) from Debian unstable (main)&lt;br /&gt;&lt;br /&gt;All changelog entries:&lt;br /&gt;&lt;br /&gt;hime (0.9.9-1) unstable; urgency=low&lt;br /&gt;&lt;br /&gt;  * Initial release (Closes: #652022)&lt;br /&gt;&lt;br /&gt; -- Yao Wei (魏銘廷) &amp;lt;mwei[at]lxde.org&amp;gt;  Sat, 14 Jan 2012 00:24:08 +0800&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Press [Enter] to continue or [Ctrl-C] to abort.&lt;/pre&gt;最後的確認，還是按下 Enter 於是就會產生一個 Launchpad Bug 像是 &lt;a href="https://bugs.launchpad.net/ubuntu/+bug/923637" target="_blank"&gt;Bug #923637 in Ubuntu: “Sync hime 0.9.9-1 (universe) from Debian unstable (main)”&lt;/a&gt;，之後就是去注意這個 Bug 的變化，適時的去回應 Ubuntu Developer 提出的問題(如果有的話)。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-9061398938115057920?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/9061398938115057920/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=9061398938115057920' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/9061398938115057920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/9061398938115057920'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2012/01/ubuntu-debian.html' title='要求 Ubuntu 開發中版本同步 Debian 上面的套件'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-651596616946965714</id><published>2012-01-16T14:59:00.000+08:00</published><updated>2012-01-16T15:00:36.057+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GObject'/><category scheme='http://www.blogger.com/atom/ns#' term='Vala'/><category scheme='http://www.blogger.com/atom/ns#' term='Gnome'/><category scheme='http://www.blogger.com/atom/ns#' term='Genie'/><title type='text'>Genie 程式語言</title><content type='html'>Genie 程式語言是 GNOME 計畫下的一個新的程式語言，跟 Vala 一起開發的，語法類似 Python，跟 Vala 一樣都是借助 GObject 來實現物件導向程式設計，也跟 Vala 一樣都是產生出 C 的程式碼，而且也因為 GObject 的關係可以輕易地產生其它程式語言的 binding。&lt;br /&gt;例如：輸入以下的程式碼儲存成 hello.gs&lt;br /&gt;&lt;pre class="brush:python"&gt;init&lt;br /&gt;        print "Hello World"&lt;br /&gt;&lt;/pre&gt;然後再執行以下的指令就可以看到結果了。&lt;br /&gt;&lt;pre class="brush:shell"&gt;$ valac hello.gs&lt;br /&gt;$ ./hello&lt;br /&gt;&lt;/pre&gt;如果說要看到中間轉譯出來的 C 語言程式碼可以輸入以下指令：&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ valac -C hello.gs&lt;br /&gt;&lt;/pre&gt;於是就可以看到 hello.c 產生出來了。&lt;br /&gt;&lt;pre class="brush:c"&gt;/* hello.c generated by valac 0.14.0, the Vala compiler&lt;br /&gt; * generated from hello.gs, do not modify */&lt;br /&gt;&lt;br /&gt;#include &amp;lt;glib.h&amp;gt;&lt;br /&gt;#include &amp;lt;glib-object.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;&lt;br /&gt;void _vala_main (gchar** args, int args_length1);&lt;br /&gt;&lt;br /&gt;void _vala_main (gchar** args, int args_length1) {&lt;br /&gt;        g_print ("Hello World\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main (int argc, char ** argv) {&lt;br /&gt;        g_type_init ();&lt;br /&gt;        _vala_main (argv, argc);&lt;br /&gt;        return 0;&lt;br /&gt;}&lt;/pre&gt;看看裡面的內容是不是一般所熟悉的 C 語言程式碼。:)&lt;br /&gt;&lt;blockquote&gt;參考資料：&lt;a href="https://live.gnome.org/Genie" target="_blank"&gt;Genie - GNOME Live!&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/14489808-651596616946965714?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/651596616946965714/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=651596616946965714' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/651596616946965714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/651596616946965714'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2012/01/genie.html' title='Genie 程式語言'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-5873812332936816310</id><published>2012-01-16T13:00:00.000+08:00</published><updated>2012-01-16T13:00:56.208+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AMD'/><category scheme='http://www.blogger.com/atom/ns#' term='PPA'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>AMD Graphics Drivers 非官方 PPA - ppa:fourdollars/fglrx</title><content type='html'>因為我自己工作上的需要所以偶而會測試 AMD 官方最新 release 出來的 Graphics Drivers&lt;br /&gt;剛剛更新了 &lt;a href="https://launchpad.net/~fourdollars/+archive/fglrx"&gt;ppa:fourdollars/fglrx&lt;/a&gt; 給 Ubuntu 10.04/10.10/11.04/11.10 使用&lt;br /&gt;目前使用的是 AMD 在 12/13/2011 釋出的 AMD Catalyst™ 11.11 Proprietary Linux x86 Display Driver&lt;br /&gt;最新的 AMD Graphics Drivers 可以參考&amp;nbsp;&lt;a href="http://support.amd.com/us/gpudownload/linux/Pages/radeon_linux.aspx"&gt;http://support.amd.com/us/gpudownload/linux/Pages/radeon_linux.aspx&lt;/a&gt;&lt;br /&gt;有 AMD Graphics Drivers 使用問題的網友可以試試看，另外要特別聲明這只是使用 AMD 官方釋出的套件產生出來的，因此有問題找我也解決不了。:P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-5873812332936816310?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/5873812332936816310/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=5873812332936816310' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5873812332936816310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5873812332936816310'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2012/01/amd-graphics-drivers-ppa.html' title='AMD Graphics Drivers 非官方 PPA - ppa:fourdollars/fglrx'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-103322189449424563</id><published>2012-01-13T17:58:00.003+08:00</published><updated>2012-01-13T17:59:16.020+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BetaRadio'/><title type='text'>betaradio v1.4 released</title><content type='html'>BetaRadio 是一款使用 Vala 程式語言寫出來的網路收音機程式，專門用來收聽台灣的網路電台。&lt;br /&gt;&lt;br /&gt;專案網址：&lt;br /&gt;&lt;a href="http://code.google.com/p/betaradio/"&gt;http://code.google.com/p/betaradio/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;新功能：&lt;br /&gt;1. 改善 Unity 整合性&lt;br /&gt;2. 使用多執行緒改善回應速度&lt;br /&gt;&lt;br /&gt;錯誤修正：&lt;br /&gt;1. 修正右鍵點擊無法使用的問題&lt;br /&gt;&lt;br /&gt;原始碼下載：&lt;br /&gt;&lt;a href="http://code.google.com/p/betaradio/downloads/detail?name=betaradio-1.4.tar.bz2"&gt;http://code.google.com/p/betaradio/downloads/detail?name=betaradio-1.4.tar.bz2&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-103322189449424563?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/103322189449424563/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=103322189449424563' title='4 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/103322189449424563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/103322189449424563'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2012/01/betaradio-v14-release.html' title='betaradio v1.4 released'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-1875645755020115676</id><published>2011-11-21T11:42:00.001+08:00</published><updated>2011-12-07T11:06:06.847+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oneiric'/><category scheme='http://www.blogger.com/atom/ns#' term='Installation'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu 11.10 繁體中文全新安裝後手動修正問題</title><content type='html'>&lt;b&gt;共同的部份&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. 系統語言變數設定錯誤&lt;/b&gt;&lt;br /&gt;直接修改&amp;nbsp;/etc/default/locale 內容改成&lt;br /&gt;&lt;pre class="brush: text"&gt;LANG="zh_TW.UTF-8"&lt;br /&gt;LANGUAGE="zh_TW:en"&lt;br /&gt;&lt;/pre&gt;然後再執行&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ sudo update-grub&lt;/pre&gt;&lt;b&gt;2. fontconfig 字型設定錯誤&lt;/b&gt;&lt;br /&gt;正常的設定會是以下的結果&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ fontconfig-voodoo -c&lt;br /&gt;Current config: zh_TW&lt;br /&gt;&lt;/pre&gt;如果不正常就執行以下命令修正&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ sudo fontconfig-voodoo -a&lt;br /&gt;&lt;/pre&gt;修正完畢後，重新開機應該就會正常了。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Xubuntu 11.10&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. ibus 導致程式崩潰的問題&lt;/b&gt;&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ sudo apt-get install ibus-gtk ibus-gtk3&lt;br /&gt;$ cd /usr/lib/gtk-2.0/2.10.0/&lt;br /&gt;$ sudo ln -s /usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/immodules&lt;br /&gt;&lt;/pre&gt;如果是使用 AMD64&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ sudo ln -s /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-1875645755020115676?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/1875645755020115676/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=1875645755020115676' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1875645755020115676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1875645755020115676'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/11/ubuntu-1110.html' title='Ubuntu 11.10 繁體中文全新安裝後手動修正問題'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-8262239214305701358</id><published>2011-11-20T11:54:00.001+08:00</published><updated>2011-12-17T18:45:20.808+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MiniCM'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='CyanogenMod'/><title type='text'>在 Sony Ericsson Xperia™ X8 刷 MiniCM7</title><content type='html'>&lt;a href="http://code.google.com/p/minicm/"&gt;MiniCM&lt;/a&gt; 是一個特別為 Sony Ericsson Xperia&lt;span class="Apple-style-span" style="background-color: white; color: #222222; font-family: Arial; font-size: 13px;"&gt;™&lt;/span&gt;&amp;nbsp; &lt;a href="http://www.google.com/phone/detail/sony-ericsson-xperia-x10-mini"&gt;X10 mini&lt;/a&gt; / &lt;a href="http://www.google.com/phone/detail/sony-ericsson-xperia-x8"&gt;X8&lt;/a&gt; 製作 Android 的 &lt;a href="http://www.cyanogenmod.com/"&gt;CyanogenMod&lt;/a&gt;&amp;nbsp;客製化的計畫&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-9Tro7-flcgA/TsiEKdgjTKI/AAAAAAAALrY/F2rLlCH1rA0/s1600/IMG-20111120-WA0001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-9Tro7-flcgA/TsiEKdgjTKI/AAAAAAAALrY/F2rLlCH1rA0/s320/IMG-20111120-WA0001.jpg" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-OqipWkZ7Xtc/TsiEL3rDHaI/AAAAAAAALrk/WzffZDO8xtk/s1600/IMG-20111119-WA0000.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-OqipWkZ7Xtc/TsiEL3rDHaI/AAAAAAAALrk/WzffZDO8xtk/s320/IMG-20111119-WA0000.jpg" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;以下是筆者的安裝步驟筆記，自行刷客製的 Android ROM 有一定的風險，請讀者自行負擔風險，筆者不擔保過程中發生的問題。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;首先需要在 Windows 下載安裝 &lt;a href="http://www.sonyericsson.com/cws/support/mobilephones/downloads/subject/pccompanion/xperiax8?cc=tw&amp;amp;lc=zh"&gt;Sony Ericsson PC Companion 2.0&lt;/a&gt; 用來升級跟還原出廠預設版本（安裝過程中有任何問題都可以還原手機上的系統）&lt;/li&gt;&lt;li&gt;如果 [設定] -&amp;gt; [關於手機] 裡面的 [基頻版本] 不是 015 結尾的話，需要下載 &lt;a href="http://forum.xda-developers.com/showthread.php?t=976538"&gt;Baseband 015&lt;/a&gt; 的 firmware 回來使用 &lt;a href="http://androxyde.github.com/Flashtool/"&gt;Flashtool&lt;/a&gt; 來更新，然後重新啟動手機&lt;/li&gt;&lt;li&gt;在 Windows 上面安裝使用 &lt;a href="http://forum.xda-developers.com/showthread.php?t=906195"&gt;SuperOneClick&lt;/a&gt; 來取得手機上的 root 權限，然後重新啟動手機&lt;/li&gt;&lt;li&gt;利用 Android Market 安裝 &lt;a href="https://market.android.com/details?id=com.graphilos.apkinst"&gt;Apk Installer&lt;/a&gt; 用來安裝 &lt;a href="http://myw8.blogspot.com/2011/07/installing-and-using-xrecovery.html"&gt;Root Explorer&lt;/a&gt;，然後重新啟動手機&lt;/li&gt;&lt;li&gt;然後再將 &lt;a href="http://myw8.blogspot.com/2011/07/installing-and-using-xrecovery.html"&gt;Xrecovery.zip&lt;/a&gt; 裡面的三個檔案利用 Root Explorer 複製到手機系統裡的 /system/bin 底下&lt;/li&gt;&lt;li&gt;重新啟動系統，看見手機畫面上出現 Sony Ericsson 字樣時不斷地連擊手機上的 Back 鍵，順利的話就可以進入 Xrecovery&lt;/li&gt;&lt;li&gt;在 Xrecovery 裡面安裝&amp;nbsp;&lt;a href="http://code.google.com/p/minicm/downloads/detail?name=MiniCM7-2.0.7-X8.zip"&gt;MiniCM7-2.0.7-X8.zip&lt;/a&gt; 跟&amp;nbsp;&lt;a href="http://cmw.22aaf3.com/gapps/"&gt;gapps-gb-20110828-signed.zip&lt;/a&gt;，然後再執行 factory reset 再重新啟動手機就大功告成啦！^o^&lt;/li&gt;&lt;/ol&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ij82bjYbwqA/TsiELGrzhJI/AAAAAAAALrc/3JfMDVBjn_0/s1600/IMG-20111120-WA0000.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-ij82bjYbwqA/TsiELGrzhJI/AAAAAAAALrc/3JfMDVBjn_0/s320/IMG-20111120-WA0000.jpg" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;PS. 筆者所使用的手機型號是 X8i(E15i)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-8262239214305701358?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/8262239214305701358/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=8262239214305701358' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8262239214305701358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8262239214305701358'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/11/sony-ericsson-xperia-x8-minicm7.html' title='在 Sony Ericsson Xperia™ X8 刷 MiniCM7'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-9Tro7-flcgA/TsiEKdgjTKI/AAAAAAAALrY/F2rLlCH1rA0/s72-c/IMG-20111120-WA0001.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-3182736514288995741</id><published>2011-09-26T18:24:00.000+08:00</published><updated>2011-09-26T18:24:03.274+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hdmi'/><category scheme='http://www.blogger.com/atom/ns#' term='pulseaudio'/><category scheme='http://www.blogger.com/atom/ns#' term='audio'/><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 Ubuntu 10.10 上修正 NVidia 的 HDMI audio 支援問題</title><content type='html'>首先要裝上 &lt;a href="https://launchpad.net/~fourdollars/+archive/nvidia"&gt;ppa:fourdollars/nvidia&lt;/a&gt; 上面的 nvidia proprietary driver&lt;br /&gt;還要裝上 &lt;a href="https://launchpad.net/~diwic/+archive/dkms"&gt;ppa:diwic/dkms&lt;/a&gt; 上面的 alsa-hda-dkms&lt;br /&gt;還要裝上 &lt;a href="https://launchpad.net/~ubuntu-audio-dev/+archive/ppa?field.series_filter=maverick"&gt;ppa:ubuntu-audio-dev/ppa&lt;/a&gt; 上面的 pulseaudio&lt;br /&gt;然後重新啟動&lt;br /&gt;接下來看看 HDMI 接在哪裡&lt;br /&gt;&lt;pre class="brush:shell"&gt;$ for i in /proc/asound/NVidia/eld*; do echo "&amp;lt;&amp;lt;$i&amp;gt;&amp;gt;"; cat $i; done&lt;br /&gt;&amp;lt;&amp;lt;/proc/asound/NVidia/eld#0.0&amp;gt;&amp;gt;&lt;br /&gt;monitor_present		0&lt;br /&gt;eld_valid		0&lt;br /&gt;&amp;lt;&amp;lt;/proc/asound/NVidia/eld#1.0&amp;gt;&amp;gt;&lt;br /&gt;monitor_present		1&lt;br /&gt;eld_valid		1&lt;br /&gt;monitor_name		CHIMEI 22SH-L&lt;br /&gt;connection_type		HDMI&lt;br /&gt;eld_version		[0x2] CEA-861D or below&lt;br /&gt;edid_version		[0x3] CEA-861-B, C or D&lt;br /&gt;manufacture_id		0x73b&lt;br /&gt;product_id		0x2d22&lt;br /&gt;port_id			0x10000&lt;br /&gt;support_hdcp		0&lt;br /&gt;support_ai		0&lt;br /&gt;audio_sync_delay	0&lt;br /&gt;speakers		[0x1] FL/FR&lt;br /&gt;sad_count		1&lt;br /&gt;sad0_coding_type	[0x1] LPCM&lt;br /&gt;sad0_channels		2&lt;br /&gt;sad0_rates		[0xe0] 44100 48000 88200&lt;br /&gt;sad0_bits		[0xe0000] 16 20 24&lt;br /&gt;&amp;lt;&amp;lt;/proc/asound/NVidia/eld#2.0&amp;gt;&amp;gt;&lt;br /&gt;monitor_present		0&lt;br /&gt;eld_valid		0&lt;br /&gt;&amp;lt;&amp;lt;/proc/asound/NVidia/eld#3.0&amp;gt;&amp;gt;&lt;br /&gt;monitor_present		0&lt;br /&gt;eld_valid		0&lt;br /&gt;&lt;/pre&gt;從上面的紀錄可以看出在&amp;nbsp;/proc/asound/NVidia/eld#1.0 上面&lt;br /&gt;不過可能會看到都是靜音的狀態&lt;br /&gt;&lt;pre class="brush:shell"&gt;$ amixer -D hw:NVidia&lt;br /&gt;Simple mixer control 'IEC958',0&lt;br /&gt;  Capabilities: pswitch pswitch-joined penum&lt;br /&gt;  Playback channels: Mono&lt;br /&gt;  Mono: Playback [off]&lt;br /&gt;Simple mixer control 'IEC958',1&lt;br /&gt;  Capabilities: pswitch pswitch-joined penum&lt;br /&gt;  Playback channels: Mono&lt;br /&gt;  Mono: Playback [off]&lt;br /&gt;Simple mixer control 'IEC958',2&lt;br /&gt;  Capabilities: pswitch pswitch-joined penum&lt;br /&gt;  Playback channels: Mono&lt;br /&gt;  Mono: Playback [off]&lt;br /&gt;Simple mixer control 'IEC958',3&lt;br /&gt;  Capabilities: pswitch pswitch-joined penum&lt;br /&gt;  Playback channels: Mono&lt;br /&gt;  Mono: Playback [off]&lt;br /&gt;&lt;/pre&gt;就可以執行&lt;br /&gt;&lt;pre class="brush:shell"&gt;$ alsamixer -D hw:NVidia&lt;/pre&gt;在 CUI 設定畫面中全部取消靜音，接下來執行&lt;br /&gt;&lt;pre class="brush:shell"&gt;$ pasuspender -- speaker-test -D hdmi:NVidia,1 -c 2 -t sine -l 1&lt;/pre&gt;應該就可以聽到聲音了，確定裝置之後就可以修改 /usr/share/pulseaudio/alsa-mixer/profile-sets/default.conf 當中的&lt;br /&gt;&lt;pre class="brush:text"&gt;[Mapping hdmi-stereo]&lt;br /&gt;device-strings = hdmi:%f&lt;br /&gt;channel-map = left,right&lt;br /&gt;priority = 4&lt;br /&gt;direction = output&lt;br /&gt;&lt;/pre&gt;改成&lt;br /&gt;&lt;pre class="brush:text"&gt;[Mapping hdmi-stereo]&lt;br /&gt;device-strings = hdmi:%f,1&lt;br /&gt;channel-map = left,right&lt;br /&gt;priority = 4&lt;br /&gt;direction = output&lt;br /&gt;&lt;/pre&gt;再重新啟動後應該就可以聽到 HDMI audio 的聲音了。&lt;br /&gt;&lt;br /&gt;其它幫助除錯的方法還有&lt;br /&gt;&lt;ul&gt;&lt;li&gt;$ udevadm info --export-db 可以看 udev 的設定檔有沒有被正確地使用&lt;/li&gt;&lt;li&gt;$ pacmd ls 在播放音樂的途中執行可以看 pulseaudio 有沒有不正常的地方&lt;/li&gt;&lt;li&gt;&lt;a href="https://wiki.ubuntu.com/Audio/AlsaInfo"&gt;https://wiki.ubuntu.com/Audio/AlsaInfo&lt;/a&gt; 提供給開發者的資訊&lt;/li&gt;&lt;li&gt;&lt;a href="https://wiki.ubuntu.com/PulseAudio/Log"&gt;https://wiki.ubuntu.com/PulseAudio/Log&lt;/a&gt; 提供給開發者的資訊&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-3182736514288995741?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/3182736514288995741/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=3182736514288995741' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3182736514288995741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3182736514288995741'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/09/ubuntu-1010-nvidia-hdmi-audio.html' title='在 Ubuntu 10.10 上修正 NVidia 的 HDMI audio 支援問題'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-1250757413594517796</id><published>2011-08-31T12:52:00.000+08:00</published><updated>2011-09-01T13:23:47.510+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Vala'/><title type='text'>Project Euler - Problem 12</title><content type='html'>昨天在 &lt;a href="http://www.tossug.org"&gt;TOSSUG&lt;/a&gt; 聚會上 Choupi 提到這個問題&lt;a href="http://projecteuler.net/index.php?section=problems&amp;id=12"&gt;Project Euler - Problem 12&lt;/a&gt;於是就寫了以下的 Vala 程式碼來解這個問題&lt;pre class="brush: c-sharp"&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;    int i = 0, number = 0;&lt;br /&gt;    // 用來儲存質數分解的結果&lt;br /&gt;    HashTable&amp;lt;string, int*&amp;gt; factors = null;&lt;br /&gt;&lt;br /&gt;    do {&lt;br /&gt;        // 逐個取出三角數&lt;br /&gt;        number = triangle_number(++i);&lt;br /&gt;        // 算出所有因數的個數直到比 500 還要大為止&lt;br /&gt;    } while (factor_number_of(number, out factors) &amp;lt; 500);&lt;br /&gt;&lt;br /&gt;    // 把算出來的答案印出來&lt;br /&gt;    stdout.printf("Answer: %d\n", number);&lt;br /&gt;&lt;br /&gt;    // 將答案驗算一遍&lt;br /&gt;    print_factors(factors);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void print_factors(HashTable&amp;lt;string, int*&amp;gt; factors)&lt;br /&gt;{&lt;br /&gt;    int number = 1;&lt;br /&gt;&lt;br /&gt;    List&amp;lt;unowned string&amp;gt; keys = factors.get_keys();&lt;br /&gt;    // 把質因數表的鍵值依照數值大小重新排序&lt;br /&gt;    keys.sort( (a, b) =&amp;gt; {&lt;br /&gt;        int num1 = int.parse(a);&lt;br /&gt;        int num2 = int.parse(b);&lt;br /&gt;        if (num1 &amp;lt; num2 ) {&lt;br /&gt;            return -1;&lt;br /&gt;        }&lt;br /&gt;        else if (num1 &amp;gt; num2) {&lt;br /&gt;            return 1;&lt;br /&gt;        }&lt;br /&gt;        else {&lt;br /&gt;            return 0;&lt;br /&gt;        }&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;    // 驗算過程&lt;br /&gt;    foreach (unowned string key in keys) {&lt;br /&gt;        int* count = (int*) factors.lookup(key);&lt;br /&gt;        int prime = int.parse(key);&lt;br /&gt;        if (*count &amp;gt; 1) {&lt;br /&gt;            stdout.printf("%d^%d*", prime, *count);&lt;br /&gt;        }&lt;br /&gt;        else {&lt;br /&gt;            stdout.printf("%d*", prime);&lt;br /&gt;        }&lt;br /&gt;        // 重覆乘上質因數出現的次數&lt;br /&gt;        for (int i = 0; i &amp;lt; *count; i++) {&lt;br /&gt;            number = number * prime;&lt;br /&gt;        }&lt;br /&gt;        free(count);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    stdout.printf("\b=%d\n", number);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// 三角數的計算&lt;br /&gt;int triangle_number(int num)&lt;br /&gt;{&lt;br /&gt;    return num * (num + 1) / 2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// 找出某數值的質因數分解&lt;br /&gt;int factor_number_of(int number, out HashTable&amp;lt;string, int*&amp;gt; table)&lt;br /&gt;{&lt;br /&gt;    table = new HashTable&amp;lt;string, int*&amp;gt;(str_hash, str_equal);&lt;br /&gt;    do {&lt;br /&gt;        // 找出該數值的平方根&lt;br /&gt;        int root = sqrt_floor_of(number);&lt;br /&gt;        int previous = number;&lt;br /&gt;&lt;br /&gt;        // 從小到大用質因數去整除直到超過平方根&lt;br /&gt;        for (int i = 0; prime_number_of(i) &amp;lt;= root; i++) {&lt;br /&gt;            int prime = prime_number_of(i);&lt;br /&gt;            if (number % prime == 0) {&lt;br /&gt;                // 遞增質因數表的數值&lt;br /&gt;                int* count = (int*) table.lookup(prime.to_string()) ?? malloc0(sizeof(int));&lt;br /&gt;                *count = *count + 1;&lt;br /&gt;                table.replace(prime.to_string(), count);&lt;br /&gt;                number = number / prime;&lt;br /&gt;                break;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // 如果 number 沒有變動過，number 就是質數。&lt;br /&gt;        if (number == previous) {&lt;br /&gt;            // 遞增質因數表的數值&lt;br /&gt;            int* count = (int*) table.lookup(number.to_string()) ?? malloc0(sizeof(int));&lt;br /&gt;            *count = *count + 1;&lt;br /&gt;            table.replace(number.to_string(), count);&lt;br /&gt;            break;&lt;br /&gt;        }&lt;br /&gt;    } while (number != 1);&lt;br /&gt;&lt;br /&gt;    int result = 1;&lt;br /&gt;&lt;br /&gt;    // 計算所有因數的個數&lt;br /&gt;    foreach (int* count in table.get_values()) {&lt;br /&gt;        result = result * (*count + 1);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return result;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// 計算平方根&lt;br /&gt;int sqrt_floor_of(int num)&lt;br /&gt;{&lt;br /&gt;    return (int) Math.sqrt((double) num);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// 準備一個用來 cache 計算過的質數表&lt;br /&gt;static List&amp;lt;int&amp;gt; prime_table = new List&amp;lt;int&amp;gt;();&lt;br /&gt;&lt;br /&gt;// 質數計算&lt;br /&gt;int prime_number_of(uint index)&lt;br /&gt;{&lt;br /&gt;    if (index &amp;lt; prime_table.length()) {&lt;br /&gt;        // 直接從 cache 中取出&lt;br /&gt;        return prime_table.nth_data(index);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // 第一個質數為 2&lt;br /&gt;    if (index == 0) {&lt;br /&gt;        prime_table.append(2);&lt;br /&gt;        return 2;&lt;br /&gt;    }&lt;br /&gt;    // 第二個質數為 3&lt;br /&gt;    else if (index == 1) {&lt;br /&gt;        prime_table.append(3);&lt;br /&gt;        return 3;&lt;br /&gt;    }&lt;br /&gt;    // 第三個後的質數計算&lt;br /&gt;    else {&lt;br /&gt;        int candidate = prime_table.nth_data(prime_table.length() - 1) + 2;&lt;br /&gt;        do {&lt;br /&gt;            bool is_prime = true;&lt;br /&gt;            foreach (int number in prime_table) {&lt;br /&gt;                if (candidate % number == 0) {&lt;br /&gt;                    is_prime = false;&lt;br /&gt;                    break;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            if (is_prime) {&lt;br /&gt;                prime_table.append(candidate);&lt;br /&gt;                return candidate;&lt;br /&gt;            }&lt;br /&gt;            candidate = candidate + 2;&lt;br /&gt;        } while (true);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;將以上程式碼儲存成 p12.vala 或是直接從 &lt;a href="https://gist.github.com/1182715"&gt;gist: 1182715&lt;/a&gt; 下載然後編譯執行&lt;pre class="brush: shell"&gt;&lt;br /&gt;$ valac p12.vala -X -lm &amp;&amp; ./p12&lt;br /&gt;Answer: 76576500&lt;br /&gt;2^2*3^2*5^3*7*11*13*17=76576500&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-1250757413594517796?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/1250757413594517796/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=1250757413594517796' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1250757413594517796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1250757413594517796'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/08/project-euler-problem-12.html' title='Project Euler - Problem 12'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-3994364414846578581</id><published>2011-07-24T22:50:00.004+08:00</published><updated>2011-07-25T15:28:59.140+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>關於 uptime 的一些小事</title><content type='html'>在 GNU/Linux 系統底下如果想要知道電腦開機後使用了多久的時間，可以直接打指令：&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ uptime&lt;br /&gt; 22:35:06 up  6:26,  4 users,  load average: 0.00, 0.03, 0.05&lt;br /&gt;&lt;/pre&gt;或是利用 /proc/uptime 來取得資料：&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ cat /proc/uptime &lt;br /&gt;23282.04 41316.79&lt;br /&gt;&lt;/pre&gt;但是如果想要寫 C 程式來取得資料呢？&lt;br /&gt;我找到一個在 &amp;lt;time.h&amp;gt; 裡面的函式 clock_gettime()&lt;br /&gt;程式碼如下：&lt;br /&gt;&lt;pre class="brush:c"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;time.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, char* argv[])&lt;br /&gt;{&lt;br /&gt;    struct timespec ts;&lt;br /&gt;    if (clock_gettime(CLOCK_MONOTONIC, &amp;amp;ts) == 0) {&lt;br /&gt;        printf("%ld.%ld\n", ts.tv_sec, ts.tv_nsec);&lt;br /&gt;    }&lt;br /&gt;    return 0;                                      &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;在編譯的時候要加上 -lrt 才能通過編譯&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ gcc -Wall -g -lrt uptime.c -o uptime&lt;br /&gt;&lt;/pre&gt;執行的結果&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ ./uptime &lt;br /&gt;23637.821285555&lt;br /&gt;&lt;/pre&gt;因為我想要在 XWindow 底下根據當下的開機時間，製造出新的 XKeyEvent 出來，而所有的 XEvent 都是使用毫秒的時間格式 (ex. 23637821)，所以才去找出這個的函式來用。&lt;br /&gt;詳細的使用說明可以看 manpage&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ man clock_gettime&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-3994364414846578581?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/3994364414846578581/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=3994364414846578581' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3994364414846578581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3994364414846578581'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/07/uptime.html' title='關於 uptime 的一些小事'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6071364992123946658</id><published>2011-07-12T13:28:00.004+08:00</published><updated>2011-07-12T18:36:21.221+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Package'/><title type='text'>使用 pbuilder-dist/cowbuilder-dist 協助編譯及打包 Debian package</title><content type='html'>在 Debian/Ubuntu 上面寫好程式並且打包成 Debian source package 之後，可以藉由 Launchpad 上的 PPA 服務來編譯打包成 Debian binary package 給 Ubuntu 的使用者使用，但是在 Debian 這邊目前還沒有像是 PPA 這樣的服務可以使用 (不過Debian 官方已經有計劃要做了)，於是現在就只能使用 pbuilder/cowbuilder 這樣工具來建立一個乾境的 chroot 環境來編譯打包 Debian binary package 給 Debian 的使用者使用。&lt;br /&gt;&lt;br /&gt;&lt;div&gt;最近發現在&amp;nbsp;ubuntu-dev-tools 裡面有&amp;nbsp;pbuilder-dist/cowbuilder-dist 這樣方便的工具，可以透過幾個簡單的指令就完成複雜的動作，雖然它的名稱叫做 ubuntu-dev-tools 其實它也是存在 Debian 官方套件庫裡面可以直接安裝來使用。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;例如在 Ubuntu 11.04 (amd64) 底下想要建立 Debian 6.0 squeeze (i386) 的 chroot 環境就可以使用以下的指令：&lt;/div&gt;&lt;pre class="brush:shell"&gt;$ pbuilder-dist stable i386 create&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;接下來要利用這個環境編譯 Debian 6.0 squeeze (i386) 底下使用的 pcmanx-gtk2，所以要執行以下的指令：&lt;/div&gt;&lt;pre class="brush: shell"&gt;$ pbuilder-dist stable i386 build pcmanx-gtk2_1.0-svn577-1~squeeze1.dsc&lt;/pre&gt;&lt;br /&gt;最後就可以在 ~/pbuilder/stable-i386_result/ 底下看到編譯好的&amp;nbsp;pcmanx-gtk2_1.0-svn577-1~squeeze1_i386.deb&lt;br /&gt;&lt;br /&gt;當然上面的 stable 在 Ubuntu 底下可以代換成 natty,maverick,lucid,...&amp;nbsp;(如果是要編譯打包&amp;nbsp;Ubuntu 發行套件)&amp;nbsp;或是 testing, unstable, experimental (如果是要編譯打包&amp;nbsp;Debian 發行套件)；另外就是 i386 可以代換成 amd64 如果搭配&amp;nbsp;qemubuilder 也許還可以編譯打包出&amp;nbsp;arm, mipsel, ... 其它 CPU 架構底下的套件出來使用。&lt;br /&gt;&lt;br /&gt;此次編譯出來給 Debian 6.0 squeeze i386/amd64 使用的 pcmanx-gtk2 放在&amp;nbsp;&lt;a href="http://fd.idv.tw/deb/"&gt;http://fd.idv.tw/deb/&lt;/a&gt;&amp;nbsp;底下。&lt;br /&gt;&lt;br /&gt;參考文件：&lt;a href="https://wiki.ubuntu.com/PbuilderHowto"&gt;https://wiki.ubuntu.com/PbuilderHowto&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6071364992123946658?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6071364992123946658/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6071364992123946658' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6071364992123946658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6071364992123946658'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/07/pbuilder-distcowbuilder-dist-debian.html' title='使用 pbuilder-dist/cowbuilder-dist 協助編譯及打包 Debian package'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-8674213442376176033</id><published>2011-06-08T12:48:00.004+08:00</published><updated>2011-06-08T13:10:39.503+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XWindow'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu 11.04 的外接顯示模式切換</title><content type='html'>在接上外接螢幕後，系統會自動切換到第一順位的狀態，也就是主要顯示為外接螢幕，而次要顯示變成筆記電腦本身的螢幕。&lt;br /&gt;&lt;br /&gt;Ubuntu 傳統桌面&lt;br /&gt;&lt;table border="1"&gt;&lt;thead&gt;&lt;tr align="center"&gt; &lt;th&gt;順位&lt;/th&gt; &lt;th&gt;主要顯示 (left)&lt;/th&gt; &lt;th&gt;次要顯示 (right)&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt; &lt;tbody&gt;&lt;tr align="center"&gt; &lt;td&gt;1&lt;/td&gt; &lt;td&gt;External&lt;/td&gt; &lt;td&gt;Laptop&lt;/td&gt; &lt;/tr&gt;&lt;tr align="center"&gt; &lt;td&gt;2&lt;/td&gt; &lt;td colspan="2"&gt;Mirror&lt;/td&gt; &lt;/tr&gt;&lt;tr align="center"&gt; &lt;td&gt;3&lt;/td&gt; &lt;td&gt;Laptop&lt;/td&gt; &lt;td&gt;External&lt;/td&gt; &lt;/tr&gt;&lt;tr align="center"&gt; &lt;td&gt;4&lt;/td&gt; &lt;td colspan="2"&gt;Laptop only&lt;/td&gt; &lt;/tr&gt;&lt;tr align="center"&gt; &lt;td&gt;5&lt;/td&gt; &lt;td colspan="2"&gt;External only&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;在按下 WIN + P 或顯示切換的功能鍵之後，在正常的情況下，會依照 1 =&amp;gt; 2 =&amp;gt; 3 =&amp;gt; 4 =&amp;gt; 5 =&amp;gt; 1 =&amp;gt; ... 的順序切換顯示模式。&lt;br /&gt;&lt;br /&gt;Unity 2D&lt;br /&gt;&lt;table border="1"&gt;&lt;thead&gt;&lt;tr align="center"&gt; &lt;th&gt;順位&lt;/th&gt; &lt;th&gt;主要顯示 (left)&lt;/th&gt; &lt;th&gt;次要顯示 (right)&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt; &lt;tbody&gt;&lt;tr align="center"&gt; &lt;td&gt;1&lt;/td&gt; &lt;td&gt;Laptop&lt;/td&gt; &lt;td&gt;External&lt;/td&gt; &lt;/tr&gt;&lt;tr align="center"&gt; &lt;td&gt;2&lt;/td&gt; &lt;td colspan="2"&gt;Mirror&lt;/td&gt; &lt;/tr&gt;&lt;tr align="center"&gt; &lt;td&gt;3&lt;/td&gt; &lt;td colspan="2"&gt;Laptop only&lt;/td&gt; &lt;/tr&gt;&lt;tr align="center"&gt; &lt;td&gt;4&lt;/td&gt; &lt;td colspan="2"&gt;External only&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Unity 不要問，很恐怖，現在還會是當掉。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-8674213442376176033?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/8674213442376176033/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=8674213442376176033' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8674213442376176033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8674213442376176033'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/06/ubuntu-1104.html' title='Ubuntu 11.04 的外接顯示模式切換'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-1985464993752512147</id><published>2011-04-13T14:48:00.000+08:00</published><updated>2011-04-13T14:48:05.829+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bazaar'/><category scheme='http://www.blogger.com/atom/ns#' term='Launchpad'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>使用 Ubuntu 套件的原始碼版本管理庫</title><content type='html'>&lt;p&gt;以 language-selector 為例，並且參考&lt;a href="http://fourdollars.blogspot.com/2010/11/bazaar.html"&gt;先前的介紹&lt;/a&gt;來建立 Shared repository&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ bzr init-repo language-selector&lt;br /&gt;$ cd language-selector&lt;br /&gt;&lt;/pre&gt;一般來說，想要拿到 Ubuntu 上面的最新開發中的版本，可以使用：&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ bzr branch lp:ubuntu/language-selector trunk&lt;/pre&gt;如果想要拿到 Ubuntu maverick 上面的開發版本就應該使用：&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ bzr branch lp:ubuntu/maverick/language-selector maverick&lt;/pre&gt;如果想要知道目前 Ubuntu 上面有哪些官方的開發版本的話可以使用 devscripts 套件中的 rmadison 來查詢&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ rmadison language-selector&lt;br /&gt;language-selector |     0.1.20 |        dapper | source, all                    &lt;br /&gt;language-selector |   0.1.20.1 | dapper-updates | source, all                   &lt;br /&gt;language-selector |      0.3.4 |         hardy | source, all                    &lt;br /&gt;language-selector |     0.4.18 |        karmic | source, all                    &lt;br /&gt;language-selector |      0.5.7 |         lucid | source, all                    &lt;br /&gt;language-selector |      0.5.8 | lucid-updates | source, all                    &lt;br /&gt;language-selector | 0.5.8+langfixes~lucid1 | lucid-backports | source, all      &lt;br /&gt;language-selector |      0.6.6 |      maverick | source, all                    &lt;br /&gt;language-selector | 0.6.6+langfixes~maverick1 | maverick-backports | source, all&lt;br /&gt;language-selector |       0.31 |         natty | source, all                    &lt;br /&gt;&lt;/pre&gt;假設想要使用 maverick-backports 當中的版本就可以使用：&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ bzr branch lp:ubuntu/maverick-backports/language-selector maverick-backports&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;另外，除了可以使用 `&lt;cite&gt;bzr branch&lt;/cite&gt;` 之外，還可以使用 `&lt;cite&gt;bzr checkout&lt;/cite&gt;` 來取得原始碼。&lt;br /&gt;使用 `&lt;cite&gt;bzr branch&lt;/cite&gt;` 在 `&lt;cite&gt;bzr commit&lt;/cite&gt;` 後，還要再使用 `&lt;cite&gt;bzr push&lt;/cite&gt;` 來將變動的部份提交到遠端的 Bazaar Repository 上面；&lt;br /&gt;而使用 `&lt;cite&gt;bzr checkout&lt;/cite&gt;` 的話，在 `&lt;cite&gt;bzr commit&lt;/cite&gt;` 的同時就會自動提交到遠端的 Bazaar Repository 上。&lt;br /&gt;無論是使用 `&lt;cite&gt;bzr branch&lt;/cite&gt;` 還是 `&lt;cite&gt;bzr checkout&lt;/cite&gt;` 都會將完整的變動歷史資料下載到本地端，如果想要像 Subversion 那樣只會取得最新的一筆資料可以使用 `&lt;cite&gt;bzr checkout --lightweight&lt;/cite&gt;` 來取得原始碼。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;想要知道目前處於哪一種模式 (branch/checkout/lightweight-checkout) 可以在該目錄下面執行&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ bzr info&lt;/pre&gt;如果是 lightwieght checkout 的話，應該會看到 `&lt;cite&gt;light checkout root&lt;/cite&gt;`&lt;br /&gt;如果是 checkout 的話，應該會看到 `&lt;cite&gt;repository checkout root&lt;/cite&gt;`&lt;br /&gt;如果上面兩個都沒有看到的話應該就是 branch 了&lt;br /&gt;&lt;/p&gt;&lt;p&gt;最後，如果想要在 branch 與 checkout 之間切換的話，就要使用 `&lt;cite&gt;bzr bind/unbind&lt;/cite&gt;`&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;參考資料：&lt;br /&gt;&lt;a href="http://wiki.inkscape.org/wiki/index.php/Working_with_Bazaar"&gt;http://wiki.inkscape.org/wiki/index.php/Working_with_Bazaar&lt;/a&gt;&lt;br /&gt;&lt;a href="https://wiki.ubuntu.com/DistributedDevelopment/Documentation/GettingTheSource"&gt;https://wiki.ubuntu.com/DistributedDevelopment/Documentation/GettingTheSource&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/14489808-1985464993752512147?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/1985464993752512147/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=1985464993752512147' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1985464993752512147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1985464993752512147'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/04/ubuntu.html' title='使用 Ubuntu 套件的原始碼版本管理庫'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-8423585511132357430</id><published>2011-03-25T12:34:00.002+08:00</published><updated>2011-03-25T12:40:23.153+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='GnuPG'/><title type='text'>加入 GnuPG 的信任簽章進自己的金鑰圈裡</title><content type='html'>&lt;p&gt;在 Debian: 17 years of Free Software,"do-ocracy", and democracy 活動當中&lt;br /&gt;跟現在的 Debian 計畫主持人 Stefano Zacchiroli 交換了金鑰指紋&lt;br /&gt;後來收到了 zack 寄來的信件，如果沒有弄錯，應該也是使用之前提到的 &lt;a href="http://fourdollars.blogspot.com/2009/08/caff-gpg-sign.html"&gt;caff&lt;/a&gt; 來弄的&lt;br /&gt;因為我的 GnuPG 金鑰上面列了六個 Email 地址，所以我也收到了六封信件裡的附加檔案&lt;br /&gt;&lt;pre class"brush: text"&gt;0xE9EC46F5A547F31E.1.signed-by-0xD5CA9B04F2C423BC.asc&lt;br /&gt;0xE9EC46F5A547F31E.2.signed-by-0xD5CA9B04F2C423BC.asc&lt;br /&gt;0xE9EC46F5A547F31E.3.signed-by-0xD5CA9B04F2C423BC.asc&lt;br /&gt;0xE9EC46F5A547F31E.4.signed-by-0xD5CA9B04F2C423BC.asc&lt;br /&gt;0xE9EC46F5A547F31E.5.signed-by-0xD5CA9B04F2C423BC.asc&lt;br /&gt;0xE9EC46F5A547F31E.6.signed-by-0xD5CA9B04F2C423BC.asc&lt;br /&gt;&lt;/pre&gt;然後下載 zack 的公鑰&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ gpg --recv-keys D5CA9B04F2C423BC&lt;br /&gt;&lt;/pre&gt;接者檢查 zack 的指紋是否跟我當天跟他交換的一致&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ gpg --fingerprint D5CA9B04F2C423BC&lt;br /&gt;pub   1024D/F2C423BC 2000-03-06&lt;br /&gt;      金鑰指紋 = 8156 FBF9 3EC1 D872 722D  3632 D5CA 9B04 F2C4 23BC&lt;br /&gt;uid                  Stefano Zacchiroli &amp;lt;zack@upsilon.cc&amp;gt;&lt;br /&gt;uid                  Stefano Zacchiroli &amp;lt;zack@debian.org&amp;gt;&lt;br /&gt;uid                  Stefano Zacchiroli &amp;lt;zack@cs.unibo.it&amp;gt;&lt;br /&gt;uid                  Stefano Zacchiroli &amp;lt;zack@pps.jussieu.fr&amp;gt;&lt;br /&gt;sub   4096g/E5B57D13 2008-07-19&lt;br /&gt;&lt;/pre&gt;確認一致後就可以將 zack 對我的信任簽章加進自己的金鑰圈裡面&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ gpg --import &lt; 0xE9EC46F5A547F31E.1.signed-by-0xD5CA9B04F2C423BC.asc&lt;br /&gt;$ gpg --import &lt; 0xE9EC46F5A547F31E.2.signed-by-0xD5CA9B04F2C423BC.asc&lt;br /&gt;$ gpg --import &lt; 0xE9EC46F5A547F31E.3.signed-by-0xD5CA9B04F2C423BC.asc&lt;br /&gt;$ gpg --import &lt; 0xE9EC46F5A547F31E.4.signed-by-0xD5CA9B04F2C423BC.asc&lt;br /&gt;$ gpg --import &lt; 0xE9EC46F5A547F31E.5.signed-by-0xD5CA9B04F2C423BC.asc&lt;br /&gt;$ gpg --import &lt; 0xE9EC46F5A547F31E.6.signed-by-0xD5CA9B04F2C423BC.asc&lt;br /&gt;&lt;/pre&gt;然後將 zack 對我的信任簽章上傳到金鑰伺服器 (讓其它人知道我的最新狀況)&lt;pre class="brush: shell"&gt;$ gpg --send-keys E9EC46F5A547F31E&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;另外在這次有用到指令，但不是必要的指令：&lt;/p&gt;&lt;p&gt;同步金鑰伺服器上的金鑰 (不然就不會知道其它人金鑰狀態的最新狀況)&lt;pre class="brush: shell"&gt;$ gpg --refresh-keys&lt;br /&gt;&lt;/pre&gt;然後查看自己目前的信任圈的狀態&lt;pre class="brush: shell"&gt;$ gpg --list-sigs E9EC46F5A547F31E&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;P.S. E9EC46F5A547F31E 是四元的金鑰指紋 D5CA9B04F2C423BC 是 zack 的金鑰指紋，使用時要自己代換成其它金鑰指紋，不可照抄執行。&lt;/p&gt;參考資料：&lt;a href="http://wiki.debian.org.tw/index.php/GnuPG"&gt;http://wiki.debian.org.tw/index.php/GnuPG&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-8423585511132357430?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/8423585511132357430/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=8423585511132357430' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8423585511132357430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8423585511132357430'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/03/gnupg.html' title='加入 GnuPG 的信任簽章進自己的金鑰圈裡'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6405072849170607579</id><published>2011-03-23T15:30:00.004+08:00</published><updated>2011-03-23T15:50:47.479+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PPA'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='LibreOffice'/><title type='text'>給 Ubuntu 10.04/10.10 使用的 LibreOffice PPA</title><content type='html'>&lt;a href="http://www.libreoffice.org"&gt;LibreOffice&lt;/a&gt; 已經出來一段時間了~ :P&lt;br /&gt;&lt;br /&gt;PPA 的位置在 &lt;a href="https://launchpad.net/~libreoffice/+archive/ppa"&gt;ppa:libreoffice/ppa&lt;/a&gt; 可以在軟體來源的其它軟體加上&lt;br /&gt;然後更新系統安裝 libreoffice 跟 libreoffice-l10n-zh-tw&lt;br /&gt;&lt;br /&gt;或是使用終端機介面輸入&lt;br /&gt;&lt;pre class="brush: shell"&gt;sudo add-apt-repository ppa:libreoffice/ppa&lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install libreoffice libreoffice-l10n-zh-tw&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;如果是 GNOME 使用者可以再安裝 libreoffice-gnome&lt;br /&gt;&lt;pre class="brush: shell"&gt;sudo apt-get install libreoffice-gnome&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;如果是 KDE 使用者可以再安裝 libreoffice-kde&lt;br /&gt;&lt;pre class="brush: shell"&gt;sudo apt-get install libreoffice-kde&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6405072849170607579?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6405072849170607579/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6405072849170607579' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6405072849170607579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6405072849170607579'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/03/ubuntu-10041010-libreoffice-ppa.html' title='給 Ubuntu 10.04/10.10 使用的 LibreOffice PPA'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6522747000065768807</id><published>2011-03-23T11:22:00.004+08:00</published><updated>2011-07-09T13:26:47.442+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PPA'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>給 Ubuntu 10.04/10.10 使用的 Firefox 5.0 PPA</title><content type='html'>&lt;a href="http://www.mozilla.com/zh-TW/firefox/"&gt;Firefox 5.0&lt;/a&gt; 出來啦~ Ubuntu 10.04/10.10 的使用者有 PPA 可以用喔~&lt;br /&gt;&lt;br /&gt;PPA 的位置在 &lt;a href="https://launchpad.net/~mozillateam/+archive/firefox-stable"&gt;ppa:mozillateam/firefox-stable&lt;/a&gt; 可以在軟體來源的其它軟體加上然後更新系統&lt;br /&gt;&lt;br /&gt;或是使用終端機介面輸入&lt;br /&gt;&lt;pre class="brush: shell"&gt;sudo add-apt-repository ppa:mozillateam/firefox-stable&lt;br /&gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;中文語言包也被 ppa:mozillateam/firefox-stable 包進去了，直接更新就可以使用了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6522747000065768807?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6522747000065768807/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6522747000065768807' title='4 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6522747000065768807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6522747000065768807'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/03/ubuntu-10041010-firefox-40-ppa.html' title='給 Ubuntu 10.04/10.10 使用的 Firefox 5.0 PPA'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-3084622366732057052</id><published>2011-03-21T15:17:00.001+08:00</published><updated>2011-04-07T21:57:52.647+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Automake'/><category scheme='http://www.blogger.com/atom/ns#' term='Autotools'/><title type='text'>使用 Automake 的 silent-rules 來簡化編譯過程的輸出訊息</title><content type='html'>使用前&lt;br /&gt;&lt;pre class="brush: shell; gutter: true; highlight: [4,5,6];"&gt;ubuntu@maverick:~/hello$ make&lt;br /&gt;make  all-am&lt;br /&gt;make[1]: Entering directory `/home/ubuntu/hello'&lt;br /&gt;gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT hello.o -MD -MP -MF .deps/hello.Tpo -c -o hello.o hello.c&lt;br /&gt;mv -f .deps/hello.Tpo .deps/hello.Po&lt;br /&gt;gcc  -g -O2   -o hello hello.o  &lt;br /&gt;make[1]: Leaving directory `/home/ubuntu/hello'&lt;br /&gt;&lt;/pre&gt;使用後&lt;br /&gt;&lt;pre class="brush: shell; gutter: true; highlight: [4,5];"&gt;ubuntu@maverick:~/hello$ make&lt;br /&gt;make  all-am&lt;br /&gt;make[1]: Entering directory `/home/ubuntu/hello'&lt;br /&gt;  CC     hello.o&lt;br /&gt;  CCLD   hello&lt;br /&gt;make[1]: Leaving directory `/home/ubuntu/hello'&lt;br /&gt;&lt;/pre&gt;使用方法，修改 configure.ac 加入 silent-rules 以及 AM_SILENT_RULES&lt;br /&gt;&lt;pre class="brush: text"&gt;...&lt;br /&gt;AM_INIT_AUTOMAKE([silent-rules])&lt;br /&gt;AM_SILENT_RULES&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;然候在編譯前的設定執行&lt;br /&gt;&lt;pre class="brush: shell"&gt;./configure --enable-silent-rules&lt;br /&gt;&lt;/pre&gt;或是預設打開 silent-rules&lt;br /&gt;&lt;pre class="brush: text"&gt;AM_SILENT_RULES([yes])&lt;br /&gt;&lt;/pre&gt;參考資料 &lt;a href="http://www.gnu.org/software/hello/manual/automake/Options.html"&gt;http://www.gnu.org/software/hello/manual/automake/Options.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-3084622366732057052?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/3084622366732057052/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=3084622366732057052' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3084622366732057052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3084622366732057052'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/03/automake-silent-rules.html' title='使用 Automake 的 silent-rules 來簡化編譯過程的輸出訊息'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-2820575309595487002</id><published>2011-03-18T13:36:00.001+08:00</published><updated>2011-03-18T13:43:37.060+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>Debian local archives 本地端 deb 檔案庫</title><content type='html'>有時候會需要將某些特別的 Debian 套件以及其相依的 Debian 套件透過網路先行下載回來&lt;br /&gt;等到之後沒有網路的狀態下再依需求來安裝那些 Debian 套件&lt;br /&gt;&lt;br /&gt;平常在使用 apt-get/aptitude/... 來安裝 Debian 套件時&lt;br /&gt;系統預設會將那些套件檔案下載放到 /var/cache/apt/archives/ 底下再來安裝&lt;br /&gt;但是也可以只下載但是不安裝，像是&lt;br /&gt;&lt;pre class="brush: shell"&gt;# apt-get install -d eclipse&lt;br /&gt;&lt;/pre&gt;就可以將安裝 eclipse 所需要的套件先下載回來&lt;br /&gt;&lt;br /&gt;然候可以用下面的指令製作一個 local archive&lt;br /&gt;&lt;pre class="brush: shell"&gt;# mkdir -p /some/where/out/there&lt;br /&gt;# mv /var/cache/apt/archives/*.deb /some/where/out/there&lt;br /&gt;# cd /some/where/out/there&lt;br /&gt;# apt-ftparchive packages . | gzip -n9 &gt; Packages.gz&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;如果要使用這個 local archive 就可以將 /etc/apt/sources.list 改成&lt;br /&gt;(其它來源先註解起來或是更改原本的檔案名稱)&lt;br /&gt;&lt;pre class="brush: text"&gt;deb file:///some/where/out/there /&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;然後之後等到沒有網路的時候，就可以用 apt-get update &amp;&amp; apt-get install eclipse 來安裝了。&lt;br /&gt;&lt;br /&gt;又或者在有區域網路的情況下，使用下面的指令分享給區域網路內的其它人使用&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ cd /some/where/out/there&lt;br /&gt;$ python -m SimpleHTTPServer&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;只不過 /etc/apt/sources.list 的內容應該要換成類似下面這樣的內容&lt;br /&gt;&lt;pre class="brush: text"&gt;deb http://192.168.1.1:8000 /&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-2820575309595487002?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/2820575309595487002/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=2820575309595487002' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2820575309595487002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2820575309595487002'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/03/debian-local-archives-deb.html' title='Debian local archives 本地端 deb 檔案庫'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-3080369004044411131</id><published>2011-02-11T18:39:00.009+08:00</published><updated>2011-07-07T18:04:39.150+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Preseed'/><category scheme='http://www.blogger.com/atom/ns#' term='Installation'/><title type='text'>$4 的 Debian 6.0 自動化安裝</title><content type='html'>&lt;b&gt;製作可開機安裝 Debian 6.0 的 USB Stick&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;首先去下載 &lt;a href="http://cdimage.debian.org/debian-cd/current/i386/iso-cd/"&gt;debian-6.0.2.1-i386-businesscard.iso&lt;/a&gt; (46M) 回來&lt;br /&gt;然後再準備一個 USB Stick 接上電腦，如果 mount 在 Linux 系統上的話記得先 umount 掉&lt;br /&gt;以 root 權限執行 (這裡假設 USB Stick 的 Device Node 位於 /dev/sdc) &lt;pre class="brush:shell"&gt;# cat debian-6.0.2.1-i386-businesscard.iso &gt; /dev/sdc&lt;/pre&gt;這樣就可以製作出可開機安裝 Debian 6.0 的 USB Stick 沒錯就是這樣製作的&lt;br /&gt;這是 Debian 6.0 以後的新功能 hybrid CD/DVD image 不過只有在 i386/amd64 上面有作用&lt;br /&gt;&lt;br /&gt;&lt;b&gt;準備好要安裝的電腦跟可以透過有線網路 DHCP 上網的網路環境&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;現在這隻 USB Stick 可以接上任何可以使用 USB Stick 開機的電腦上開機就會看到：&lt;br /&gt;&lt;img src="https://lh6.googleusercontent.com/_cYaJquZOLiw/TVUKjXVDKCI/AAAAAAAAED4/9l5XKfFq4W8/s800/help.png" alt="Select Help"/&gt;&lt;br /&gt;&lt;br /&gt;進去之後&lt;br /&gt;&lt;img src="https://lh4.googleusercontent.com/_cYaJquZOLiw/TVUKLc0d_8I/AAAAAAAAEDk/Lg_o9GC1FCs/s800/boot.png" alt="Inside Help"/&gt;&lt;br /&gt;&lt;br /&gt;輸入 &lt;pre class="brush:shell"&gt;auto url=fd.idv.tw&lt;/pre&gt;&lt;img src="https://lh3.googleusercontent.com/_cYaJquZOLiw/TVUKLCWh7tI/AAAAAAAAEDg/Gcy2ClCz0_o/s800/auto.png" alt="auto url=fd.idv.tw"&gt;&lt;br /&gt;&lt;br /&gt;然後就是等 Debian 6.0 自動安裝完就會自動關機，這樣就把 Debian 6.0 安裝好了。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;接下來是開機展示&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;GRUB 的畫面 &lt;img src="https://lh5.googleusercontent.com/_cYaJquZOLiw/TVUKjWG2SPI/AAAAAAAAED0/AcRAAPSc1nk/s800/grub.png" alt="GRUB"/&gt;&lt;br /&gt;&lt;br /&gt;開機動畫 &lt;img src="https://lh3.googleusercontent.com/_cYaJquZOLiw/TVUKLsKLzJI/AAAAAAAAEDo/4I2gLWs_hFM/s800/bootup.png" alt="plymouth"/&gt;&lt;br /&gt;&lt;br /&gt;進入 GDM 了 &lt;img src="https://lh4.googleusercontent.com/_cYaJquZOLiw/TVUKLnxsdUI/AAAAAAAAEDs/ugu7YkZ07jQ/s800/gdm.png" alt="GDM"/&gt;&lt;br /&gt;&lt;br /&gt;輸入預設的密碼 &lt;pre class="brush:shell"&gt;debian&lt;/pre&gt;&lt;img src="https://lh5.googleusercontent.com/_cYaJquZOLiw/TVUKjgm1lwI/AAAAAAAAED8/GI4xfTs4otw/s800/login.png" alt="Login"/&gt;&lt;br /&gt;&lt;br /&gt;進入安裝好的 GNOME 桌面環境 &lt;img src="https://lh4.googleusercontent.com/_cYaJquZOLiw/TVUKL1TDHbI/AAAAAAAAEDw/szwWmLi_y_E/s800/gnome.png" alt=GNOME"/&gt;&lt;br /&gt;&lt;br /&gt;關機時也會有關機動畫 &lt;img src="https://lh5.googleusercontent.com/_cYaJquZOLiw/TVUKjk1defI/AAAAAAAAEEA/adGTsilcSUU/s800/poweroff.png" alt="poweroff"/&gt;&lt;br /&gt;&lt;br /&gt;這個環境是按照 $4 個人的喜好所打造的，所以不一定會符合所有人的使用習慣，&lt;br /&gt;像是 $4 喜歡使用酷音裡面的單純注音模式，不喜歡有 3D 桌面效果，&lt;br /&gt;中文字型喜歡用 AR PL UMing 字型，英文喜歡使用 Droid 字型，&lt;br /&gt;網頁瀏覽器喜歡用 Google Chrome，並且加入了 Iceweasel 5.0 (Firefox 5.0)。&lt;br /&gt;&lt;br /&gt;想要打造自己的 Debian 6.0 自動化安裝可以參考官方文件 &lt;a href="http://www.debian.org/releases/squeeze/i386/apb.html.en"&gt;Appendix B. Automating the installation using preseeding&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;而 $4 製作的腳本都放在 &lt;a href="http://fd.idv.tw/d-i/"&gt;http://fd.idv.tw/d-i/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;另外弄了一個半自動的安裝，讓使用者可以自己決定帳號密碼跟分割磁區。&lt;br /&gt;&lt;pre class="brush: text"&gt;auto url=http://fd.idv.tw/d-i/squeeze/manual.cfg&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-3080369004044411131?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/3080369004044411131/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=3080369004044411131' title='4 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3080369004044411131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3080369004044411131'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/02/4-debian-60.html' title='$4 的 Debian 6.0 自動化安裝'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/_cYaJquZOLiw/TVUKjXVDKCI/AAAAAAAAED4/9l5XKfFq4W8/s72-c/help.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-8945309892490998357</id><published>2011-02-05T22:54:00.000+08:00</published><updated>2011-02-05T22:54:19.832+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='Radio'/><title type='text'>Taiwan Radio Tuner v0.9 釋出</title><content type='html'>&lt;a href="https://chrome.google.com/webstore/detail/hacebidkncpkfenhpapdbkcefalehepa"&gt;Taiwan Radio Tuner&lt;/a&gt; 是一個 Google Chrome Extension 的網路廣播選台器&lt;br /&gt;v0.9 Upgrade jQuery to 1.5 and add ending timer.&lt;br /&gt;&lt;br /&gt;線上版在 &lt;a href="http://fd.idv.tw/radio/"&gt;http://fd.idv.tw/radio/&lt;/a&gt; 特色是跨平台 Windows / Mac / Linux&lt;br /&gt;支援主流的網頁瀏灠器 IE / Firefox / Safari / Google Chrome / Opera&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-8945309892490998357?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/8945309892490998357/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=8945309892490998357' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8945309892490998357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8945309892490998357'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/02/taiwan-radio-tuner-v09.html' title='Taiwan Radio Tuner v0.9 釋出'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-2404914029146009259</id><published>2011-01-31T16:15:00.002+08:00</published><updated>2011-01-31T16:17:57.704+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Package'/><title type='text'>Debian Package - 什麼是 Debian Native Package？</title><content type='html'>&lt;b&gt;要怎麼去辨別一個 Debian 套件是否為一個 Debian native package 呢？&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;最簡單方法就是判斷有沒有 &lt;a href="http://fourdollars.blogspot.com/2010/06/debian-package-5.html"&gt;(5) - 版本號碼&lt;/a&gt; 當中提到的 debian_version&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b style="align: center;"&gt;[epoch:]upstream_version[-debian_revision]&lt;/b&gt;&lt;/div&gt;如果 Debian 套件的版號沒有看到 debian_version 的部份，那麼它就是一個 Debian native package&lt;br /&gt;&lt;br /&gt;那麼接下來問題應該是...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;怎樣的套件才可以成為一個 Debian native package？&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;其實就是該套件只為了 Debian 系統而製作的。&lt;br /&gt;在終端機下輸入以下指令&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ dpkg-query -W | awk '{ if ($2 !~ /-/) print $0; }'&lt;/pre&gt;就可以看到系統上目前裝了哪些 Debian native package&lt;br /&gt;&lt;br /&gt;舉個例子&lt;br /&gt;&lt;pre class="brush: plain"&gt;Package: cdbs&lt;br /&gt;...&lt;br /&gt;Version: 0.4.62+nmu1ubuntu9&lt;br /&gt;...&lt;br /&gt;Description: common build system for Debian packages&lt;br /&gt; This package contains the Common Debian Build System, an abstract&lt;br /&gt; build system based on Makefile inheritance which is completely&lt;br /&gt; extensible and overridable.  In other words, CDBS provides a sane set&lt;br /&gt; of default rules upon which packages can build; any or all rules may&lt;br /&gt; be overridden as needed.&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;這個 Debian 套件就是用來製作 Debian 套件的工具之一，所以它只能使用在 Debian 系統上面，像這樣的套件就一定是 Debian native package&lt;br /&gt;&lt;br /&gt;相反的，如果你所製作的 Debian 套件並不限於只使用在 Debian 系統上面的話，請不要用 Debian native package 的版號命名規則，也就是不要省略掉 debian_version，如果想要上傳套件至 Debian 官方套件庫裡面，這點一定要注意一下。&lt;br /&gt;&lt;br /&gt;另外如果你就是上游的軟體開發者，即使軟體本身在製作時就已經順便做好 Debian 套件的相關工作，也不要在釋出 source code tar ball 裡面包含 debian 這個目錄。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-2404914029146009259?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/2404914029146009259/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=2404914029146009259' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2404914029146009259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2404914029146009259'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/01/debian-package-6-debian-native-package.html' title='Debian Package - 什麼是 Debian Native Package？'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-2401675890190420713</id><published>2011-01-31T10:52:00.000+08:00</published><updated>2011-01-31T10:52:03.239+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IRC'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>一個好用的 irssi plugin - irssi-libnotify</title><content type='html'>irssi 是一個在終端機文字模式下面連 IRC 的工具&lt;br /&gt;通常 irssi 的使用方式是搭配 screen 或是 tmux&lt;br /&gt;然後找一台一直開著 BSD/Linux 主機在上面掛著&lt;br /&gt;不過也有的人用久了即使是在本機上面使用也是開 irssi&lt;br /&gt;然後就會開始想著有沒有辦法在別人丟你訊息的時候能夠在桌面上跳出通知&lt;br /&gt;&lt;a href="http://code.google.com/p/irssi-libnotify/"&gt;irssi-libnotify&lt;/a&gt; 就是這樣的工具&lt;br /&gt;在 GNU/Linux 上面使用要另外搭配 notify-send 這個指令&lt;br /&gt;如果使在 Ubuntu 上面就是直接安裝 libnotify-bin 這個套件&lt;br /&gt;&lt;br /&gt;首先把 notify.pl 裝進 .irssi/scripts/ 底下&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ mkdir -p ~/.irssi/scripts/&lt;br /&gt;$ wget http://irssi-libnotify.googlecode.com/svn/trunk/notify.pl -O ~/.irssi/scripts/notify.pl&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;使用方法是在 irssi 啟動後輸入&lt;br /&gt;&lt;pre class="brush: shell"&gt;/load perl&lt;br /&gt;/script load notify&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;這樣之後當別人丟訊息的時候就會收到桌面通知了~ :)&lt;br /&gt;&lt;br /&gt;P.S. 目前有中文亂碼的問題&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-2401675890190420713?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/irssi-libnotify/' title='一個好用的 irssi plugin - irssi-libnotify'/><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/2401675890190420713/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=2401675890190420713' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2401675890190420713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2401675890190420713'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/01/irssi-plugin-irssi-libnotify.html' title='一個好用的 irssi plugin - irssi-libnotify'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-3203167381047270985</id><published>2011-01-05T00:27:00.001+08:00</published><updated>2011-01-05T00:31:38.436+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vala'/><category scheme='http://www.blogger.com/atom/ns#' term='BetaRadio'/><title type='text'>BetaRadio v1.2 釋出</title><content type='html'>功能跟 v1.1 一樣沒有改變，不過程式碼完全使用 Vala 重寫一遍。&lt;br /&gt;原始碼下載：&lt;a href="http://betaradio.googlecode.com/files/betaradio-1.2.tar.bz2"&gt;http://betaradio.googlecode.com/files/betaradio-1.2.tar.bz2&lt;/a&gt;&lt;br /&gt;編譯方法請參考 &lt;a href="http://code.google.com/p/betaradio/wiki/InstallationFromSourceCode"&gt;http://code.google.com/p/betaradio/wiki/InstallationFromSourceCode&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PPA for Ubuntu 9.10/10.04/10.10&lt;/b&gt;&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ sudo add-apt-repository ppa:fourdollars/betaradio&lt;br /&gt;$ sudo apt-get update&lt;br /&gt;$ sudo apt-get install betaradio&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-3203167381047270985?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/3203167381047270985/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=3203167381047270985' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3203167381047270985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3203167381047270985'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2011/01/betaradio-v12.html' title='BetaRadio v1.2 釋出'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-3221880002362409838</id><published>2010-12-19T21:34:00.001+08:00</published><updated>2010-12-20T12:36:14.468+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>在 Mac OS X 10.4.11 上使用 MacPorts 1.9.1 來建立 Perl 以及 Python 的開發環境</title><content type='html'>在安裝 &lt;a href="http://www.macports.org/"&gt;MacPorts&lt;/a&gt; 1.9.1 之前要把 Xcode 裝好&lt;br /&gt;然後去下載 &lt;a href="http://distfiles.macports.org/MacPorts/MacPorts-1.9.1-10.4-Tiger.dmg"&gt;MacPorts 1.9.1&lt;/a&gt; 來安裝&lt;br /&gt;之後再使用 root 權限執行下面這段 script 就大功告成啦~ :D&lt;br /&gt;&lt;a href="https://gist.github.com/747325"&gt;gist: 747325&lt;/a&gt;&lt;br /&gt;&lt;pre class="brush: shell"&gt;#! /bin/bash&lt;br /&gt;# Shih-Yuan Lee (FourDollars) &amp;lt;fourdollars@gmail.com&amp;gt;&lt;br /&gt;# Mac OS X 10.4.11 + MacPorts 1.9.1 -- 2010/12/19&lt;br /&gt;&lt;br /&gt;set -e -x&lt;br /&gt;&lt;br /&gt;# Upgrade MacPorts&lt;br /&gt;port selfupdate&lt;br /&gt;port upgrade outdated || (port deactivate subversion &amp;amp;&amp;amp; port clean subversion &amp;amp;&amp;amp; port install subversion)&lt;br /&gt;&lt;br /&gt;# Install Perl&lt;br /&gt;port install perl5 +perl5_12&lt;br /&gt;&lt;br /&gt;# Install Python&lt;br /&gt;port install python27 +no_tkinter&lt;br /&gt;port install python_select&lt;br /&gt;python_select python27&lt;br /&gt;&lt;br /&gt;# Install Vim&lt;br /&gt;port install vim +perl +python27&lt;br /&gt;&lt;br /&gt;# Install Git&lt;br /&gt;port install git-core +python27&lt;br /&gt;&lt;br /&gt;# Clean&lt;br /&gt;port -u uninstall&lt;br /&gt;&lt;/pre&gt;以上這段 script 安裝了 perl/python/vim/git&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-3221880002362409838?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/3221880002362409838/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=3221880002362409838' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3221880002362409838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3221880002362409838'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/12/mac-os-x-10411-macports-191-perl-python.html' title='在 Mac OS X 10.4.11 上使用 MacPorts 1.9.1 來建立 Perl 以及 Python 的開發環境'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-5872425923154877545</id><published>2010-12-17T15:59:00.000+08:00</published><updated>2010-12-17T15:59:41.524+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Extension'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='Radio'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Taiwan Radio Tuner 小更新 - 新增學術電台分類</title><content type='html'>&lt;div&gt;線上版 &lt;a href="http://fd.idv.tw/radio/"&gt;http://fd.idv.tw/radio/&lt;/a&gt; 以及 Google Chrome Extension - &lt;a href="https://chrome.google.com/extensions/detail/hacebidkncpkfenhpapdbkcefalehepa"&gt;Taiwan Radio Tuner&lt;/a&gt; 都加入了學術電台的新分類&lt;/div&gt;&lt;br /&gt;&lt;div&gt;目前只有三個學術電台，分別是&lt;br /&gt;&lt;ul&gt;&lt;li&gt;PTT Radio - PTT Radio 網路電台&lt;/li&gt;&lt;li&gt;PTT Radio - OnlyMayDay&lt;/li&gt;&lt;li&gt;THBS - 清華大學校園電台&lt;/li&gt;&lt;/ul&gt;往後還會陸陸續續增加更多台灣的學術電台，歡迎提供資訊。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-5872425923154877545?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/5872425923154877545/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=5872425923154877545' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5872425923154877545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5872425923154877545'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/12/taiwan-radio-tuner.html' title='Taiwan Radio Tuner 小更新 - 新增學術電台分類'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-3233179663615008296</id><published>2010-11-24T14:00:00.000+08:00</published><updated>2010-11-24T14:00:17.312+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bazaar'/><category scheme='http://www.blogger.com/atom/ns#' term='Launchpad'/><title type='text'>Bazaar 的分支使用方式</title><content type='html'>Bazaar 的分支使用方式與 Mercurial 跟 Git 都不太一樣&lt;br /&gt;它比較類似 Subversion 的使用方式以下是簡單的示範&lt;br /&gt;&lt;br /&gt;首先要建立一個 shared repository&lt;br /&gt;&lt;pre class="brush: shell"&gt;~$ bzr init-repository hello&lt;/pre&gt;&lt;br /&gt;然後在 hello 這個目錄底下再建立個別的 branch 目錄&lt;br /&gt;&lt;pre class="brush: shell"&gt;~/hello$ bzr init trunk&lt;/pre&gt;&lt;br /&gt;或是直接從遠端拉變更資料回來&lt;br /&gt;&lt;pre class="brush: shell"&gt;~/hello$ bzr branch lp:ubuntu/hello trunk&lt;/pre&gt;&lt;br /&gt;如果是要做本地端分支的話，要再建立另一個新的目錄 (這邊有點類似使用 svn copy 的分支方式)&lt;br /&gt;&lt;pre class="brush: shell"&gt;~/hello$ bzr branch trunk my-branch&lt;/pre&gt;&lt;br /&gt;如果是要建立遠端的分支的話，則是利用 Launchpad 提供的服務&lt;br /&gt;&lt;pre class="brush: shell"&gt;~/hello/my-branch$ bzr push lp:~fourdollars/hello/my-branch&lt;/pre&gt;&lt;br /&gt;所以 Bazaar 的缺點是不像 Mercurial 跟 Git 那樣在一次的 clone 之後就可以將所有的分支都抓下來了，但是另外的好處就是由 Launchpad 提供的整合介面，讓 Patch Provider 也可以透過 Launchpad 來提 Merge Request，而 Reviewer 只要在 Launchpad 上面點一下 Accept 就可以自動 merge 了，這樣反而省下了許多指令的使用，至於是好是壞則是見仁見智囉。&lt;br /&gt;&lt;br /&gt;參考資料：&lt;a href="http://wiki.inkscape.org/wiki/index.php/Working_with_Bazaar"&gt;http://wiki.inkscape.org/wiki/index.php/Working_with_Bazaar&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-3233179663615008296?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/3233179663615008296/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=3233179663615008296' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3233179663615008296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3233179663615008296'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/11/bazaar.html' title='Bazaar 的分支使用方式'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-5830891933362157732</id><published>2010-10-09T14:07:00.001+08:00</published><updated>2010-10-09T14:35:25.488+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vala'/><category scheme='http://www.blogger.com/atom/ns#' term='Autotools'/><category scheme='http://www.blogger.com/atom/ns#' term='GTK+'/><title type='text'>使用 GNU Build System 管理用 Vala 寫的 GTK+ 程式</title><content type='html'>延續先前的文章『&lt;a href="http://fourdollars.blogspot.com/2010/10/gnu-build-system-aka-autotools-vala.html"&gt;使用 GNU Build System (aka Autotools) 來管理 Vala 編譯流程&lt;/a&gt;』&lt;br /&gt;&lt;br /&gt;首先準備好 GTK+ 的 Vala 原始碼檔案 MyApp.vala&lt;br /&gt;&lt;pre class="brush: c-sharp"&gt;using Gtk;&lt;br /&gt;&lt;br /&gt;namespace ValaTutorial&lt;br /&gt;{&lt;br /&gt;    class MyApp : Gtk.Window&lt;br /&gt;    {&lt;br /&gt;        public MyApp ()&lt;br /&gt;        {&lt;br /&gt;            var button = new Button.with_label ("Click me!");&lt;br /&gt;            add (button);&lt;br /&gt;&lt;br /&gt;            button.clicked.connect (on_clicked);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void on_clicked (Gtk.Button button)&lt;br /&gt;        {&lt;br /&gt;            stdout.printf ("Ouch!\n");&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public static int main (string[] args)&lt;br /&gt;        {                                                    &lt;br /&gt;            Gtk.init (ref args);&lt;br /&gt;&lt;br /&gt;            var app = new MyApp ();&lt;br /&gt;            app.show_all ();&lt;br /&gt;&lt;br /&gt;            app.destroy.connect (Gtk.main_quit);&lt;br /&gt;&lt;br /&gt;            Gtk.main ();&lt;br /&gt;            return 0;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;然後再準備一個 Makefile.am&lt;br /&gt;&lt;pre class="brush: shell; gutter: true; highlight: [1, 8];"&gt;# AM_VALAFLAGS = --pkg gtk+-2.0            &lt;br /&gt;&lt;br /&gt;bin_PROGRAMS = MyApp&lt;br /&gt;&lt;br /&gt;MyApp_SOURCES = MyApp.vala&lt;br /&gt;MyApp_CPPFLAGS = @GTK_CFLAGS@&lt;br /&gt;MyApp_LDFLAGS = @GTK_LIBS@&lt;br /&gt;MyApp_VALAFLAGS = --pkg gtk+-2.0&lt;br /&gt;&lt;/pre&gt;第 1,8 行是 Vala 使用外部函式庫時需要的參數，視實際需求選擇使用&lt;br /&gt;效果相當於&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ valac --pkg gtk+2.0 MyApp.vala&lt;/pre&gt;最後是自動產生並修改過後的 configure.ac&lt;br /&gt;&lt;pre class="brush: shell; gutter: true; highlight: [14];"&gt;#                                               -*- Autoconf -*-&lt;br /&gt;# Process this file with autoconf to produce a configure script.&lt;br /&gt;&lt;br /&gt;AC_PREREQ([2.65])&lt;br /&gt;AC_INIT([hello], [0.0], [foo@bar.com])&lt;br /&gt;&lt;br /&gt;AM_INIT_AUTOMAKE([-Wall -Werror foreign])&lt;br /&gt;&lt;br /&gt;# Checks for programs.&lt;br /&gt;AC_PROG_CC&lt;br /&gt;AM_PROG_VALAC([0.8.0])&lt;br /&gt;&lt;br /&gt;# Checks for libraries.&lt;br /&gt;AM_PATH_GTK_2_0                                                 &lt;br /&gt;&lt;br /&gt;# Checks for header files.&lt;br /&gt;&lt;br /&gt;# Checks for typedefs, structures, and compiler characteristics.&lt;br /&gt;&lt;br /&gt;# Checks for library functions.&lt;br /&gt;&lt;br /&gt;AC_CONFIG_FILES([Makefile])&lt;br /&gt;AC_OUTPUT&lt;br /&gt;&lt;/pre&gt;第 14 行會產生出 Makefile.am 所需要的 @GTK_CFLAGS@ 及 @GTK_LIBS@&lt;br /&gt;最後就是一般 GNU Build System 慣用的指令&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ autoreconf -if&lt;br /&gt;$ ./configure&lt;br /&gt;$ make&lt;br /&gt;&lt;/pre&gt;參考資料：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.vimeo.com/9617309"&gt;Gtk+ Kick-Start Tutorial for Vala&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://live.gnome.org/Vala/Tutorial"&gt;Vala Tutorial&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-5830891933362157732?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/5830891933362157732/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=5830891933362157732' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5830891933362157732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5830891933362157732'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/10/gnu-build-system-vala-gtk.html' title='使用 GNU Build System 管理用 Vala 寫的 GTK+ 程式'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-1288931311706436945</id><published>2010-10-08T17:39:00.002+08:00</published><updated>2010-10-09T00:12:09.709+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vala'/><category scheme='http://www.blogger.com/atom/ns#' term='Autotools'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>使用 GNU Build System (aka Autotools) 來管理 Vala 編譯流程</title><content type='html'>首先要先安裝好需要的軟體套件&lt;br /&gt;&lt;br /&gt;以 Ubuntu 10.04 為例&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ sudo apt-get install autoconf automake pkg-config valac vim&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ubuntu 10.04 上面的 Vim 並沒有提供 Vala 的語法著色&lt;br /&gt;還好官方網站上面已經有提供了 &lt;a href="http://live.gnome.org/Vala/Vim"&gt;Vala/Vim&lt;/a&gt;&lt;br /&gt;照著做一遍就好了&lt;br /&gt;&lt;br /&gt;準備一個的 hello world 原始碼檔案 hello.vala&lt;br /&gt;&lt;pre class="brush: js"&gt;void main() {&lt;br /&gt;    stdout.printf("Hello world\n");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;接者寫一個 Makefile.am &lt;br /&gt;&lt;pre class="brush: shell"&gt;bin_PROGRAMS = hello&lt;br /&gt;hello_SOURCES = hello.vala&lt;br /&gt;hello_CPPFLAGS = @GLIB_CFLAGS@&lt;br /&gt;hello_LDFLAGS = @GLIB_LIBS@&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;然後將 autoscan 產生出來的 configure.scan 更名為 configure.ac&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ autoscan&lt;br /&gt;$ mv configure.scan configure.ac&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;再修改成下面這樣&lt;br /&gt;&lt;pre class="brush: shell; gutter: true; highlight: [7, 10, 11, 14]"&gt;#                                               -*- Autoconf -*-&lt;br /&gt;# Process this file with autoconf to produce a configure script.&lt;br /&gt;&lt;br /&gt;AC_PREREQ(2.65)&lt;br /&gt;AC_INIT([hello],[0.0],[foo@bar.com])&lt;br /&gt;&lt;br /&gt;AM_INIT_AUTOMAKE([-Wall -Werror foreign])&lt;br /&gt;&lt;br /&gt;# Checks for programs.&lt;br /&gt;AC_PROG_CC&lt;br /&gt;AM_PROG_VALAC([0.8.0])&lt;br /&gt;&lt;br /&gt;# Checks for libraries.&lt;br /&gt;AM_PATH_GLIB_2_0(,,,[gobject])                                  &lt;br /&gt;&lt;br /&gt;# Checks for header files.&lt;br /&gt;&lt;br /&gt;# Checks for typedefs, structures, and compiler characteristics.&lt;br /&gt;&lt;br /&gt;# Checks for library functions.&lt;br /&gt;&lt;br /&gt;AC_CONFIG_FILES([Makefile])&lt;br /&gt;AC_OUTPUT&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;第 7 行的&lt;br /&gt;&lt;pre class="brush: shell"&gt;AM_INIT_AUTOMAKE([-Wall -Werror foreign])&lt;/pre&gt;會產生一些處理 Makefile.am 的工具出來&lt;br /&gt;&lt;br /&gt;第 10 行的&lt;br /&gt;&lt;pre class="brush: shell"&gt;AC_PROG_CC&lt;/pre&gt;會檢查 C Compiler 因為 Vala 最終還是會產生 C 的原始檔案&lt;br /&gt;&lt;br /&gt;第 11 行的&lt;br /&gt;&lt;pre class="brush: shell"&gt;AM_PROG_VALAC([0.8.0])&lt;/pre&gt;當然就是檢查這篇文章的主角 Vala 囉&lt;br /&gt;&lt;br /&gt;第 14 行的&lt;br /&gt;&lt;pre class="brush: shell"&gt;AM_PATH_GLIB_2_0(,,,[gobject])&lt;/pre&gt;會產生出在 Makefile.am 所使用的 @GLIB_CFLAGS@ 跟 @GLIB_LIBS@&lt;br /&gt;還有會使用到 glib 裡面的 gobject 這個 module&lt;br /&gt;&lt;br /&gt;接下來就如同一般的 GNU Build System (aka Autotools) 的慣用方法&lt;br /&gt;使用以下命令來產生 configure 腳本檔案&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ autoreconf -if&lt;/pre&gt;&lt;br /&gt;然後就是 ./configure &amp;&amp; make &amp;&amp; make install 這類常見的指令連續技囉~ :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-1288931311706436945?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/1288931311706436945/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=1288931311706436945' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1288931311706436945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1288931311706436945'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/10/gnu-build-system-aka-autotools-vala.html' title='使用 GNU Build System (aka Autotools) 來管理 Vala 編譯流程'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-1521599743531702924</id><published>2010-10-03T23:15:00.001+08:00</published><updated>2010-10-06T14:24:53.593+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BetaRadio'/><title type='text'>BetaRadio v1.1 正式釋出</title><content type='html'>此版新增的功能是可以透過網路新增播放清單&lt;br /&gt;簡單講就是 &lt;a href="http://code.google.com/p/betaradio/source/browse/trunk/utils/list.json"&gt;list.json&lt;/a&gt; 這個網路上的檔案裡面有多少清單就會看到多少清單&lt;br /&gt;另外修正了播放時會斷斷續續的問題&lt;br /&gt;&lt;br /&gt;Ubuntu 9.10/10.04/10.10 使用者可以直接使用命令列執行以下步驟 &lt;pre class="brush: shell"&gt;$ sudo add-apt-repository ppa:fourdollars/betaradio&lt;br /&gt;$ sudo apt-get update&lt;br /&gt;$ sudo apt-get install betaradio&lt;br /&gt;&lt;/pre&gt;來安裝&lt;br /&gt;&lt;br /&gt;至於其它的 GNU/Linux 系統就要請諸位大大們幫忙產生安裝套件囉~ &amp;lt;(_ _)&amp;gt;&lt;br /&gt;&lt;br /&gt;軟體原始碼下載 &lt;a href="http://betaradio.googlecode.com/files/betaradio-1.1.tar.bz2"&gt;betaradio-1.1.tar.bz2&lt;/a&gt; SHA1: 2768cfbb07dbc7d87b6f653645a00037629446ad&lt;br /&gt;編譯時會需要 libgtk2.0-dev libgstreamer0.10-dev libjson-glib-dev libsoup2.4-dev 這些套件&lt;br /&gt;執行時會需要 gstreamer0.10-plugins-good gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly gstreamer0.10-ffmpeg 這些套件&lt;br /&gt;&lt;br /&gt;祝大家玩得開心。:D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-1521599743531702924?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/1521599743531702924/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=1521599743531702924' title='5 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1521599743531702924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1521599743531702924'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/10/betaradio-v11.html' title='BetaRadio v1.1 正式釋出'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-299863393299393217</id><published>2010-09-27T22:17:00.001+08:00</published><updated>2010-09-27T22:53:14.154+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Package'/><title type='text'>Debian Package (6) - 使用 pbuilder - personal package builder 個人 Debian Package 製作工具</title><content type='html'>目標是編譯在 Ubuntu 10.04 上面使用的 Debian Package&lt;br /&gt;&lt;br /&gt;首先是安裝需要的軟體套件還有修正一些小問題&lt;br /&gt;&lt;pre class="brush: shell"&gt;sudo apt-get install pbuilder cowdancer ccache&lt;br /&gt;sudo mkdir -p /var/cache/ccache # To avoid error of "special device /var/cache/ccache does not exist"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;然後編輯設定檔 ~/.pbuilderrc 加入&lt;br /&gt;&lt;pre class="brush: text"&gt;MIRRORSITE=http://tw.archive.ubuntu.com/ubuntu/&lt;br /&gt;COMPONENTS="main restricted universe multiverse"&lt;br /&gt;DISTRIBUTION=lucid&lt;br /&gt;OTHERMIRROR="deb http://tw.archive.ubuntu.com/ubuntu/ lucid-security main restricted universe multiverse|deb http://tw.archive.ubuntu.com/ubuntu/ lucid-updates main restricted universe multiverse|deb http://tw.archive.ubuntu.com/ubuntu/ lucid-proposed main restricted universe multiverse|deb http://tw.archive.ubuntu.com/ubuntu/ lucid-backports main restricted universe multiverse"&lt;br /&gt;PDEBUILD_PBUILDER=cowbuilder&lt;br /&gt;BUILDRESULT=~/deb/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;接者開始產生一個編譯用的基本環境&lt;br /&gt;&lt;pre class="brush: shell"&gt;sudo cowbuilder --create&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;然後就可以在原本使用 debuild 編譯 Debian Package 的目錄裡面&lt;br /&gt;改用 pdebuild 來編譯 Debian Package&lt;br /&gt;程式會自動透過網路下載相依的軟體套件然後將 Debian Package 編譯到 ~/deb/ 底下&lt;br /&gt;&lt;br /&gt;或是像下面的使用方法&lt;br /&gt;&lt;pre class="brush: shell"&gt;apt-get source --download-only hello&lt;br /&gt;&lt;/pre&gt;下載 hello_2.4-3.diff.gz hello_2.4-3.dsc hello_2.4.orig.tar.gz 後，再執行&lt;br /&gt;&lt;pre class="brush: shell"&gt;sudo cowbuilder --build hello_2.4-3.dsc&lt;br /&gt;&lt;/pre&gt;來編譯 Debian Package&lt;br /&gt;&lt;br /&gt;參考資料：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://wiki.ubuntu.com/PackagingGuide/Complete"&gt;UbuntuWiki - PackagingGuide/Complete&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.kanru.info/archives/243"&gt;Cowdancer – 用 cowbuilder 加快你的 pbuilder&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.candyz.org/20060822/1313"&gt;PBuilder and Cowdancer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twemu.no-ip.org/wiki/index.php/DPKG"&gt;DPKG - TWEmu.no-ip.org&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-299863393299393217?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/299863393299393217/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=299863393299393217' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/299863393299393217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/299863393299393217'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/09/debian-package-6-pbuilder-personal.html' title='Debian Package (6) - 使用 pbuilder - personal package builder 個人 Debian Package 製作工具'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6753944810651572976</id><published>2010-09-23T11:41:00.000+08:00</published><updated>2010-09-23T11:41:06.271+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wine'/><category scheme='http://www.blogger.com/atom/ns#' term='Game'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>StarCraft2 on Ubuntu 10.04</title><content type='html'>&lt;a href="http://picasaweb.google.com.tw/lh/photo/h4TtaXCtOTzVtbePskMYEg?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_cYaJquZOLiw/TJrHk_vxunI/AAAAAAAADdA/RAZtN0goq6E/s400/IMG_20100923_111809.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;不過目前在 Intel 顯示晶片上面似乎無法使用 Wine 來顯示 3D 圖形&lt;br /&gt;所以遊戲中的 3D 模型的部份都無法顯示出來，也就是無法玩的意思。XD&lt;br /&gt;&lt;br /&gt;參考資料：&lt;br /&gt;&lt;a href="http://www.thehelper.net/forums/showthread.php?t=147567"&gt;http://www.thehelper.net/forums/showthread.php?t=147567&lt;/a&gt;&lt;br /&gt;&lt;a href="https://launchpad.net/~ubuntu-wine/+archive/ppa"&gt;https://launchpad.net/~ubuntu-wine/+archive/ppa&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6753944810651572976?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6753944810651572976/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6753944810651572976' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6753944810651572976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6753944810651572976'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/09/starcraft2-on-ubuntu-1004.html' title='StarCraft2 on Ubuntu 10.04'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_cYaJquZOLiw/TJrHk_vxunI/AAAAAAAADdA/RAZtN0goq6E/s72-c/IMG_20100923_111809.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6683417807196461695</id><published>2010-09-14T11:50:00.000+08:00</published><updated>2010-09-14T11:50:40.238+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gadget'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu USB Mouse 跟 Ubuntu Domed Sticker</title><content type='html'>&lt;a href="http://picasaweb.google.com.tw/lh/photo/UcM1VU5QcHJgcqaLea0hFA?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_cYaJquZOLiw/TI7rKGOO07I/AAAAAAAADaQ/eNL-g2Fgb9g/s144/IMG_20100914_112213.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com.tw/lh/photo/Q99fr_90qq8HLxt1F0NbWg?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_cYaJquZOLiw/TI7ranzkGJI/AAAAAAAADaU/v5NiGYZ7jsw/s144/IMG_20100914_112154.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com.tw/lh/photo/w5yAopRGYqQqr9vDmKijiw?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_cYaJquZOLiw/TI7rlnyu5DI/AAAAAAAADaY/EQCciujUXL4/s144/IMG_20100914_112143.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com.tw/lh/photo/TkEH4TaQdMuWk0CxdxD0eA?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_cYaJquZOLiw/TI7us9hCAEI/AAAAAAAADaw/cxqxuF0nb5g/s144/IMG_20100914_113853.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com.tw/lh/photo/DnqARkgXSpTmhIQzro2pSQ?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_cYaJquZOLiw/TI7u38EnpYI/AAAAAAAADa0/cLii05w6WR8/s144/IMG_20100914_113903.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6683417807196461695?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6683417807196461695/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6683417807196461695' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6683417807196461695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6683417807196461695'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/09/ubuntu-usb-mouse-ubuntu-domed-sticker.html' title='Ubuntu USB Mouse 跟 Ubuntu Domed Sticker'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_cYaJquZOLiw/TI7rKGOO07I/AAAAAAAADaQ/eNL-g2Fgb9g/s72-c/IMG_20100914_112213.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-7900526246121361489</id><published>2010-08-16T23:52:00.002+08:00</published><updated>2011-07-27T12:10:32.220+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Slide'/><category scheme='http://www.blogger.com/atom/ns#' term='COSCUP'/><category scheme='http://www.blogger.com/atom/ns#' term='2010'/><category scheme='http://www.blogger.com/atom/ns#' term='GStreamer'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>COSCUP 2010 投影片</title><content type='html'>首先是第一天晚上的 Ubuntu BoF&lt;br /&gt;&lt;div id="__ss_4982871" style="width: 425px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/FourDollars/ubuntu-bof" title="Ubuntu BoF"&gt;Ubuntu BoF&lt;/a&gt;&lt;/strong&gt;&lt;object height="355" id="__sse4982871" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=ubuntubof-100816103703-phpapp02&amp;stripped_title=ubuntu-bof" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse4982871" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=ubuntubof-100816103703-phpapp02&amp;stripped_title=ubuntu-bof" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/FourDollars"&gt;Shih-Yuan Lee&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;第二天上午的 Introducing GStreamer&lt;br /&gt;&lt;div id="__ss_4982886" style="width: 425px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/FourDollars/introduction-gstreamer" title="Introduction GStreamer"&gt;Introduction GStreamer&lt;/a&gt;&lt;/strong&gt;&lt;object height="355" id="__sse4982886" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=gstreamer-100816103846-phpapp02&amp;stripped_title=introduction-gstreamer" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse4982886" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=gstreamer-100816103846-phpapp02&amp;stripped_title=introduction-gstreamer" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/FourDollars"&gt;Shih-Yuan Lee&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;第二天下午的 Debian Policy 中的 5.6.12 小節的 Version&lt;br /&gt;&lt;div id="__ss_4982875" style="width: 425px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/FourDollars/debian-policy-5612-version" title="Debian Policy - 5.6.12 Version"&gt;Debian Policy - 5.6.12 Version&lt;/a&gt;&lt;/strong&gt;&lt;object height="355" id="__sse4982875" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=debianpolicyversion-100816103802-phpapp01&amp;stripped_title=debian-policy-5612-version" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse4982875" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=debianpolicyversion-100816103802-phpapp01&amp;stripped_title=debian-policy-5612-version" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/FourDollars"&gt;Shih-Yuan Lee&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-7900526246121361489?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/7900526246121361489/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=7900526246121361489' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/7900526246121361489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/7900526246121361489'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/08/coscup-2010.html' title='COSCUP 2010 投影片'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-749351774377375067</id><published>2010-06-26T18:57:00.001+08:00</published><updated>2010-06-26T19:02:57.380+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='BetaRadio'/><title type='text'>BetaRadio v1.0 網路廣播點播器 正式釋出</title><content type='html'>&lt;a href="http://code.google.com/p/betaradio/"&gt;BetaRadio&lt;/a&gt; 因為 &lt;a href="http://hichannel.hinet.net/radio.html"&gt;hichannel&lt;/a&gt; 網頁不斷地改版，最後碰到了 &lt;a href="https://launchpad.net/libmms"&gt;libmms&lt;/a&gt; 這個函式庫的一個 bug 所以專案就一直呈現死掉的狀態；不過最近終於有時間能夠找出 libmms 的 bug 並且修正，所以才能夠再次地讓這個純 C 語言寫出來的網路廣播點播器復活。&lt;br /&gt;&lt;br /&gt;Source code tarball 可以在&amp;nbsp;&lt;a href="http://code.google.com/p/betaradio/downloads/list"&gt;http://code.google.com/p/betaradio/downloads/list&lt;/a&gt;&amp;nbsp;下載&lt;br /&gt;相依一個特別的函式庫 &lt;a href="http://github.com/fourdollars/json-cat"&gt;json-cat&lt;/a&gt; 可以在&amp;nbsp;&lt;a href="http://github.com/fourdollars/json-cat/downloads"&gt;http://github.com/fourdollars/json-cat/downloads&lt;/a&gt;&amp;nbsp;下載 Source code tarball&lt;br /&gt;&lt;br /&gt;另外就是特別為 Ubuntu 10.04 使用者準備好一個 PPA 可以馬上裝起來就可以使用了。&lt;br /&gt;&lt;br /&gt;GUI 安裝方式 [系統]-&amp;gt;[管理]-&amp;gt;[軟體來源] 裡面的 [其它軟體] 點擊 [加入] 後輸入&lt;br /&gt;&lt;blockquote&gt;ppa:fourdollars/lucid&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;然後關閉 [軟體來源] 選擇 [重新載入]&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;再打開 [系統]-&amp;gt;[管理]-&amp;gt;[Synaptic套件管理程式] 搜尋 betaradio 就可以找到來安裝了&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;或是可以使用命令列輸入來安裝&lt;br /&gt;&lt;blockquote&gt;$ sudo apt-add-repository ppa:fourdollars/lucid&lt;/blockquote&gt;&lt;blockquote&gt;$ sudo apt-get update&lt;/blockquote&gt;&lt;blockquote&gt;$ sudo apt-get install betaradio&lt;/blockquote&gt;安裝完就可以在 [應用程式]-&amp;gt;[影音] 裡面看到 "BetaRadio 點播器" 點一下就可以使用了~ :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-749351774377375067?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/749351774377375067/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=749351774377375067' title='6 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/749351774377375067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/749351774377375067'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/06/betaradio-v10.html' title='BetaRadio v1.0 網路廣播點播器 正式釋出'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6733806817487212275</id><published>2010-06-17T18:17:00.001+08:00</published><updated>2010-06-17T19:54:32.879+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Package'/><title type='text'>Debian Package (5) - 版本號碼</title><content type='html'>關於 Debian Package 的版本號碼規則全都寫在 &lt;a href="http://www.debian.org/doc/debian-policy/"&gt;Debian Policy Manual&lt;/a&gt; 上面的&amp;nbsp;&lt;a href="http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version"&gt;5.6.12 Version&lt;/a&gt;&lt;br /&gt;基本格式就只有一段&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;[&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;epoch&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;:]&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;upstream_version&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;[-&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;debian_revision&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;其中的 epoch 就是紀元，&lt;span class="Apple-style-span" style="font-family: serif;"&gt;epoch 為大於或等於零的整數，如果不特別指定 epoch 就是零，&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;這讓我想到以前有學過：前&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;寒武紀/&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;寒武紀/奧陶紀/志留紀/泥盆紀/石碳紀/二疊紀/三疊紀/侏儸紀/白堊紀/第三紀/第四紀，前寒武紀一定是最古老的，所以無論後面的 upstream_version 跟 debian_version 寫的是什麼，&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;侏儸紀的版號一定大於&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;前寒武紀，&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;例如：&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;0&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;:9527 &amp;lt; &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;1&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;:7&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;一看就知道 9527 一定比 7 還要大的啊！不過因為 9527 在比較舊的紀元，所以多大都沒有用的！&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;接著是 upstream_version 照字面上翻譯就是上游軟體的版本號碼，例如 PCManX GTK+ 目前最新的正式釋出版本號碼為 0.3.9，不過如果接下來的 PCManX GTK+ 0.3.10 有一些測試 alpha/beta/rc 的版號就可能會長得像是 0.3.10-alpha1 / 0.3.10-beta2 / 0.3.10-rc3 之類的。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;最後就是 debian_version 例如 Ubuntu 10.04 所提供的 PCManX GTK+ 套件版號為&amp;nbsp;0.3.9-2ubuntu2&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;$ apt-cache policy pcmanx-gtk2&lt;/blockquote&gt;&lt;blockquote&gt;...&lt;/blockquote&gt;&lt;blockquote&gt;0.3.9-2ubuntu2 0&lt;/blockquote&gt;&lt;blockquote&gt;500 http://tw.archive.ubuntu.com/ubuntu/ lucid/universe Packages&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;這邊的 debian_version 就是 2ubuntu2&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;知道版本號碼的組成元素之後就是要開始比較大小，軟體套件能不能夠升級就是要靠版號比大小。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;指令 dpkg 有提供一個參數可以用來比對版號的大小&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;dpkg --compare-versions&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;例如：&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;$ dpkg --compare-versions 0:9527-2ubuntu2 '&amp;lt;' 1:7-2ubuntu2; echo $?&lt;/blockquote&gt;&lt;blockquote&gt;0&lt;/blockquote&gt;&lt;blockquote&gt;$ dpkg --compare-versions 0:9527-2ubuntu2 '&amp;lt;' 0:9527-2ubuntu2~3small; echo $?&lt;/blockquote&gt;&lt;blockquote&gt;1&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;不知道看倌有沒有注意到&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;0:9527-2ubuntu2 '&amp;lt;' 0:9527-2ubuntu2~3small 比較的結果是失敗的&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;0:9527-2ubuntu2~3small&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;---------------^------&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;Debian Package Version 有一個特別的地方，就是 '~' 開頭的版號比空字串還要小，什麼！&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;'~'&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;比什麼都沒寫的虛無還要小！&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;所以可以做個有趣的實驗&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;$ dpkg --compare-versions 1-1~ '&amp;lt;' 1-1; echo $?&lt;/blockquote&gt;&lt;blockquote&gt;0&lt;/blockquote&gt;&lt;blockquote&gt;$ dpkg --compare-versions 1-1~~ '&amp;lt;' 1-1~; echo $?&lt;/blockquote&gt;&lt;blockquote&gt;0&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;看到沒有~ 尾巴長的越長的版號反而是越小的~ &amp;gt;w&amp;lt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;最後再聊一些約定俗成的慣例。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;慣例一：&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;debian_version 可以省略不寫，如果要寫的話，結尾一定要是數字，而且這個數字不可為零。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;慣例二：&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;除了該 Debian Package&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;的&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;Maintainer 之外，其他人不可以使用 debian_version 全為數字的版號，&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;例如：假設今天有 PCManX GTK+ 0.3.10 的正式釋出版本，我們自己私下在打包 Debian Package 時就不可以使用 0.3.10-1 這樣的版號，不過根據慣例一，我們可以使用&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;0.3.10-0ubuntu1 這樣的版號，不過 0ubuntu1 這樣的 debian_version 只有上傳 Package 到 Ubuntu 的 Maintainer 才可以這樣使用，如果把 Debian 跟 Ubuntu 都當上游的話，那麼就應該使用 0ubuntu0ppa1 這樣的版號，當然 ppa 也可以換成其它自己偏好的字串。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;慣例三：&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: serif;"&gt;如果是使用 apt-get source pcmanx-gtk2 抓下來改的 Debian Package，在改完後要直接在原本的版號後面加上自己的版號，像是原本是 0.3.9-2ubuntu2 就會變成 0.3.9-2ubuntu2fourdollars1&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6733806817487212275?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6733806817487212275/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6733806817487212275' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6733806817487212275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6733806817487212275'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/06/debian-package-5.html' title='Debian Package (5) - 版本號碼'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-7116731404201433907</id><published>2010-06-14T15:59:00.002+08:00</published><updated>2010-06-15T20:05:55.027+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Launchpad'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Package'/><title type='text'>Debian Package (4) - 製作一個簡單但是有點用處的 Debian Package (續)</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;前一篇文章只能完成了 Debian Package 的打包但是並沒有上傳至 Debian 官方的套件庫&lt;br /&gt;如果想要上傳到 Debian 官方的套件庫就必需尋求 Debian Developer (以下簡稱 DD) 的協助了&lt;br /&gt;另外就是還要準備一把已經被 DD 簽過的金鑰才行 (可能要數個 DD 簽過才行)&lt;br /&gt;如果沒有熟識的 DD 幫忙，其實還可以到 &lt;a href="http://lists.debian.org/debian-mentors"&gt;http://lists.debian.org/debian-mentors&lt;/a&gt; 上面尋求 DD 的協助&lt;br /&gt;不過建議先看過 &lt;a href="http://people.debian.org/~mpalmer/debian-mentors_FAQ.html"&gt;The debian-mentors FAQ&lt;/a&gt; 這份文件後再去尋求 DD 的協助&lt;br /&gt;&lt;br /&gt;另外一種方式是自己維護 Debian Packages Archives 不過這真的很麻煩~ ^^b&lt;br /&gt;如果是在 Ubuntu 上面的話可以考慮使用 Launchpad 上的 PPA 服務&lt;br /&gt;以下將以 Launchpad PPA 為例&lt;br /&gt;&lt;br /&gt;首先要建立自己的 Launchpad PPA 才行&lt;br /&gt;會有一些申請的動作要自己去完成&lt;br /&gt;可以參考 &lt;a href="https://help.launchpad.net/Packaging/PPA"&gt;https://help.launchpad.net/Packaging/PPA&lt;/a&gt; 上面的說明&lt;br /&gt;&lt;br /&gt;以下會假設已經完成 Launchpad PPA 的設定並且也準備好 SSH 金鑰跟 GPG 金鑰，只剩下要上傳 Debian Source Package 的動作要做。&lt;br /&gt;&lt;br /&gt;因為 Launchpad PPA 只支援 Debian Source Package 的上傳，Launchpad 會再從 Debian Source Package 把 Debian Binary Package 給編譯產生出來，而之前的指令 &lt;b&gt;dpkg-buildpackage -rfakeroot -uc -us -tc&lt;/b&gt; 其實會同時把 Debian Binary/Source Package 給產生出來，不過因為 &lt;b&gt;-uc -us&lt;/b&gt; 這兩個參數就是指定不要使用 GPG 簽章，所以產生出來的 Debian Package 應該也無法上傳到 PPA 上使用。&lt;br /&gt;&lt;br /&gt;如果要建立有簽章的 Debian Source Package 就要使用下面的指令&lt;br /&gt;&lt;blockquote&gt;$ export DEBFULLNAME="First-Name Family-Name (Nickname)"&lt;br /&gt;$ export DEBEMAIL="username@foo.bar"&lt;br /&gt;$ dpkg-buildpackage -rfakeroot -S&lt;/blockquote&gt;這樣就可以在目錄上層建立牽過的 Debian Source Package 由以下三個檔案組成&lt;br /&gt;&lt;blockquote&gt;taiwan-radio-tuner_0.1.dsc&lt;br /&gt;taiwan-radio-tuner_0.1_source.changes&lt;br /&gt;taiwan-radio-tuner_0.1.tar.gz&lt;/blockquote&gt;不過目前這樣的 Debian Source Package 就算上傳到 PPA 也會是失敗收場。&lt;br /&gt;&lt;br /&gt;因為 Ubuntu 有一些規則要依循才行，首先修改 debian/changelog&lt;br /&gt;&lt;blockquote&gt;taiwan-radio-tuner (0.1) &lt;b&gt;lucid&lt;/b&gt;; urgency=low&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; * Initial release.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;-- First-Name Family-Name (Nickname) &amp;lt;username@foo.bar&amp;gt;&amp;nbsp; Mon, 14 Jun 2010 12:47:29 +0800&lt;/blockquote&gt;原本的 experimental 要改成 lucid 因為要給 Ubuntu 10.04 使用&lt;br /&gt;&lt;br /&gt;另外就是如果要嚴格一點通過 lintian - Debian package checker 的測試，這是上傳到 Debian 官方套件庫必定要通過的測試，雖然在 Launchpad PPA 並沒有要求要通過 lintian 的測試，執行 debuild -S 後會發現有一些錯誤跟警告訊息出現。&lt;br /&gt;&lt;blockquote&gt;W: taiwan-radio-tuner source: &lt;b&gt;debhelper-but-no-misc-depends&lt;/b&gt; taiwan-radio-tuner&lt;br /&gt;E: taiwan-radio-tuner source: &lt;b&gt;package-uses-debhelper-but-lacks-build-depends&lt;/b&gt;&lt;br /&gt;W: taiwan-radio-tuner source: &lt;b&gt;package-lacks-versioned-build-depends-on-debhelper&lt;/b&gt; 7&lt;br /&gt;W: taiwan-radio-tuner source: &lt;b&gt;missing-debian-source-format&lt;/b&gt;&lt;/blockquote&gt;這些訊息其實只要 Google 一下就可以輕易地找到解決方法。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;首先是 debhelper-but-no-misc-depends 只要在 Depends 這個欄位多加上 ${misc:Depends} 就可以解決&lt;/li&gt;&lt;li&gt;再來是 package-uses-debhelper-but-lacks-build-depends 跟 package-lacks-versioned-build-depends-on-debhelper 要多加上一個欄位 Build-Depends: debhelper (&amp;gt;= 7)&lt;/li&gt;&lt;li&gt;剩下的 missing-debian-source-format 要多一個檔案在 &lt;b&gt;debian/source/format&lt;/b&gt; 內容為 &lt;b&gt;3.0 (native)&lt;/b&gt;，因為這是一個原生的 Debian Package，如果是從上游的 tarball 而來的話就應該要使用 &lt;b&gt;3.0 (quilt)&lt;/b&gt; 才行。&lt;/li&gt;&lt;/ul&gt;修改過後的 debian/control 如下：&lt;br /&gt;&lt;blockquote&gt;Source: taiwan-radio-tuner&lt;br /&gt;Maintainer: First-Name Family-Name (nickname) &amp;lt;username@foo.bar&amp;gt;&lt;br /&gt;Section: contrib/web&lt;br /&gt;Priority: extra&lt;br /&gt;&lt;b&gt;Build-Depends: debhelper (&amp;gt;= 7)&lt;/b&gt;&lt;br /&gt;Standards-Version: 3.8.4&lt;br /&gt;Homepage: https://chrome.google.com/extensions/detail/hacebidkncpkfenhpapdbkcefalehepa&lt;br /&gt;&lt;br /&gt;Package: taiwan-radio-tuner&lt;br /&gt;Architecture: all&lt;br /&gt;Depends: &lt;b&gt;${misc:Depends}&lt;/b&gt;, google-chrome, alltray, gstreamer0.10-plugins-bad, gstreamer0.10-plugins-ugly, gstreamer0.10-ffmpeg&lt;br /&gt;Description: Listen to the radio of Taiwan.&lt;br /&gt;&amp;nbsp;The easiest way to listen to Internet Radio of Taiwan.&lt;/blockquote&gt;修改成這樣再去執行 debuild -S 應該就不會再有任何的錯誤訊息或是警告訊息的出現了。&lt;br /&gt;&lt;br /&gt;最後就可以用 dput 上傳到 PPA 裡面啦~ :)&lt;br /&gt;&lt;blockquote&gt;$ dput ppa:username/lucid taiwan-radio-tuner_0.1_source.changes&lt;/blockquote&gt;現在在 &lt;a href="https://launchpad.net/~fourdollars/+archive/lucid"&gt;https://launchpad.net/~fourdollars/+archive/lucid&lt;/a&gt;&lt;br /&gt;上面應該可以看到已經上傳到 Launchpad PPA 上的 Debian Package 了~&lt;br /&gt;如果想要使用的朋友可以在 Ubuntu 10.04 上面執行 sudo add-apt-repository ppa:fourdollars/lucid&lt;br /&gt;然後再執行 sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install taiwan-radio-tuner 應該就可以安裝好了~ :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-7116731404201433907?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/7116731404201433907/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=7116731404201433907' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/7116731404201433907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/7116731404201433907'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/06/debian-package-4-debian-package.html' title='Debian Package (4) - 製作一個簡單但是有點用處的 Debian Package (續)'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6181340326483595087</id><published>2010-06-14T14:03:00.002+08:00</published><updated>2010-06-14T14:15:35.525+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Package'/><title type='text'>Debian Package (3) - 製作一個簡單但是有點用處的 Debian Package</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;以 &lt;a href="https://chrome.google.com/extensions/detail/hacebidkncpkfenhpapdbkcefalehepa"&gt;Taiwan Radio Tuner&lt;/a&gt; 為例&lt;br /&gt;現在要製作一個利用 Google Chrome 的 App Mode 來收聽網路廣播的程式&lt;br /&gt;另外還要利用 Alltray 讓這個網頁應用程式可以隱藏在系統狀態列裡面&lt;br /&gt;所以只要製作一個 taiwan-radio-tuner.desktop 安裝到 /usr/share/applications/ 底下就可以了&lt;br /&gt;&lt;blockquote&gt;[Desktop Entry]&lt;br /&gt;Name=Taiwan Radio Tuner&lt;br /&gt;Exec=alltray google-chrome --app=http://fd.idv.tw/radio/&lt;br /&gt;Icon=google-chrome&lt;br /&gt;Type=Application&lt;br /&gt;Categories=GTK;Application;AudioVideo;Audio;Player;&lt;/blockquote&gt;不過因為這個廣播程式會需要安裝一些額外的 codecs 才能夠正常地播放音樂&lt;br /&gt;所以要額外安裝 gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly gstreamer0.10-ffmpeg 這幾個套件&lt;br /&gt;&lt;br /&gt;但是這些步驟也許對一般的使用者來說太過複雜了，所以製作一個 Debian Package&lt;br /&gt;首先準備好 taiwan-radio-tuner 的目錄&lt;br /&gt;&lt;blockquote&gt;$ mkdir taiwan-radio-tuner-0.1&lt;/blockquote&gt;把上面的 taiwan-radio-tuner.desktop 放進去&lt;br /&gt;&lt;blockquote&gt;$ mv taiwan-radio-tuner.desktop taiwan-radio-tuner-0.1&lt;/blockquote&gt;然後在 taiwan-radio-tuner-0.1 底下產生 debian 這個目錄&lt;br /&gt;&lt;blockquote&gt;$ cd taiwan-radio-tuner-0.1&lt;br /&gt;$ mkdir debian&lt;/blockquote&gt;接下來開始準備 debian/control&lt;br /&gt;&lt;blockquote&gt;Source: taiwan-radio-tuner&lt;br /&gt;Maintainer: Shih-Yuan Lee (FourDollars) &amp;lt;fourdollars@gmail.com&amp;gt;&lt;br /&gt;Section: &lt;b&gt;contrib&lt;/b&gt;/web&lt;br /&gt;Priority: extra&lt;br /&gt;Standards-Version: 3.8.4&lt;br /&gt;Homepage: https://chrome.google.com/extensions/detail/hacebidkncpkfenhpapdbkcefalehepa&lt;br /&gt;&lt;br /&gt;Package: taiwan-radio-tuner&lt;br /&gt;Architecture: all&lt;br /&gt;Depends: &lt;b&gt;google-chrome&lt;/b&gt;, &lt;b&gt;alltray&lt;/b&gt;, &lt;b&gt;gstreamer0.10-plugins-bad&lt;/b&gt;, &lt;b&gt;gstreamer0.10-plugins-ugly&lt;/b&gt;, &lt;b&gt;gstreamer0.10-ffmpeg&lt;/b&gt;&lt;br /&gt;Description: Listen to the radio of Taiwan.&lt;br /&gt;&amp;nbsp;The easiest way to listen to Internet Radio of Taiwan.&lt;/blockquote&gt;這邊要注意到 Section 這欄寫的是 contrib/web 寫成 contrib 是因為這個套件相依到 google-chrome 這個 non-free 的套件&lt;br /&gt;&lt;br /&gt;規則如下：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;如果本身是 free 的套件卻相依到 non-free 的套件就應該放在 contrib 底下。&lt;/li&gt;&lt;li&gt;如果本身是 non-free 的套件當然就是直接放在 non-free 底下，這種情況會是 non-free/web&lt;/li&gt;&lt;li&gt;如果本身是 free 的套件也沒有相依到 non-free 的套件，那麼寫成 web 就可以了。&lt;/li&gt;&lt;/ul&gt;這是參考 &lt;a href="http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections"&gt;Debian Policy Manual - 2.4 Sections&lt;/a&gt; 來分類的，如果在 Ubuntu 上可能會有另外的分類方式。&lt;br /&gt;&lt;br /&gt;還有準備 debian/compat&lt;br /&gt;&lt;blockquote&gt;$ echo 7 &amp;gt; debian/compat&lt;/blockquote&gt;準備 debian/rules&lt;br /&gt;&lt;blockquote&gt;$ cp /usr/share/doc/debhelper/examples/rules.tiny debian/rules&lt;/blockquote&gt;最後使用 dch --create 來產生一個 debian/changelog&lt;br /&gt;&lt;blockquote&gt;taiwan-radio-tuner (0.1) experimental; urgency=low&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; * Initial release.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;-- Shih-Yuan Lee (FourDollars) &amp;lt;fourdollars@gmail.com&amp;gt;&amp;nbsp; Mon, 14 Jun 2010 12:47:29 +0800&lt;/blockquote&gt;不過還有一個很重要的檔案要準備 &lt;b&gt;debian/install&lt;/b&gt; 內容如下&lt;br /&gt;&lt;blockquote&gt;taiwan-radio-tuner.desktop /usr/share/applications/&lt;/blockquote&gt;也就是要把 taiwan-radio-tuner.desktop 安裝到 /usr/share/applications/ 底下的意思&lt;br /&gt;如果沒有這個 debian/install 來指定安裝的地方，dpkg 就不會知道這個 taiwan-radio-tuner.desktop 要安裝到哪裡&lt;br /&gt;所以也就不會把 taiwan-radio-tuner.desktop 包裝在 Debian Package 裡面&lt;br /&gt;&lt;br /&gt;以上都準備好，最後就可以執行 &lt;b&gt;dpkg-buildpackage -rfakeroot -uc -us -tc&lt;/b&gt; 來產生 Debian Package 了~&lt;br /&gt;&lt;br /&gt;把產生出來的 Debian Package 安裝進系統後就應該可以在 GNOME 系統選單裡面看到一個 Taiwan Radio Tuner 的 Icon 可以點選了~&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6181340326483595087?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6181340326483595087/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6181340326483595087' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6181340326483595087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6181340326483595087'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/06/debian-package-3-debian-package.html' title='Debian Package (3) - 製作一個簡單但是有點用處的 Debian Package'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-8254239400675422168</id><published>2010-06-14T12:27:00.001+08:00</published><updated>2010-06-14T12:27:51.776+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Package'/><title type='text'>Debian Package (2) - 從基本開始製作一個簡單的 Debian Package (續)</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;延續前一篇文章 &lt;a href='http://fourdollars.blogspot.com/2010/06/debian-package-1-debian-package.html'&gt;Debian Package (1) - 從基本開始製作一個簡單的 Debian Package&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;在使用 &lt;b&gt;dpkg-buildpackage -rfakeroot -uc -us&lt;/b&gt; 來產生 Debian Package 的時候其會有一些警告訊息&lt;br/&gt;&lt;blockquote&gt;dpkg-source: warning: missing information for output field Standards-Version&lt;br/&gt;dpkg-genchanges: warning: missing Section for binary package foo; using '-'&lt;br/&gt;dpkg-genchanges: warning: missing Priority for binary package foo; using '-'&lt;br/&gt;dpkg-genchanges: warning: missing Section for source files&lt;br/&gt;dpkg-genchanges: warning: missing Priority for source files&lt;br/&gt;&lt;/blockquote&gt;我們只要把 debian/control 修改成&lt;br/&gt;&lt;blockquote&gt;Source: foo&lt;br/&gt;Maintainer: foo &amp;lt;foo@bar.com&amp;gt;&lt;br/&gt;&lt;b&gt;Section: misc&lt;/b&gt;&lt;br/&gt;&lt;b&gt;Priority: extra              &lt;/b&gt;&lt;br/&gt;&lt;b&gt;Standards-Version: 3.8.4&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;Package: foo&lt;br/&gt;Architecture: all&lt;br/&gt;Description: blah&lt;br/&gt;&lt;/blockquote&gt;這樣就不會又那些警告訊息了~&lt;br/&gt;Section 這個欄位標示套件的分類 詳細可以參考 &lt;a href='http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections'&gt;http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections&lt;/a&gt;&lt;br/&gt;Priority 這個欄位標示套件的重要性 詳細可以參考 &lt;a href='http://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities'&gt;http://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities&lt;/a&gt;&lt;br/&gt;Standards-Version 這個欄位則是標示打包 Debian Package 時所參考 Debian Policy 文件的版本號碼&lt;br/&gt;目前最新是 3.8.4.0 在 &lt;a href='http://www.debian.org/doc/debian-policy/'&gt;http://www.debian.org/doc/debian-policy/&lt;/a&gt; 最下面可以看到&lt;br/&gt;&lt;br/&gt;不過到目前為止都只是一個無用的 Debian Package 罷了~ :P&lt;br/&gt;&lt;br/&gt;但是這個無用的 Debian Package 可以看到一個 Debian Package 最基本的組成要件到底是什麼，說穿了就只是以下的四個檔案&lt;br/&gt;&lt;blockquote&gt;debian/changelog #套件的變更紀錄&lt;br/&gt;debian/compat #套件相容 debhelper 版本&lt;br/&gt;debian/control #套件所有的描述跟分類&lt;br/&gt;debian/rules #製作 Debian Package 時的 Makefile (背後會使用到 debhelper)&lt;br/&gt;&lt;/blockquote&gt;那麼接下來開始製作一個有點用處的 Debian Package 吧~ :)&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-8254239400675422168?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/8254239400675422168/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=8254239400675422168' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8254239400675422168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8254239400675422168'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/06/debian-package-2-debian-package.html' title='Debian Package (2) - 從基本開始製作一個簡單的 Debian Package (續)'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-4622825305629163937</id><published>2010-06-11T12:22:00.004+08:00</published><updated>2011-02-16T11:25:03.716+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Package'/><title type='text'>Debian Package (1) - 從基本開始製作一個簡單的 Debian Package</title><content type='html'>首先要安裝需要的工具組 &lt;pre class="brush:shell"&gt;$ sudo aptitude install debhelper devscripts&lt;br /&gt;&lt;/pre&gt;然後產生一個目錄 &lt;pre class="brush:shell"&gt;$ mkdir foo-0.1&lt;br /&gt;&lt;/pre&gt;在裡面準備 debian/control &lt;pre class="brush:text"&gt;Source: foo&lt;br /&gt;Maintainer: foo &amp;lt;foo@bar.com&amp;gt;&lt;br /&gt;&lt;br /&gt;Package: foo&lt;br /&gt;Architecture: all&lt;br /&gt;Description: blah&lt;br /&gt;&lt;/pre&gt;然後準備 debian/rules &lt;pre class="brush:shell"&gt;$ cp /usr/share/doc/debhelper/examples/rules.tiny debian/rules&lt;br /&gt;&lt;/pre&gt;有興趣可以看一下內容 &lt;pre class="brush:text"&gt;#!/usr/bin/make -f&lt;br /&gt;%:&lt;br /&gt;    dh $@&lt;br /&gt;&lt;/pre&gt;在 debian/compat 指定一下這是 Debhelper 7 的 Debian Package &lt;pre class="brush:shell"&gt;$ echo 7 &amp;gt; debian/compat&lt;br /&gt;&lt;/pre&gt;最後執行一下 &lt;pre class="brush:shell"&gt;$ dch --create --package foo -v 0.1 -D experimental&lt;/pre&gt;產生 debian/changelog 內容會像是 &lt;pre class="brush:text"&gt;foo (0.1) experimental; urgency=low&lt;br /&gt;&lt;br /&gt;  * Initial release. (Closes: #XXXXXX)                                   &lt;br /&gt;&lt;br /&gt; -- foo &amp;lt;foo@bar.com&amp;gt;  Fri, 11 Jun 2010 12:01:20 +0800&lt;br /&gt;&lt;/pre&gt;然後就可以開始打包了 &lt;pre class="brush:shell"&gt;$ dpkg-buildpackage -rfakeroot -uc -us&lt;br /&gt;&lt;/pre&gt;之後就會在 foo-0.1 這個目錄的上層目錄看到產生出來的 Debian Package 了 &lt;pre class="brush:text"&gt;foo_0.1_all.deb&lt;br /&gt;foo_0.1_amd64.changes&lt;br /&gt;foo_0.1.dsc&lt;br /&gt;foo_0.1.tar.gz&lt;br /&gt;&lt;/pre&gt;可以用指令看一下 foo_0.1_all.deb 的內容物 &lt;pre class="brush:shell"&gt;$ dpkg -c foo_0.1_all.deb&lt;br /&gt;drwxr-xr-x root/root         0 2010-06-11 12:07 ./&lt;br /&gt;drwxr-xr-x root/root         0 2010-06-11 12:07 ./usr/&lt;br /&gt;drwxr-xr-x root/root         0 2010-06-11 12:07 ./usr/share/&lt;br /&gt;drwxr-xr-x root/root         0 2010-06-11 12:07 ./usr/share/doc/&lt;br /&gt;drwxr-xr-x root/root         0 2010-06-11 12:07 ./usr/share/doc/foo/&lt;br /&gt;-rw-r--r-- root/root       161 2010-06-11 12:04 ./usr/share/doc/foo/changelog.gz&lt;br /&gt;&lt;/pre&gt;可以看到裡面只有一個之前寫的檔案 changelog.gz&lt;br /&gt;也可以使用指令看一下這個 Debian Package 的資訊 &lt;pre class="brush:shell"&gt;$ dpkg -I foo_0.1_all.deb&lt;br /&gt; 新式 debian 套件，版本 2.0。&lt;br /&gt; 大小為 982 bytes：control 套件檔=371 bytes。&lt;br /&gt;     218 bytes，    6 行         control&lt;br /&gt;      79 bytes，    1 行         md5sums&lt;br /&gt; Package: foo&lt;br /&gt; Version: 0.1&lt;br /&gt; Architecture: all&lt;br /&gt; Maintainer: foo &amp;lt;foo@bar.com&amp;gt;&lt;br /&gt; Installed-Size: 28&lt;br /&gt; Description: blah&lt;br /&gt;&lt;/pre&gt;參考資料：&lt;a href='http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-sourcecontrolfiles'&gt;http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-sourcecontrolfiles&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-4622825305629163937?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/4622825305629163937/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=4622825305629163937' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/4622825305629163937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/4622825305629163937'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/06/debian-package-1-debian-package.html' title='Debian Package (1) - 從基本開始製作一個簡單的 Debian Package'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-4203103403470456672</id><published>2010-05-05T22:58:00.004+08:00</published><updated>2010-06-14T18:08:50.257+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Installation'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>自製 Ubuntu 10.04 Desktop/Server/Alternate/DVD ISO i386/amd64 安裝用 USB 隨身碟</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;首先要準備安裝用的 ISO 檔案&lt;br /&gt;&lt;blockquote&gt;ubuntu-10.04-alternate-amd64.iso&lt;br /&gt;ubuntu-10.04-alternate-i386.iso&lt;br /&gt;ubuntu-10.04-desktop-amd64.iso&lt;br /&gt;ubuntu-10.04-desktop-i386.iso&lt;br /&gt;ubuntu-10.04-dvd-amd64.iso&lt;br /&gt;ubuntu-10.04-dvd-i386.iso&lt;br /&gt;ubuntu-10.04-server-amd64.iso&lt;br /&gt;ubuntu-10.04-server-i386.iso&lt;/blockquote&gt;然後準備一隻容量至少 1GB 的 USB 隨身碟；如果要使用 DVD ISO 來製作的話，USB 隨身碟要準備容量至少 8GB 以上；如果想要製作多重開機的話，就準備容量越大越好的 USB 隨身碟，大到足夠塞進所有想要放進去的 ISO 檔案。&lt;br /&gt;&lt;br /&gt;&lt;big&gt;&lt;big&gt;Ubuntu 10.04 Alternate/Server 安裝用 USB 隨身碟製作方法&lt;/big&gt;&lt;/big&gt;&lt;br /&gt;&lt;blockquote&gt;$ wget http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-&lt;b&gt;i386&lt;/b&gt;/current/images/hd-media/boot.img.gz&lt;br /&gt;$ sudo dd if=/dev/zero of=/dev/&lt;b&gt;sdc&lt;/b&gt; count=512&lt;br /&gt;$ sudo su -c "zcat boot.img.gz &amp;gt; /dev/&lt;b&gt;sdc&lt;/b&gt;"&lt;/blockquote&gt;&lt;span style="font-family: monospace;"&gt;等待約五分鐘完成後，再執行以下步驟就完成了。&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: monospace;"&gt;$ sudo mount /dev/&lt;b&gt;sdc&lt;/b&gt; /mnt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: monospace;"&gt;$ sudo cp -av ubuntu-10.04-&lt;b&gt;alternate&lt;/b&gt;-&lt;b&gt;i386&lt;/b&gt;.iso /mnt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: monospace;"&gt;$ sudo umount /mnt&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family: monospace;"&gt;以上粗體字的部份需要根據需求調整，例如 sdc -&amp;gt; sdb 或 alternate -&amp;gt; server 或 i386 -&amp;gt; amd64&lt;br /&gt;&lt;br /&gt;&lt;big&gt;&lt;big&gt;Ubuntu 10.04 Desktop/DVD 安裝用 USB 隨身碟製作方法&lt;/big&gt;&lt;/big&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;先使用 fdisk 或是 gparted 將隨身碟分割好再進行以下步驟&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: monospace;"&gt;$ &lt;code&gt;sudo mkfs.vfat /dev/&lt;b&gt;sdc&lt;/b&gt;1&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font-family: monospace;"&gt;$ &lt;code&gt;sudo mount &lt;/code&gt;&lt;code&gt;/dev/&lt;b&gt;sdc&lt;/b&gt;1 /mnt&lt;/code&gt;&lt;br /&gt;&lt;code&gt;$ &lt;code&gt;sudo &lt;/code&gt;&lt;code&gt;grub-install --no-floppy --root-directory=/mnt /dev/&lt;b&gt;sdc&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;code&gt;&lt;span style="font-family: monospace;"&gt;然後再新增一個檔案 /mnt/boot/grub/grub.cfg 內容如下&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;span style="font-family: monospace;"&gt;menuentry "Ubuntu 10.04 &lt;b&gt;Desktop&lt;/b&gt; &lt;b&gt;i386&lt;/b&gt;" {&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font-family: monospace;"&gt;&amp;nbsp; loopback loop /iso/&lt;/span&gt;&lt;/code&gt;&lt;span style="font-family: monospace;"&gt;ubuntu-10.04-&lt;b&gt;desktop&lt;/b&gt;-&lt;b&gt;i386&lt;/b&gt;.iso&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font-family: monospace;"&gt;&amp;nbsp; linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/iso/&lt;/span&gt;&lt;/code&gt;&lt;span style="font-family: monospace;"&gt;ubuntu-10.04-&lt;b&gt;desktop&lt;/b&gt;-&lt;b&gt;i386&lt;/b&gt;.iso&lt;code&gt; noeject noprompt --&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font-family: monospace;"&gt;&amp;nbsp; initrd (loop)/casper/initrd.lz&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;span style="font-family: monospace;"&gt;記得要把 ISO 檔案複製進 USB 隨身碟&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: monospace;"&gt;$ sudo mkdir /mnt/iso&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: monospace;"&gt;$ sudo cp -av &lt;code&gt;ubuntu-10.04-&lt;b&gt;desktop&lt;/b&gt;-&lt;b&gt;i386&lt;/b&gt;.iso /mnt/iso&lt;br /&gt;$ sudo umount /mnt&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family: monospace;"&gt;以上粗體字的部份需要根據需求調整，例如 sdc -&amp;gt; sdb 或 desktop -&amp;gt; dvd 或 i386 -&amp;gt; amd64&lt;br /&gt;&lt;br /&gt;Desktop/DVD 的製作比較有彈性，只要在 grub.cfg 裡面增加 menuentry 就可以了，所以可以輕易地製作出多重 ISO 開機的 USB 隨身碟。&lt;br /&gt;&lt;br /&gt;P.S. DVD 的部份因為筆者本身沒有 8GB 以上的 USB 隨身碟，所以沒有驗證過，不過應該是可以可行的。&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-4203103403470456672?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/4203103403470456672/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=4203103403470456672' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/4203103403470456672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/4203103403470456672'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/05/ubuntu-1004-desktopserveralternatedvd.html' title='自製 Ubuntu 10.04 Desktop/Server/Alternate/DVD ISO i386/amd64 安裝用 USB 隨身碟'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6654321679685757060</id><published>2010-05-02T23:20:00.001+08:00</published><updated>2010-05-02T23:20:36.111+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Fontconfig'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu 10.04 的 flash 中文方塊又出現啦~</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;筆者的修正方法是將系統的預設字型都換成 AR PL UMing TW&lt;br/&gt;在家目錄底下增加一個檔案 .fonts.conf 內容為&lt;br/&gt;&lt;blockquote&gt;&amp;lt;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&amp;gt;&lt;br/&gt;&amp;lt;!-- ~/.fonts.conf for per-user font configuration --&amp;gt;&lt;br/&gt;&amp;lt;fontconfig&amp;gt;&lt;br/&gt;  &amp;lt;alias binding="strong"&amp;gt;&lt;br/&gt;    &amp;lt;family&amp;gt;serif&amp;lt;/family&amp;gt;&lt;br/&gt;    &amp;lt;prefer&amp;gt;&lt;br/&gt;      &amp;lt;family&amp;gt;AR PL UMing TW&amp;lt;/family&amp;gt;&lt;br/&gt;      &amp;lt;family&amp;gt;Droid Serif&amp;lt;/family&amp;gt;&lt;br/&gt;    &amp;lt;/prefer&amp;gt;&lt;br/&gt;  &amp;lt;/alias&amp;gt;&lt;br/&gt;  &amp;lt;alias binding="strong"&amp;gt;&lt;br/&gt;    &amp;lt;family&amp;gt;sans-serif&amp;lt;/family&amp;gt;&lt;br/&gt;    &amp;lt;prefer&amp;gt;&lt;br/&gt;      &amp;lt;family&amp;gt;AR PL UMing TW&amp;lt;/family&amp;gt;&lt;br/&gt;      &amp;lt;family&amp;gt;Droid Sans&amp;lt;/family&amp;gt;&lt;br/&gt;    &amp;lt;/prefer&amp;gt;&lt;br/&gt;  &amp;lt;/alias&amp;gt;&lt;br/&gt;  &amp;lt;alias binding="strong"&amp;gt;&lt;br/&gt;    &amp;lt;family&amp;gt;monospace&amp;lt;/family&amp;gt;&lt;br/&gt;    &amp;lt;prefer&amp;gt;&lt;br/&gt;      &amp;lt;family&amp;gt;AR PL UMing TW&amp;lt;/family&amp;gt;&lt;br/&gt;      &amp;lt;family&amp;gt;Droid Sans Mono&amp;lt;/family&amp;gt;&lt;br/&gt;     &amp;lt;/prefer&amp;gt;&lt;br/&gt;  &amp;lt;/alias&amp;gt;&lt;br/&gt;  &amp;lt;alias binding="strong"&amp;gt;&lt;br/&gt;    &amp;lt;family&amp;gt;Terminus&amp;lt;/family&amp;gt;&lt;br/&gt;    &amp;lt;prefer&amp;gt;&lt;br/&gt;      &amp;lt;family&amp;gt;Terminus&amp;lt;/family&amp;gt;                       &lt;br/&gt;      &amp;lt;family&amp;gt;AR PL UMing TW&amp;lt;/family&amp;gt;&lt;br/&gt;    &amp;lt;/prefer&amp;gt;&lt;br/&gt;  &amp;lt;/alias&amp;gt;&lt;br/&gt;  &amp;lt;alias binding="strong"&amp;gt;&lt;br/&gt;    &amp;lt;family&amp;gt;Droid Serif&amp;lt;/family&amp;gt;&lt;br/&gt;    &amp;lt;prefer&amp;gt;&lt;br/&gt;      &amp;lt;family&amp;gt;Droid Serif&amp;lt;/family&amp;gt;&lt;br/&gt;      &amp;lt;family&amp;gt;Droid Sans Fallback&amp;lt;/family&amp;gt;&lt;br/&gt;    &amp;lt;/prefer&amp;gt;&lt;br/&gt;  &amp;lt;/alias&amp;gt;&lt;br/&gt;  &amp;lt;alias binding="strong"&amp;gt;&lt;br/&gt;    &amp;lt;family&amp;gt;Droid Sans&amp;lt;/family&amp;gt;&lt;br/&gt;    &amp;lt;prefer&amp;gt;&lt;br/&gt;      &amp;lt;family&amp;gt;Droid Sans&amp;lt;/family&amp;gt;&lt;br/&gt;      &amp;lt;family&amp;gt;Droid Sans Fallback&amp;lt;/family&amp;gt;&lt;br/&gt;    &amp;lt;/prefer&amp;gt;&lt;br/&gt;  &amp;lt;/alias&amp;gt;&lt;br/&gt;  &amp;lt;alias binding="strong"&amp;gt;&lt;br/&gt;    &amp;lt;family&amp;gt;Droid Sans Mono&amp;lt;/family&amp;gt;&lt;br/&gt;    &amp;lt;prefer&amp;gt;&lt;br/&gt;      &amp;lt;family&amp;gt;Droid Sans Mono&amp;lt;/family&amp;gt;&lt;br/&gt;      &amp;lt;family&amp;gt;Droid Sans Fallback&amp;lt;/family&amp;gt;&lt;br/&gt;    &amp;lt;/prefer&amp;gt;&lt;br/&gt;  &amp;lt;/alias&amp;gt;&lt;br/&gt;&amp;lt;/fontconfig&amp;gt;&lt;br/&gt;&lt;/blockquote&gt;然後再執行&lt;br/&gt;&lt;blockquote&gt;fc-cache -f -v&lt;br/&gt;&lt;/blockquote&gt;這樣就可以了~ :)&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6654321679685757060?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6654321679685757060/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6654321679685757060' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6654321679685757060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6654321679685757060'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/05/ubuntu-1004-flash.html' title='Ubuntu 10.04 的 flash 中文方塊又出現啦~'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-2830403503809390102</id><published>2010-04-28T21:20:00.003+08:00</published><updated>2011-02-27T23:46:01.045+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='Installation'/><title type='text'>使用 perlbrew 來安裝 perl-5.12.3 跟 cpanm 的筆記</title><content type='html'>&lt;a href='http://github.com/gugod/App-perlbrew'&gt;perlbrew&lt;/a&gt; 的好處就是可以使用一般使用者的權限來安裝 perl 跟其模組，不用擔心會破壞到原本系統的穩定性。&lt;br /&gt;首先去抓 gugod 在 GitHub 上的 perlbrew 接者開始安裝 perl-5.12.3&lt;br /&gt;&lt;pre class="brush: shell"&gt;git clone git://github.com/gugod/App-perlbrew.git&lt;br /&gt;cd App-perlbrew&lt;br /&gt;./perlbrew install&lt;br /&gt;./perlbrew init&lt;br /&gt;source ~/perl5/perlbrew/etc/bashrc&lt;br /&gt;perlbrew install perl-5.12.3&lt;br /&gt;perlbrew switch perl-5.12.3&lt;br /&gt;&lt;/pre&gt;然後去抓 miyagawa 在 GitHub 上的 cpanm 回來安裝&lt;br /&gt;&lt;pre class="brush: shell"&gt;git clone http://github.com/miyagawa/cpanminus.git&lt;br /&gt;cd cpanminus&lt;br /&gt;./cpanm .&lt;br /&gt;&lt;/pre&gt;再回去用 cpanm 重新安裝一遍 perlbrew (因為第一次安裝時會少裝一些文件檔案)&lt;br /&gt;&lt;pre class="brush: shell"&gt;cd App-perlbrew&lt;br /&gt;cpanm Module::Install&lt;br /&gt;cpanm .&lt;br /&gt;&lt;/pre&gt;以上步驟做完就可以有一個最簡單的 perl-5.12.3 的執行環境&lt;br /&gt;之後使用前可以手動執行 source ~/perl5/perlbrew/etc/bashrc&lt;br /&gt;或是直接把 source ~/perl5/perlbrew/etc/bashrc 加在 ~/.bashrc 裡面&lt;br /&gt;&lt;br /&gt;P.S. 可以先將家目錄底下的 .cpan .cpanm .cpanplus 目錄都刪除掉 (或是更名就可以了) 再開始執行上面的步驟比較不會發生一些奇怪的問題&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-2830403503809390102?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/2830403503809390102/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=2830403503809390102' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2830403503809390102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2830403503809390102'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/04/perlbrew-perl-5120-cpanm.html' title='使用 perlbrew 來安裝 perl-5.12.3 跟 cpanm 的筆記'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-7422129278744973793</id><published>2010-04-23T10:31:00.001+08:00</published><updated>2010-04-23T10:31:59.765+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='GnuPG'/><title type='text'>使用 GnuPG 驗證 Ubuntu 10.04 LTS RC 安裝光碟 ISO 檔</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;首先到台灣的 &lt;a href='http://tw.releases.ubuntu.com/'&gt;Mirror Site&lt;/a&gt; 上面下載相關的檔案回來&lt;br/&gt;&lt;blockquote&gt;$ wget http://tw.releases.ubuntu.com/10.04/&lt;b&gt;SHA1SUMS&lt;/b&gt;&lt;br/&gt;$ wget http://tw.releases.ubuntu.com/10.04/&lt;b&gt;SHA1SUMS.gpg&lt;/b&gt;&lt;br/&gt;$ wget http://tw.releases.ubuntu.com/10.04/&lt;b&gt;ubuntu-10.04-rc-desktop-i386.iso&lt;/b&gt;&lt;br/&gt;&lt;/blockquote&gt;利用 SHA1SUMS.gpg 來檢查 SHA1SUMS 是否為 Ubuntu 官方釋出的檔案 (有可能是經過偽造的)&lt;br/&gt;&lt;blockquote&gt;$ gpg --verify SHA1SUMS.gpg SHA1SUMS&lt;br/&gt;gpg: 由 2010年04月22日 (週四) 21時22分58秒 CST 建立的簽章, 使用 DSA 金鑰 ID &lt;b&gt;FBB75451&lt;/b&gt;&lt;br/&gt;gpg: 無法檢查簽章: 找不到公鑰&lt;br/&gt;&lt;/blockquote&gt;在 Ubuntu 系統上一開始檢查一定會找不到，不過可以透過 apt-key list 找到公鑰&lt;br/&gt;&lt;blockquote&gt;$ sudo apt-key list&lt;br/&gt;/etc/apt/trusted.gpg&lt;br/&gt;--------------------&lt;br/&gt;pub   1024D/437D05B5 2004-09-12&lt;br/&gt;uid                  Ubuntu Archive Automatic Signing Key &amp;lt;ftpmaster@ubuntu.com&amp;gt;&lt;br/&gt;sub   2048g/79164387 2004-09-12&lt;br/&gt;&lt;br/&gt;pub   1024D/&lt;b&gt;FBB75451&lt;/b&gt; 2004-12-30&lt;br/&gt;uid                  Ubuntu CD Image Automatic Signing Key &amp;lt;cdimage@ubuntu.com&amp;gt;&lt;br/&gt;&lt;/blockquote&gt;那麼就可以使用 apt-key export 取出公鑰&lt;br/&gt;&lt;blockquote&gt;$ sudo apt-key export FBB75451 &amp;gt; cdimage.gpg&lt;br/&gt;&lt;/blockquote&gt;接下來在匯入 GnuPG 的金鑰鑰匙圈裡&lt;br/&gt;&lt;blockquote&gt;$ gpg --import cdimage.gpg &lt;br/&gt;gpg: 金鑰 FBB75451: 公鑰 "Ubuntu CD Image Automatic Signing Key &amp;lt;cdimage@ubuntu.com&amp;gt;" 已匯入&lt;br/&gt;gpg: 處理總量: 1&lt;br/&gt;gpg:               已匯入: 1&lt;br/&gt;gpg: 3 個勉強信任以及 1 個完全信任是 classic 信任模型的最小需求&lt;br/&gt;gpg: 深度: 0  有效:   3  已簽署:  18  信任: 0-, 0q, 0n, 0m, 0f, 3u&lt;br/&gt;gpg: 深度: 1  有效:  18  已簽署:  12  信任: 5-, 0q, 0n, 13m, 0f, 0u&lt;br/&gt;gpg: 深度: 2  有效:   2  已簽署:   2  信任: 2-, 0q, 0n, 0m, 0f, 0u&lt;br/&gt;gpg: 下次信任資料庫檢查將於 2012-07-13 進行&lt;br/&gt;&lt;/blockquote&gt;這時候再重新執行前面第一行指令&lt;br/&gt;&lt;blockquote&gt;$ gpg --verify SHA1SUMS.gpg SHA1SUMS&lt;br/&gt;gpg: 由 2010年04月22日 (週四) 21時22分58秒 CST 建立的簽章, 使用 DSA 金鑰 ID FBB75451&lt;br/&gt;gpg: 完好的簽章來自於 "Ubuntu CD Image Automatic Signing Key &amp;lt;cdimage@ubuntu.com&amp;gt;"&lt;br/&gt;gpg: &lt;b&gt;警告: 這把金鑰並非以受信任的簽章所認證!&lt;/b&gt;&lt;br/&gt;gpg:          &lt;b&gt;沒有證據指出這個簽章屬於這個持有者.&lt;/b&gt;&lt;br/&gt;主鑰指紋: C598 6B4F 1257 FFA8 6632  CBA7 4618 1433 FBB7 5451&lt;br/&gt;&lt;/blockquote&gt;出現這個警告的原因是因為還沒有將 FBB75451 這把公鑰加進自己的信任小圈圈裡面&lt;br/&gt;不過不要緊，假設我們能夠信任 Ubuntu 系統裡面本來就有的公鑰 (如果不能信任的話，那就不應該繼續使用你的 Ubuntu 系統了 :P)&lt;br/&gt;所以現在可以相信 SHA1SUMS 這個檔案真的是 Ubuntu 官方釋放出來的&lt;br/&gt;於是就可以使用指令 sha1sum 來檢查 ubuntu-10.04-rc-desktop-i386.iso 這個檔案的完整性了&lt;br/&gt;&lt;blockquote&gt;$ grep ubuntu-10.04-rc-desktop-i386.iso SHA1SUMS&lt;br/&gt;66227f4fb31a25a22614666cd4ab538cc8f60956 *ubuntu-10.04-rc-desktop-i386.iso&lt;br/&gt;$ sha1sum ubuntu-10.04-rc-desktop-i386.iso&lt;br/&gt;66227f4fb31a25a22614666cd4ab538cc8f60956  ubuntu-10.04-rc-desktop-i386.iso&lt;br/&gt;&lt;/blockquote&gt;嗯~ 沒錯我下載的 ISO 真的是 Ubuntu 官方釋出的版本~ :D&lt;br/&gt;&lt;br/&gt;參考資料：&lt;a href='http://wiki.debian.org.tw/index.php/GnuPG'&gt;http://wiki.debian.org.tw/index.php/GnuPG&lt;/a&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-7422129278744973793?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/7422129278744973793/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=7422129278744973793' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/7422129278744973793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/7422129278744973793'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/04/gnupg-ubuntu-1004-lts-rc-iso.html' title='使用 GnuPG 驗證 Ubuntu 10.04 LTS RC 安裝光碟 ISO 檔'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-8208969122120258199</id><published>2010-04-20T14:53:00.001+08:00</published><updated>2010-04-20T14:53:17.959+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Anti-virus'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux 系統上面的免費防毒軟體 avast! Linux Home Edition</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;官方網頁在 &lt;a href='http://www.avast.com/linux-home-edition'&gt;http://www.avast.com/linux-home-edition&lt;/a&gt;&lt;br/&gt;在 Download 底下就可以下載到安裝的套件包了&lt;br/&gt;每次使用前要先到 &lt;a href='http://www.avast.com/registration-free-antivirus.php'&gt;http://www.avast.com/registration-free-antivirus.php&lt;/a&gt; 上面申請 license key&lt;br/&gt;如果遇到 crash 的問題可以試試看&lt;br/&gt;&lt;ul&gt;&lt;li style='list-style-type: none;'&gt;&lt;p class='line891'&gt;&lt;tt&gt;$ sudo sysctl -w kernel.shmmax=128000000&lt;/tt&gt; &lt;span id='line-10' class='anchor'/&gt;&lt;span id='line-11' class='anchor'/&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;也許可以解決問題&lt;br/&gt;&lt;br/&gt;參考資料：&lt;br/&gt;&lt;blockquote&gt;&lt;a href='http://forum.avast.com/index.php?topic=57775.0'&gt;http://forum.avast.com/index.php?topic=57775.0&lt;/a&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-8208969122120258199?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/8208969122120258199/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=8208969122120258199' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8208969122120258199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8208969122120258199'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/04/linux-avast-linux-home-edition.html' title='Linux 系統上面的免費防毒軟體 avast! Linux Home Edition'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-768943106049593804</id><published>2010-02-17T16:05:00.000+08:00</published><updated>2010-02-17T16:06:50.012+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ScribeFire'/><category scheme='http://www.blogger.com/atom/ns#' term='Bugfix'/><category scheme='http://www.blogger.com/atom/ns#' term='Extension'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox 擴充套件 ScribeFire 3.5 的錯誤解決方法</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;在 ScribeFire 升級到 3.5 後就無法正常啟動使用了&lt;br/&gt;稍為 Google 了一下找到日本網友有提供解決的方法&lt;br/&gt;&lt;a href='http://uratene.sblo.jp/category/811798-1.html'&gt;http://uratene.sblo.jp/category/811798-1.html&lt;/a&gt;&lt;br/&gt;&lt;a href='http://fxwiki.blog63.fc2.com/blog-entry-246.html'&gt;http://fxwiki.blog63.fc2.com/blog-entry-246.html&lt;/a&gt;&lt;br/&gt;過程就是到該套件的目錄底下 Linux 系統應該會在 ~/.mozilla/firefox/XXXXXXXX.default/extensions/{F807FACD-E46A-4793-B345-D58CB177673C} 底下&lt;br/&gt;進入子目錄 chrome 底下解開 scribefire.jar&lt;br/&gt;&lt;blockquote&gt;$ unzip scribefire.jar&lt;br/&gt;&lt;/blockquote&gt;然後修改 locale/zh-TW/overlay.dtd 裡面的內容&lt;br/&gt;將 123, 124 行的&lt;br/&gt;&lt;blockquote&gt;&amp;lt;!ENTITY performancing.editor.bar.strong.tt "強烈標示 &amp;lt;Strong&amp;gt;"&amp;gt;&lt;br/&gt;&amp;lt;!ENTITY performancing.editor.bar.em.tt "特別強調 &amp;lt;em&amp;gt;"&amp;gt;&lt;br/&gt;&lt;/blockquote&gt;改成&lt;br/&gt;&lt;blockquote&gt;&amp;lt;!ENTITY performancing.editor.bar.strong.tt "強烈標示 &amp;amp;lt;Strong&amp;amp;gt;"&amp;gt;&lt;br/&gt;&amp;lt;!ENTITY performancing.editor.bar.em.tt "特別強調 &amp;amp;lt;em&amp;amp;gt;"&amp;gt;&lt;br/&gt;&lt;/blockquote&gt;然後更新壓縮檔 scribefire.jar&lt;br/&gt;&lt;blockquote&gt;$ zip -r scribefire.jar content locale skin&lt;br/&gt;&lt;/blockquote&gt;再重新啟動 firefox 就可以了~&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-768943106049593804?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/768943106049593804/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=768943106049593804' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/768943106049593804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/768943106049593804'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/02/firefox-scribefire-35.html' title='Firefox 擴充套件 ScribeFire 3.5 的錯誤解決方法'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-3494330162914550900</id><published>2010-02-17T15:29:00.001+08:00</published><updated>2010-02-17T15:30:34.441+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='alltray'/><title type='text'>AllTray + "app mode" of Google Chrome</title><content type='html'>以單純要收聽台灣的網路廣播就可以執行以下的命令&lt;br /&gt;&lt;blockquote&gt;$ cat &amp;gt; .local/share/applications/hichannel.desktop &amp;lt;&amp;lt;ENDLINE&lt;endline&gt;&lt;/endline&gt;&lt;br /&gt;[Desktop Entry]&lt;br /&gt;Name=hiChannel 網路廣播&lt;br /&gt;Exec=alltray google-chrome --app=http://fd.idv.tw/radio/player.html&lt;br /&gt;Icon=google-chrome&lt;br /&gt;Type=Application&lt;br /&gt;Categories=GTK;Application;AudioVideo;Audio;Player;&lt;br /&gt;ENDLINE&lt;/blockquote&gt;然後就會在應用程式選單裡面看到&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_cYaJquZOLiw/S3uUa1hiDjI/AAAAAAAACnY/YweBLWd9VgI/s1600-h/menu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_cYaJquZOLiw/S3uUa1hiDjI/AAAAAAAACnY/YweBLWd9VgI/s320/menu.png" /&gt;&lt;/a&gt;&lt;/div&gt;執行起來就像是&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_cYaJquZOLiw/S3uVLuYFS5I/AAAAAAAACng/g7Y2pwS0UOg/s1600-h/tray.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_cYaJquZOLiw/S3uVLuYFS5I/AAAAAAAACng/g7Y2pwS0UOg/s320/tray.png" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;還可以點選工具列中的圖示隱藏起來&lt;br /&gt;&lt;br /&gt;或是想要使用微軟的 MSN Messenger 網頁版&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp;$ cat &amp;gt; .local/share/applications/msn.desktop &amp;lt;&amp;lt;ENDLINE&lt;endline&gt;&lt;/endline&gt;&lt;br /&gt;&amp;nbsp;[Desktop Entry]&lt;br /&gt;Name=MSN Messenger 網頁版&lt;br /&gt;Exec=alltray google-chrome --app=http://webmsn.msn.com.tw/wlml/index.htm?uri=webmsn.msn.com.tw&lt;br /&gt;Icon=google-chrome&lt;br /&gt;Type=Application&lt;br /&gt;Categories=Network;InstantMessaging;&lt;br /&gt;ENDLINE&lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_cYaJquZOLiw/S3uZ1R7W22I/AAAAAAAACno/mC1CA-NRKiM/s1600-h/msn.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/_cYaJquZOLiw/S3uZ1R7W22I/AAAAAAAACno/mC1CA-NRKiM/s640/msn.png" width="307" /&gt;&lt;/a&gt;&lt;/div&gt;不過相信目前應該沒有人會想要使用 MSN Messenger 網頁版&lt;br /&gt;雖然它有機會做得更好更容易使用，不過目前的情況並不是這樣的 :P&lt;br /&gt;&lt;br /&gt;總之就是 AllTray 跟 Google Chrome 的 "app mode" 搭配使用可以讓許多的網頁應用程式使用起來更像是本機上面的應用程式~ :)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-3494330162914550900?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://fd.idv.tw/radio/player.html' title='AllTray + &quot;app mode&quot; of Google Chrome'/><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/3494330162914550900/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=3494330162914550900' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3494330162914550900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3494330162914550900'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/02/alltray-app-mode-of-google-chrome.html' title='AllTray + &quot;app mode&quot; of Google Chrome'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_cYaJquZOLiw/S3uUa1hiDjI/AAAAAAAACnY/YweBLWd9VgI/s72-c/menu.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-7791095552607746325</id><published>2010-01-31T13:57:00.000+08:00</published><updated>2010-01-31T14:01:02.565+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Installation'/><title type='text'>在 Debian GNU/Linux 5.0.3 (Lenny) 上面安裝 Drupal 6.15</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;首先要準備一個 Debian GNU/Linux 5.0.3 (Lenny) 的系統環境，這邊是選擇使用 debian-503-i386-netinst.iso 並透過網路安裝，&lt;br/&gt;在安裝過程當中語系選擇英文並且在 Software selection 時只選擇安裝 Web server 以及 SQL database 來安裝，盡量維持系統精簡，&lt;br/&gt;&lt;img style='max-width: 800px;' src='http://lh5.ggpht.com/_cYaJquZOLiw/S2T4zh66fiI/AAAAAAAACmA/hdysH2sqYZg/%5BUNSET%5D.png?imgmax=800'/&gt;&lt;br/&gt;接下來應該只要再抓 59 個套件安裝，在 2M/256K ADSL 正常情況的網路環境下五分鐘以內就可以裝好了，&lt;br/&gt;&lt;img style='max-width: 800px;' src='http://lh4.ggpht.com/_cYaJquZOLiw/S2UI-Ohqt8I/AAAAAAAACmE/Mjy0I7ynW3o/%5BUNSET%5D.png?imgmax=800'/&gt;&lt;br/&gt;到這邊為止應該已經裝好所需要的 Apache 跟 PostgreSQL 了，重新啟動系統後再安裝 drupal6 跟 php5-pgsql 套件，&lt;br/&gt;&lt;blockquote&gt;# apt-get install drupal6 php5-pgsql&lt;br/&gt;&lt;/blockquote&gt;在設定 drupal6 的畫面中記得要輸入密碼，不然系統會改使用 ident 機制，安裝完後需要重新啟動 Apache&lt;br/&gt;&lt;blockquote&gt;# /etc/init.d/apache2 restart&lt;br/&gt;&lt;/blockquote&gt;就可以在 http://XXX.XXX.XXX.XXX/drupal6/install.php 看到 Drupal6 接下來的安裝程序&lt;br/&gt;&lt;img style='max-width: 800px;' src='http://lh5.ggpht.com/_cYaJquZOLiw/S2UQd944s4I/AAAAAAAACmM/z9EwxD-lvz4/%5BUNSET%5D.png?imgmax=800'/&gt;&lt;br/&gt;不過此時只有英文介面，如果需要安裝繁體中文介面就要執行接下來的動作，&lt;br/&gt;&lt;blockquote&gt;# wget http://ftp.drupal.org/files/projects/zh-hant-6.x-1.5.tar.gz -O - | tar xz -C /usr/share/drupal6&lt;br/&gt;&lt;/blockquote&gt;然後重新載入網頁就可以看到繁體中文介面，&lt;br/&gt;&lt;img style='max-width: 800px;' src='http://lh3.ggpht.com/_cYaJquZOLiw/S2UTmUzYXpI/AAAAAAAACmQ/PNM5gHBPWsw/%5BUNSET%5D.png?imgmax=800'/&gt;&lt;br/&gt;Drupal6 初始設定完成之後馬上就會發現到目前的 Drupal6 版本並不安全，&lt;br/&gt;&lt;img style='max-width: 800px;' src='http://lh3.ggpht.com/_cYaJquZOLiw/S2UVUsCvAVI/AAAAAAAACmU/0M8TVBNFTEw/%5BUNSET%5D.png?imgmax=800'/&gt;&lt;br/&gt;因為 Debian GNU/Linux 5.0.3 (Lenny) 上面的 Drupal 版本只有到 6.6 版，&lt;br/&gt;所以現在要去升級到目前最新穩定版本 6.15&lt;br/&gt;&lt;blockquote&gt;# wget http://ftp.drupal.org/files/projects/drupal-6.15.tar.gz -O - | tar xz -C /usr/share&lt;br/&gt;# wget http://ftp.drupal.org/files/projects/zh-hant-6.x-1.5.tar.gz -O - | tar xz -C /usr/share/drupal-6.15&lt;br/&gt;# cd /usr/share&lt;br/&gt;# chown -R root.root drupal-6.15&lt;br/&gt;# mv -v drupal6 drupal-6.6&lt;br/&gt;# ln -s drupal-6.15 drupal6&lt;br/&gt;# cd drupal-6.15&lt;br/&gt;# rm -fr profiles sites&lt;br/&gt;# ln -s /etc/drupal/6/profiles&lt;br/&gt;# ln -s /etc/drupal/6/sites&lt;br/&gt;&lt;/blockquote&gt;然後在網頁瀏灠器裡面訪問 http://XXX.XXX.XXX.XXX/drupal6/update.php 來更新資料庫&lt;br/&gt;&lt;img src='http://lh4.ggpht.com/_cYaJquZOLiw/S2UaedIFSmI/AAAAAAAACmk/c6A-tR12u-8/%5BUNSET%5D.png?imgmax=800'/&gt;&lt;br/&gt;更新完後回到 [狀態報告] 就可以看到&lt;br/&gt;&lt;img src='http://lh5.ggpht.com/_cYaJquZOLiw/S2UaU3lcdHI/AAAAAAAACmg/b-nhQiznxps/%5BUNSET%5D.png?imgmax=800'/&gt;&lt;br/&gt;此時算是才把 Drupal 6.15 在 Debian GNU/Linux 5.0.3 (Lenny) 上面安裝好，&lt;br/&gt;不過目前都只有框架沒有內容也沒有安裝任何模組也沒有客製化的 Theme&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-7791095552607746325?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/7791095552607746325/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=7791095552607746325' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/7791095552607746325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/7791095552607746325'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/01/debian-gnulinux-503-lenny-drupal-615.html' title='在 Debian GNU/Linux 5.0.3 (Lenny) 上面安裝 Drupal 6.15'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_cYaJquZOLiw/S2T4zh66fiI/AAAAAAAACmA/hdysH2sqYZg/s72-c/%5BUNSET%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-9137742559510021893</id><published>2010-01-28T22:03:00.000+08:00</published><updated>2010-01-28T22:05:14.344+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mercurial'/><title type='text'>在 Ubuntu 9.04 上面使用 hg view</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;之前寫過一篇 &lt;a href='http://fourdollars.blogspot.com/2009/10/ubuntu-904-hgview_17.html'&gt;在 Ubuntu 9.04 上面手動安裝 hgview&lt;/a&gt;&lt;br/&gt;剛剛發現原來在 ~/.hgrc 裡面加上&lt;br/&gt;&lt;blockquote&gt;[extensions]&lt;br/&gt;hgk=&lt;br/&gt;&lt;/blockquote&gt;這樣就可以使用 hg view 了~&lt;br/&gt;在 &lt;a href='http://mercurial.selenic.com/wiki/HgkExtension'&gt;http://mercurial.selenic.com/wiki/HgkExtension&lt;/a&gt; 找到的資訊&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-9137742559510021893?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/9137742559510021893/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=9137742559510021893' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/9137742559510021893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/9137742559510021893'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/01/ubuntu-904-hg-view.html' title='在 Ubuntu 9.04 上面使用 hg view'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-206683493798379663</id><published>2010-01-22T12:56:00.001+08:00</published><updated>2010-01-22T12:56:08.452+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>在 Linux 系統上面手動安裝 Firefox 3.6</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;首先到 &lt;a href='http://www.mozilla.com/'&gt;http://www.mozilla.com/&lt;/a&gt; 下載 firefox-3.6.tar.bz2 回來&lt;br/&gt;然後解壓縮到 /usr/local/lib/firefox-3.6 底下&lt;br/&gt;&lt;blockquote&gt;$ mkdir -p /usr/local/lib&lt;br/&gt;$ tar xf firefox-3.6.tar.bz2 -C /usr/local/lib&lt;br/&gt;$ mv /usr/local/lib/firefox /usr/local/lib/firefox-3.6&lt;br/&gt;&lt;/blockquote&gt;然後建立一個啟動圖示&lt;br/&gt;&lt;blockquote&gt;$ mkdir -p .local/share/applications/&lt;br/&gt;$ cat &amp;gt; .local/share/applications/firefox-3.6.desktop &amp;lt;&amp;lt;ENDLINE&lt;br/&gt;[Desktop Entry]&lt;br/&gt;Version=3.6&lt;br/&gt;Name=Firefox 3.6 網頁瀏灠器&lt;br/&gt;Comment=瀏灠網頁&lt;br/&gt;GenericName=網頁瀏灠器&lt;br/&gt;Exec=/usr/local/lib/firefox-3.6/firefox %u&lt;br/&gt;Terminal=false&lt;br/&gt;X-MultipleArgs=false&lt;br/&gt;Type=Application&lt;br/&gt;Icon=/usr/local/lib/firefox-3.6/chrome/icons/default/default48.png&lt;br/&gt;Categories=Application;Network;&lt;br/&gt;MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;&lt;br/&gt;StartupWMClass=Firefox&lt;br/&gt;StartupNotify=true                                                                                                                                                                                               &lt;br/&gt;ENDLINE&lt;br/&gt;&lt;/blockquote&gt;這樣就可以了~ :D&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-206683493798379663?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/206683493798379663/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=206683493798379663' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/206683493798379663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/206683493798379663'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/01/linux-firefox-36.html' title='在 Linux 系統上面手動安裝 Firefox 3.6'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-1391917206687836613</id><published>2010-01-17T23:31:00.000+08:00</published><updated>2010-01-17T23:33:07.788+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='BetaRadio'/><category scheme='http://www.blogger.com/atom/ns#' term='InternetRadio'/><title type='text'>Google Chrome Extension: Taiwan Radio Tuner</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;這個 Google Chrome Extension 算是 &lt;a href='http://code.google.com/p/betaradio/'&gt;BetaRadio&lt;/a&gt; 開發過程中的一個副產品&lt;br/&gt;下載的網址在 &lt;a href='https://chrome.google.com/extensions/detail/hacebidkncpkfenhpapdbkcefalehepa'&gt;https://chrome.google.com/extensions/detail/hacebidkncpkfenhpapdbkcefalehepa&lt;/a&gt;&lt;br/&gt;使用說明整理在 &lt;a href='http://code.google.com/p/betaradio/wiki/GoogleChromeExtension'&gt;http://code.google.com/p/betaradio/wiki/GoogleChromeExtension&lt;/a&gt;&lt;br/&gt;希望大家會喜歡使用~ ;)&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-1391917206687836613?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/1391917206687836613/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=1391917206687836613' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1391917206687836613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1391917206687836613'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/01/google-chrome-extension-taiwan-radio.html' title='Google Chrome Extension: Taiwan Radio Tuner'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-2774017823956205435</id><published>2010-01-09T20:32:00.000+08:00</published><updated>2010-01-09T20:33:21.943+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='InternetRadio'/><title type='text'>在 Ubuntu 8.04.3 可以使用 Google Chrome 瀏灠器來聽網路廣播~ ;)</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;延續上一篇文章 &lt;a href='http://fourdollars.blogspot.com/2010/01/ubuntu-8043-firefox-d.html'&gt;在 Ubuntu 8.04.3 用 Firefox 瀏灠器就可以聽網路廣播了~ :D&lt;/a&gt;&lt;br/&gt;如果是想要在 Ubuntu 8.04.3 上面使用 Google Chrome 來收聽網路廣播的話&lt;br/&gt;就要另外安裝 mozilla-mplayer 這個套件才行&lt;br/&gt;然後連到 &lt;a href='http://fd.idv.tw/radio/player.html'&gt;http://fd.idv.tw/radio/player.html&lt;/a&gt;&lt;br/&gt;或者是直接安裝使用 Google Chrome Extension&lt;br/&gt;&lt;a href='http://fd.idv.tw/radio/hichannel.crx'&gt;http://fd.idv.tw/radio/hichannel.crx&lt;/a&gt;&lt;br/&gt;又或者是增加一個檔案 ~/.local/share/applications/hichannel.desktop&lt;br/&gt;內容填上&lt;br/&gt;&lt;blockquote&gt;[Desktop Entry]&lt;br/&gt;Name=hiChannel 網路廣播&lt;br/&gt;Exec=google-chrome --app=http://fd.idv.tw/radio/player.html&lt;br/&gt;Icon=google-chrome&lt;br/&gt;Type=Application&lt;br/&gt;Categories=GTK;Application;AudioVideo;Audio;Player;&lt;br/&gt;&lt;/blockquote&gt;這樣就是一個(偽)不用開網頁瀏灠器也可以聽網路廣播的應用程式了~ :P&lt;br/&gt;&lt;img src='http://lh4.ggpht.com/_cYaJquZOLiw/S0h2_ENX2XI/AAAAAAAAClY/PkiF_-LiH1Q/%5BUNSET%5D.png?imgmax=800' style='max-width: 800px;'/&gt;&lt;br/&gt;&lt;h3 class='post-title'/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-2774017823956205435?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/2774017823956205435/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=2774017823956205435' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2774017823956205435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2774017823956205435'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/01/ubuntu-8043-google-chrome.html' title='在 Ubuntu 8.04.3 可以使用 Google Chrome 瀏灠器來聽網路廣播~ ;)'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_cYaJquZOLiw/S0h2_ENX2XI/AAAAAAAAClY/PkiF_-LiH1Q/s72-c/%5BUNSET%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-7542212761083870734</id><published>2010-01-08T12:31:00.001+08:00</published><updated>2010-01-08T13:04:58.728+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='InternetRadio'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>在 Ubuntu 8.04.3 用 Firefox 瀏灠器就可以聽網路廣播了~ :D</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;要在 Ubuntu 8.04.3 底下的 Firefox 3.0.17 聽網路廣播&lt;br/&gt;只安裝好 gstreamer0.10-plugins-bad, gstreamer0.10-plugins-ugly, gstreamer0.10-ffmpeg 這幾個套件&lt;br/&gt;然後連到 &lt;a href='http://fd.idv.tw/radio/player.html'&gt;http://fd.idv.tw/radio/player.html&lt;/a&gt; 就可以聽了~&lt;br/&gt;&lt;br/&gt;&lt;span class='plurk_content'&gt;Mac OS X 10.4+ 上面要裝 &lt;a href='http://www.microsoft.com/windows/windowsmedia/player/wmcomponents.mspx'&gt;Flip4Mac WMV Components for QuickTime&lt;/a&gt;&lt;/span&gt;&lt;br/&gt;然後用 Safari 就可以聽了~&lt;br/&gt;&lt;br/&gt;在 Windows 上面開 IE7/IE8/Safari/Opera/Firefox/Google Chrome 都可以聽~&lt;br/&gt;&lt;br/&gt;另外寫了一個給 Google Chrome 用的 Extension&lt;br/&gt;&lt;a href='http://fd.idv.tw/radio/hichannel.crx'&gt;http://fd.idv.tw/radio/hichannel.crx&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Have Fun~ ^o^&lt;br/&gt;&lt;br/&gt;P.S. 誠徵 Icon 設計師幫小弟做出 Google Chrome Extension 要使用的 Icon 尺寸分別是 19x19/32x32/48x48/128x128 的 PNG&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-7542212761083870734?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/7542212761083870734/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=7542212761083870734' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/7542212761083870734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/7542212761083870734'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2010/01/ubuntu-8043-firefox-d.html' title='在 Ubuntu 8.04.3 用 Firefox 瀏灠器就可以聽網路廣播了~ :D'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6344955084206628167</id><published>2009-12-14T23:03:00.000+08:00</published><updated>2009-12-14T23:09:00.090+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Delegation in C - 在 C 語言當中實作委派方法 (2)</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;延續前一篇文章的想法 &lt;a href='http://fourdollars.blogspot.com/2009/12/delegation-in-c-c-1.html'&gt;Delegation in C - 在 C 語言當中實作委派方法 (1)&lt;/a&gt;&lt;br/&gt;像是&lt;br/&gt;&lt;blockquote&gt;invoke_all_func(&amp;amp;list, "Hello World");&lt;br/&gt;&lt;/blockquote&gt;這樣的函式顯然不夠彈性&lt;br/&gt;於是想到一個解決方法就是傳入一個 function pointer 給 invoke_all_func() 於是就變成像是下面這樣&lt;br/&gt;&lt;blockquote&gt;invoke_all_func(&amp;amp;list, my_cb_func, "Hello World");&lt;br/&gt;&lt;/blockquote&gt;讓 invoke_all_func() 內部去 callback 這個傳入的 function pointer&lt;br/&gt;再利用 &lt;stdarg.h&gt; &amp;lt;stdarg.h&amp;gt; 所提供相關的函式將傳入的參數取回&lt;br/&gt;因為只有呼叫 invoke_all_func() 的地方才知道傳入的參數有哪些&lt;br/&gt;所以負責將參數取來出也是相當合理的於是 my_cb_func() 的實作就會像下面這樣&lt;br/&gt;&lt;blockquote&gt;static bool my_cb_func(func_t func, va_list ap)&lt;br/&gt;{&lt;br/&gt;    my_func_t my_func = (my_func_t) func;&lt;br/&gt;    const char* value = va_arg(ap, const char*);&lt;br/&gt;    return my_func(value);&lt;br/&gt;}&lt;br/&gt;&lt;/blockquote&gt;其中的 my_func_t 是&lt;br/&gt;&lt;blockquote&gt;typedef bool (*my_func_t)(const char*);&lt;br/&gt;&lt;/blockquote&gt;於是就可以定義不一樣的 my_func_t 跟 my_cb_func() 來使用同樣 event bubbling 的方法&lt;br/&gt;達到程式碼可以重複使用的好處&lt;br/&gt;詳細的程式碼實作放在 &lt;a href='http://fd.idv.tw/tux/callback.tar.bz2'&gt;http://fd.idv.tw/tux/callback.tar.bz2&lt;/a&gt;&lt;br/&gt;沒有版權也不負責任更不保證沒有長蟲~ :P&lt;br/&gt;&lt;/stdarg.h&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6344955084206628167?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6344955084206628167/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6344955084206628167' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6344955084206628167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6344955084206628167'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/12/delegation-in-c-c-2.html' title='Delegation in C - 在 C 語言當中實作委派方法 (2)'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-988021595903023634</id><published>2009-12-13T01:57:00.000+08:00</published><updated>2009-12-14T23:10:06.569+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Delegation in C - 在 C 語言當中實作委派方法 (1)</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;原本的想法是想要能夠在 C 語言中實現 event bubbling&lt;br/&gt;提供一些函式去註冊需要被 callback 的函式&lt;br/&gt;然後在 event 發生時去呼叫所有註冊過的函式&lt;br/&gt;於是就有了以下的程式碼&lt;br/&gt;&lt;br/&gt;首先來看一段程式碼片段&lt;br/&gt;&lt;blockquote&gt;int main(int argc, char* argv[])&lt;br/&gt;{&lt;br/&gt;    list_t* list = NULL;&lt;br/&gt;&lt;br/&gt;    &lt;b&gt;add_func&lt;/b&gt;(&amp;amp;list, funcA);&lt;br/&gt;    &lt;b&gt;add_func&lt;/b&gt;(&amp;amp;list, funcB);&lt;br/&gt;    &lt;b&gt;add_func&lt;/b&gt;(&amp;amp;list, funcC);&lt;br/&gt;&lt;br/&gt;    &lt;b&gt;invoke_all_func&lt;/b&gt;(&amp;amp;list, "Hello World");&lt;br/&gt;&lt;br/&gt;    return 0;&lt;br/&gt;}&lt;br/&gt;&lt;/blockquote&gt;這邊利用 add_func() 將 funcA, funcB, funcC 註冊到某個 double linked list 上面&lt;br/&gt;然後呼叫 invoke_all_func() 去呼叫註冊好的  funcA, funcB, funcC&lt;br/&gt;&lt;blockquote&gt;static bool funcA(&lt;b&gt;const char*&lt;/b&gt; str)&lt;br/&gt;{&lt;br/&gt;    fprintf(stderr, "%s says %s\n", __FUNCTION__,  str);&lt;br/&gt;    return true;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;static bool funcB(&lt;b&gt;const char*&lt;/b&gt; str)&lt;br/&gt;{&lt;br/&gt;    fprintf(stderr, "%s says %s\n", __FUNCTION__,  str);&lt;br/&gt;    return true;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;static bool funcC(&lt;b&gt;const char*&lt;/b&gt; str)&lt;br/&gt;{&lt;br/&gt;    fprintf(stderr, "%s says %s\n", __FUNCTION__,  str);&lt;br/&gt;    return true;&lt;br/&gt;}&lt;br/&gt;&lt;/blockquote&gt;執行後的結果是&lt;br/&gt;&lt;blockquote&gt;funcC says Hello World&lt;br/&gt;funcB says Hello World&lt;br/&gt;funcA says Hello World&lt;br/&gt;&lt;/blockquote&gt;這邊的設計上是越後面註冊的函式越先被呼叫到&lt;br/&gt;如果把 funcC() 的回傳值改成 false 結果就會變成&lt;br/&gt;&lt;blockquote&gt;funcC says Hello World&lt;br/&gt;&lt;/blockquote&gt;只要某個註冊過的函式先回傳了 false 接下去的函式就不必再去執行了&lt;br/&gt;於是這兩個負責註冊跟呼叫的函式的 prototype 應該就長得像是下面這樣&lt;br/&gt;&lt;blockquote&gt;bool add_func(list_t** list, &lt;b&gt;bool (*func)(const char*)&lt;/b&gt;);&lt;br/&gt;bool invoke_all_func(list_t** list, &lt;b&gt;const char* msg&lt;/b&gt;);&lt;br/&gt;&lt;/blockquote&gt;然後再去實作這些函式的剩餘部份，不過問題來了...&lt;br/&gt;當 funcA, funcB, funcC 換成了&lt;br/&gt;&lt;blockquote&gt;static bool funcA(&lt;b&gt;int&lt;/b&gt; val)&lt;br/&gt;{&lt;br/&gt;    fprintf(stderr, "%s count %d\n", __FUNCTION__,  val);&lt;br/&gt;    return true;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;static bool funcB(&lt;b&gt;int&lt;/b&gt; val)&lt;br/&gt;{&lt;br/&gt;    fprintf(stderr, "%s count %d\n", __FUNCTION__,  val);&lt;br/&gt;    return true;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;static bool funcC(&lt;b&gt;int&lt;/b&gt; val)&lt;br/&gt;{&lt;br/&gt;    fprintf(stderr, "%s count %d\n", __FUNCTION__,  val);&lt;br/&gt;    return true;&lt;br/&gt;}&lt;br/&gt;&lt;/blockquote&gt;或者是換成了&lt;br/&gt;&lt;blockquote&gt;static bool funcA(&lt;b&gt;const char* msg, int val&lt;/b&gt;)&lt;br/&gt;{&lt;br/&gt;    fprintf(stderr, "%s says '%s' count: %d\n", __FUNCTION__, msg, val);&lt;br/&gt;    return true;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;static bool funcB(&lt;b&gt;const char* msg, int val&lt;/b&gt;)&lt;br/&gt;{&lt;br/&gt;    fprintf(stderr, "%s says '%s' count: %d\n", __FUNCTION__, msg, val);&lt;br/&gt;    return true;&lt;br/&gt;}   &lt;br/&gt;&lt;br/&gt;static bool funcC(&lt;b&gt;const char* msg, int val&lt;/b&gt;)&lt;br/&gt;{&lt;br/&gt;    fprintf(stderr, "%s says '%s' count: %d\n", __FUNCTION__, msg, val);&lt;br/&gt;    return true;&lt;br/&gt;}  &lt;br/&gt;&lt;/blockquote&gt;可是 event bubbling 的方法還是一模一樣的，這時候我們應該怎麼辦呢？&lt;br/&gt;有一種最不用花腦袋最快速可以解決問題的辦法就是去複製貼上程式碼，然後將參數換一換，有幾種不同的函式就重複幾次同樣的工作&lt;br/&gt;&lt;br/&gt;待續...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-988021595903023634?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/988021595903023634/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=988021595903023634' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/988021595903023634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/988021595903023634'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/12/delegation-in-c-c-1.html' title='Delegation in C - 在 C 語言當中實作委派方法 (1)'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-5488048313515870145</id><published>2009-12-06T20:06:00.000+08:00</published><updated>2009-12-06T20:07:39.087+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDF'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>在 Linux 系統上面合併多個 PDF 檔案成為一個 PDF 檔案</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;今天臨時興起想要去複習一下 &lt;a href='http://www.advancedlinuxprogramming.com/'&gt;Advanced Linux Programming&lt;/a&gt; 這本相當不錯的電子書&lt;br/&gt;於是就把網頁上面的 PDF 檔案都下載回電腦裡面&lt;br/&gt;這時候突然覺得要這樣分別開啟多個 PDF 檔案實在是麻煩&lt;br/&gt;於是在網路上面找了一些方法&lt;br/&gt;第一個方法是利用 ImageMagick 這個套件裡面的 convert 指令&lt;br/&gt;&lt;blockquote&gt;$ &lt;b&gt;convert&lt;/b&gt; alp-toc.pdf alp-ch*.pdf alp-ap*.pdf alp-index.pdf &lt;b&gt;alp.pdf&lt;/b&gt;&lt;br/&gt;&lt;/blockquote&gt;不過製作出來的 alp.pdf 品質感覺不是很好&lt;br/&gt;第二個方法是用 ghostscript 的 gs 指令&lt;br/&gt;&lt;blockquote&gt;$ &lt;b&gt;gs&lt;/b&gt; -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=&lt;b&gt;alp.pdf&lt;/b&gt; -dBATCH alp-toc.pdf alp-ch*.pdf alp-ap*.pdf alp-index.pdf&lt;br/&gt;&lt;/blockquote&gt;製作出來的 alp.pdf 品質不錯，不過花了不少時間&lt;br/&gt;第三個方法是用 pdftk 這個套件當中的指令 pdftk&lt;br/&gt;&lt;blockquote&gt;$ &lt;b&gt;pdftk&lt;/b&gt; alp-toc.pdf alp-ch*.pdf alp-ap*.pdf alp-index.pdf cat output &lt;b&gt;alp.pdf&lt;/b&gt;&lt;br/&gt;&lt;/blockquote&gt;這個方法比之前的方法都要來的快速~&lt;br/&gt;另外有網友提到可以使用看看 &lt;a href='http://www.pdfsam.org/'&gt;pdfsam&lt;/a&gt; 因為有太多相依上的套件要額外安裝就沒有想要繼續試下去啦~ :P&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-5488048313515870145?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/5488048313515870145/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=5488048313515870145' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5488048313515870145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5488048313515870145'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/12/linux-pdf-pdf.html' title='在 Linux 系統上面合併多個 PDF 檔案成為一個 PDF 檔案'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-2243494840900351873</id><published>2009-12-02T01:20:00.002+08:00</published><updated>2011-03-21T15:40:51.072+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Autotools'/><title type='text'>GNU Build System 執行檔案的分類 {bin,sbin,libexec,pkglib,noinst,check,EXTRA}_PROGRAMS</title><content type='html'>關於 {bin,noinst,check,EXTRA}_PROGRAMS 在&lt;a href='http://fourdollars.blogspot.com/2009/11/gnu-build-system-binnoinstcheckextrapro.html'&gt;之前的文章&lt;/a&gt;已經介紹過了&lt;br /&gt;剩下來的 {sbin,libexec,pkglib}_PROGRAMS 跟 bin_PROGRAMS 其實都是在 $make install 會安裝到預設的目錄底下&lt;br /&gt;差別只在於安裝到哪個目錄底下，例如以下的 Makefile.am&lt;br /&gt;&lt;pre class="brush: text"&gt;bin_PROGRAMS = main1&lt;br /&gt;sbin_PROGRAMS = main2&lt;br /&gt;libexec_PROGRAMS = main3&lt;br /&gt;pkglib_PROGRAMS = main4&lt;br /&gt;noinst_PROGRAMS = main5&lt;br /&gt;check_PROGRAMS = main6&lt;br /&gt;EXTRA_PROGRAMS = main7&lt;br /&gt;&lt;br /&gt;main1_SOURCES = main.c&lt;br /&gt;main2_SOURCES = main.c&lt;br /&gt;main3_SOURCES = main.c&lt;br /&gt;main4_SOURCES = main.c&lt;br /&gt;main5_SOURCES = main.c&lt;br /&gt;main6_SOURCES = main.c&lt;br /&gt;main7_SOURCES = main.c&lt;br /&gt;&lt;/pre&gt;如果沒有特別指定或改變 prefix 最後安裝的情況會像下面這樣&lt;br /&gt;&lt;pre class="brush: text"&gt;usr&lt;br /&gt;`-- local&lt;br /&gt;    |-- bin&lt;br /&gt;    |   `-- main1&lt;br /&gt;    |-- lib&lt;br /&gt;    |   `-- hello&lt;br /&gt;    |       `-- main4&lt;br /&gt;    |-- libexec&lt;br /&gt;    |   `-- main3&lt;br /&gt;    `-- sbin&lt;br /&gt;        `-- main2&lt;br /&gt;&lt;/pre&gt;main1 這個執行檔如預期會安裝到 bin 底下&lt;br /&gt;main2 類似 main1 會安裝到 sbin 底下&lt;br /&gt;另外比較不常見的 libexec_PROGRAMS 則會讓 main3 安裝在 libexec 底下&lt;br /&gt;還有 pkglib_PROGRAMS 會讓 main4 安裝在 lib/hello 底下，其中的 hello 就是 configure.ac 裡面的 package name&lt;br /&gt;configure.ac 如下：&lt;br /&gt;&lt;pre class="brush: text"&gt;AC_PREREQ([2.63])&lt;br /&gt;AC_INIT([&lt;font color='#ff0000'&gt;&lt;b&gt;hello&lt;/b&gt;&lt;/font&gt;], [0.0], [fourdollars@gmail.com])&lt;br /&gt;AC_CONFIG_SRCDIR([main.c])&lt;br /&gt;AC_CONFIG_HEADERS([config.h])&lt;br /&gt;AM_INIT_AUTOMAKE([-Wall -Werror foreign])&lt;br /&gt;&lt;br /&gt;# Checks for programs.&lt;br /&gt;AC_PROG_CC&lt;br /&gt;&lt;br /&gt;# Checks for libraries.&lt;br /&gt;&lt;br /&gt;# Checks for header files.&lt;br /&gt;&lt;br /&gt;# Checks for typedefs, structures, and compiler characteristics.&lt;br /&gt;&lt;br /&gt;# Checks for library functions.&lt;br /&gt;&lt;br /&gt;AC_CONFIG_FILES([Makefile])&lt;br /&gt;AC_OUTPUT&lt;br /&gt;&lt;/pre&gt;當然有點經驗的 Autotools 使用者都會知道這個 configure.ac 是用 $ autoscan 產生的 configure.scan 修改而來的&lt;br /&gt;剩下的 main5, main6, main7 如&lt;a href='http://fourdollars.blogspot.com/2009/11/gnu-build-system-binnoinstcheckextrapro.html'&gt;前一篇文章&lt;/a&gt;所介紹的一樣，是不會安裝進系統之中的&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-2243494840900351873?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/2243494840900351873/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=2243494840900351873' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2243494840900351873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2243494840900351873'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/12/gnu-build-system-binsbinlibexecpkglibno.html' title='GNU Build System 執行檔案的分類 {bin,sbin,libexec,pkglib,noinst,check,EXTRA}_PROGRAMS'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-8276310931716880539</id><published>2009-11-28T22:00:00.000+08:00</published><updated>2009-11-28T22:01:15.014+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='GCC'/><title type='text'>GCC 最佳化參數對 const 變數的影響</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;之前有寫過幾篇關於 const 變數的文章&lt;br/&gt;這次要實驗的程式碼為&lt;br/&gt;&lt;blockquote&gt;/* main.c */&lt;br/&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br/&gt;&lt;br/&gt;void foo(const int* const);&lt;br/&gt;void bar(int);&lt;br/&gt;&lt;br/&gt;int main(int argc, char* argv[])&lt;br/&gt;{&lt;br/&gt;    const int value = 11;&lt;br/&gt;    printf("%d\n", value);&lt;br/&gt;    foo(&amp;amp;value);&lt;br/&gt;    bar(value);&lt;br/&gt;    printf("%d\n", value);&lt;br/&gt;    return 0;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;void foo(const int* const value)&lt;br/&gt;{&lt;br/&gt;    int* tmp = (int*) value;&lt;br/&gt;    *tmp = 22;&lt;br/&gt;    printf("%d\n", *value);&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;void bar(int value)&lt;br/&gt;{&lt;br/&gt;    printf("%d\n", value);&lt;br/&gt;}&lt;br/&gt;&lt;/blockquote&gt;以及&lt;br/&gt;&lt;blockquote&gt;/* main.cpp */&lt;br/&gt;#include &amp;lt;cstdio&amp;gt;&lt;br/&gt;&lt;br/&gt;void foo(const int* const);&lt;br/&gt;void bar(int);&lt;br/&gt;&lt;br/&gt;using namespace std;&lt;br/&gt;&lt;br/&gt;int main(int argc, char* argv[])&lt;br/&gt;{&lt;br/&gt;    const int value = 11;&lt;br/&gt;    printf("%d\n", value);&lt;br/&gt;    foo(&amp;amp;value);&lt;br/&gt;    bar(value);&lt;br/&gt;    printf("%d\n", value);&lt;br/&gt;    return 0;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;void foo(const int* const value)&lt;br/&gt;{&lt;br/&gt;    int* tmp = const_cast&amp;lt;int*&amp;gt;(value);&lt;br/&gt;    *tmp = 22;&lt;br/&gt;    printf("%d\n", *value);&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;void bar(int value)&lt;br/&gt;{&lt;br/&gt;    printf("%d\n", value);&lt;br/&gt;}&lt;br/&gt;&lt;/blockquote&gt;為了要實驗各個參數寫了一個 Makefile&lt;br/&gt;&lt;blockquote&gt;all:&lt;br/&gt;    $(CC) -Wall -g -O0 main.c -o main-O0&lt;br/&gt;    @echo main-O0 &amp;amp;&amp;amp; ./main-O0&lt;br/&gt;    $(CC) -Wall -g -O1 main.c -o main-O1&lt;br/&gt;    @echo main-O1 &amp;amp;&amp;amp; ./main-O1&lt;br/&gt;    $(CC) -Wall -g -Os main.c -o main-Os&lt;br/&gt;    @echo main-Os &amp;amp;&amp;amp; ./main-Os&lt;br/&gt;    $(CC) -Wall -g -O2 main.c -o main-O2&lt;br/&gt;    @echo main-O2 &amp;amp;&amp;amp; ./main-O2&lt;br/&gt;    $(CC) -Wall -g -O3 main.c -o main-O3&lt;br/&gt;    @echo main-O3 &amp;amp;&amp;amp; ./main-O3&lt;br/&gt;    $(CXX) -Wall -g -O0 main.cpp -o main-O0&lt;br/&gt;    @echo main-O0 &amp;amp;&amp;amp; ./main-O0&lt;br/&gt;    $(CXX) -Wall -g -O1 main.cpp -o main-O1&lt;br/&gt;    @echo main-O1 &amp;amp;&amp;amp; ./main-O1&lt;br/&gt;    $(CXX) -Wall -g -Os main.cpp -o main-Os&lt;br/&gt;    @echo main-Os &amp;amp;&amp;amp; ./main-Os&lt;br/&gt;    $(CXX) -Wall -g -O2 main.cpp -o main-O2&lt;br/&gt;    @echo main-O2 &amp;amp;&amp;amp; ./main-O2&lt;br/&gt;    $(CXX) -Wall -g -O3 main.cpp -o main-O3&lt;br/&gt;    @echo main-O3 &amp;amp;&amp;amp; ./main-O3&lt;br/&gt;&lt;/blockquote&gt;執行 make 後得到的結果為&lt;br/&gt;&lt;blockquote&gt;cc -Wall -g -O0 main.c -o main-O0&lt;br/&gt;main-O0&lt;br/&gt;11&lt;br/&gt;22&lt;br/&gt;&lt;font color='#ff0000'&gt;&lt;b&gt;22&lt;/b&gt;&lt;/font&gt;&lt;br/&gt;&lt;font color='#ff0000'&gt;&lt;b&gt;22&lt;/b&gt;&lt;/font&gt;&lt;br/&gt;cc -Wall -g -O1 main.c -o main-O1&lt;br/&gt;main-O1&lt;br/&gt;11&lt;br/&gt;22&lt;br/&gt;11&lt;br/&gt;11&lt;br/&gt;cc -Wall -g -Os main.c -o main-Os&lt;br/&gt;main-Os&lt;br/&gt;11&lt;br/&gt;22&lt;br/&gt;11&lt;br/&gt;11&lt;br/&gt;cc -Wall -g -O2 main.c -o main-O2&lt;br/&gt;main-O2&lt;br/&gt;11&lt;br/&gt;22&lt;br/&gt;11&lt;br/&gt;11&lt;br/&gt;cc -Wall -g -O3 main.c -o main-O3&lt;br/&gt;main-O3&lt;br/&gt;11&lt;br/&gt;22&lt;br/&gt;11&lt;br/&gt;11&lt;br/&gt;g++ -Wall -g -O0 main.cpp -o main-O0&lt;br/&gt;main-O0&lt;br/&gt;11&lt;br/&gt;22&lt;br/&gt;11&lt;br/&gt;11&lt;br/&gt;g++ -Wall -g -O1 main.cpp -o main-O1&lt;br/&gt;main-O1&lt;br/&gt;11&lt;br/&gt;22&lt;br/&gt;11&lt;br/&gt;11&lt;br/&gt;g++ -Wall -g -Os main.cpp -o main-Os&lt;br/&gt;main-Os&lt;br/&gt;11&lt;br/&gt;22&lt;br/&gt;11&lt;br/&gt;11&lt;br/&gt;g++ -Wall -g -O2 main.cpp -o main-O2&lt;br/&gt;main-O2&lt;br/&gt;11&lt;br/&gt;22&lt;br/&gt;11&lt;br/&gt;11&lt;br/&gt;g++ -Wall -g -O3 main.cpp -o main-O3&lt;br/&gt;main-O3&lt;br/&gt;11&lt;br/&gt;22&lt;br/&gt;11&lt;br/&gt;11&lt;br/&gt;&lt;/blockquote&gt;由結果可以看出 C++ 對於 const 變數的處理都一樣&lt;br/&gt;反而在 C 上面對預設的 -O0 參數不會執行任何常數字面的最佳化處理&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-8276310931716880539?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/8276310931716880539/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=8276310931716880539' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8276310931716880539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8276310931716880539'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/11/gcc-const.html' title='GCC 最佳化參數對 const 變數的影響'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-1998090370398876832</id><published>2009-11-27T15:46:00.003+08:00</published><updated>2011-03-21T15:43:17.097+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Autotools'/><title type='text'>GNU Build System 當中 {bin,noinst,check,EXTRA}_PROGRAMS 使用上的分別</title><content type='html'>在 Automake 的腳本檔 Makefile.am 裡面，要編寫一個執行檔案的規則可以這樣寫&lt;br /&gt;&lt;pre class="brush: text"&gt;bin_PROGRAMS = mp3player&lt;br /&gt;mp3player_SOURCES = mp3player.c&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;這樣在 $ ./configure 之後就可以使用 $ make 編譯出 mp3player 這個執行檔&lt;br /&gt;甚至於 $ make install 還可以幫你安裝到預定的目錄底下&lt;br /&gt;這個預定的目錄是像 $ ./configure --prefix=/opt 這樣指定的&lt;br /&gt;如果沒有特別指定的話，通常預設值都會是 /usr/local&lt;br /&gt;&lt;br /&gt;如果只想要編譯出執行檔卻不想要在 $ make install 時，被安裝到預定的目錄底下，在腳本檔應該要這樣寫&lt;br /&gt;&lt;pre class="brush: text"&gt;noinst_PROGRAMS = mp3player&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;如果想要在 make 時，不會去編譯執行檔的話，只有在 $ make check 時才會去編譯執行檔，可以這樣寫&lt;br /&gt;&lt;pre class="brush: text"&gt;check_PROGRAMS = mp3player&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;如果想要在 $ make 跟 $ make check 都不會去編譯執行檔，只有在 $ make mp3player 時才會去編譯執行檔，可以這樣寫&lt;br /&gt;&lt;pre class="brush: text"&gt;EXTRA_PROGRAMS = mp3player&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;更詳細的說明請看 $ info automake&lt;br /&gt;&lt;br /&gt;P.S. 有 $ 開頭代表在命令列下輸入的指令&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-1998090370398876832?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/1998090370398876832/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=1998090370398876832' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1998090370398876832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1998090370398876832'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/11/gnu-build-system-binnoinstcheckextrapro.html' title='GNU Build System 當中 {bin,noinst,check,EXTRA}_PROGRAMS 使用上的分別'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-8013404792165381588</id><published>2009-11-16T16:27:00.001+08:00</published><updated>2009-11-16T16:27:06.165+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='GCC'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>GCC C++ Compiler 根本沒有還原 const 變數的數值，只不過先行代換掉使用 const 變數的地方。</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;延續前三篇文章的討論&lt;br/&gt;&lt;blockquote&gt;&lt;a href='http://fourdollars.blogspot.com/2009/11/c-programming-call-by.html'&gt;C++ Programming: Call by Reference/Value/Pointer and const_cast&lt;/a&gt;&lt;br/&gt;&lt;a href='http://fourdollars.blogspot.com/2009/11/gcc-c-compiler-const.html'&gt;GCC C++ Compiler 會聰明地幫你還原 const 變數的數值&lt;/a&gt;&lt;br/&gt;&lt;a href='http://fourdollars.blogspot.com/2009/11/gcc-c-compiler-const_15.html'&gt;GCC C++ Compiler 對於 const 變數的處理到底會有多聰明呢？&lt;/a&gt;&lt;br/&gt;&lt;/blockquote&gt;這次實驗的程式碼如下&lt;br/&gt;&lt;blockquote&gt;#include &amp;lt;iostream&amp;gt;&lt;br/&gt;&lt;br/&gt;void foo(const int&amp;amp;);&lt;br/&gt;void bar(const int&amp;amp;);&lt;br/&gt;&lt;br/&gt;using namespace std;&lt;br/&gt;&lt;br/&gt;int main(int argc, char* argv[])&lt;br/&gt;{&lt;br/&gt;    const int value = &lt;font color='#ff0000'&gt;&lt;b&gt;11&lt;/b&gt;&lt;/font&gt;;&lt;br/&gt;    cout &amp;lt;&amp;lt; &lt;font color='#ff0000'&gt;&lt;b&gt;value&lt;/b&gt;&lt;/font&gt; &amp;lt;&amp;lt; endl;&lt;br/&gt;    foo(value);&lt;br/&gt;    cout &amp;lt;&amp;lt; &lt;font color='#ff0000'&gt;&lt;b&gt;value&lt;/b&gt;&lt;/font&gt; &amp;lt;&amp;lt; endl;&lt;br/&gt;    bar(value);&lt;br/&gt;    cout &amp;lt;&amp;lt; &lt;font color='#ff0000'&gt;&lt;b&gt;value&lt;/b&gt;&lt;/font&gt; &amp;lt;&amp;lt; endl;&lt;br/&gt;    cout &amp;lt;&amp;lt; *(int*)&amp;amp;value &amp;lt;&amp;lt; endl;&lt;br/&gt;    return 0;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;void foo(const int&amp;amp; value)&lt;br/&gt;{&lt;br/&gt;    int&amp;amp; tmp = const_cast&amp;lt;int&amp;amp;&amp;gt;(value);&lt;br/&gt;    tmp = 22;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;void bar(const int&amp;amp; value)&lt;br/&gt;{&lt;br/&gt;    cout &amp;lt;&amp;lt; value &amp;lt;&amp;lt; endl;&lt;br/&gt;}&lt;br/&gt;&lt;/blockquote&gt;正如網友 &lt;a href='http://www.blogger.com/profile/08232394222341381209'&gt;jclin&lt;/a&gt; 提到的「&lt;a href='https://www.blogger.com/comment.g?blogID=14489808&amp;amp;postID=2649664968526156825'&gt;我比較不相信 GCC 會幫你還原 const value 的作法. 只是 compiler 知道那是 const, 基於 optimization 的角度&lt;/a&gt;」&lt;br/&gt;還有 &lt;a href='http://people.debian.org.tw/%7Echihchun/'&gt;chihchun&lt;/a&gt; 提到的「&lt;a href='https://www.blogger.com/comment.g?blogID=14489808&amp;amp;postID=7712689692514569823'&gt;main::value 是一個 alias, compiler (g++ 4.3.4) 會替換成 integral literal，但是依然會在 Stack 中配置此變數供人使用。&lt;/a&gt;」&lt;br/&gt;GCC C++ Compiler 只不過是把原始碼先轉換成以下這段&lt;br/&gt;&lt;blockquote&gt;#include &amp;lt;iostream&amp;gt;&lt;br/&gt;&lt;br/&gt;void foo(const int&amp;amp;);&lt;br/&gt;void bar(const int&amp;amp;);&lt;br/&gt;&lt;br/&gt;using namespace std;&lt;br/&gt;&lt;br/&gt;int main(int argc, char* argv[])&lt;br/&gt;{&lt;br/&gt;    const int value = &lt;font color='#ff0000'&gt;&lt;b&gt;11&lt;/b&gt;&lt;/font&gt;;&lt;br/&gt;    cout &amp;lt;&amp;lt; &lt;font color='#ff0000'&gt;&lt;b&gt;11&lt;/b&gt;&lt;/font&gt; &amp;lt;&amp;lt; endl;&lt;br/&gt;    foo(value);&lt;br/&gt;    cout &amp;lt;&amp;lt; &lt;font color='#ff0000'&gt;&lt;b&gt;11&lt;/b&gt;&lt;/font&gt; &amp;lt;&amp;lt; endl;&lt;br/&gt;    bar(value);&lt;br/&gt;    cout &amp;lt;&amp;lt; &lt;font color='#ff0000'&gt;&lt;b&gt;11&lt;/b&gt;&lt;/font&gt; &amp;lt;&amp;lt; endl;&lt;br/&gt;    cout &amp;lt;&amp;lt; *(int*)&amp;amp;value &amp;lt;&amp;lt; endl;&lt;br/&gt;    return 0;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;void foo(const int&amp;amp; value)&lt;br/&gt;{&lt;br/&gt;    int&amp;amp; tmp = const_cast&amp;lt;int&amp;amp;&amp;gt;(value);&lt;br/&gt;    tmp = 22;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;void bar(const int&amp;amp; value)&lt;br/&gt;{&lt;br/&gt;    cout &amp;lt;&amp;lt; value &amp;lt;&amp;lt; endl;&lt;br/&gt;}&lt;br/&gt;&lt;/blockquote&gt;const 變數並不代表它無法被改變數值，透過 const_cast 還是可以改變數值的，只不過已經先被當作字面常數替換掉的地方，在 C++ 程式碼的運作上不是那麼容易瞭解。&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-8013404792165381588?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/8013404792165381588/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=8013404792165381588' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8013404792165381588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8013404792165381588'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/11/gcc-c-compiler-const-const.html' title='GCC C++ Compiler 根本沒有還原 const 變數的數值，只不過先行代換掉使用 const 變數的地方。'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6519991640891140165</id><published>2009-11-15T22:02:00.000+08:00</published><updated>2009-11-15T22:03:52.529+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='GCC'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>GCC C++ Compiler 對於 const 變數的處理到底會有多聰明呢？</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;延續前兩篇文章的程式碼實驗&lt;br/&gt;&lt;blockquote&gt;&lt;a href='http://fourdollars.blogspot.com/2009/11/c-programming-call-by.html'&gt;C++ Programming: Call by Reference/Value/Pointer and const_cast&lt;/a&gt;&lt;br/&gt;&lt;a href='http://fourdollars.blogspot.com/2009/11/gcc-c-compiler-const.html'&gt;GCC C++ Compiler 會聰明地幫你還原 const 變數的數值&lt;/a&gt;&lt;br/&gt;&lt;/blockquote&gt;這次想要實驗的程式碼片段如下&lt;br/&gt;&lt;blockquote&gt;#include &amp;lt;iostream&amp;gt;&lt;br/&gt;&lt;br/&gt;struct Foo {&lt;br/&gt;    const int value;&lt;br/&gt;};&lt;br/&gt;&lt;br/&gt;void foo(const struct Foo* const);&lt;br/&gt;void foofoo(const struct Foo* const);&lt;br/&gt;&lt;br/&gt;using namespace std;&lt;br/&gt;&lt;br/&gt;int main(int argc, char* argv[])&lt;br/&gt;{&lt;br/&gt;    const struct Foo bar = {11};&lt;br/&gt;    cout &amp;lt;&amp;lt; bar.value &amp;lt;&amp;lt; '\t' &amp;lt;&amp;lt; &amp;amp;bar.value &amp;lt;&amp;lt; endl;&lt;br/&gt;    foo(&amp;amp;bar);&lt;br/&gt;    cout &amp;lt;&amp;lt; bar.value &amp;lt;&amp;lt; '\t' &amp;lt;&amp;lt; &amp;amp;bar.value &amp;lt;&amp;lt; endl;&lt;br/&gt;    foofoo(&amp;amp;bar);&lt;br/&gt;    cout &amp;lt;&amp;lt; bar.value &amp;lt;&amp;lt; '\t' &amp;lt;&amp;lt; &amp;amp;bar.value &amp;lt;&amp;lt; endl;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;void foo(const struct Foo* const bar)&lt;br/&gt;{&lt;br/&gt;    static struct Foo inner = {22};&lt;br/&gt;    struct Foo** tmp = const_cast&amp;lt;struct Foo**&amp;gt;(&amp;amp;bar);&lt;br/&gt;    cout &amp;lt;&amp;lt; *tmp &amp;lt;&amp;lt; '\t' &amp;lt;&amp;lt; bar &amp;lt;&amp;lt; '\t' &amp;lt;&amp;lt; bar-&amp;gt;value &amp;lt;&amp;lt; endl;&lt;br/&gt;    *tmp = &amp;amp;inner;&lt;br/&gt;    cout &amp;lt;&amp;lt; *tmp &amp;lt;&amp;lt; '\t' &amp;lt;&amp;lt; bar &amp;lt;&amp;lt; '\t' &amp;lt;&amp;lt; bar-&amp;gt;value &amp;lt;&amp;lt; endl;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;void foofoo(const struct Foo* const bar)&lt;br/&gt;{&lt;br/&gt;    int &amp;amp;value = const_cast&amp;lt;int&amp;amp;&amp;gt;(bar-&amp;gt;value);&lt;br/&gt;    value = 22;&lt;br/&gt;}&lt;br/&gt;&lt;/blockquote&gt;編譯後執行的結果為&lt;br/&gt;&lt;blockquote&gt;11    0xbfbb3090&lt;br/&gt;0xbfbb3090    0xbfbb3090    11&lt;br/&gt;0x804a034    0x804a034    22&lt;br/&gt;11    0xbfbb3090&lt;br/&gt;22    0xbfbb3090&lt;br/&gt;&lt;/blockquote&gt;對照程式碼就可以發現呼叫 foo() 後 const 變數 bar 被還原成原本的數值了&lt;br/&gt;不過呼叫 foofoo() 後 const 變數 bar 底下的 const 變數 value 並沒有被還原成原本的數值&lt;br/&gt;所以 &lt;b&gt;GCC C++ Compiler 對 const 變數數值的還原保護僅限於直接傳入函式的變數本身&lt;/b&gt;&lt;br/&gt;並不包含該 const 變數底下的 const 變數，到這時總算是解決了 $4 心中的疑惑&lt;br/&gt;為什麼兩三年前寫 C++ 時，使用 const_cast 可以改變 const 變數的數值&lt;br/&gt;而在 &lt;a href='http://hack.ingday.org/'&gt;H4&lt;/a&gt; 聚會的實驗時反而遇到了跟 $4 過去經驗乍看下相衝突的結果 :-)&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6519991640891140165?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6519991640891140165/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6519991640891140165' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6519991640891140165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6519991640891140165'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/11/gcc-c-compiler-const_15.html' title='GCC C++ Compiler 對於 const 變數的處理到底會有多聰明呢？'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-171989983440135009</id><published>2009-11-14T14:45:00.000+08:00</published><updated>2009-11-14T14:46:27.723+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gnome'/><title type='text'>GNOME Global Menu</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;官方網站 &lt;a href='http://code.google.com/p/gnome2-globalmenu/'&gt;http://code.google.com/p/gnome2-globalmenu/&lt;/a&gt;&lt;br/&gt;首先看一下使用前&lt;br/&gt;&lt;img src='http://lh4.ggpht.com/_cYaJquZOLiw/Sv5QV7Aq4GI/AAAAAAAACiU/uo7FygfD5OE/%5BUNSET%5D.png?imgmax=800' style='max-width: 800px;'/&gt;&lt;br/&gt;面板上面並沒有加入很多應用程式的啟動圖示&lt;br/&gt;所以在右上角有一塊區域一直沒有使用到&lt;br/&gt;首先新增加 GNOME Global Menu 的 GPG Key&lt;br/&gt;&lt;blockquote&gt;wget http://gnome2-globalmenu.googlecode.com/files/GlobalMenuKey.gpg&lt;br/&gt;sudo apt-key add GlobalMenuKey.gpg&lt;br/&gt;&lt;/blockquote&gt;然後新增一個檔案在 /etc/apt/sources.list.d/gnome2-globalmenu.list&lt;br/&gt;&lt;blockquote&gt;# gnome2-globalmenu&lt;br/&gt;deb http://ppa.launchpad.net/globalmenu-team/ppa/ubuntu jaunty main&lt;br/&gt;deb-src http://ppa.launchpad.net/globalmenu-team/ppa/ubuntu jaunty main&lt;br/&gt;&lt;/blockquote&gt;然後在面板上面增加一個 Applet&lt;br/&gt;&lt;img src='http://lh4.ggpht.com/_cYaJquZOLiw/Sv5R0shz62I/AAAAAAAACiY/sJ5k4ZM2y9o/%5BUNSET%5D.png?imgmax=800' style='max-width: 800px;'/&gt;&lt;br/&gt;最後調整 GNOME Global Menu 的設定&lt;br/&gt;&lt;img src='http://lh6.ggpht.com/_cYaJquZOLiw/Sv5R53VsUVI/AAAAAAAACic/fBIl7_aT3aQ/%5BUNSET%5D.png?imgmax=800' style='max-width: 800px;'/&gt;&lt;br/&gt;於是就把 GTK+ 的選單列都移動到面板上面了~ :D&lt;br/&gt;&lt;img src='http://lh6.ggpht.com/_cYaJquZOLiw/Sv5R-w7YkDI/AAAAAAAACig/SrSp9bBQMpY/%5BUNSET%5D.png?imgmax=800' style='max-width: 800px;'/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-171989983440135009?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/171989983440135009/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=171989983440135009' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/171989983440135009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/171989983440135009'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/11/gnome-global-menu.html' title='GNOME Global Menu'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_cYaJquZOLiw/Sv5QV7Aq4GI/AAAAAAAACiU/uo7FygfD5OE/s72-c/%5BUNSET%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-2649664968526156825</id><published>2009-11-13T18:17:00.000+08:00</published><updated>2009-11-13T18:18:40.273+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>GCC C++ Compiler 會聰明地幫你還原 const 變數的數值</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;關於前一篇文章 &lt;a href='http://fourdollars.blogspot.com/2009/11/c-programming-call-by.html'&gt;C++ Programming: Call by Reference/Value/Pointer and const_cast&lt;/a&gt; 所留下的問題&lt;br/&gt;再寫一段簡單的程式碼來作實驗&lt;br/&gt;&lt;blockquote&gt;/* main.cpp */&lt;br/&gt;void funcA(const int &amp;amp;);&lt;br/&gt;void funcB(int);&lt;br/&gt;void funcC(const int *);&lt;br/&gt;&lt;br/&gt;int main(int argc, char* argv[])&lt;br/&gt;{&lt;br/&gt;    const int value = 11;&lt;br/&gt;    funcA(value);&lt;br/&gt;    funcB(value);&lt;br/&gt;    funcC(&amp;amp;value);&lt;br/&gt;    funcB(value);&lt;br/&gt;    return 0;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;/* Call by Reference */&lt;br/&gt;void funcA(const int&amp;amp; value)&lt;br/&gt;{&lt;br/&gt;    int&amp;amp; tmp = const_cast&amp;lt;int&amp;amp;&amp;gt;(value);&lt;br/&gt;    tmp = 22;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;/* Call by Value */&lt;br/&gt;void funcB(int value)&lt;br/&gt;{&lt;br/&gt;    value = 33;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;/* Call by Pointer */&lt;br/&gt;void funcC(const int* value)&lt;br/&gt;{&lt;br/&gt;    int* tmp = const_cast&amp;lt;int*&amp;gt;(value);&lt;br/&gt;    *tmp = 44;&lt;br/&gt;}&lt;br/&gt;&lt;/blockquote&gt;這次利用 GCC 來產生 x86 的組合語言看看到底發生了什麼事情&lt;br/&gt;&lt;blockquote&gt;$ g++ -S main.cpp&lt;br/&gt;&lt;/blockquote&gt;就會產生 main.s 檔案&lt;br/&gt;來看看其中的片段&lt;br/&gt;&lt;blockquote&gt;    call    _Z5&lt;font color='#3366ff'&gt;&lt;b&gt;funcA&lt;/b&gt;&lt;/font&gt;RKi&lt;br/&gt;    &lt;font color='#ff0000'&gt;&lt;b&gt;movl    $11, (%esp)&lt;/b&gt;&lt;/font&gt;&lt;br/&gt;    call    _Z5&lt;font color='#3366ff'&gt;&lt;b&gt;funcB&lt;/b&gt;&lt;/font&gt;i&lt;br/&gt;    leal    -8(%ebp), %eax&lt;br/&gt;    movl    %eax, (%esp)&lt;br/&gt;    call    _Z5&lt;font color='#3366ff'&gt;&lt;b&gt;funcC&lt;/b&gt;&lt;/font&gt;PKi&lt;br/&gt;    &lt;font color='#ff0000'&gt;&lt;b&gt;movl    $11, (%esp)&lt;/b&gt;&lt;/font&gt;&lt;br/&gt;    call    _Z5&lt;font color='#3366ff'&gt;&lt;b&gt;funcB&lt;/b&gt;&lt;/font&gt;i&lt;br/&gt;&lt;/blockquote&gt;答案是在呼叫完 funcA 跟 funcC 之後&lt;br/&gt;GCC 聰明地將 value 的值給還原成 11 了&lt;br/&gt;如果在 C++ 程式碼中第二次呼叫 funcB 給拿掉就不會看到第二個&lt;br/&gt;    &lt;font color='#ff0000'&gt;&lt;b&gt;movl    $11, (%esp)&lt;/b&gt;&lt;/font&gt;&lt;br/&gt;聰明的 GCC 只會在適當的時候幫你還原 const 變數的數值，&lt;b&gt;造成 const 變數值從來沒被改變過的假象&lt;/b&gt; :)&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-2649664968526156825?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/2649664968526156825/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=2649664968526156825' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2649664968526156825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2649664968526156825'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/11/gcc-c-compiler-const.html' title='GCC C++ Compiler 會聰明地幫你還原 const 變數的數值'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-3115315752756001121</id><published>2009-11-13T17:52:00.000+08:00</published><updated>2009-11-13T17:53:44.493+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery 實戰手冊 (JQuery in Action) - 第四章閱讀心得分享</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;b&gt;ISBN 978-986-181-638-8&lt;/b&gt;&lt;br/&gt;範例程式可以在 &lt;a href='http://www.manning.com/bibeault'&gt;http://www.manning.com/bibeault&lt;/a&gt; 下載&lt;br/&gt;此書的範例程式都是使用 jquery-1.2.1.js&lt;br/&gt;所以先手動替換成 jquery-1.3.2.js&lt;br/&gt;&lt;blockquote&gt;find -type f -name '*.html' -exec sed -i 's/jquery-1.2.1.js/jquery-1.3.2.js/' {} \;&lt;br/&gt;&lt;/blockquote&gt;第四章的範例 &lt;font color='#3366ff'&gt;&lt;b&gt;Bamboo Asian Grille - Online Order Form&lt;/b&gt;&lt;/font&gt; 不知道為什麼下面這行程式碼無法正常運作&lt;br/&gt;&lt;blockquote&gt;$('&lt;font color='#ff0000'&gt;&lt;b&gt;~ span:first&lt;/b&gt;&lt;/font&gt;',this).text(...);&lt;br/&gt;&lt;/blockquote&gt;於是改成下面這段程式碼就可以正常運作了&lt;br/&gt;&lt;blockquote&gt;&lt;font color='#ff0000'&gt;&lt;b&gt;$(this).next('span')&lt;/b&gt;&lt;/font&gt;.text(...);&lt;br/&gt;&lt;/blockquote&gt;另外就是下面這一段程式碼其實有點多餘&lt;br/&gt;&lt;blockquote&gt;.each(function(){ if (checked) this.focus(); });&lt;br/&gt;&lt;/blockquote&gt;可以改成下面那樣就可以達到同樣的功能&lt;blockquote&gt;.focus();&lt;br/&gt;&lt;/blockquote&gt;主要是作者想要拿來玩弄 closure 的東西&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-3115315752756001121?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/3115315752756001121/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=3115315752756001121' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3115315752756001121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3115315752756001121'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/11/jquery-jquery-in-action.html' title='jQuery 實戰手冊 (JQuery in Action) - 第四章閱讀心得分享'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-7712689692514569823</id><published>2009-11-13T12:00:00.001+08:00</published><updated>2009-11-13T12:00:09.362+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>C++ Programming: Call by Reference/Value/Pointer and const_cast</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;昨天晚上 &lt;a href='http://hack.ingday.org'&gt;H4&lt;/a&gt; 的聚會上面在討論這個問題&lt;br/&gt;所以寫了一小段 C++ 程式碼來作實驗&lt;br/&gt;&lt;blockquote&gt;/* main.cpp */&lt;br/&gt;#include &amp;lt;iostream&amp;gt;&lt;br/&gt;&lt;br/&gt;using namespace std;&lt;br/&gt;&lt;br/&gt;void funcA(int&amp;amp;);&lt;br/&gt;void funcB(int);&lt;br/&gt;void funcC(int*);&lt;br/&gt;&lt;br/&gt;int main(int argc, char* argv[])&lt;br/&gt;{&lt;br/&gt;    int value = 10;&lt;br/&gt;    cout &amp;lt;&amp;lt; value &amp;lt;&amp;lt; endl;&lt;br/&gt;    funcA(value);&lt;br/&gt;    cout &amp;lt;&amp;lt; value &amp;lt;&amp;lt; endl;&lt;br/&gt;    funcB(value);&lt;br/&gt;    cout &amp;lt;&amp;lt; value &amp;lt;&amp;lt; endl;&lt;br/&gt;    funcC(&amp;amp;value);&lt;br/&gt;    cout &amp;lt;&amp;lt; value &amp;lt;&amp;lt; endl;&lt;br/&gt;    return 0;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;/* Call by reference */&lt;br/&gt;void funcA(int&amp;amp; value)&lt;br/&gt;{&lt;br/&gt;    value = 20;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;/* Call by value */&lt;br/&gt;void funcB(int value)&lt;br/&gt;{&lt;br/&gt;    value = 30;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;/* Call by pointer/address */&lt;br/&gt;void funcC(int* value)&lt;br/&gt;{&lt;br/&gt;    *value = 40;&lt;br/&gt;}&lt;br/&gt;&lt;/blockquote&gt;將上面這段程式碼儲存成 main.cpp&lt;br/&gt;再使用 GCC 編譯執行&lt;br/&gt;&lt;blockquote&gt;$ g++ -Wall -g main.cpp -o main&lt;br/&gt;$ ./main&lt;br/&gt;10&lt;br/&gt;20&lt;br/&gt;20&lt;br/&gt;40&lt;br/&gt;&lt;/blockquote&gt;對照程式碼應該就可以看出這三者之間的差異了&lt;br/&gt;&lt;br/&gt;不過後來有人有提到 const 的問題&lt;br/&gt;於是將程式碼改寫成&lt;br/&gt;&lt;blockquote&gt;#include &amp;lt;iostream&amp;gt;&lt;br/&gt;&lt;br/&gt;using namespace std;&lt;br/&gt;&lt;br/&gt;void funcA(const int&amp;amp;);&lt;br/&gt;void funcB(int);&lt;br/&gt;void funcC(const int*);&lt;br/&gt;&lt;br/&gt;int main(int argc, char* argv[])&lt;br/&gt;{&lt;br/&gt;    const int value = 10;&lt;br/&gt;    cout &amp;lt;&amp;lt; value &amp;lt;&amp;lt; " " &amp;lt;&amp;lt; &amp;amp;value &amp;lt;&amp;lt; endl;&lt;br/&gt;    funcA(value);&lt;br/&gt;    cout &amp;lt;&amp;lt; value &amp;lt;&amp;lt; " " &amp;lt;&amp;lt; &amp;amp;value &amp;lt;&amp;lt; endl;&lt;br/&gt;    funcB(value);&lt;br/&gt;    cout &amp;lt;&amp;lt; value &amp;lt;&amp;lt; " " &amp;lt;&amp;lt; &amp;amp;value &amp;lt;&amp;lt; endl;&lt;br/&gt;    funcC(&amp;amp;value);&lt;br/&gt;    cout &amp;lt;&amp;lt; value &amp;lt;&amp;lt; " " &amp;lt;&amp;lt; &amp;amp;value &amp;lt;&amp;lt; endl;&lt;br/&gt;    return 0;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;/* Call by reference */&lt;br/&gt;void funcA(const int&amp;amp; value)&lt;br/&gt;{&lt;br/&gt;    int &amp;amp;tmp = const_cast&amp;lt;int&amp;amp;&amp;gt;(value);&lt;br/&gt;    tmp = 20;&lt;br/&gt;    cout &amp;lt;&amp;lt; "\t" &amp;lt;&amp;lt; value &amp;lt;&amp;lt; " " &amp;lt;&amp;lt; &amp;amp;value &amp;lt;&amp;lt; endl;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;/* Call by value */&lt;br/&gt;void funcB(int value)&lt;br/&gt;{&lt;br/&gt;    value = 30;&lt;br/&gt;    cout &amp;lt;&amp;lt; "\t" &amp;lt;&amp;lt; value &amp;lt;&amp;lt; " " &amp;lt;&amp;lt; &amp;amp;value &amp;lt;&amp;lt; endl;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;/* Call by pointer/address */&lt;br/&gt;void funcC(const int* value)&lt;br/&gt;{&lt;br/&gt;    int* tmp = const_cast&amp;lt;int*&amp;gt;(value);&lt;br/&gt;    *tmp = 40;&lt;br/&gt;    cout &amp;lt;&amp;lt; "\t" &amp;lt;&amp;lt; *value &amp;lt;&amp;lt; " " &amp;lt;&amp;lt; value &amp;lt;&amp;lt; endl;&lt;br/&gt;}&lt;br/&gt;&lt;/blockquote&gt;編譯執行的結果為&lt;br/&gt;&lt;blockquote&gt;$ ./main &lt;br/&gt;10 0xbfb17040&lt;br/&gt;    20 0xbfb17040&lt;br/&gt;10 0xbfb17040&lt;br/&gt;    30 0xbfb17020&lt;br/&gt;10 0xbfb17040&lt;br/&gt;    40 0xbfb17040&lt;br/&gt;10 0xbfb17040&lt;br/&gt;&lt;/blockquote&gt;為什麼會這樣呢？&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-7712689692514569823?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/7712689692514569823/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=7712689692514569823' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/7712689692514569823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/7712689692514569823'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/11/c-programming-call-by.html' title='C++ Programming: Call by Reference/Value/Pointer and const_cast'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-8054492301603098870</id><published>2009-10-30T01:08:00.003+08:00</published><updated>2009-10-30T01:16:21.755+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BitTorrent'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu 9.10 DVD ISO BitTorrent Files</title><content type='html'>(1) &lt;a href="http://people.linux.org.tw/~fourdollars/ubuntu-9.10-dvd-i386.iso.torrent"&gt;ubuntu-9.10-dvd-i386.iso.torrent&lt;/a&gt;&lt;br /&gt;(1) &lt;a href="http://people.linux.org.tw/~fourdollars/ubuntu-9.10-dvd-amd64.iso.torrent"&gt;ubuntu-9.10-dvd-amd64.iso.torrent&lt;/a&gt;&lt;br /&gt;(2) &lt;a href="http://people.debian.org.tw/~fourdollars/ubuntu-9.10-dvd-i386.iso.torrent"&gt;ubuntu-9.10-dvd-i386.iso.torrent&lt;/a&gt;&lt;br /&gt;(2) &lt;a href="http://people.debian.org.tw/~fourdollars/ubuntu-9.10-dvd-amd64.iso.torrent"&gt;ubuntu-9.10-dvd-amd64.iso.torrent&lt;/a&gt;&lt;br /&gt;幫忙分流一下 DVD ISO 的 BitTorrent&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-8054492301603098870?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/8054492301603098870/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=8054492301603098870' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8054492301603098870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8054492301603098870'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/10/ubuntu-910-dvd-iso-bittorrent-files.html' title='Ubuntu 9.10 DVD ISO BitTorrent Files'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-1578630299657119064</id><published>2009-10-17T21:39:00.001+08:00</published><updated>2009-10-17T22:10:35.908+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Mercurial'/><title type='text'>在 Ubuntu 9.04 上面手動安裝 hgview</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;這次要安裝的是 &lt;a href='http://www.logilab.org/project/hgview'&gt;http://www.logilab.org/project/hgview&lt;/a&gt;&lt;br/&gt;首先直接從 repository 抓下來&lt;br/&gt;&lt;blockquote&gt;hg clone http://hg.logilab.org/hgview&lt;br/&gt;&lt;/blockquote&gt;然後建一個 symbolic link 到 ${HOME}/bin/ 下面&lt;br/&gt;&lt;blockquote&gt;ln -snf $(readlink -f hgview/bin/hgview) ${HOME}/bin/&lt;br/&gt;&lt;/blockquote&gt;然後安裝相依的套件&lt;br/&gt;&lt;blockquote&gt;sudo aptitude install pyqt4-dev-tools python-qscintilla2 python-egenix-mxdatetime&lt;br/&gt;&lt;/blockquote&gt;然後就可以在 Mercurial 的開發目錄底下直接執行 hgview 了~ ;)&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-1578630299657119064?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/1578630299657119064/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=1578630299657119064' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1578630299657119064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1578630299657119064'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/10/ubuntu-904-hgview_17.html' title='在 Ubuntu 9.04 上面手動安裝 hgview'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-2697841838751897080</id><published>2009-10-01T00:20:00.000+08:00</published><updated>2009-10-06T12:42:25.274+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Vim 編輯 Python 的設定</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;最近空閒時間都在學習寫 Google App Engine 上面的 Python 程式&lt;br/&gt;剛剛研究了一會整理出這個簡單的設定&lt;br/&gt;&lt;blockquote&gt;function! s:python_custom()&lt;br/&gt;    function! s:man(keyword)&lt;br/&gt;        execute '!pydoc ' . a:keyword&lt;br/&gt;    endfunction&lt;br/&gt;    setlocal tabstop=4 expandtab shiftwidth=4&lt;br/&gt;    setlocal foldmethod=indent foldcolumn=4 foldlevel=3 foldnestmax=3&lt;br/&gt;    command! -nargs=1 Man call s:man(&amp;lt;f-args&amp;gt;&lt;f-args&gt;)&lt;br/&gt;    cnoremap K :!pydoc &amp;lt;cword&amp;gt;&amp;lt;CR&amp;gt;&lt;/f-args&gt;&lt;br/&gt;&lt;f-args&gt;&lt;c-r&gt;&lt;cr&gt;endfunction&lt;br/&gt;if has("autocmd")&lt;br/&gt;    autocmd Filetype python call s:python_custom()&lt;br/&gt;endif&lt;br/&gt;&lt;/cr&gt;&lt;/c-r&gt;&lt;/f-args&gt;&lt;/blockquote&gt;開啟 Python 檔案時自動用縮排來 Folding 最多三層&lt;br/&gt;縮排跟 Tab 都設定為 4 個空白&lt;br/&gt;在關鍵字上按下 K 會透過 pydoc 去查詢使用說明&lt;br/&gt;或是直接輸入 :Man list 這樣的指令&lt;br/&gt;把上面那段 script 加到 .vimrc 裡面就可以使用了&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-2697841838751897080?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/2697841838751897080/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=2697841838751897080' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2697841838751897080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2697841838751897080'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/10/vim-python.html' title='Vim 編輯 Python 的設定'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-3158884244803447221</id><published>2009-08-28T11:13:00.006+08:00</published><updated>2009-08-28T14:31:06.603+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Installation'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>快速製作 Ubuntu 9.04 (Jaunty) alternate 安裝用的 USB Stick</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;並不是每台電腦都有光碟機的，加上燒錄光碟片也不太環保，所以能用 USB Stick 來安裝 Ubuntu Linux 作業系統就盡量使用 USB Stick 囉。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;首先準備一個可以完全亂玩的 USB Stick&lt;/li&gt;&lt;li&gt;下載 boot.img.gz&lt;br /&gt;$ wget http://archive.ubuntu.com/ubuntu/dists/jaunty/main/installer-i386/current/images/hd-media/boot.img.gz&lt;/li&gt;&lt;li&gt;將 boot.img 內容 dump 至 USB Stick&lt;br /&gt;$ sudo su -c "zcat boot.img.gz &amp;gt; /dev/&lt;span style="color:#ff0000;"&gt;&lt;b&gt;sdb&lt;/b&gt;&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;拔起 USB Stick 重新接到電腦上&lt;br /&gt;$ df -h /dev/sdb&lt;br /&gt;Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;/dev/sdb              782M   23M  760M   3% /media/Ubuntu Inst&lt;br /&gt;&lt;/li&gt;&lt;li&gt;然後把 ubuntu-9.04-alternate-i386.iso 複製到 USB Stick 裡面&lt;br /&gt;$ cp -av ubuntu-9.04-alternate-i386.iso /media/Ubuntu\ Inst/&lt;br /&gt;$ df -h /dev/sdb&lt;br /&gt;Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;/dev/sdb              782M  722M   61M  93% /media/Ubuntu Inst&lt;/li&gt;&lt;/ol&gt;以前在 Debian 也使用過同樣的方法 &lt;a href="http://stanley@stanley:%7E/Desktop/Download$%20http://fourdollars.blogspot.com/2008/11/usb-stick-debian-gnulinux-50-lenny-rc1.html"&gt;使用 USB stick 來安裝 Debian GNU/Linux 5.0 (Lenny) rc1&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-3158884244803447221?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/3158884244803447221/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=3158884244803447221' title='6 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3158884244803447221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3158884244803447221'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/08/ubuntu-904-jaunty-desktop-usb-stick.html' title='快速製作 Ubuntu 9.04 (Jaunty) alternate 安裝用的 USB Stick'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-225569321038365633</id><published>2009-08-26T00:15:00.000+08:00</published><updated>2009-08-26T00:40:52.732+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='pcmanx'/><title type='text'>將 Subversion Repository 搬進 Google Code 裡面</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;由於 http://pcmanx.csie.net 的管理者 lwhsu 好像去玩國軍 Online 了&lt;br/&gt;加上網頁一直無法更新還有常常會遇到網站掛點的狀況&lt;br/&gt;所以動起了幫 PCManX GTK+ 搬家的念頭&lt;br/&gt;以下是筆記將 Subversion Repository 搬進 Google Code 的過程&lt;br/&gt;&lt;ol&gt;&lt;li&gt;首先建立本地端的 mirror&lt;br/&gt;$ svnadmin create &lt;b&gt;pcmanx&lt;/b&gt;&lt;br/&gt;$ cat &amp;lt;&amp;lt;'EOF' &amp;gt; &lt;b&gt;pcmanx&lt;/b&gt;/hooks/pre-revprop-change&lt;br/&gt;#!/bin/sh&lt;br/&gt;USER="$3"&lt;br/&gt;if [ "$USER" = "svnsync" ]; then exit 0; fi&lt;br/&gt;echo "Only the svnsync user can change revprops" &amp;gt;&amp;amp;2&lt;br/&gt;exit 1&lt;br/&gt;EOF&lt;br/&gt;$ chmod +x &lt;b&gt;pcmanx&lt;/b&gt;/hooks/pre-revprop-change&lt;br/&gt;$ svnsync init file://`pwd`/&lt;b&gt;pcmanx&lt;/b&gt; &lt;b&gt;https://svn.csie.net/pcmanx&lt;/b&gt;&lt;br/&gt;$ svnsync sync file://`pwd`/&lt;b&gt;pcmanx&lt;/b&gt;&lt;/li&gt;&lt;li&gt;然後將 mirror 同步到 Google Code 上面&lt;br/&gt;$ svnsync init --username &lt;b&gt;fourdollars&lt;/b&gt; https://&lt;b&gt;pcmanx-gtk2&lt;/b&gt;.googlecode.com/svn file://`pwd`/&lt;b&gt;pcmanx&lt;/b&gt;&lt;br/&gt;$ svnsync sync --username &lt;b&gt;fourdollars&lt;/b&gt; https://&lt;b&gt;pcmanx-gtk2&lt;/b&gt;.googlecode.com/svn&lt;/li&gt;&lt;li&gt;如果中途中斷遇到 lock 問題, 可以這樣解決, 不過要確定沒有人在使用該 Subversion Repository&lt;br/&gt;$ svn pdel --revprop -r 0 svn:sync-lock https://&lt;b&gt;pcmanx-gtk2&lt;/b&gt;.googlecode.com/svn&lt;br/&gt;$ svnsync sync --username &lt;b&gt;fourdollars&lt;/b&gt; https://&lt;b&gt;pcmanx-gtk2&lt;/b&gt;.googlecode.com/svn&lt;/li&gt;&lt;/ol&gt;這樣就大功告成啦~ 以後如果有類似的狀況可以把粗體字的部份換掉就可以了~ :D&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-225569321038365633?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/225569321038365633/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=225569321038365633' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/225569321038365633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/225569321038365633'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/08/subversion-repository-google-code.html' title='將 Subversion Repository 搬進 Google Code 裡面'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6386779141136341127</id><published>2009-08-22T20:57:00.000+08:00</published><updated>2009-08-22T20:59:44.442+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='GnuPG'/><title type='text'>利用 caff 來加速 GPG sign 的過程</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;在 &lt;a href='http://wiki.debian.org.tw/index.php/DebianBirthdayParty2009'&gt;Debian Birthday Party 2009 in Taiwan&lt;/a&gt; 上面 PaulLiu 介紹了 GPG 簽章的過程&lt;br/&gt;當中提到了為了防止有人偽造他人的 Email 所以我們在得到對方的 Finger Print 之後&lt;br/&gt;進行簽署的過程當中的最後不應該直接把簽好的金鑰上傳到伺服器上面&lt;br/&gt;反而是要使用對方的公鑰加密寄到對方的 Email 信箱當中&lt;br/&gt;由對方去上傳你/妳已經簽署過的金鑰&lt;br/&gt;而這之間的冗長又重覆的動作可以透過 signing-party 套件當中的 caff 來簡化這些動作&lt;br/&gt;&lt;blockquote&gt;$ sudo aptitude install &lt;b&gt;signing-party&lt;/b&gt;&lt;br/&gt;&lt;/blockquote&gt;例如你/妳拿到 $4 的金鑰的 Finger Print 後&lt;br/&gt;&lt;blockquote&gt;D51B 8601 C9AE 0E87 A0BE  7795 BCB0 2784 &lt;b&gt;A55D A068&lt;/b&gt;&lt;br/&gt;&lt;/blockquote&gt;然後執行&lt;br/&gt;&lt;blockquote&gt;$ caff &lt;b&gt;A55DA068&lt;/b&gt;&lt;br/&gt;&lt;/blockquote&gt;這樣就會自動從網路上面取得 $4 的公鑰, 然後進入 gpg command mode&lt;br/&gt;&lt;blockquote&gt;Command&amp;gt; &lt;b&gt;sign&lt;/b&gt;&lt;br/&gt;Command&amp;gt; &lt;b&gt;save&lt;/b&gt;&lt;br/&gt;&lt;/blockquote&gt;就會自動直接將加密好的文章跟簽署過的金鑰寄給我&lt;br/&gt;(前提是你/妳已經設定好文字模式下的寄信方法, 像是上一篇 "&lt;a href='http://fourdollars.blogspot.com/2009/08/ssmtp-gmail.html'&gt;利用 ssmtp 透過 Gmail 在文字模式下寄信&lt;/a&gt;" 所提的)&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6386779141136341127?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6386779141136341127/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6386779141136341127' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6386779141136341127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6386779141136341127'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/08/caff-gpg-sign.html' title='利用 caff 來加速 GPG sign 的過程'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6804636100915939246</id><published>2009-08-22T20:15:00.000+08:00</published><updated>2009-08-22T20:59:57.345+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>利用 ssmtp 透過 Gmail 在文字模式下寄信</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;blockquote&gt;sudo aptitude install ssmtp&lt;br/&gt;&lt;/blockquote&gt;然後編輯 /etc/ssmtp/ssmtp.conf 加入&lt;br/&gt;&lt;blockquote&gt;AuthUser=&lt;font color='#ff0000'&gt;&lt;b&gt;user.name&lt;/b&gt;&lt;/font&gt;@gmail.com&lt;br/&gt;AuthPass=&lt;font color='#ff0000'&gt;&lt;b&gt;password&lt;/b&gt;&lt;/font&gt;&lt;br/&gt;FromLineOverride=YES&lt;br/&gt;mailhub=smtp.gmail.com:587&lt;br/&gt;UseSTARTTLS=YES&lt;br/&gt;&lt;/blockquote&gt;之後就可以透過 mailutils 套件中的 mail 指令來寄信&lt;br/&gt;&lt;blockquote&gt;$ echo "This is a test mail." | mail -s "test mail" &lt;font color='#ff0000'&gt;&lt;b&gt;user.name&lt;/b&gt;&lt;/font&gt;@gmail.com&lt;br/&gt;&lt;/blockquote&gt;當在你/妳收到自己寄出來的信就可以確認是正常運作的&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6804636100915939246?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6804636100915939246/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6804636100915939246' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6804636100915939246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6804636100915939246'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/08/ssmtp-gmail.html' title='利用 ssmtp 透過 Gmail 在文字模式下寄信'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-7849656769771115717</id><published>2009-08-18T07:08:00.001+08:00</published><updated>2010-12-14T15:00:11.750+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='COSCUP'/><category scheme='http://www.blogger.com/atom/ns#' term='Redmine'/><title type='text'>COSCUP 2009  簡報：使用 Redmine 做專案管理</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;整個投影片的重點其實在最後一張... Work Flow&lt;br /&gt;&lt;img src='http://lh4.ggpht.com/_cYaJquZOLiw/Soni7yz3-0I/AAAAAAAACdY/gtc530hFCeI/%5BUNSET%5D.png?imgmax=800' style='max-width: 800px;'/&gt;&lt;br /&gt;而 Redmine 本身只是個工具用來輔助這個 Work Flow 的進行&lt;br /&gt;&lt;a href='http://fd.idv.tw/slides/COSCUP/2009/Redmine.pdf'&gt;http://fd.idv.tw/slides/COSCUP/2009/Redmine.pdf&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-7849656769771115717?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/7849656769771115717/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=7849656769771115717' title='6 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/7849656769771115717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/7849656769771115717'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/08/coscup-2009-redmine.html' title='COSCUP 2009  簡報：使用 Redmine 做專案管理'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_cYaJquZOLiw/Soni7yz3-0I/AAAAAAAACdY/gtc530hFCeI/s72-c/%5BUNSET%5D.png?imgmax=800' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-2834862785493314736</id><published>2009-08-17T15:41:00.004+08:00</published><updated>2009-08-18T07:47:31.377+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><title type='text'>Commit your git changesets into Subversion</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;b&gt;Commit your git changesets into Subversion&lt;/b&gt;&lt;br/&gt;&lt;ul&gt;&lt;li&gt;First prepare your Subversion target folder, ex. http://svn.example.com/svn/git-backup&lt;br/&gt;$ svn mkdir --parents http://svn.example.com/svn/git-backup&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Configure your git-svn on your original git working folder.&lt;br/&gt;$ git-svn init http://svn.example.com/svn/git-backup&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Fetch Subversion changesets.&lt;br/&gt;$ git-svn fetch&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Manually graft relationship.&lt;br/&gt;$ git show-ref &lt;font color='#ff0000'&gt;&lt;b&gt;git-svn&lt;/b&gt;&lt;/font&gt;&lt;br/&gt;&lt;b&gt;8ec71dda61a3a32d9cf0c00e51a0c1ca3ea39f0e&lt;/b&gt; refs/remotes/git-svn&lt;br/&gt;$ git log --pretty=oneline master | tail -n1&lt;br/&gt;&lt;b&gt;bcbd25a12642e98e1c54a8e51abacd85222b79a7&lt;/b&gt; Your latest git commit log.&lt;br/&gt;$ echo "bcbd25a12642e98e1c54a8e51abacd85222b79a7 8ec71dda61a3a32d9cf0c00e51a0c1ca3ea39f0e" &amp;gt;&amp;gt; &lt;font color='#ff0000'&gt;&lt;b&gt;.git/info/grafts&lt;/b&gt;&lt;/font&gt;&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Then push all git changesets into Subversion repository.&lt;br/&gt;$ git-svn dcommit&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;With Standard Layout&lt;/b&gt;&lt;br/&gt;&lt;ul&gt;&lt;li&gt;First prepare your Subversion target folder, ex. http://svn.example.com/svn/git-backup/{trunk,branches,tags}&lt;br/&gt;$ svn mkdir --parents http://svn.example.com/svn/git-backup/&lt;font color='#ff0000'&gt;&lt;b&gt;trunk&lt;/b&gt;&lt;/font&gt; http://svn.example.com/svn/git-backup/&lt;font color='#ff0000'&gt;&lt;b&gt;branches&lt;/b&gt;&lt;/font&gt; http://svn.example.com/svn/git-backup/&lt;font color='#ff0000'&gt;&lt;b&gt;tags&lt;/b&gt;&lt;/font&gt;&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Configure your git-svn on your original git working folder.&lt;br/&gt;$ git-svn init &lt;font color='#ff0000'&gt;&lt;b&gt;--stdlayout&lt;/b&gt;&lt;/font&gt; http://svn.example.com/svn/git-backup&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Fetch Subversion changesets.&lt;br/&gt;$ git-svn fetch&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Manually graft relationship.&lt;br/&gt;$ git show-ref &lt;font color='#ff0000'&gt;&lt;b&gt;trunk&lt;/b&gt;&lt;/font&gt;&lt;br/&gt;8ec71dda61a3a32d9cf0c00e51a0c1ca3ea39f0e refs/remotes/git-svn&lt;br/&gt;$ git log --pretty=oneline master | tail -n1&lt;br/&gt;bcbd25a12642e98e1c54a8e51abacd85222b79a7 Your latest git commit log.&lt;br/&gt;$ echo "bcbd25a12642e98e1c54a8e51abacd85222b79a7 8ec71dda61a3a32d9cf0c00e51a0c1ca3ea39f0e" &amp;gt;&amp;gt; .git/info/grafts&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Then push all git changesets into Subversion repository.&lt;br/&gt;$ git-svn dcommit&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-2834862785493314736?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/2834862785493314736/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=2834862785493314736' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2834862785493314736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2834862785493314736'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/08/commit-your-git-changesets-into.html' title='Commit your git changesets into Subversion'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-3184452498866814021</id><published>2009-08-02T23:43:00.000+08:00</published><updated>2009-08-02T23:51:02.289+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='GnuPG'/><title type='text'>使用 GnuPG/GPG 來簽署別人的 GPG Key</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;關於 GPG 的觀念請先參考 Tetralet 寫的 &lt;a href='http://tetralet.luna.com.tw/index.php?op=ViewArticle&amp;amp;articleId=58&amp;amp;blogId=1'&gt;用 GPG 來保護您的郵件！(一)&lt;/a&gt;&lt;br/&gt;以下只是筆記金鑰簽署過程的指令操作與步驟&lt;br/&gt;&lt;ol&gt;&lt;li&gt;首先要實際見過面並且透過&lt;font color='#ff0000'&gt;&lt;b&gt;身份證&lt;/b&gt;&lt;/font&gt;或是&lt;b&gt;&lt;font color='#ff0000'&gt;護照&lt;/font&gt;&lt;/b&gt;確認對方的身份&lt;/li&gt;&lt;li&gt;抄下對方的金鑰指紋, 例如: D51B 8601 C9AE 0E87 A0BE  7795 BCB0 2784 A55D A068&lt;br/&gt;(同時也將自己的金鑰指紋給對方, 也是要檢查過身份證或是護照, 對外國人最好準備好護照)&lt;/li&gt;&lt;li&gt; 去金鑰伺服器取回對方的公鑰&lt;br/&gt;&lt;blockquote&gt;$ gpg --recv-keys A55DA068&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;然後比對金鑰指紋是否相符&lt;br/&gt;&lt;blockquote&gt;$ gpg --fingerprint A55DA068&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;進行簽署動作&lt;br/&gt;&lt;blockquote&gt;$ gpg --sign-key A55DA068&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt; 檢查簽署結果&lt;br/&gt;&lt;blockquote&gt;$ gpg --check-sigs A55DA068&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;將簽署結果更新至伺服器&lt;br/&gt;&lt;blockquote&gt;$ gpg --send-keys A55DA068&lt;br/&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;然後寫一封信通知對方已經簽署過對方的金鑰了&lt;br/&gt;&lt;blockquote&gt;Hi $4,&lt;br/&gt;我已經簽署過你的金鑰並且上傳至伺服器 subkeys.pgp.net&lt;br/&gt;&lt;/blockquote&gt;然後使用明碼簽章&lt;br/&gt;&lt;blockquote&gt;$ gpg --clearsign email.log&lt;br/&gt;&lt;/blockquote&gt;產生一個 email.log.asc&lt;br/&gt;就可以將 email.log.asc 寄給對方了&lt;br/&gt;對方收到後可以使用&lt;br/&gt;&lt;blockquote&gt;$ gpg --verify-files email.log.asc&lt;br/&gt;&lt;/blockquote&gt;透過你當初給對方抄的金鑰指紋來驗證這封 Email&lt;br/&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-3184452498866814021?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/3184452498866814021/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=3184452498866814021' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3184452498866814021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3184452498866814021'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/08/gnupggpg-gpg-key.html' title='使用 GnuPG/GPG 來簽署別人的 GPG Key'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-560076915056058775</id><published>2009-07-31T00:20:00.000+08:00</published><updated>2009-07-31T00:21:17.345+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Launchpad'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>製作 deb package for Ubuntu Linux 並且上傳至 Launchpad PPA</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;這篇是練習過程的筆記, betaradio 現在還是處於 broken 的狀態&lt;br/&gt;&lt;br/&gt;準備好原始碼&lt;br/&gt;&lt;blockquote&gt;$ wget http://betaradio.googlecode.com/files/betaradio-0.1.2.tar.bz2&lt;br/&gt;$ tar xf betaradio-0.1.2.tar.bz2 &amp;amp;&amp;amp; cd betaradio-0.1.2&lt;br/&gt;&lt;/blockquote&gt;初始化動作&lt;br/&gt;&lt;blockquote&gt;$ export DEBFULLNAME="Shih-yuan Lee (FourDollars)"&lt;br/&gt;$ export DEBEMAIL="fourdollars@gmail.com"&lt;br/&gt;$ dh_make -s -c gpl -f ../betaradio-0.1.2.tar.bz2&lt;br/&gt;&lt;/blockquote&gt;然後編輯 debian/control&lt;br/&gt;&lt;blockquote&gt;Source: betaradio&lt;br/&gt;Section: net&lt;br/&gt;Priority: extra&lt;br/&gt;Maintainer: Shih-yuan Lee (FourDollars) &amp;lt;fourdollars@gmail.com&amp;gt;&lt;br/&gt;Build-Depends: debhelper (&amp;gt;= 7), autotools-dev, libgstreamer0.10-dev, libcurl-dev, libgtk2.0-dev&lt;br/&gt;Standards-Version: 3.8.0&lt;br/&gt;Homepage: http://code.google.com/p/betaradio/&lt;br/&gt;&lt;br/&gt;Package: betaradio&lt;br/&gt;Architecture: any&lt;br/&gt;Depends: ${shlibs:Depends}, ${misc:Depends}, gstreamer0.10-plugins-base, gstreamer0.10-plugins-bad, gstreamer0.10-plugins-ugly, gstreamer0.10-ffmpeg, gstreamer0.10-alsa&lt;br/&gt;Description: hiChannel electric radio client&lt;br/&gt; With this client you can listen to the hiChannel electric radio (http://hichannel.hinet.net/radio/index.jsp) without opening a browser.&lt;br/&gt; It displays a icon on system tray that you can click and select the channel you want to listen to.&lt;br/&gt;&lt;/blockquote&gt;編輯 debian/changelog&lt;br/&gt;&lt;blockquote&gt;$ debchange&lt;br/&gt;&lt;/blockquote&gt;修改內容&lt;br/&gt;&lt;blockquote&gt;betaradio (0.1.2-1ubuntu1) karmic; urgency=low&lt;br/&gt;&lt;br/&gt;  * Initial release.&lt;br/&gt;&lt;br/&gt; -- Shih-yuan Lee (FourDollars) &amp;lt;fourdollars@gmail.com&amp;gt;  Fri, 31 Jul 2009 00:03:22 +0800&lt;br/&gt;&lt;/blockquote&gt;產生 deb source package&lt;br/&gt;&lt;blockquote&gt;$ debuild -S&lt;br/&gt;&lt;/blockquote&gt;上傳 deb package 至 Launchpad PPA&lt;br/&gt;&lt;blockquote&gt;$ dput ppa:fourdollars/ppa betaradio_0.1.2-1ubuntu1_source.changes&lt;br/&gt;&lt;/blockquote&gt;上傳的動作需要先註冊 Launchpad 帳號並且設定好 SSH public key 跟 GPG public key 還有產生 PPA 設定之後才能夠正常上傳&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-560076915056058775?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/560076915056058775/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=560076915056058775' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/560076915056058775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/560076915056058775'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/07/deb-package-for-ubuntu-linux-launchpad_3385.html' title='製作 deb package for Ubuntu Linux 並且上傳至 Launchpad PPA'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-484911875765724417</id><published>2009-07-24T01:16:00.000+08:00</published><updated>2009-07-24T01:21:54.856+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Enable Flash support for Google Chrome Dev Build on Ubuntu 9.04</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;喜歡嘗鮮的網路宅宅應該多多少少都知道&lt;br/&gt;Google Chrome 有 Debian/Ubuntu 的開發中版本可以安裝&lt;br/&gt;&lt;a href='http://dev.chromium.org/getting-involved/dev-channel'&gt;http://dev.chromium.org/getting-involved/dev-channel&lt;/a&gt;&lt;br/&gt;目前官方釋出開發中版本的最新版已經可以使用中文輸入了&lt;br/&gt;不過一直都沒有看到有 Flash 的支援&lt;br/&gt;剛剛看到一篇 &lt;a href='http://muammar.me/blog/index.php?/archives/316-guid.html'&gt;Flash player in Google Chrome for Linux&lt;/a&gt; 有提到解決方法&lt;br/&gt;於是在 Ubuntu 9.04上面嘗試了一下&lt;br/&gt;&lt;br/&gt;1. 首先要找到 libflashplayer.so 的位置&lt;br/&gt;&lt;blockquote&gt;$ locate libflashplayer.so&lt;br/&gt;/usr/lib/adobe-flashplugin/libflashplayer.so&lt;br/&gt;&lt;/blockquote&gt;2. 在 Google Chrome 的目錄下建立一個 symbolic link&lt;br/&gt;&lt;blockquote&gt;$ cd /opt/google/chrome/&lt;br/&gt;$ sudo ln -s /usr/lib/adobe-flashplugin/libflashplayer.so .&lt;br/&gt;&lt;/blockquote&gt;3. 最後啟動 Google Chrome 時要多加一個參數&lt;br/&gt;&lt;blockquote&gt;$ google-chrome --enable-plugins&lt;br/&gt;&lt;/blockquote&gt;還真的可以用耶~ :D&lt;br/&gt;放了一張 YouTube 上的日蝕影片來當真象~ ^w^&lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.youtube.com/watch?v=revlrzqZoW4&amp;amp;feature=popular'&gt;&lt;img style='max-width: 800px;' src='http://lh6.ggpht.com/_cYaJquZOLiw/Smiafx56GpI/AAAAAAAACcE/euVLx5ReGvA/%5BUNSET%5D.png?imgmax=800'/&gt;&lt;/a&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-484911875765724417?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/484911875765724417/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=484911875765724417' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/484911875765724417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/484911875765724417'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/07/enable-flash-support-for-google-chrome.html' title='Enable Flash support for Google Chrome Dev Build on Ubuntu 9.04'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_cYaJquZOLiw/Smiafx56GpI/AAAAAAAACcE/euVLx5ReGvA/s72-c/%5BUNSET%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-2502364219291944732</id><published>2009-07-13T00:40:00.000+08:00</published><updated>2009-07-13T00:41:32.059+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mozilla'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>在  Ubuntu 8.10 (intrepid) 上面安裝 Firefox 3.5</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;LaunchPad 上面有個 &lt;a href='https://launchpad.net/%7Eubuntu-mozilla-daily'&gt;Ubuntu Mozilla Daily Build Team&lt;/a&gt;&lt;br/&gt;裡面就有 &lt;a href='https://launchpad.net/%7Eubuntu-mozilla-daily/+archive/ppa'&gt;PPA&lt;/a&gt; 可以用了&lt;br/&gt;所以接下來的動作就很簡單了&lt;br/&gt;首先是取得該 PPA 使用的  GPG public key&lt;br/&gt;&lt;blockquote&gt;&lt;code&gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 247510BE&lt;/code&gt;&lt;br/&gt;&lt;/blockquote&gt;然後執行 sudo apt-key list 就可以看到多下面這個資訊&lt;br/&gt;&lt;blockquote&gt;pub   1024R/247510BE 2009-02-05&lt;br/&gt;uid                  Launchpad PPA for Ubuntu Mozilla Daily Build Team&lt;br/&gt;&lt;/blockquote&gt;接下來把該 PPA 的 sources.list 內容抄到 /etc/apt/sources.list.d/ 底下的 ubuntu-mozilla-daily.list&lt;br/&gt;&lt;blockquote&gt;deb http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu intrepid main &lt;br/&gt;deb-src http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu intrepid main&lt;br/&gt;&lt;/blockquote&gt;最後就是使用 APT 的前端程式來安裝囉&lt;br/&gt;&lt;blockquote&gt;sudo aptitude update&lt;br/&gt;sudo aptitude install firefox-3.5&lt;br/&gt;&lt;/blockquote&gt;這個方法同時支援 Ubuntu 8.04/8.10 只是換掉 codename (intrepid 換成 hardy) 而已~&lt;br/&gt;至於 Ubuntu 9.04 的官方套件庫裡面已經有放 firefox-3.5&lt;br/&gt;不過目前安裝起來都還是有英文版&lt;br/&gt;所以還要下載中文語系包 &lt;a href='http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.5/linux-i686/xpi/zh-TW.xpi'&gt;http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.5/linux-i686/xpi/zh-TW.xpi&lt;/a&gt;&lt;br/&gt;這樣就大功告成啦~ :-D&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-2502364219291944732?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/2502364219291944732/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=2502364219291944732' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2502364219291944732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2502364219291944732'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/07/ubuntu-810-intrepid-firefox-35_3996.html' title='在  Ubuntu 8.10 (intrepid) 上面安裝 Firefox 3.5'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6616022170023575437</id><published>2009-07-04T19:12:00.002+08:00</published><updated>2009-07-13T10:27:21.919+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='COSCUP'/><category scheme='http://www.blogger.com/atom/ns#' term='Redmine'/><title type='text'>將在 COSCUP 上面分享 Redmine</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;a href='http://coscup.org'&gt;COSCUP 活動網站&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;主題：&lt;br/&gt;&lt;blockquote&gt;使用 Redmine 做專案管理&lt;br/&gt;&lt;/blockquote&gt;議程簡介：&lt;br/&gt;&lt;blockquote&gt;關於軟體寫作這件事，常常可以聽到有人在分享程式語言以及相關的技術、開發框架（Framework）、分散式版本管理系統（DVCS），卻鮮少聽到有人在分享軟體專案管理系統使用上的經驗，像是使用 Python 開發的 Trac，用 Ruby 開發的 Redmine，用 PHP 開發的 dotProject 等，還有真正執行一個軟體專案或是同時進行多個軟體專案上面的實務經驗分享，趁著這次 COSCUP 的機會跟大家分享一些 Redmine 上面的使用心得。&lt;br/&gt;&lt;/blockquote&gt;&lt;div class='ii gt' id=':oj'&gt;內容大綱：&lt;br/&gt;&lt;ul&gt;&lt;li&gt;為何會開始注意專案管理&lt;/li&gt;&lt;li&gt;Redmine 簡介&lt;/li&gt;&lt;li&gt;專案的成長過程&lt;/li&gt;&lt;li&gt;角色扮演與責任分配&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6616022170023575437?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6616022170023575437/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6616022170023575437' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6616022170023575437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6616022170023575437'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/07/coscup-redmine-autotools.html' title='將在 COSCUP 上面分享 Redmine'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-3827129778742443779</id><published>2009-06-28T15:46:00.000+08:00</published><updated>2009-06-28T15:47:12.319+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>apt-get/aptitude update 時 GPG error 問題的發生與尋找解決之道</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;剛剛在 Ubuntu 8.10 上執行&lt;br/&gt;&lt;blockquote&gt;sudo aptitude update&lt;br/&gt;&lt;/blockquote&gt;時遇到一個錯誤訊息&lt;br/&gt;&lt;blockquote&gt;W: GPG error: http://download.virtualbox.org intrepid Release: 下列的簽名皆不合法： BADSIG DCF9F87B6DFBCBAE Sun Microsystems, Inc. (xVM VirtualBox archive signing key) &amp;lt;info@virtualbox.org&amp;gt;&lt;br/&gt;&lt;/blockquote&gt;於是就到 &lt;a href='http://www.virtualbox.org'&gt;http://www.virtualbox.org&lt;/a&gt; 上面去尋找 GPG 這個關鍵字&lt;br/&gt;果然找到了一篇相關的 &lt;a href='http://www.virtualbox.org/ticket/2744'&gt;bug report&lt;/a&gt; 裡面提到一篇郵件清單上面的文章 &lt;a href='https://lists.ubuntu.com/archives/ubuntu-users/2005-October/052998.html'&gt;apt-get update problem: GPG error ... The following signatures&lt;br/&gt;	were invalid&lt;/a&gt;&lt;br/&gt;文章當中提到了&lt;br/&gt;&lt;blockquote&gt;rm /var/lib/apt/lists/*&lt;br/&gt;&lt;/blockquote&gt;就可以解決問題了&lt;br/&gt;可是我不想要把 /var/lib/apt/lists/ 底下的東西都刪光光&lt;br/&gt;於是看了一下 /var/lib/apt/lists/ 底下&lt;br/&gt;&lt;blockquote&gt;[前面省略]&lt;br/&gt;archive.ubuntu.com_ubuntu_dists_intrepid_main_source_Sources&lt;br/&gt;archive.ubuntu.com_ubuntu_dists_intrepid_Release&lt;br/&gt;archive.ubuntu.com_ubuntu_dists_intrepid_Release.gpg&lt;br/&gt;archive.ubuntu.com_ubuntu_dists_intrepid_restricted_source_Sources&lt;br/&gt;download.virtualbox.org_virtualbox_debian_dists_intrepid_non-free_binary-i386_Packages&lt;br/&gt;download.virtualbox.org_virtualbox_debian_dists_intrepid_Release&lt;br/&gt;[後面也省略]&lt;br/&gt;&lt;/blockquote&gt;跟之前的錯誤訊息比較看起來只是 VirtualBox 的 Release 這個檔案缺少了相對應的 Release.gpg 檔案&lt;br/&gt;於是就把 download.virtualbox.org_virtualbox_debian_dists_intrepid_non-free_binary-i386_Packages download.virtualbox.org_virtualbox_debian_dists_intrepid_Release 這兩個檔案刪除掉&lt;br/&gt;重新執行&lt;br/&gt;&lt;blockquote&gt;sudo aptitude update&lt;br/&gt;&lt;/blockquote&gt;結果問題就... 還是沒有解決... 冏rz&lt;br/&gt;&lt;br/&gt;好吧... 重新找線索看看發現 /var/lib/apt/lists/ 底下有個唯一的目錄 partial 底下也有 VirtualBox 相關的檔案&lt;br/&gt;&lt;blockquote&gt;partial/&lt;br/&gt;|-- download.virtualbox.org_virtualbox_debian_dists_intrepid_Release&lt;br/&gt;`-- download.virtualbox.org_virtualbox_debian_dists_intrepid_Release.gpg&lt;br/&gt;&lt;/blockquote&gt;那麼試試看把這兩個檔案也刪除掉再執行一次&lt;br/&gt;&lt;blockquote&gt;sudo aptitude update&lt;br/&gt;&lt;/blockquote&gt;結果就... 成功地解決掉這個問題啦~ ^o^&lt;br/&gt;&lt;br/&gt;再看看 partial 目錄底下還是空空的&lt;br/&gt;不過 partial 上層的目錄底下就看到了&lt;br/&gt;&lt;blockquote&gt;download.virtualbox.org_virtualbox_debian_dists_intrepid_non-free_binary-i386_Packages&lt;br/&gt;download.virtualbox.org_virtualbox_debian_dists_intrepid_Release&lt;br/&gt;download.virtualbox.org_virtualbox_debian_dists_intrepid_Release.gpg&lt;br/&gt;&lt;/blockquote&gt;看起來就是 Release 檔案有了相對應的 Release.gpg 檔案&lt;br/&gt;所以才能夠正常地執行~ :-D&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-3827129778742443779?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/3827129778742443779/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=3827129778742443779' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3827129778742443779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3827129778742443779'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/06/apt-getaptitude-update-gpg-error.html' title='apt-get/aptitude update 時 GPG error 問題的發生與尋找解決之道'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-4607046938153646472</id><published>2009-06-17T23:53:00.000+08:00</published><updated>2009-06-17T23:54:29.665+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Driver'/><category scheme='http://www.blogger.com/atom/ns#' term='BIOS'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='FreedomHEC'/><title type='text'>FreedomHEC Taipei 2009 - Day 2</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;第一個議程由 &lt;b&gt;&lt;font color='#ff6600'&gt;CIH 介紹 Linux Kernel Module 的逆向工程&lt;/font&gt;&lt;/b&gt;&lt;br/&gt;背景故事是說老闆要他 porting 一個 WLAN driver 可是沒有 datasheet 可以參考&lt;br/&gt;剛好那個 WLAN driver 少了四個整數值的 header file&lt;br/&gt;問題是他也不熟 ARM 的組合語言 於是他就憑藉著 GCC 的 Cross Compiler 還有中斷向量表的基本觀念&lt;br/&gt;在程式碼裡面填入 asm("nop"); 指令識別透過 arm-linux-gcc -S 的指令轉譯成 ARM 的組合語言&lt;br/&gt;利用這樣的技巧找出無限迴圈跟函式執行進入點 ARM 的組合語言&lt;br/&gt;然後將記憶體整個 dump 出來分析 (通常網通裝置的 Linux 系統所使用的記憶體不會太大, 一般在 64M 以下)&lt;br/&gt;還有透過將無限迴圈放到中斷向量表裡面一步一步抽絲剝繭地將四個重要的整數值找出來&lt;br/&gt;&lt;br/&gt;第二個議程由 &lt;b&gt;&lt;font color='#ff6600'&gt;Peter Stuge 來介紹 CoreBoot (前身為 LinuxBIOS)&lt;/font&gt;&lt;/b&gt;&lt;br/&gt;CoreBoot 最早叫做 LinuxBIOS 就名稱上看來就是用來啟動 Linux 的 BIOS&lt;br/&gt;後來因為它也可以載入 Linux 以外的 Payload (Payload 不負責任譯為"某種會花費硬體資源的載體")&lt;br/&gt;就連 GRUB 也算是一種 Payload 更多的 Payloads 在 &lt;a href='http://www.coreboot.org/Payloads'&gt;http://www.coreboot.org/Payloads&lt;/a&gt; 可以看到&lt;br/&gt;這東西的概念簡單說就是 GPL 授權的 BIOS 讓從事 BIOS 開發不用再從頭寫起&lt;br/&gt;目前已經支援某些特定主機板的清單可以在 &lt;a href='http://www.coreboot.org/Supported_Motherboards'&gt;http://www.coreboot.org/Supported_Motherboards&lt;/a&gt; 上面看到&lt;br/&gt;另外有趣的小東西是 BSD 授權的 &lt;a href='http://www.coreboot.org/Libpayload'&gt;Libpayload&lt;/a&gt; 讓你寫出自己的載體讓 CoreBoot 來載入&lt;br/&gt;&lt;br/&gt;第三個議程由&lt;font color='#ff6600'&gt; &lt;b&gt;Jon Corbet 來介紹 Kernel Community&lt;/b&gt;&lt;/font&gt;&lt;br/&gt;介紹整個 Linux Kernel 開發的合作模式&lt;br/&gt;就是 Linus Torvalds 本人並不會直接收別人給他的 Patch&lt;br/&gt;所以&lt;b&gt;&lt;font color='#ff0000'&gt;別天真的以為可以把自己的 Patch 直接送給 Linus Torvalds&lt;/font&gt;&lt;/b&gt;&lt;br/&gt;Linus Torvalds 只會從幾位重要的 Developer 那邊接收 Changesets&lt;br/&gt;Linux Kernel 是個相當活耀開發的計畫有上千個活躍的開發者&lt;br/&gt;Linus Torvalds 不可能一個人去處理所有的程式碼合併跟衝突解決&lt;br/&gt;當然這所有的工作都是靠優秀的 Git 分散式版本控制系統還有優秀的同伴們協力達成的 (他們演講時沒怎麼提到 Git)&lt;br/&gt;簡單說就是 Linus Torvalds 會收一小群人給的 Changesets 然後那一小群人又會從其他人那邊收 Changesets 或是 Patch&lt;br/&gt;最後在 Merge Window 的時候全部再匯集在一起然後釋出 rc1&lt;br/&gt;然後就是 Stabilization 所以不會再接受任何新功能&lt;br/&gt;經過好幾次的 rcN release 覺得差不多了就正式 release 然後再繼續下一個 cycle&lt;br/&gt;一個 cycle 大約 8~12 個星期&lt;br/&gt;一個 stable 的 release 只會維護半年的安全性跟嚴重錯誤修正&lt;br/&gt;另外就是有兩個特別的開發樹&lt;br/&gt;一個是 linux-next 提前為下一個 mainline cycle 的 patches 整合做測試&lt;br/&gt;一個是 -mm 以 linux-next 為基底收集更多雜七雜八的 patches 來做測試&lt;br/&gt;最後子系統的維護者們其實才是把關者也就是所有的 patches 應該要直接送給這些維護者們去做 merge 才對&lt;br/&gt;但是這些子系統的維護者們也並不是擁有絕對的權利&lt;br/&gt;也就是說凡是都還是有商量的餘地&lt;br/&gt;&lt;br/&gt;第四個議程 &lt;b&gt;&lt;font color='#ff6600'&gt;Greg KH 介紹 Linux Driver Project&lt;/font&gt;&lt;/b&gt;&lt;br/&gt;總之 Greg KH 說把你的 Linux Driver 送交到這個計畫吧&lt;br/&gt;這邊會收任何 Kernel Module 的 patches&lt;br/&gt;也歡迎硬體廠商提供測試機器協助他們測試驅動程式是否正常&lt;br/&gt;就算硬體都還沒有生出來也沒關係&lt;br/&gt;&lt;br /&gt;反正早點送 patches 早點 Code Review&lt;br/&gt;&lt;br /&gt;不用等到都做完再去送 patches&lt;br/&gt;或者是你的硬體需要有人寫 Linux Driver 嗎&lt;br/&gt;這邊有太多閒著沒事想要寫 Linux Driver 的人&lt;br/&gt;要簽署 NDA 文件也是可以接受的&lt;br/&gt;Linux Driver Project 的網址在 &lt;a href='http://www.linuxdriverproject.org/'&gt;http://www.linuxdriverproject.org/&lt;/a&gt;&lt;br/&gt;台灣的硬體廠商們還不快點行動嗎~ :P&lt;br/&gt;&lt;br/&gt;第五個議題 &lt;font color='#ff6600'&gt;&lt;b&gt;Harald Welte 介紹 GPL Compliance&lt;/b&gt;&lt;/font&gt;&lt;br/&gt;簡單講就是你有用 Linux System 做硬體嗎？&lt;br/&gt;那麼你最好依照相關的規定把該放出來的 Source Code 放出來&lt;br/&gt;人在做 天在看 還有我們一群擅長逆向工程的高手在看 前面 CIH 就介紹過一些方法了&lt;br/&gt;不然我們找到證據就會跑去告你喔~ :O&lt;br/&gt;你看我們有很多合作的模範廠商&lt;br/&gt;咦~ 有些被我們告過囉~ 不過沒關係~ 後來大家都和好了~ :P&lt;br/&gt;另外就是提醒程式開發者們&lt;br/&gt;如果程式碼裡面有一些錯字沒關係就留在那邊&lt;br/&gt;那些錯字可以方便以後我們逆向工程找證據出來&lt;br/&gt;&lt;br/&gt;最後就是所有的講者上台接受大家問問題~&lt;br/&gt;照片可以在 &lt;a href='http://www.flickr.com/photos/acelan/3617233294/'&gt;http://www.flickr.com/photos/acelan/3617233294/&lt;/a&gt;&lt;br/&gt;然後就聽到大長輩田欣先生在用英文一些問題&lt;br/&gt;還有這個活動籌辦人之一的 Scott Tsai 提供即時的中英雙向翻譯&lt;br/&gt;Scott 自己本身也問了一些問題&lt;br/&gt;在聽眾們沒有什麼問題的情況下&lt;br/&gt;講者反問了聽眾們一些問題&lt;br/&gt;然後又聽見田欣先生在用英文回答&lt;br/&gt;還有幾位強者 Matt Hsu, Thinker, ... 也是用英文在問問題回答講者的問題&lt;br/&gt;&lt;br/&gt;這兩天的活動於是就圓滿的結束了~&lt;br/&gt;中午提供的便當還蠻好吃的~ :P&lt;br/&gt;第一天中午的便當主菜有雞腿副菜有豬肉&lt;br/&gt;第二天中午的便當主菜有魚副菜也有豬肉&lt;br/&gt;中午吃飯的時候旁邊的窗簾被整個拉開&lt;br/&gt;可以從 14 樓的窗戶看到一排山還有內湖的摩天輪&lt;br/&gt;景色相當好看~ :D&lt;br/&gt;&lt;br/&gt;以上是筆者參加過後得心得分享&lt;br/&gt;因為過了一星期才憑回憶攥寫&lt;br/&gt;內容不一定與當天實際情狀相符&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-4607046938153646472?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/4607046938153646472/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=4607046938153646472' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/4607046938153646472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/4607046938153646472'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/06/freedomhec-taipei-2009-day-2.html' title='FreedomHEC Taipei 2009 - Day 2'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-4460451930565464157</id><published>2009-06-17T22:14:00.000+08:00</published><updated>2009-06-17T22:15:27.506+08:00</updated><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='Kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='FreedomHEC'/><title type='text'>FreedomHEC Taipei 2009 - Day 1</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;FreedomHEC 的全名是 Freedom Hardware Engineer Conference&lt;br/&gt;中文應該是翻成『自由硬體工程師研討會』&lt;br/&gt;如果沒弄錯今年是第二次舉辦 (因為第一次我沒跟到... &amp;gt;_&amp;lt;)&lt;br/&gt;這次的活動總共兩天的議程&lt;br/&gt;網址 &lt;a href='http://freedomhectaipei.pbworks.com/'&gt;http://freedomhectaipei.pbworks.com/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;big style='color: rgb(255, 0, 0);'&gt;&lt;big&gt;FreedomHEC Taipei 2009 - Day 1&lt;/big&gt;&lt;/big&gt;&lt;br/&gt;&lt;br/&gt;第一個議程由 &lt;span style='color: rgb(255, 102, 0);'&gt;Jon Corbet 介紹 2.6.X 每個正式 Release 版本改進了哪些功能&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;只是單純地介紹歷史帶過... 不過內容好像在跟 Jon Corbet 在 LWN 上面寫的都一樣&lt;br/&gt;也就是說他的投影片就是那些每次 Linux Kernel Release 時都會在 LWN 上面寫的東西是一樣的&lt;br/&gt;&lt;br/&gt;第二個議程由 &lt;span style='color: rgb(255, 102, 0);'&gt;Jim Huang (jserv) &amp;amp; Matt Hsu 講 Qi (气) 這個簡單化的 bootloader&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;內容主要是在講 Qi 將 bootloader 的功能盡量地簡化把複雜的功能交給一個客製化的 Linux Kernel 來處理&lt;br/&gt;也就是說 Qi 只專注在載入一個客製化的 Linux Kernel 然後再讓客製化的  Linux Kernel 透過 kexec() 來載入另一個 Linux Kernel&lt;br/&gt;好處是那個客製化的 Linux Kernel 可以透過許多原本就已經支援的網路裝置&lt;br/&gt;將另一個放在 TFTP 或是 NFS 上面的 Linux Kernel 載入記憶體中並且執行起來&lt;br/&gt;或是載入執行在 SD / USB 等裝置上面的 Linux Kernel&lt;br/&gt;在一些 Flash 儲存裝置的 Linux Driver 還沒有 Ready 前就可以做先期的開發工作&lt;br/&gt;&lt;br/&gt;第三個議程是由 &lt;span style='color: rgb(255, 102, 0);'&gt;Fred Chien 介紹 Linux 快速開機的方法&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;像是分析啟動時的開機時間統計然後調整 /etc/init.d 裡面 script 執行的順序&lt;br/&gt;或是利用一些 readahead 之類的工具事先將需要載入系統的函式庫提先載入&lt;br/&gt;還有把不需要的 Linux Kernel Module 拿掉 把需要的 Linux Kernel Module build-in&lt;br/&gt;改 XWindow 的滑鼠驅動程式 ... (這個筆者兩三年前在前公司也弄過, 還有改 VGA Driver)&lt;br/&gt;另外就是利用休眠的功能將記憶體的資料寫到儲存裝置上&lt;br/&gt;下次開機再將那些資料讀回記憶體之中&lt;br/&gt;還有關閉掉一些在 BIOS 裡面不需要啟動的硬體功能減少 BIOS 啟動時間&lt;br/&gt;或是將一些系統服務的啟動放在 XWindow 起來之後再去做&lt;br/&gt;&lt;br/&gt;第四個議題是由&lt;span style='color: rgb(255, 102, 0);'&gt;在 VIA 服務的 Joseph Chan 介紹 VIA 是怎麼將他們公司的硬體驅動程式提交進 Linux Kernel mainline 裡面&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;有兩點需要注意的&lt;br/&gt;&lt;br/&gt;第一點 Coding Style&lt;br/&gt;Linux Kernel 有著慣用的 Coding Style 沒理由 Linux Kernel 的 Source Code 要去 follow 某間公司的 Coding Style&lt;br/&gt;所以想要提交程式碼進去 Linux Kernel 的廠商首先就是要調整 Coding Style 去適應 Linux Kernel&lt;br/&gt;而不是自己關上門來硬幹等到最後提交的時候才發現 Coding Style 要大修改&lt;br/&gt;&lt;br/&gt;第二點 Mailing List 上面的 Review Feedback&lt;br/&gt;並不是將程式碼提交出去就算是交差了事了，更重要的是要聆聽開發者的意見還有耐心等待&lt;br/&gt;並不是開發者都閒閒沒事做在那邊等著別人送 Patch 給他 Review，所以要等到開發者有時間才會去看你的程式碼去給 Review Feedback&lt;br/&gt;還有要注意的是收到回應後應該要馬上給對方回應儘快去修改程式碼再去做提交&lt;br/&gt;&lt;br/&gt;而 Joseph Chan 正是將 VIA 所遭遇到的慘痛經驗分享給與會者&lt;br/&gt;&lt;br/&gt;第五個議題是由 &lt;span style='color: rgb(255, 102, 0);'&gt;Greg KH 帶著大家一步一步去寫出 Linux Kernel 上面的  USB 溫度計的 Kernel Module&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;Greg KH 與前面的講者 Jon Corbet 剛好都是  Linux 驅動程式這本書籍的作者&lt;br/&gt;所以其實 Greg KH 介紹的東西在看過這本書之後，其實很快就可以上手了&lt;br/&gt;主要的重點在於 Greg KH 介紹了 USB Subsystem 的基本架構&lt;br/&gt;介紹 Interface/Config 跟  IN/OUT/Endpoint{Interrupt,Bulk,Isolate} 這些觀念&lt;br/&gt;然後就是一個範例一個範例地帶大家一步一步地寫出 USB 溫度計的驅動程式&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-4460451930565464157?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/4460451930565464157/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=4460451930565464157' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/4460451930565464157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/4460451930565464157'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/06/freedomhec-taipei-2009-day-1.html' title='FreedomHEC Taipei 2009 - Day 1'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-4217294320002579789</id><published>2009-06-07T17:56:00.001+08:00</published><updated>2009-06-07T17:56:46.373+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCons'/><title type='text'>SCons 簡單介紹一下</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;apt-cache show scons 裡面的描述是&lt;br/&gt;&lt;blockquote&gt; &lt;a href='http://www.scons.org/'&gt;SCons&lt;/a&gt; is a make replacement providing a range of enhanced features such&lt;br/&gt; as automated dependency generation and built in compilation cache&lt;br/&gt; support.  &lt;a href='http://www.scons.org/'&gt;SCons&lt;/a&gt; rule sets are Python scripts so as well as the features&lt;br/&gt; it provides itself &lt;a href='http://www.scons.org/'&gt;SCons&lt;/a&gt; allows you to use the full power of Python&lt;br/&gt; to control compilation.&lt;br/&gt;&lt;/blockquote&gt;一個 C/C++ 的軟體專案一定需要一個自動化編譯的工具作為輔助來管理，這樣可以簡化許多繁複的步驟，所以也有人將 &lt;a href='http://www.scons.org/'&gt;SCons&lt;/a&gt; 拿來跟 GNU Build System (Autotools) 還有 CMake 做比較。&lt;br/&gt;&lt;br/&gt;例如要編譯一個簡單的 Hello World 執行程式&lt;br/&gt;&lt;blockquote&gt;/* hello.c */&lt;br/&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br/&gt;int main(int argc, char* argv[])&lt;br/&gt;{&lt;br/&gt;    printf("Hello World!\n");&lt;br/&gt;    return 0;&lt;br/&gt;}&lt;br/&gt;&lt;/blockquote&gt;最初的方法一定是直接下指令&lt;blockquote&gt;$ gcc -o hello hello.c&lt;br/&gt;&lt;/blockquote&gt;如果是學過 GNU Make 的話就會知道要寫一個 Makefile 來用，內容像是&lt;br/&gt;&lt;blockquote&gt;# Makefile&lt;br/&gt;hello: hello.c&lt;br/&gt;    $(CC) -o $@ $&amp;lt;&lt;br/&gt;clean:&lt;br/&gt;    $(RM) hello&lt;br/&gt;.PHONY: hello clean&lt;br/&gt;&lt;/blockquote&gt;不過如果是 &lt;a href='http://www.scons.org'&gt;SCons&lt;/a&gt; 的話，就是寫一個 SConstruct 的文字檔，內容像是&lt;br/&gt;&lt;blockquote&gt;# SConstruct&lt;br/&gt;Program('hello.c')&lt;br/&gt;&lt;/blockquote&gt;接下來就可以下指令 scons 來編譯，如果要清除的話就可以下指令 scons -c 來做&lt;br/&gt;這樣是不是感覺輕鬆許多了呢~ ;-)&lt;br/&gt;當然如果熟悉原本 GNU Make 的人也可以寫一個 Makefile 來用，內容像是&lt;br/&gt;&lt;blockquote&gt;# Makefile&lt;br/&gt;all:&lt;br/&gt;    @scons -Q&lt;br/&gt;clean:&lt;br/&gt;    @scons -Q -c&lt;br/&gt;.PHONY: all clean&lt;br/&gt;&lt;/blockquote&gt;這樣就可以利用 &lt;a href='http://www.scons.org'&gt;SCons&lt;/a&gt; 簡潔的語法而且又維持原本 GNU Make 的使用習慣了~ ;-)&lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.scons.org'&gt;SCons&lt;/a&gt; 更詳細的使用方法請見官方的說明文件 &lt;a href='http://www.scons.org/documentation.php'&gt;http://www.scons.org/documentation.php&lt;br/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-4217294320002579789?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/4217294320002579789/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=4217294320002579789' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/4217294320002579789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/4217294320002579789'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/06/scons.html' title='SCons 簡單介紹一下'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-559249379263597284</id><published>2009-05-25T18:45:00.001+08:00</published><updated>2009-05-25T18:45:49.648+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='SSH'/><category scheme='http://www.blogger.com/atom/ns#' term='Console'/><title type='text'>減少打字 ssh -p xxxx username@host.com -&gt; ssh host</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;一般的情況下，要使用 Console 下的 ssh 連線到某台 server 會這樣下指令&lt;br/&gt;&lt;blockquote&gt;ssh -p xxxx username@myhost.com&lt;br/&gt;&lt;/blockquote&gt;不過我們可以下更短的指令&lt;br/&gt;&lt;blockquote&gt;ssh myhost&lt;br/&gt;&lt;/blockquote&gt;要做到上面這樣的方法是編輯 ~/.ssh/config 這個檔案加入&lt;br/&gt;&lt;blockquote&gt;host myhost&lt;br/&gt;    Hostname myhost.com&lt;br/&gt;    User username&lt;br/&gt;    Port xxxx&lt;br/&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-559249379263597284?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/559249379263597284/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=559249379263597284' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/559249379263597284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/559249379263597284'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/05/ssh-p-xxxx-usernamehostcom-ssh-host.html' title='減少打字 ssh -p xxxx username@host.com -&amp;gt; ssh host'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6614570901869076335</id><published>2009-05-18T19:43:00.001+08:00</published><updated>2010-10-01T10:40:19.085+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GitHub'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Markdown'/><title type='text'>Vim 套用 Markdown syntax</title><content type='html'>&lt;a href='http://daringfireball.net/projects/markdown/'&gt;Markdown&lt;/a&gt; 是一套類似 WIKI 語法，可以快速生成 HTML 文件的工具。&lt;br /&gt;因為自己有在使用 Vim 去編輯 Markdown 的檔案&lt;br /&gt;所以找了一下給 Markdown 使用的 &lt;a href='http://www.vim.org/scripts/script.php?script_id=1242'&gt;syntax&lt;/a&gt;&lt;br /&gt;下載回來後放在 ~/.vim/syntax 底下&lt;br /&gt;然後再新增編輯 ~/.vim/filetype.vim&lt;br /&gt;&lt;pre class="brush: text"&gt;augroup filetypedetect&lt;br /&gt;    au BufNewFile,BufRead *.mkd      setfiletype mkd&lt;br /&gt;augroup END&lt;/pre&gt;這樣一來就可以指定 .mkd 副檔名的檔案都使用 Markdown 的 syntax&lt;br /&gt;另外 Markdown 也是 &lt;a href='http://github.com/'&gt;GitHub&lt;/a&gt; 上面官方支援的文件格式之一&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6614570901869076335?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6614570901869076335/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6614570901869076335' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6614570901869076335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6614570901869076335'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/05/vim-markdown-syntax.html' title='Vim 套用 Markdown syntax'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-5589675574526882175</id><published>2009-05-04T11:11:00.001+08:00</published><updated>2009-05-04T11:11:59.284+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>git format-patch --no-prefix -p</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;一般的 git diff 輸出長得像是這樣子&lt;br/&gt;&lt;blockquote&gt;diff --git a/po/POTFILES.in b/po/POTFILES.in&lt;br/&gt;index 6853012..baecc35 100644&lt;br/&gt;--- a/po/POTFILES.in&lt;br/&gt;+++ b/po/POTFILES.in&lt;br/&gt;@@ -9,3 +9,4 @@ src/view/telnetview.cpp&lt;br/&gt; src/emoticondlg.cpp&lt;br/&gt; src/autologinpage.cpp&lt;br/&gt; src/downarticledlg.cpp&lt;br/&gt;+src/pcmanx_gtk2.cpp&lt;br/&gt;&lt;/blockquote&gt;其中有 a/... b/... 實在不是很喜歡&lt;br/&gt;改用 git diff --no-prefix 輸出就變成了&lt;br/&gt;&lt;blockquote&gt;diff --git po/POTFILES.in po/POTFILES.in&lt;br/&gt;index 6853012..baecc35 100644&lt;br/&gt;--- po/POTFILES.in&lt;br/&gt;+++ po/POTFILES.in&lt;br/&gt;@@ -9,3 +9,4 @@ src/view/telnetview.cpp&lt;br/&gt; src/emoticondlg.cpp&lt;br/&gt; src/autologinpage.cpp&lt;br/&gt; src/downarticledlg.cpp&lt;br/&gt;+src/pcmanx_gtk2.cpp&lt;br/&gt;&lt;/blockquote&gt;同樣的用法也可以使用在 git format-patch --no-prefix&lt;blockquote&gt;From 66038b61719904c16147945d8c68a0773ef65846 Mon Sep 17 00:00:00 2001&lt;br/&gt;From: jasonxh &amp;lt;jasonxh+c73c965c-c2fa-0310-9a63-82392b9be63f&amp;gt;&lt;br/&gt;Date: Thu, 19 Feb 2009 05:58:15 +0000&lt;br/&gt;Subject: [PATCH] 2009-02-18  Jason Xia  &amp;lt;jasonxh+gmail.com&amp;gt;&lt;br/&gt;&lt;br/&gt;    * po/POTFILES.in, po/zh_CN.po, po/zh_TW.po: Update po files. Fix&lt;br/&gt;    Simplified Chinese translation of "Line" and "Col".&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;git-svn-id: https://svn.csie.net/pcmanx/trunk@464 c73c965c-c2fa-0310-9a63-82392b9be63f&lt;br/&gt;---&lt;br/&gt; ChangeLog           |    5 ++&lt;br/&gt; po/POTFILES.in      |    1 +&lt;br/&gt; po/zh_CN.po         |  174 +++++++++++++++++++++++++++------------------------&lt;br/&gt; po/zh_TW.po         |  167 +++++++++++++++++++++++++-----------------------&lt;br/&gt; src/pcmanx_gtk2.cpp |    2 +-&lt;br/&gt; 5 files changed, 186 insertions(+), 163 deletions(-)&lt;br/&gt;&lt;br/&gt;diff --git ChangeLog ChangeLog&lt;br/&gt;index ffd2d02..ef74622 100644&lt;br/&gt;--- ChangeLog&lt;br/&gt;+++ ChangeLog&lt;br/&gt;@@ -1,3 +1,8 @@&lt;br/&gt;+2009-02-18  Jason Xia  &amp;lt;jasonxh+gmail.com&amp;gt;&lt;br/&gt;+&lt;br/&gt;+   * po/POTFILES.in, po/zh_CN.po, po/zh_TW.po: Update po files. Fix&lt;br/&gt;+   Simplified Chinese translation of "Line" and "Col".&lt;br/&gt;+&lt;br/&gt; 2009-02-07  Youchen Lee  &amp;lt;copyleft+utcr.org&amp;gt;&lt;br/&gt;&lt;br/&gt;    * src/mainframe.cpp: For availability to build under (gtk+ &amp;lt; 2.10),&lt;br/&gt;diff --git po/POTFILES.in po/POTFILES.in&lt;br/&gt;index 6853012..baecc35 100644&lt;br/&gt;--- po/POTFILES.in&lt;br/&gt;+++ po/POTFILES.in&lt;br/&gt;@@ -9,3 +9,4 @@ src/view/telnetview.cpp&lt;br/&gt; src/emoticondlg.cpp&lt;br/&gt; src/autologinpage.cpp&lt;br/&gt; src/downarticledlg.cpp&lt;br/&gt;+src/pcmanx_gtk2.cpp&lt;br/&gt;&lt;/blockquote&gt;不過 patch 檔前面會多一些統計資料也不是很喜歡&lt;br/&gt;於是改用 git format-patch --no-prefix -p&lt;br/&gt;&lt;blockquote&gt;From 66038b61719904c16147945d8c68a0773ef65846 Mon Sep 17 00:00:00 2001&lt;br/&gt;From: jasonxh &amp;lt;jasonxh+c73c965c-c2fa-0310-9a63-82392b9be63f&amp;gt;&lt;br/&gt;Date: Thu, 19 Feb 2009 05:58:15 +0000&lt;br/&gt;Subject: [PATCH] 2009-02-18  Jason Xia  &amp;lt;jasonxh+gmail.com&amp;gt;&lt;br/&gt;&lt;br/&gt;    * po/POTFILES.in, po/zh_CN.po, po/zh_TW.po: Update po files. Fix&lt;br/&gt;    Simplified Chinese translation of "Line" and "Col".&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;git-svn-id: https://svn.csie.net/pcmanx/trunk@464 c73c965c-c2fa-0310-9a63-82392b9be63f&lt;br/&gt;&lt;br/&gt;diff --git ChangeLog ChangeLog&lt;br/&gt;index ffd2d02..ef74622 100644&lt;br/&gt;--- ChangeLog&lt;br/&gt;+++ ChangeLog&lt;br/&gt;@@ -1,3 +1,8 @@&lt;br/&gt;+2009-02-18  Jason Xia  &amp;lt;jasonxh+gmail.com&amp;gt;&lt;br/&gt;+&lt;br/&gt;+   * po/POTFILES.in, po/zh_CN.po, po/zh_TW.po: Update po files. Fix&lt;br/&gt;+   Simplified Chinese translation of "Line" and "Col".&lt;br/&gt;+&lt;br/&gt; 2009-02-07  Youchen Lee  &amp;lt;copyleft+utcr.org&amp;gt;&lt;br/&gt;&lt;br/&gt;    * src/mainframe.cpp: For availability to build under (gtk+ &amp;lt; 2.10),&lt;br/&gt;diff --git po/POTFILES.in po/POTFILES.in&lt;br/&gt;index 6853012..baecc35 100644&lt;br/&gt;--- po/POTFILES.in&lt;br/&gt;+++ po/POTFILES.in&lt;br/&gt;@@ -9,3 +9,4 @@ src/view/telnetview.cpp&lt;br/&gt; src/emoticondlg.cpp&lt;br/&gt; src/autologinpage.cpp&lt;br/&gt; src/downarticledlg.cpp&lt;br/&gt;+src/pcmanx_gtk2.cpp&lt;br/&gt;&lt;/blockquote&gt;因為老是會忘記這個用法，所以寫篇 blog 紀錄一下。:-P&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-5589675574526882175?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/5589675574526882175/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=5589675574526882175' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5589675574526882175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5589675574526882175'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/05/git-format-patch-no-prefix-p.html' title='git format-patch --no-prefix -p'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-2534723689242856249</id><published>2009-04-27T20:10:00.001+08:00</published><updated>2009-04-27T22:26:55.967+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Kernel'/><title type='text'>如何在 Linux System 當中偵測網路線是否有接上？</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;其實方法很簡單，檢查 /sys/class/net/eth0/carrier 這個檔案就可以了&lt;br/&gt;&lt;br/&gt;如果值為 1 的話代表有接上網路線&lt;br/&gt;&lt;br/&gt;如果值為 0 的話代表沒有接上網路線&lt;br/&gt;&lt;br/&gt;不過這也要看該網路卡的驅動程式有沒有實做這個部份&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-2534723689242856249?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/2534723689242856249/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=2534723689242856249' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2534723689242856249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2534723689242856249'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/04/linux-system.html' title='如何在 Linux System 當中偵測網路線是否有接上？'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-3452535882114041152</id><published>2009-04-23T23:01:00.001+08:00</published><updated>2009-04-23T23:01:01.750+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'>Ubuntu 9.04 DVD ISO 下載 BT 種子</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Ubuntu 9.04 釋出囉~ :D&lt;br/&gt;&lt;br/&gt;&lt;a href='http://torrent.ubuntu.com/releases/jaunty/release/dvd/ubuntu-9.04-dvd-amd64.iso.torrent'&gt;ubuntu-9.04-dvd-amd64.iso.torrent&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href='http://torrent.ubuntu.com/releases/jaunty/release/dvd/ubuntu-9.04-dvd-i386.iso.torrent'&gt;ubuntu-9.04-dvd-i386.iso.torrent&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;來吧~ 團結力量大~ \^o^/&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-3452535882114041152?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/3452535882114041152/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=3452535882114041152' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3452535882114041152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3452535882114041152'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/04/ubuntu-904-dvd-iso-bt.html' title='Ubuntu 9.04 DVD ISO 下載 BT 種子'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-423723292700779251</id><published>2009-04-05T12:30:00.001+08:00</published><updated>2009-04-05T12:30:24.636+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hiChannel.sh'/><title type='text'>hiChannel.sh v1.3.1</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;這個版本重新整理播放電台並且把免費影視都移除掉了&lt;br/&gt;( 因為免費影視都要使用 MS DRM 在 Mac/BSD/Linux 都沒有支援 )&lt;br/&gt;另外就是加強 Mac OS X 上的鬧鐘支援&lt;br/&gt;&lt;blockquote&gt;./hiChannel.sh -a&lt;br/&gt;&lt;/blockquote&gt;下載點&lt;br/&gt;&lt;blockquote&gt;wget &lt;a href='http://fd.idv.tw/tux/hiChannel.sh'&gt;http://fd.idv.tw/tux/hiChannel.sh&lt;/a&gt;&lt;br/&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-423723292700779251?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/423723292700779251/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=423723292700779251' title='6 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/423723292700779251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/423723292700779251'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/04/hichannelsh-v131.html' title='hiChannel.sh v1.3.1'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-5430209021238196166</id><published>2009-03-30T01:18:00.002+08:00</published><updated>2010-04-28T19:50:34.199+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wicd'/><category scheme='http://www.blogger.com/atom/ns#' term='xrandr'/><category scheme='http://www.blogger.com/atom/ns#' term='X200'/><category scheme='http://www.blogger.com/atom/ns#' term='XWindow'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 Lenovo ThinkPad X200-RL2 上面安裝 Ubuntu 8.10</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;以&lt;a href="http://eeepc.asus.com/tw/"&gt;小筆電&lt;/a&gt;來當作自己私人程式開發的平台已經一年多了&lt;br /&gt;最後還是發現在荼毒自己過著苦行僧般的日子&lt;br /&gt;最近跟著身邊&lt;a href="http://people.debian.org.tw/~chihchun/"&gt;友人&lt;/a&gt;的腳步買了 Lenovo ThinkPad X200 這系列的筆電&lt;br /&gt;果然是好用好多啊~ XD&lt;br /&gt;&lt;ol&gt;&lt;li&gt;無線網路設定&lt;br /&gt;無線網路驅動程式只要安裝上 linux-backports-modules-2.6.27-??-generic&lt;br /&gt;然後如下圖所示把另一個原本的驅動程式 disable 掉就可以了&lt;br /&gt;&lt;img src="http://lh3.ggpht.com/_cYaJquZOLiw/Sc-miA2bvMI/AAAAAAAACaA/WkBBFlRXJOc/%5BUNSET%5D.png?imgmax=800" style="max-width: 800px;" /&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;XWindow 顯示設定&lt;br /&gt;XWindow 的顯示設定就新增加一個檔案 /etc/X11/xorg.conf 填入&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Section "Monitor"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Identifier&amp;nbsp;&amp;nbsp;&amp;nbsp; "Configured Monitor"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Monitor"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Identifier&amp;nbsp;&amp;nbsp;&amp;nbsp; "HDMI-1"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Ignore" "True"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Monitor"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Identifier&amp;nbsp;&amp;nbsp;&amp;nbsp; "HDMI-2"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Ignore" "True"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Screen"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Identifier&amp;nbsp;&amp;nbsp;&amp;nbsp; "Default Screen"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Monitor&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Configured Monitor"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Device&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Configured Video Device"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DefaultDepth&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SubSection "Display"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Modes "1280x1024" "1280x800" "1024x768"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Virtual 2640 1024 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndSubSection&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Device"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Identifier&amp;nbsp;&amp;nbsp;&amp;nbsp; "Configured Video Device"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Driver&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "intel"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "monitor-HDMI-1" "HDMI-1"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "monitor-HDMI-2" "HDMI-2"&lt;br /&gt;EndSection&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Menu 鍵&lt;br /&gt;至於 Menu 鍵的設定則是新增一個 ~/.xmodmap 填入&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;keycode 151 = Menu&lt;/blockquote&gt;然後再 xmodmap ~/.xmodmap 馬上就可以使用了&lt;br /&gt;下次進入系統會自動問要不要自動 import ~/.xmodmap&lt;/li&gt;&lt;li&gt;Console (Ctrl+Alt+F1~F6) 底下的 1280x800 解析度&lt;br /&gt;修改 /boot/grub/menu.lst 當中的 defoptions 改成&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;# defoptions=quiet vga=0x0368&lt;/blockquote&gt;然後再使用 sudo update-grub&lt;/li&gt;&lt;li&gt;小紅點滑鼠&lt;br /&gt;新增一個檔案  /etc/hal/fdi/policy/mouse-wheel.fdi 填入&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;match key="info.product" string="TPPS/2 IBM TrackPoint"&amp;gt;&lt;br /&gt;&amp;lt;merge key="input.x11_options.EmulateWheel" type="string"&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;&amp;lt;merge key="input.x11_options.EmulateWheelButton" type="string"&amp;gt;2&amp;lt;/merge&amp;gt;&lt;br /&gt;&amp;lt;merge key="input.x11_options.YAxisMapping" type="string"&amp;gt;4 5&amp;lt;/merge&amp;gt;&lt;br /&gt;&amp;lt;merge key="input.x11_options.XAxisMapping" type="string"&amp;gt;6 7&amp;lt;/merge&amp;gt;&lt;br /&gt;&amp;lt;merge key="input.x11_options.Emulate3Buttons" type="string"&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;&amp;lt;merge key="input.x11_options.EmulateWheelTimeout" type="string"&amp;gt;200&amp;lt;/merge&amp;gt;&lt;br /&gt;&amp;lt;/match&amp;gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ol&gt;硬體相關的校調設定我只做了這些事情，過程還算簡單順利。&lt;br /&gt;網路上也很容易就 Google 到許多的文章可以參考&lt;br /&gt;其中最詳細的大概就是&lt;a href="http://www.thinkwiki.org/wiki/Installing_Ubuntu_8.04_&amp;amp;_8.10_on_an_X200"&gt;這篇&lt;/a&gt;了&lt;br /&gt;&lt;br /&gt;另外比較特別的是以 &lt;a href="http://wicd.sourceforge.net/"&gt;wicd&lt;/a&gt; 取代掉常見的 Network Manager&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-5430209021238196166?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/5430209021238196166/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=5430209021238196166' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5430209021238196166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5430209021238196166'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/03/lenovo-thinkpad-x200-rl2-ubuntu-810.html' title='在 Lenovo ThinkPad X200-RL2 上面安裝 Ubuntu 8.10'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_cYaJquZOLiw/Sc-miA2bvMI/AAAAAAAACaA/WkBBFlRXJOc/s72-c/%5BUNSET%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-4328711797032492700</id><published>2009-02-22T18:51:00.002+08:00</published><updated>2009-02-22T18:53:16.713+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EeePC'/><category scheme='http://www.blogger.com/atom/ns#' term='BIOS'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>EeePC 8G BIOS 0309 -&gt; 0502</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;1. 先準備好要升級的 BIOS ROM&lt;br/&gt;&lt;br/&gt;首先到 ftp://ftp.asus.com/pub/ASUS/EeePC/EeePC8G/ 上面下載 EeePC8G0502.zip&lt;br/&gt;解開 EeePC8G0502.zip 後把裡面的檔案改名稱為 702.ROM&lt;br/&gt;&lt;br/&gt;2. 把系統還原成原始出廠狀態&lt;br/&gt;&lt;br/&gt;使用 ASUS 所附的系統還原光碟可以將 EeePC 8G 還原成原本的那個 Linux 系統版本&lt;br/&gt;然後使用原本系統當中的 BIOS 升級&lt;br/&gt;不過這個 BIOS 升級功能是有問題的&lt;br/&gt;它會將 701.ROM 的升級檔案寫在 /dev/sda3 裡面&lt;br/&gt;可是開機的時候 BIOS 的升級程式會去找 702.ROM&lt;br/&gt;所以就導致怎麼升級 BIOS 都會失敗的情況&lt;br/&gt;&lt;br/&gt;3. 手動將 BIOS ROM 放到 /dev/sda3 裡面&lt;br/&gt;&lt;br/&gt;使用 Ctrl + Alt + T 打開終端機後輸入&lt;br/&gt;&lt;blockquote&gt;sudo mkdir /mnt/sda3&lt;br/&gt;sudo mount /dev/sda3 /mnt/sda3&lt;br/&gt;sudo cp /media/DEVICE/data/702.ROM /mnt/sda3&lt;br/&gt;&lt;/blockquote&gt;接著再使用原本的 BIOS 升級程式隨便選一個 BIOS ROM 重新啟動後&lt;br/&gt;就會找到 /dev/sda3 裡面的 702.ROM 開始自動執行 BIOS 更新了&lt;br/&gt;&lt;br/&gt;0309&lt;br/&gt;12/14/2007&lt;br/&gt;2007.10.19 10:45&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-4328711797032492700?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/4328711797032492700/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=4328711797032492700' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/4328711797032492700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/4328711797032492700'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/02/eeepc-8g-bios-0309-0502.html' title='EeePC 8G BIOS 0309 -&amp;gt; 0502'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6269734224782639704</id><published>2009-02-15T00:17:00.003+08:00</published><updated>2009-02-16T10:21:44.397+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google Reader 的復活節彩蛋</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;blockquote&gt;上上下下左右左右BA&lt;br/&gt;&lt;/blockquote&gt;然後你就會看到 Google Reader 裡面的隱藏功能啦~ XD&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6269734224782639704?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6269734224782639704/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6269734224782639704' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6269734224782639704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6269734224782639704'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/02/google-reader.html' title='Google Reader 的復活節彩蛋'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-2632578028054580480</id><published>2009-02-15T00:00:00.004+08:00</published><updated>2009-02-15T00:08:34.723+08:00</updated><title type='text'>1234567890</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;blockquote&gt;$ date +%s --date='20090214 07:31:30'&lt;br/&gt;1234567890&lt;br/&gt;&lt;/blockquote&gt;祝大家情人節快樂~ ^_^&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-2632578028054580480?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/2632578028054580480/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=2632578028054580480' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2632578028054580480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/2632578028054580480'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/02/1234567890.html' title='1234567890'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6774321013078720592</id><published>2009-02-08T17:08:00.001+08:00</published><updated>2009-02-08T17:08:14.798+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EeePC'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Install Ubuntu 8.10 on EeePC 900HA</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;因為我買的 EeePC 900HA 裡面就有裝 Windows XP&lt;br/&gt;所以就先用 wubi 試裝一下 Ubuntu 8.10 "Intrepid"&lt;br/&gt;重點是把所有可以用的 apt repository 都打開&lt;br/&gt;然後裝上 linux-backports-modules-intrepid 重開機&lt;br/&gt;什麼無線網路還是視訊裝置就都可以正常使用了&lt;br/&gt;還算是蠻簡單地 只不過那些音量之類的 Fn Hotkey 就沒有辦法正常使用了&lt;br/&gt;另外就是我發現 EeePC 900HA 的外接顯示有問題 (硬體本身的問題)&lt;br/&gt;不曉得是我這台偶然的問題還是所有的 EeePC 900HA 都有問題&lt;br/&gt;總之我想要退掉了 因為外接顯示對我來說相當重要&lt;br/&gt;如果外接顯示不正常 我之前買的 IOGEAR KVM 就變成是白花錢買的&lt;br/&gt;--&lt;br/&gt;EeePC 900HA&lt;br/&gt;CPU ATOM N270 1.6G&lt;br/&gt;硬碟 160G&lt;br/&gt;記憶體 1G&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6774321013078720592?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6774321013078720592/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6774321013078720592' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6774321013078720592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6774321013078720592'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/02/install-ubuntu-810-on-eeepc-900ha.html' title='Install Ubuntu 8.10 on EeePC 900HA'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-1849162965470475695</id><published>2009-02-06T18:30:00.001+08:00</published><updated>2009-02-06T18:30:52.214+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 Ubuntu 8.04.2 裡面設定自己的 git:// 分享給別人用</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;首先裝上 git-daemon-run&lt;br/&gt;&lt;blockquote&gt;sudo aptitude install git-daemon-run&lt;br/&gt;&lt;/blockquote&gt;然後參考裡面的 /usr/share/doc/git-daemon-run/README.Debian&lt;br/&gt;&lt;br/&gt;例如要將 /home/user/git/Project 這個已經是 git 的工作目錄分享出來&lt;br/&gt;就執行&lt;br/&gt;&lt;blockquote&gt;sudo ln -s /home/user/git/Project/.git /var/cache/git/Project.git&lt;br/&gt;&lt;/blockquote&gt;然後根據 &lt;a href='http://book.git-scm.com/4_setting_up_a_public_repository.html'&gt;Git Book - Setting Up A Public Repository&lt;/a&gt; 上面所提到的&lt;br/&gt;要多做一個動作&lt;br/&gt;&lt;blockquote&gt;touch /home/user/git/Project/.git/git-daemon-export-ok&lt;br/&gt;&lt;/blockquote&gt;最後就是重新啟動 git-daemon&lt;br/&gt;&lt;blockquote&gt;sudo sv restart git-daemon&lt;br/&gt;&lt;/blockquote&gt;這樣別人就可以透過&lt;br/&gt;&lt;blockquote&gt;git clone git://XXX.XXX.XXX.XXX/git/Project&lt;br/&gt;&lt;/blockquote&gt;來一起協同工作啦~ :D&lt;br/&gt;這種方法在區域網路裡面分享程式碼特別快速方便~ ^o^&lt;br/&gt;&lt;h2/&gt;&lt;h2/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-1849162965470475695?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/1849162965470475695/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=1849162965470475695' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1849162965470475695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/1849162965470475695'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/02/ubuntu-8042-git.html' title='在 Ubuntu 8.04.2 裡面設定自己的 git:// 分享給別人用'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-8297184286223608652</id><published>2009-01-25T19:08:00.001+08:00</published><updated>2009-01-25T19:08:37.906+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Console'/><title type='text'>dvtm: Tiling window management for the console</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;簡單說就是類似 screen 加上 dwm 的功能&lt;br/&gt;&lt;img src='http://lh3.ggpht.com/_cYaJquZOLiw/SXxHSWvRLWI/AAAAAAAACXg/v6p8v7msePc/%5BUNSET%5D.png?imgmax=800' style='max-width: 800px;'/&gt;&lt;br/&gt;上面這張圖片左邊是主要的 console 右邊最上方是 ydict 中間是 htop 下方是 screen + irssi&lt;br/&gt;整個畫面的配置就像是在使用 dwm 一樣 相當有趣~ :D&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-8297184286223608652?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/8297184286223608652/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=8297184286223608652' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8297184286223608652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/8297184286223608652'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/01/dvtm-tiling-window-management-for.html' title='dvtm: Tiling window management for the console'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_cYaJquZOLiw/SXxHSWvRLWI/AAAAAAAACXg/v6p8v7msePc/s72-c/%5BUNSET%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-541690916620836738</id><published>2009-01-15T10:49:00.001+08:00</published><updated>2009-01-15T10:49:29.025+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Meld'/><title type='text'>以 meld 當外部程式來使用 git diff</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;首先要建立一個簡單的 shell script&lt;br/&gt;&lt;br/&gt;/usr/local/bin/git-meld&lt;br/&gt;&lt;blockquote&gt;#!/bin/sh&lt;br/&gt;&lt;br/&gt;meld $2 $5&lt;br/&gt;&lt;/blockquote&gt;然後執行&lt;br/&gt;&lt;blockquote&gt;&lt;span class='terminal'&gt;git config --global diff.external &lt;/span&gt;/usr/local/bin/git-meld&lt;br/&gt;&lt;/blockquote&gt;接下來就是爽爽地用 meld 來看 diff 囉~ :D&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-541690916620836738?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/541690916620836738/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=541690916620836738' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/541690916620836738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/541690916620836738'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/01/meld-git-diff.html' title='以 meld 當外部程式來使用 git diff'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-5735667545275279856</id><published>2009-01-04T01:40:00.002+08:00</published><updated>2009-01-04T01:42:08.066+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 Debian Lenny 上使用 sudo</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;大概是 Ubuntu 使用久的關係有許多的習慣都已經在 Ubuntu 上面養成了&lt;br/&gt;像是不直接使用 root 而是透過 sudo 來達成&lt;br/&gt;&lt;br/&gt;於是將 sudo 裝起來&lt;br/&gt;# aptitude install sudo&lt;br/&gt;&lt;br/&gt;然後再執行&lt;br/&gt;# visudo&lt;br/&gt;增加一行 %sudo ALL=(ALL) ALL&lt;br/&gt;&lt;br/&gt;然後再將使用者加到 sudo 這個群組裡面&lt;br/&gt;# gpasswd -a fourdollars sudo&lt;br/&gt;&lt;br/&gt;這樣就大功告成了~ :D&lt;br/&gt;&lt;br/&gt;P.S.&lt;br/&gt;$ sudo -k 可以馬上將暫時記住的 root 權限強制移除 (感謝 paulliu 提供的協助)&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-5735667545275279856?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/5735667545275279856/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=5735667545275279856' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5735667545275279856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5735667545275279856'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2009/01/debian-lenny-sudo.html' title='在 Debian Lenny 上使用 sudo'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-3480412014917496942</id><published>2008-12-17T11:08:00.001+08:00</published><updated>2008-12-17T11:08:11.828+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>使用 dmidecode - DMI table decoder 來查看硬體資訊</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;GNU/Linux 系統上面有個很方便的套件可以拿來查詢目前主機上的一些硬體的資訊&lt;br/&gt;像是 CPU 就可以使用 sudo dmidecode --type processor&lt;br/&gt;就會得到以下的結果&lt;br/&gt;&lt;blockquote&gt;Handle 0x0004, DMI type 4, 35 bytes&lt;br/&gt;Processor Information&lt;br/&gt;    Socket Designation: Socket 775&lt;br/&gt;    Type: Central Processor&lt;br/&gt;    Family: Pentium D&lt;br/&gt;    Manufacturer: Intel&lt;br/&gt;    ID: 65 0F 00 00 FF FB EB BF&lt;br/&gt;    Signature: Type 0, Family 15, Model 6, Stepping 5&lt;br/&gt;    Flags:&lt;br/&gt;        FPU (Floating-point unit on-chip)&lt;br/&gt;        VME (Virtual mode extension)&lt;br/&gt;        DE (Debugging extension)&lt;br/&gt;        PSE (Page size extension)&lt;br/&gt;        TSC (Time stamp counter)&lt;br/&gt;        MSR (Model specific registers)&lt;br/&gt;        PAE (Physical address extension)&lt;br/&gt;        MCE (Machine check exception)&lt;br/&gt;        CX8 (CMPXCHG8 instruction supported)&lt;br/&gt;        APIC (On-chip APIC hardware supported)&lt;br/&gt;        SEP (Fast system call)&lt;br/&gt;        MTRR (Memory type range registers)&lt;br/&gt;        PGE (Page global enable)&lt;br/&gt;        MCA (Machine check architecture)&lt;br/&gt;        CMOV (Conditional move instruction supported)&lt;br/&gt;        PAT (Page attribute table)&lt;br/&gt;        PSE-36 (36-bit page size extension)&lt;br/&gt;        CLFSH (CLFLUSH instruction supported)&lt;br/&gt;        DS (Debug store)&lt;br/&gt;        ACPI (ACPI supported)&lt;br/&gt;        MMX (MMX technology supported)&lt;br/&gt;        FXSR (Fast floating-point save and restore)&lt;br/&gt;        SSE (Streaming SIMD extensions)&lt;br/&gt;        SSE2 (Streaming SIMD extensions 2)&lt;br/&gt;        SS (Self-snoop)&lt;br/&gt;        HTT (Hyper-threading technology)&lt;br/&gt;        TM (Thermal monitor supported)&lt;br/&gt;        PBE (Pending break enabled)&lt;br/&gt;    Version: Intel(R) Pentium(R) D&lt;br/&gt;    Voltage: 1.2 V&lt;br/&gt;    External Clock: 200 MHz&lt;br/&gt;    Max Speed: 3800 MHz&lt;br/&gt;    Current Speed: 3000 MHz&lt;br/&gt;    Status: Populated, Enabled&lt;br/&gt;    Upgrade: ZIF Socket&lt;br/&gt;    L1 Cache Handle: 0x0008&lt;br/&gt;    L2 Cache Handle: 0x0009&lt;br/&gt;    L3 Cache Handle: Not Provided&lt;br/&gt;    Serial Number:  &lt;br/&gt;    Asset Tag:  &lt;br/&gt;    Part Number:  &lt;br/&gt;&lt;/blockquote&gt;使用的關鍵字有 bios, system, baseboard, chassis, processor, memory, cache, connector, slot&lt;br/&gt;當然還有細微的使用方式像是想要查詢現在電腦主機上面插著的記憶體資訊就可以使用 sudo dmidecode --type 17&lt;br/&gt;&lt;blockquote&gt;Handle 0x001A, DMI type 17, 27 bytes&lt;br/&gt;Memory Device&lt;br/&gt;    Array Handle: 0x0019&lt;br/&gt;    Error Information Handle: Not Provided&lt;br/&gt;    Total Width: 64 bits&lt;br/&gt;    Data Width: 64 bits&lt;br/&gt;    Size: 512 MB&lt;br/&gt;    Form Factor: DIMM&lt;br/&gt;    Set: None&lt;br/&gt;    Locator: A0&lt;br/&gt;    Bank Locator: Bank0/1&lt;br/&gt;    Type: Unknown&lt;br/&gt;    Type Detail: None&lt;br/&gt;    Speed: Unknown&lt;br/&gt;    Manufacturer: None&lt;br/&gt;    Serial Number: None&lt;br/&gt;    Asset Tag: None&lt;br/&gt;    Part Number: None&lt;br/&gt;&lt;br/&gt;Handle 0x001B, DMI type 17, 27 bytes&lt;br/&gt;Memory Device&lt;br/&gt;    Array Handle: 0x0019&lt;br/&gt;    Error Information Handle: Not Provided&lt;br/&gt;    Total Width: 64 bits&lt;br/&gt;    Data Width: 64 bits&lt;br/&gt;    Size: 512 MB&lt;br/&gt;    Form Factor: DIMM&lt;br/&gt;    Set: None&lt;br/&gt;    Locator: A1&lt;br/&gt;    Bank Locator: Bank2/3&lt;br/&gt;    Type: Unknown&lt;br/&gt;    Type Detail: None&lt;br/&gt;    Speed: Unknown&lt;br/&gt;    Manufacturer: None&lt;br/&gt;    Serial Number: None&lt;br/&gt;    Asset Tag: None&lt;br/&gt;    Part Number: None&lt;br/&gt;&lt;/blockquote&gt;詳細的使用說明就請使用 man dmidecode 來看囉~&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-3480412014917496942?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/3480412014917496942/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=3480412014917496942' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3480412014917496942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/3480412014917496942'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2008/12/dmidecode-dmi-table-decoder.html' title='使用 dmidecode - DMI table decoder 來查看硬體資訊'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-6116849890370704552</id><published>2008-11-23T22:53:00.003+08:00</published><updated>2008-11-23T22:55:24.986+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='BetaRadio'/><title type='text'>BetaRadio v0.1.2 Ubuntu Linux i386 package for Intrepid Ibex</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;剛剛包出來的想要使用的朋友可以到 http://code.google.com/p/betaradio/downloads/list 下載使用&lt;br/&gt;或是直接執行&lt;br/&gt;&lt;blockquote&gt;wget http://betaradio.googlecode.com/files/betaradio_0.1.2-1intrepid1_i386.deb&lt;br/&gt;sudo dpkg -i betaradio_0.1.2-1intrepid1_i386.deb&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-6116849890370704552?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/6116849890370704552/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=6116849890370704552' title='5 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6116849890370704552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/6116849890370704552'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2008/11/betaradio-v012-ubuntu-linux-i386_23.html' title='BetaRadio v0.1.2 Ubuntu Linux i386 package for Intrepid Ibex'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-580339690009307053</id><published>2008-11-23T16:36:00.001+08:00</published><updated>2008-11-23T16:36:39.711+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='BetaRadio'/><title type='text'>BetaRadio v0.1.2 Ubuntu Linux i386 package for Hardy Heron</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;剛剛包出來的想要使用的朋友可以到 http://code.google.com/p/betaradio/downloads/list 下載使用&lt;br/&gt;或是直接執行&lt;br/&gt;&lt;blockquote&gt;wget http://betaradio.googlecode.com/files/betaradio_0.1.2-1hardy1_i386.deb&lt;br/&gt;sudo dpkg -i betaradio_0.1.2-1hardy1_i386.deb&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-580339690009307053?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/580339690009307053/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=580339690009307053' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/580339690009307053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/580339690009307053'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2008/11/betaradio-v012-ubuntu-linux-i386.html' title='BetaRadio v0.1.2 Ubuntu Linux i386 package for Hardy Heron'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14489808.post-5880984643247936484</id><published>2008-11-20T15:59:00.001+08:00</published><updated>2008-11-20T15:59:33.119+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desktop'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>使用 USB stick 來安裝 Debian GNU/Linux 5.0 (Lenny) rc1</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;參考&lt;a href='http://www.debian.org/releases/lenny/i386/ch04s03.html.en'&gt;安裝文件&lt;/a&gt;&lt;br/&gt;首先去 &lt;a href='http://ftp.tw.debian.org/debian/dists/lenny/main/installer-i386/current/images/hd-media/'&gt;FTP&lt;/a&gt; 下載 &lt;a href='http://ftp.tw.debian.org/debian/dists/lenny/main/installer-i386/current/images/hd-media/boot.img.gz'&gt;boot.img.gz&lt;/a&gt;&lt;br/&gt;在隨便一個 Linux 系統上執行 (請小心確認 USB stick 的位置是否在 /dev/sda)&lt;/p&gt;&lt;pre&gt;$ sudo su -c "zcat boot.img.gz &amp;gt; /dev/sda"&lt;/pre&gt;然後再把 &lt;a href='http://cdimage.debian.org/cdimage/lenny_di_rc1/i386/iso-cd/debian-testing-i386-netinst.iso'&gt;debian-testing-i386-netinst.iso&lt;/a&gt;  複製到 USB stick 上就行了&lt;br/&gt;接下來的動作就是使用 USB stick 開機&lt;br/&gt;(當然使用 USB stick 開機要有主機板的硬體支援才行)&lt;br/&gt;接下去就跟一般使用 &lt;a href='http://cdimage.debian.org/cdimage/lenny_di_rc1/i386/iso-cd/debian-testing-i386-netinst.iso'&gt;debian-testing-i386-netinst.iso&lt;/a&gt;  所燒成的光碟來安裝的過程一樣&lt;br/&gt;&lt;br/&gt;另外就是在 kernel cmdline (Grub畫面中按下 Tab) 裡面加上 desktop=lxde&lt;br/&gt;這樣就可以直接把整個系統裝成 lxde 的桌面環境了~ ^o^&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14489808-5880984643247936484?l=fourdollars.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fourdollars.blogspot.com/feeds/5880984643247936484/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14489808&amp;postID=5880984643247936484' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5880984643247936484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14489808/posts/default/5880984643247936484'/><link rel='alternate' type='text/html' href='http://fourdollars.blogspot.com/2008/11/usb-stick-debian-gnulinux-50-lenny-rc1.html' title='使用 USB stick 來安裝 Debian GNU/Linux 5.0 (Lenny) rc1'/><author><name>Shih-Yuan Lee</name><uri>https://profiles.google.com/111702816719386284707</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-xoL2dK7RKRw/AAAAAAAAAAI/AAAAAAAAK_8/ctww0V13RlE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
