<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><description>“I am not slacking off. My code’s compiling.”</description><title>It's compiling</title><generator>Tumblr (3.0; @dannvix)</generator><link>http://dan.zzhc.org/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/compiling" /><feedburner:info uri="compiling" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://tumblr.superfeedr.com/" /><item><title>2011 台灣駭客年會 (HIT2011) 心得及 Wargame 解題思路</title><description>&lt;p&gt;前兩天前往中研院參加&lt;a title="HIT2011" href="http://www.hitcon.org/hit2011/" target="_blank"&gt;「台灣駭客年會」（HIT2011）&lt;/a&gt;，一早報到時就能看出今年的聲勢浩大，據說有七百多人報名，也要感謝為數不少的黑衣工作人員們 &lt;( _ _ )&gt;。&lt;/p&gt;
&lt;p&gt;今年打定要來賺回報名費，所以從一開始就跑去第二會議廳開戰，幸好今年第一、二會議廳的同步投影品質很不錯，一邊廝殺的過程還可以順便聽聽台上的大牛們演講。&lt;/p&gt;
&lt;p&gt;Wargame 第一天的狀況看來是很多高手都尚未露面，所以解了一些簡單的題目之後運氣很好地溜進前三名，當天晚上受邀和主辦單位、講師、貴賓們一起參加遊艇趴。雖然在淡水河上漂流三個多小時還滿累人的，不過整個氣氛就是很高級，而且跟這麼多高人聚在同一條船上的經驗也是非常特別。下場就是結束馬上從北車搭小黃回家，完全沒力氣再碰 Wargame，洗完澡倒頭就睡了 XDD&lt;/p&gt;
&lt;p&gt;第二天一早到會場後不久 wargame server 就上線了，連上 score board 一看，果然馬上就被強者們電翻，名次瞬間往下掉掉掉，僅管沒什麼戰鬥力了，還是要開戰拼一下。&lt;/p&gt;
&lt;p&gt;下面是今年 wargame 的最後排行：(點開看大圖)&lt;/p&gt;
&lt;p&gt;&lt;a title="HIT2011 wargame result" href="http://i.imgur.com/Kmd6j.png" target="_blank"&gt;&lt;img height="213" width="359" alt="HIT2011 Wargame result" src="http://i.imgur.com/Kmd6j.png" align="middle"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Wargame 題目在噗浪上看到有人 (@rsghost) 備份：  &lt;a title="HIT2011 Wargame mirror" href="http://rsghost.web.fc2.com/HIT201_wargame/10.0.15.1/" target="_blank"&gt;&lt;a href="http://rsghost.web.fc2.com/HIT201_wargame/10.0.15.1/" target="_blank"&gt;http://rsghost.web.fc2.com/HIT201_wargame/10.0.15.1/&lt;/a&gt;&lt;/a&gt; 不知道會存活多久，要備份要快XD&lt;/p&gt;
&lt;p&gt;今年的 Wargame 品質真的很高，不論是整個系統或是題目都很棒，尤其好幾題都出得非常有創意，解題之餘實在是令人佩服出題者的高深莫測！今年運氣還算不錯，解了七題，下面就列一下有解出來的題目的思路：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web 1&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;標準的 CAPTCHA 破解題。一開始看到雜亂的背景，直覺認為單純 OCR 應該不夠，所以去找了幾年前發佈的專案 &lt;a title="PWNtcha" href="http://caca.zoy.org/wiki/PWNtcha" target="_blank"&gt;PWNtcha&lt;/a&gt; 來處理，沒想到出來的結果都包了一堆問號… 後來本來想用 Python + PIL 自己硬幹辨識，不過懸崖勒馬想說用 &lt;a title="gocr" href="http://jocr.sourceforge.net/" target="_blank"&gt;gocr&lt;/a&gt; 試試看好了，結果一試就出來！囧&gt;&lt;/p&gt;
&lt;p&gt;既然處理好辨識的部分，剩下的用 curl 就可以解決了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web 2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;這題也是瞎矇中的 XD 第一天午餐的時候無聊打開 wargame site 想說能不能有靈感，結果看到這題新出現，隨手點進去決定先看看、吃飽飯再解，結果亂玩亂玩就玩出 key 來了！這題感覺是要寫一支猜數字的 client，原題應該也是不難啦。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Misc 1&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;就… 標準的 wargame 送分題，注意一下要全部大寫，句末還有一個驚嘆號就好了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Misc 2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;時事題！！給了一堆地震資料的 KMZ 檔，解開 zip 後是 Google Earth 用的 KML 格式，有超級多點的。一開始想說既然是預言，就該從日期下手，果不其然找出三處地震的發生時間是在未來，但不知道 key 的格式，用震央地名送了幾次都失敗。後來看地名好像事有蹊蹺，直覺認為應該是要在 Google Earth 上找大頭針拼出來的文字圖樣吧，找了很久之後放棄Orz 結果第二天才公布 key 的格式是一串 md5 hash，這根本猜不到啊 XDD 照要求送 key 就過了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Misc 6&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Flash 送分題。打開後按下按鈕就會在左上角出現一個很小的 text box，放大整個 flash 影片之後 focus 到 text box 裡按全選、複製就可以得到 key 了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Misc 7&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;也是時事題！nc 連上去之後發現是前幾天被爆料&lt;a title="vsftpd 2.3.4 backdoor" href="http://xorl.wordpress.com/2011/07/05/vsftpd-2-3-4-backdoor/" target="_blank"&gt;有後門的 vsftpd 2.3.4&lt;/a&gt;，一開始手動送 username「:)」沒有過，想說會不會是主機 firewall 沒設好，後來打開 metasploit 用工具打一下也是沒收穫。結果仔細一看才發現，username 的第一個字元必須要是 valid character，重送一次「USER X:)」然後再 nc 上 tcp/6200 就會噴出 key 了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Forensics 2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;也是很潮的時事題！題目是一個 1 x 203401 pixels 的 PNG 圖片，剛好前陣子不小心看到 &lt;a title="Defcon" href="http://www.defcon.org/" target="_blank"&gt;Defcon&lt;/a&gt; 19 CTF Quals 有類似的題目，把 203401 拿去質因數分解得到 (11^2) x (41^2)，直覺認為 11 x 41 = 451 大概是重組後的長寬大小，寫了一支 py script 把圖片切一切重組一下，得到一個 QR code，解碼後就是 key 了。&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;其它還有一些耳聞解法或是關主有&lt;strike&gt;出來面對&lt;/strike&gt;公布思路的也列一下：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web 3&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;題目有給定的路徑是「/GetEvent.asp?s=b.__name」，看不出所以然來，隨便試了幾個 s 的值之後得到 500，沒有頭緒所以一下子就放棄了。後來在 IRC 上看到，其實該頁面存在 SQL injection flaw，用的 SQL 式是 sql = “Select a.__id, ” + s + “, c.__user, d.__pwd, e.__mail from _id as a, _name as b, _user as c, _pwd as d, _mail as e”，也就是 s 可以插的意思… Orz&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(20110725 updated) &lt;/em&gt;這題後來關主 Orange 也有釋出解題思路，請看： &lt;a title="HIT2011 Wargame Web 3 solution" href="http://orange-tw.blogspot.com/2011/07/hitcon2011wargame-web-3.html" target="_blank"&gt;&lt;a href="http://orange-tw.blogspot.com/2011/07/hitcon2011wargame-web-3.html" target="_blank"&gt;http://orange-tw.blogspot.com/2011/07/hitcon2011wargame-web-3.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web 4&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;據關主表示是很有創意的技術 &amp;&amp; real site 常用到的。一開始看到 WP login form 之後找了一下幾個 WP 弱點，雖然直覺想說不太可能還是試了一下，果真不行。後來發現註冊頁面檢查使用者帳號是否重覆的地方存在 SQL injection 漏洞，但我實在對 SQL inj 沒輒，試了一兩個自動工具也插不出來，也是立刻放棄 XD&lt;/p&gt;
&lt;p&gt;後來關主 Orange 有在他的 blog 上釋出解題思路，就直接看吧： &lt;a title="HIT2011 Wargame Web 4 solution" href="http://orange-tw.blogspot.com/2011/07/hitcon2011wargame-web-4.html" target="_blank"&gt;&lt;a href="http://orange-tw.blogspot.com/2011/07/hitcon2011wargame-web-4.html" target="_blank"&gt;http://orange-tw.blogspot.com/2011/07/hitcon2011wargame-web-4.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Misc 3&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;壞掉以及被填上顏色的 QR code，去找 spec 修正一下定位點跟 information block 之後解碼就可以得到 key。這題我做的時候一直修錯 info block，導致一直掃不出來，也是殘念啊…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Misc 4&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;只有 10 分的 flash 題，下意識就拿出拆 swf 的工具把它拆個精光，看一下 resources 沒有發現，後來把 action scripts 都大略看了一下，也是沒甚麼收穫，想說 10 分而已怎麼這麼複雜 XD 沒想到其實我就有看到 key 了… 囧!!&lt;/p&gt;
&lt;p&gt;而且這題竟然在 YouTube 上就可以找到 key 了啊啊啊啊啊！# &lt;a href="http://www.youtube.com/watch?v=tNCCDRiwj8U" target="_blank"&gt;&lt;a href="http://www.youtube.com/watch?v=tNCCDRiwj8U" target="_blank"&gt;http://www.youtube.com/watch?v=tNCCDRiwj8U&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;本來想說提示裡的 hidden level 是關主另外加的 Orz&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Misc 5&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(20110726 updated) &lt;/em&gt;給一個壞掉的 RAR，後來提示說經由 FTP 傳輸，所以下意識想到要把 0a 改成 0d0a，但是全部有 100 多個 0a 啊囧… 列舉全部的話太多了不可能暴力破，所以放棄= =a&lt;/p&gt;
&lt;p&gt;後來關主 Outian 有釋出解題用的程式 (in perl)： &lt;a title="HIT2011 Wargame Misc 5 solution" href="http://outian.net/temp/hit2011_misc5.txt" target="_blank"&gt;&lt;a href="http://outian.net/temp/hit2011_misc5.txt" target="_blank"&gt;http://outian.net/temp/hit2011_misc5.txt&lt;/a&gt;&lt;/a&gt; 看來就是要把其中一個 0a 改成 0d0a 即可 Orzzzzz&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Forensics 1&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;生活題，關主事先在 komica 上張貼 HIT2011 的相關文章，要從討論區裡顯示的 ID 去推出發文者的 IP 來，後來 google 到這些 ID 的&lt;a href="http://pixmicat.wikidot.com/pmcfeature#toc19" target="_blank"&gt;生成方法&lt;/a&gt;，照著寫 scripts 去暴力猜，看提示說 IP 是某大 ISP 發的，直覺猜是 Hinet，所以上 TWNIC 找一下 Hinet 的 IP ranges 之後就開始暴力破。還一度跑掛我的機器… 打電話回去請人重開。&lt;/p&gt;
&lt;p&gt;這題最失敗的就是，我的 salt 是直接用那篇文裡面的… Orz 後來才發現 komica 上每個板都有不同的 salt，難怪跑不出來。看來要先去 komica 上 po 一篇文，用自己的 IP 算出該板 salt 之後，再用這個 salt 去破題目給的 ID。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Forensics 3&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(20110726 updated) &lt;/em&gt;這題還是不知道怎麼解，不過後來在噗浪上看到 medicalwei 釋出的 gist： &lt;a href="https://gist.github.com/1102434" target="_blank"&gt;&lt;a href="https://gist.github.com/1102434" target="_blank"&gt;https://gist.github.com/1102434&lt;/a&gt;&lt;/a&gt;。我本來也要這樣幹的，可是想說應該不是這樣解… Orz&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Forensics 4&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(20110726 updated) &lt;/em&gt;沒解出來，後來看到今年第三名強者 Jeffxx 團隊釋出的文件： &lt;a title="HIT2011 Wargame solution by Jeffxx" href="http://wargame.cs.nctu.edu.tw/file/hit2011.txt" target="_blank"&gt;&lt;a href="http://wargame.cs.nctu.edu.tw/file/hit2011.txt" target="_blank"&gt;http://wargame.cs.nctu.edu.tw/file/hit2011.txt&lt;/a&gt;&lt;/a&gt; 直接看吧。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Crypto 2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(20110726 updated) &lt;/em&gt;在 IRC 上看到關主 Aphyr 釋出的超詳解： &lt;a title="HIT2011 Wargame Crypto 2 solution" href="https://plus.google.com/118167027367905384991/posts/ToLQkMRXtiY" target="_blank"&gt;&lt;a href="https://plus.google.com/118167027367905384991/posts/ToLQkMRXtiY" target="_blank"&gt;https://plus.google.com/118167027367905384991/posts/ToLQkMRXtiY&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Binary 1&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;題目給的 SlotMachine.exe 執行後會 drop 一個檔案：SlotMachineDrop.exe 而且執行它，會根據亂數彈出 fake key。根據後來的提示，應該是要把某個變數的值改成 7（程式裡是 mod 6），就會執行一段本來跑不到的程式進而噴出 key 來。&lt;strike&gt;結果我一直對 SlotMachine.exe 下手… 之後才聽說是要改另外那個 SlotMachineDrop.exe，一樣也是很失敗。&lt;/strike&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(20110725 updated)&lt;/em&gt; 不對… 改 SlotMachine.exe 是對的，我當時找到的點也是對的，只是要改成「6」，不是改成「7」啊!!!!! 因為原本是 mod 6，所以改成 6 才是原本不會出現的第七個數字 Orz 這樣顯得我更笨了&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Binary 3&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;題目是用很經典的「特訓 99」遊戲去改的，我的逆向工程並不強，所以一開始扔進 OD 發現有加殼，用 PEid 掃一下沒結果，認為是奇怪的殼，而我對脫殼沒甚麼研究，所以大概就放棄了。&lt;/p&gt;
&lt;p&gt;關主 Orange 一樣有在 blog 釋出解題思路： &lt;a title="HIT2011 Wargame Binary 3 solution" href="http://orange-tw.blogspot.com/2011/07/hitcon2011wargame-binary-3.html" target="_blank"&gt;&lt;a href="http://orange-tw.blogspot.com/2011/07/hitcon2011wargame-binary-3.html" target="_blank"&gt;http://orange-tw.blogspot.com/2011/07/hitcon2011wargame-binary-3.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;這次都沒有解出任何 Crypto 與 Binary 的題目，實在是大失敗啊… :(&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/compiling/~4/taRIPLWaZdk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/compiling/~3/taRIPLWaZdk/7998027738</link><guid isPermaLink="false">http://dan.zzhc.org/post/7998027738</guid><pubDate>Sun, 24 Jul 2011 18:41:00 +0800</pubDate><category>HIT</category><category>HIT2011</category><category>Wargame</category><feedburner:origLink>http://dan.zzhc.org/post/7998027738</feedburner:origLink></item><item><title>在 Linux 下搶奪 IP 地址</title><description>&lt;p&gt;最近接手了一台 server，網段跟公用的 DHCP pool 是同一個沒有切開，而該網段的 IP 地址發完了，所以有些使用者就會隨便亂搶別人的 IP 地址來用，一台 server 常常因為 IP 地址被搶走而不能連線實在是天底下數一數二的杯具。&lt;/p&gt;
&lt;p&gt;搜尋了一下，發現一個治標不治本的方法：&lt;/p&gt;
&lt;pre class="prettyprint"&gt;# arping -A [ip address] -I [interface]&lt;/pre&gt;
&lt;p&gt;例如你的 IP 地址是 192.168.55.66，而網路介面是 eth0，則執行以下指令（需 root 權限）：&lt;/p&gt;
&lt;pre class="prettyprint"&gt;# arping -A 192.168.55.66 -I eth0&lt;/pre&gt;
&lt;p&gt;利用不斷發出的 ARP request 去把 IP 地址要回來…Orz 這個方法還算可行，當然最佳解法是去找網管好好的喬一下。&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/compiling/~4/vlJ7x6Nuuvw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/compiling/~3/vlJ7x6Nuuvw/3940505602</link><guid isPermaLink="false">http://dan.zzhc.org/post/3940505602</guid><pubDate>Fri, 18 Mar 2011 22:34:32 +0800</pubDate><category>Linux</category><feedburner:origLink>http://dan.zzhc.org/post/3940505602</feedburner:origLink></item><item><title>在 C# 中抓取指定視窗的畫面截圖</title><description>&lt;p&gt;早上在寫那個陽春的&lt;a title="Bejeweled Helper" href="http://i.imgur.com/uGyk9.png" target="_blank"&gt;寶石方塊小幫手&lt;/a&gt;時遇到一個問題，就是我要使用 C# 去抓取遊戲的畫面，才能進行分析並給出提示。&lt;/p&gt;
&lt;p&gt;在網路上翻了一些討論，發現最簡單的方法是調用 Win32 API 裡的 GetWindowRect 取得目標視窗的位置與大小之後，使用 C# 內建的 Graphics 類別抓取截圖。這個方法寫起來簡單，但有一個缺點就是，&lt;strong&gt;目標視窗必須顯示在最上層&lt;/strong&gt;，不然會被其它視窗蓋到（因為是抓取螢幕畫面）。&lt;/p&gt;
&lt;p&gt;程式碼如下：&lt;/p&gt;
&lt;p&gt;
&lt;script src="https://gist.github.com/852484.js"&gt; &lt;/script&gt;&lt;/p&gt;
&lt;p&gt;需要特別注意的是，若&lt;strong&gt;目標視窗被最小化之後，則得到的位置與大小都會是負值&lt;/strong&gt;。&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/compiling/~4/Q55KFtmcnA8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/compiling/~3/Q55KFtmcnA8/3617137304</link><guid isPermaLink="false">http://dan.zzhc.org/post/3617137304</guid><pubDate>Thu, 03 Mar 2011 15:58:00 +0800</pubDate><category>C-Sharp</category><feedburner:origLink>http://dan.zzhc.org/post/3617137304</feedburner:origLink></item><item><title>「如何準備演講與投影片」簡報上線</title><description>&lt;p&gt;&lt;a title="如何準備演講與投影片" href="http://goo.gl/GUBBB" target="_blank"&gt;&lt;img src="http://media.tumblr.com/tumblr_lhfhroanUN1qzdblx.png"/&gt;&lt;br/&gt;點這裡到 Google Docs 觀看投影片&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今天應系上資工營教學股之邀，分享了一些關於準備簡報的經驗，也與大家分享。&lt;/p&gt;
&lt;p&gt;本簡報採用 &lt;a title="CC BY-NC 3.o" href="http://creativecommons.org/licenses/by-nc/3.0/tw/" target="_blank"&gt;CC BY-NC 3.0&lt;/a&gt; 授權，若您喜歡的話，歡迎散布 :)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/compiling/~4/glihUEpsKao" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/compiling/~3/glihUEpsKao/3599244384</link><guid isPermaLink="false">http://dan.zzhc.org/post/3599244384</guid><pubDate>Wed, 02 Mar 2011 19:44:00 +0800</pubDate><category>presentation</category><category>talk</category><category>投影片</category><category>演講</category><category>slides</category><feedburner:origLink>http://dan.zzhc.org/post/3599244384</feedburner:origLink></item><item><title>一些增進工作效率的技巧</title><description>&lt;p&gt;曾經看過一些關於「時間管理」的文章，試圖改進自己做事情的效率，而不要拖拖拉拉或是浪費掉時間而不自知；我發覺最大、也最常犯的錯誤就是，什麼事都想要找一塊「完整的時間」出來做，然而這種時間是相當稀有的，所以到頭來就會發現什麼工作沒能完成。&lt;/p&gt;
&lt;p&gt;下面分享一下目前正在練習的技巧：&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;strong&gt;將「完整」的時間拿來做非常重要、需要相當專注的工作，其它相對零碎的時間拿來活用&lt;/strong&gt;。零碎時間可以做一些即使突然被打斷也不會有什麼損失的事，例如：等車或坐車的時候可以看看文件、洗澡的時候可以想一些新的點子、上課前老師還沒出現的時候翻翻書…。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;總覺得自己很忙嗎？練習記錄下自己一天做了什麼事情。&lt;/strong&gt;這可以獲得兩種結果：&lt;br/&gt;&lt;span&gt; &lt;/span&gt;a. 發現自己其實是在空忙、浪費不少時間&lt;br/&gt;&lt;span&gt; &lt;/span&gt;b. 讓自己知道，雖然事情很多，但有慢慢解決、是有在向前進的&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;睡前躺在床上花點時間，回想今天從早到晚發生的事。&lt;/strong&gt;除了可以反省行為舉止之外，也可以得到兩種結果：&lt;br/&gt;&lt;span&gt; &lt;/span&gt;a. 如果整天都在打混，就檢討一下原因&lt;br/&gt;&lt;span&gt; &lt;/span&gt;b. 如果真的有完成工作，就藉機鼓勵自己（見下一點）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;完成工作後鼓勵自己。&lt;/strong&gt;可以為自己安排一個休閒活動，或是去做一件很想做、但卻一直沒能去做的事。不要將這個當作浪費時間，相反地，休息過後工作效率會更佳。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自己掌握時間，創造空檔而不是無謂的等待。&lt;/strong&gt;例如兩件約會間隔 15 分鐘，這個空窗期我們通常只會無所事事等待下一個約會；這時不妨將間隔調整成 30 分鐘以上，便可以拿來完成一件簡單的工作，又不影響到原定的行程。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;懂得拒絕。&lt;/strong&gt;當你覺得別人找你進行一件意義不大、又非常耗時的工作，適度的拒絕可以避免之後焦頭爛額的工作。不過當然也不能總是拒絕別人。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;這些小技巧我目前也還在學習，嘗試著想要身體力行每一個細節，大家一起努力吧！&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/compiling/~4/0joF4StKDag" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/compiling/~3/0joF4StKDag/3547034183</link><guid isPermaLink="false">http://dan.zzhc.org/post/3547034183</guid><pubDate>Mon, 28 Feb 2011 01:53:00 +0800</pubDate><category>time management</category><category>時間管理</category><feedburner:origLink>http://dan.zzhc.org/post/3547034183</feedburner:origLink></item><item><title>Apache 加上 mod_upload_progress，輕鬆顯示上傳進度</title><description>&lt;p&gt;&lt;a title="Pretty Little Progress Bar on flickr" href="http://www.flickr.com/photos/mynameisorman/5228391651/" target="_blank"&gt;&lt;img src="http://farm6.static.flickr.com/5170/5228391651_c4802a0ac4.jpg" alt="Progress bar" width="500" height="263"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在這些個 Module 還沒有面世之前，經由 Web 要上傳檔案是一件挺麻煩的事，以往大家都選擇使用 Flash uploader，然而有些使用者沒有安裝 Flash player，就沒有辦法上傳檔案了、或是得為這些人額外準備所謂的「傳統上傳」。&lt;/p&gt;
&lt;p&gt;&lt;a title="Piotr Sarnacki" href="http://piotrsarnacki.com/" target="_blank"&gt;Piotr Sarnacki&lt;/a&gt; 一開始在 Nginx 用 nginx-upload-progress-module 用得很開心，直到換成 Apache + Passenger (mod_rails) 之後，發現他可愛的上傳進度條不見了，所以就寫了給 Apache 用的 &lt;a title="mod_upload_progress" href="https://github.com/mpokrywka/apache-upload-progress-module" target="_blank"&gt;mod_upload_progress&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;安裝這個 Module 相當簡單，但是您要先備妥一些套件，在 Ubuntu Linux 上可以用下列的指令安裝：&lt;/p&gt;
&lt;pre class="prettyprint"&gt;sudo apt-get install build-essential
sudo apt-get install apache2-prefork-dev
sudo apt-get install libapr1-dev libaprutil1-dev&lt;/pre&gt;
&lt;p&gt;若您使用其它的 Linux 發行版，請尋找相對應的安裝指令即可。&lt;/p&gt;
&lt;p&gt;備妥這些套件之後，到 &lt;a title="mod_upload_progress" href="https://github.com/mpokrywka/apache-upload-progress-module" target="_blank"&gt;mod_upload_progress 的 Github 頁面&lt;/a&gt;下載程式碼，解壓縮後進到資料夾內輸入下列指令：&lt;/p&gt;
&lt;pre class="prettyprint"&gt;sudo apxs2 -c -i -a mod_upload_progress.c
&lt;/pre&gt;
&lt;ul&gt;&lt;li&gt;-c ：編譯&lt;/li&gt;
&lt;li&gt;-i ：安裝（將 mod_upload_progress.so 複製到 library 資料夾）&lt;/li&gt;
&lt;li&gt;-a ：啟動（將 LoadModule 參數加入 Apache 設定檔）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;之後到您的 Virtual Host 設定檔案裡，加入下列參數：&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;Location /&gt;
    # 為這個資料夾下的網頁啟用上傳進度顯示
    TrackUploads On
&lt;/Location&gt;

&lt;Location /progress&gt;
    # 在這個資料夾回報上傳進度
    ReportUploads On
&lt;/Location&gt;
&lt;/pre&gt;
&lt;p&gt;隨後記得重新啟動您的 Apache 伺服器以套用方才變更的設定（以 Ubuntu Linux 為例）：&lt;/p&gt;
&lt;pre class="prettyprint"&gt;sudo /etc/init.d/apache2 restart&lt;/pre&gt;
&lt;p&gt;安裝完成之後，來看一下要怎麼使用這個進度顯示的功能。首先要為上傳檔案的 Form 加入一點新東西：&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;form id="upload" action="/save?&lt;strong&gt;X-Progress-ID=[uuid]&lt;/strong&gt;"&gt;
&lt;/pre&gt;
&lt;p&gt;新加上去的那個參數「X-Progress-ID」是一個以數字構成的 ID，可以用 JavaScript 在頁面載入時自動產生。送出這組 ID 的目的是要讓 Apache 可以辨別目前的上傳，好讓我們稍後可以取得進度資訊。&lt;/p&gt;
&lt;p&gt;開始上傳之後，可以送 GET request 到「/progress」（或是您剛才設定的位址）取得上傳進度，只要在 GET request 的 &lt;strong&gt;header &lt;/strong&gt;加上一個參數「X-Progress-ID」，數值就是剛才產生的那個 ID。&lt;/p&gt;
&lt;p&gt;回傳的資料是 &lt;a title="JSON" href="http://www.json.org/" target="_blank"&gt;JSON&lt;/a&gt; 格式，一共會有以下四種可能的結果：&lt;/p&gt;
&lt;pre class="prettyprint"&gt;{'state': 'starting'}&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;表示「尚未開始」或是「未知的狀態」&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class="prettyprint"&gt;{'state': 'done'}&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;這當然是表示「上傳成功」了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class="prettyprint"&gt;{'state': 'error', 'status':}&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;表示「上傳失敗」，status 的值是 HTTP 錯誤代碼&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class="prettyprint"&gt;{'state': 'uploading', 'received': 'size':}&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;表示「正在上傳」，received 的值是現在傳了多少、size 的值是檔案有多大，兩者都以 Bytes 為單位。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;提醒：如果您想搭配 Rails 使用的話，請記得將 csrf-token 放在 form 裡面一起傳出去（或是&lt;a title="關掉 Rails 的 CSRF protection" href="http://stackoverflow.com/questions/138311/how-do-i-turn-off-csrf-protection-in-a-rails-app" target="_blank"&gt;關掉 CSRF protection&lt;/a&gt;），不然會一直得到 HTTP 500 錯誤！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;下面是一個搭配 Rails 使用的簡單範例：（寫得好醜…Orz）&lt;/p&gt;
&lt;script src="https://gist.github.com/844183.js"&gt;&lt;/script&gt;&lt;p&gt;延伸閱讀（您可以在後兩篇找到這個 module 的詳細使用方式與範例）：&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://piotrsarnacki.com/2008/06/18/upload-progress-bar-with-mod_passenger-and-apache/" target="_blank"&gt;Upload progress bar with mod_passenger and apache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wiki.nginx.org/NginxHttpUploadProgressModule" target="_blank"&gt;Nginx Upload Progress Module&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.new-bamboo.co.uk/2007/11/23/upload-progress-with-nginx" target="_blank"&gt;Upload progress with Nginx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/compiling/~4/c3x5WyhOpxQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/compiling/~3/c3x5WyhOpxQ/3505522643</link><guid isPermaLink="false">http://dan.zzhc.org/post/3505522643</guid><pubDate>Sat, 26 Feb 2011 01:52:29 +0800</pubDate><category>Apache</category><category>Upload</category><feedburner:origLink>http://dan.zzhc.org/post/3505522643</feedburner:origLink></item><item><title>「Git in a Nutshell」簡報上線</title><description>&lt;p&gt;
&lt;object id="__sse7016638" width="425" height="355"&gt;
&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20110219ntnugit-110222091453-phpapp02&amp;stripped_title=git-in-a-nutshell&amp;userName=Dannvix"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed name="__sse7016638" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20110219ntnugit-110222091453-phpapp02&amp;stripped_title=git-in-a-nutshell&amp;userName=Dannvix" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;br/&gt;&lt;a title="Git in a Nutshell" href="http://www.slideshare.net/Dannvix/git-in-a-nutshell" target="_blank"&gt;點這裡連到 slideshare 觀看 “Git in a Nutshell”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;這學期就要開始進行大學專題了，是以小組為單位一起研究、寫作，因此當然少不了一個簡單、易用的版本控制系統，非 &lt;a title="Git" href="http://git-scm.com/" target="_blank"&gt;Git&lt;/a&gt; 莫屬啦！&lt;/p&gt;
&lt;p&gt;趁著第二次 meeting、大家都還沒什麼進度的時候，趕緊跟組員們介紹 Git 這個好用的工具，所以上網搜尋了一下給新手的 Git 入門資源，看到 @chihchun 大哥在兩年前發表的&lt;a title="一個小時內搞懂 Git" href="http://people.debian.org.tw/~chihchun/2009/01/05/understand-git-in-one-hour/" target="_blank"&gt;「一個小時內搞懂 Git」&lt;/a&gt;，裡面提到 &lt;a title="Scott Chacon" href="http://jointheconversation.org/" target="_blank"&gt;Scott Chacon&lt;/a&gt; 的&lt;a title="Getting Git" href="http://www.slideshare.net/chacon/getting-git" target="_blank"&gt;「Getting Git」&lt;/a&gt;讓我大開眼界，拜讀了一下之後當作參考，做了上面這份介紹 Git 基本使用方式的簡報，跟大家分享！&lt;/p&gt;
&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;c2=7400849&amp;c3=1&amp;c4=&amp;c5=&amp;c6="&gt;&lt;/script&gt;&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;c2=7400849&amp;c3=1&amp;c4=&amp;c5=&amp;c6="&gt;&lt;/script&gt;&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;c2=7400849&amp;c3=1&amp;c4=&amp;c5=&amp;c6="&gt;&lt;/script&gt;&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;c2=7400849&amp;c3=1&amp;c4=&amp;c5=&amp;c6="&gt;&lt;/script&gt;&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;c2=7400849&amp;c3=1&amp;c4=&amp;c5=&amp;c6="&gt;&lt;/script&gt;&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;c2=7400849&amp;c3=1&amp;c4=&amp;c5=&amp;c6="&gt;&lt;/script&gt;&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;c2=7400849&amp;c3=1&amp;c4=&amp;c5=&amp;c6="&gt;&lt;/script&gt;&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;c2=7400849&amp;c3=1&amp;c4=&amp;c5=&amp;c6="&gt;&lt;/script&gt;&lt;img src="http://feeds.feedburner.com/~r/compiling/~4/OGjZchnIK4w" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/compiling/~3/OGjZchnIK4w/3445273723</link><guid isPermaLink="false">http://dan.zzhc.org/post/3445273723</guid><pubDate>Tue, 22 Feb 2011 23:37:00 +0800</pubDate><category>Git</category><category>版本控制</category><category>Version Control</category><feedburner:origLink>http://dan.zzhc.org/post/3445273723</feedburner:origLink></item><item><title>高效率的 Linux 遠端桌面：NoMachine NX</title><description>&lt;p&gt;僅管 Linux 大部分的功能都可以在 command-line 下實現，偶爾還是會需要遠端圖形介面；以往大家都使用 VNC，然而 VNC 有著（對新手而言）不好安裝設定、以及連線速度慢的缺點，用起來實在不太順手。&lt;/p&gt;
&lt;p&gt;有個速度較快而且跨平台的工具：&lt;a title="TeamViewer" target="_blank" href="http://www.teamviewer.com/"&gt;TeamViewer&lt;/a&gt;，最近也推出 Linux 版本了；但 TeamViewer 只能控制當前使用者的 session，而且不能讓 server 自動上線，這點就比較困擾。&lt;/p&gt;
&lt;p&gt;前陣子 @itsZero 推薦我使用 &lt;a title="NoMachine" target="_blank" href="http://www.nomachine.com/"&gt;NoMachine&lt;/a&gt; 推出的 &lt;a title="NoMachine NX" target="_blank" href="http://www.nomachine.com/select-package.php?os=linux&amp;id=1"&gt;NX&lt;/a&gt;，試用之下發現速度真快！而且 NX 的 Free版本提供兩位遠端使用者同時上線，遠端的 X session 都是新開的，不會影響到電腦本地端的使用（NX 4 可以選擇是否要接上之前已開啟的 session）。正巧今天同學詢問有沒有比 VNC 更好的解決方案，就趁這個機會分享一下這套工具。&lt;/p&gt;
&lt;p&gt;首先您的 Linux 機器必須裝有圖形介面（很顯然地…）以及 OpenSSH server（因為 NX 的連線是透過 SSH 服務）。之後連到 NX 的官網，下載相對應的 NX Server for Linux 包裝：&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Debian 系的 Linux (Debian、Ubuntu…) 下載 DEB 包裝&lt;/li&gt;
&lt;li&gt;RedHat 系的 Linux (RHEL、CentOS、Fedora…) 下載 RPM 包裝&lt;/li&gt;
&lt;li&gt;其它 Linux 發行版可以選擇下載 TAR 包裝&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;目前官網上提供下載的版本有 NX 3.4.0 與 NX 4 Preview 2，筆者上次安裝 NX Client 3.4.0 for Mac，發現需要額外安裝與 PPC 相容的 Rosseta 套件，因此這次便選擇較新的 NX 4。&lt;/p&gt;
&lt;p&gt;下載完對應的安裝套件之後，按照下載頁面上所提供的指示安裝（必須擁有管理員權限）：&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;安裝 DEB 包裝，請執行 `sudo dpkg -i nxserver_vdw_4.0.104-3_i686.deb`&lt;/li&gt;
&lt;li&gt;安裝 RPM 包裝，請執行 `sudo rpm -i nxserver-vdw-4.0.104-3.i686.rpm`&lt;/li&gt;
&lt;li&gt;若是 TAR 包裝，將 tar 壓縮檔搬到 /usr 並解壓縮之後，執行 `sudo /usr/NX/scripts/setup/nxserver —install` 即可&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;到目前為止，您已完成 server 端的安裝設定，接下來只要到官網上下載 NX Player 就可以準備連線到 server 端了！打開 NX Player 之後輸入 server 的 IP 位址，它會要求輸入帳號密碼，NX 的登入驗證是整合 Linux 的使用者，所以直接使用已有的帳號即可，不需為 NX 特別設定額外的使用者。&lt;/p&gt;
&lt;ul&gt;&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/compiling/~4/yLpubx5hG9U" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/compiling/~3/yLpubx5hG9U/3425013464</link><guid isPermaLink="false">http://dan.zzhc.org/post/3425013464</guid><pubDate>Mon, 21 Feb 2011 23:55:07 +0800</pubDate><category>Linux</category><category>NX</category><category>遠端桌面</category><feedburner:origLink>http://dan.zzhc.org/post/3425013464</feedburner:origLink></item><item><title>人嘛…每過一陣子就會有 blogging 的欲望；總之我又回來了，希望這次的三分鐘熱度可以持續久一點 :P</title><description>&lt;img src="http://27.media.tumblr.com/tumblr_lgyvhfohHd1qzg5eco1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;人嘛…每過一陣子就會有 blogging 的欲望；&lt;br/&gt;總之我又回來了，希望這次的三分鐘熱度可以持續久一點 :P&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/compiling/~4/AudWPrm2FdQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/compiling/~3/AudWPrm2FdQ/3422818726</link><guid isPermaLink="false">http://dan.zzhc.org/post/3422818726</guid><pubDate>Mon, 21 Feb 2011 20:17:00 +0800</pubDate><feedburner:origLink>http://dan.zzhc.org/post/3422818726</feedburner:origLink></item></channel></rss>

