<?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-3988026139893898245</id><updated>2011-12-02T13:00:05.029-08:00</updated><category term='Wretch'/><category term='Mox'/><category term='Python'/><category term='Archstone'/><category term='Visualization API'/><category term='2009'/><category term='finance'/><category term='Subversion'/><category term='vacation'/><category term='Javascript'/><category term='Agoura Hills'/><category term='random'/><category term='Hawaii'/><category term='ActionScript'/><category term='Picasaweb'/><category term='Windows'/><category term='Rent'/><category term='ppstream'/><category term='Java'/><category term='Registry'/><category term='Programming'/><category term='i-bond'/><category term='Flash'/><category term='exception handling'/><category term='initialize static final variable'/><category term='Travel'/><category term='GData API'/><category term='Proxy'/><category term='Eclipse'/><category term='Exim'/><category term='fun'/><category term='Ubuntu'/><category term='Android'/><category term='Gizmo 5'/><category term='Google Voice'/><title type='text'>Nigel@LaLaLand.com</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>46</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-8984646677576778619</id><published>2011-11-08T23:25:00.001-08:00</published><updated>2011-11-08T23:25:51.132-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Execute JS from Python with pywebkitgtk</title><content type='html'>&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.motane.lu/2009/06/18/pywebkitgtk-execute-javascript-from-python/"&gt;http://blog.motane.lu/2009/06/18/pywebkitgtk-execute-javascript-from-python/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/pywebkitgtk/wiki/HowDoI"&gt;http://code.google.com/p/pywebkitgtk/wiki/HowDoI&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/3988026139893898245-8984646677576778619?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/8984646677576778619/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=8984646677576778619' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/8984646677576778619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/8984646677576778619'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2011/11/execute-js-from-python-with-pywebkitgtk.html' title='Execute JS from Python with pywebkitgtk'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-4829247718679408508</id><published>2011-06-16T20:14:00.000-07:00</published><updated>2011-06-21T12:34:52.239-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><title type='text'>Tips and resources for improving website performance</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://developer.yahoo.com/performance/rules.html"&gt;http://developer.yahoo.com/performance/rules.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/speed/page-speed/docs/rules_intro.html"&gt;http://code.google.com/speed/page-speed/docs/rules_intro.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://stevesouders.com/"&gt;http://stevesouders.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.phpied.com/preload-cssjavascript-without-execution/"&gt;http://www.phpied.com/preload-cssjavascript-without-execution/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.webpagetest.org/"&gt;http://www.webpagetest.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/3988026139893898245-4829247718679408508?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/4829247718679408508/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=4829247718679408508' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/4829247718679408508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/4829247718679408508'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2011/06/tips-and-resources-for-improving.html' title='Tips and resources for improving website performance'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-473234611303715785</id><published>2011-05-29T23:25:00.000-07:00</published><updated>2011-05-29T23:44:13.901-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='i-bond'/><category scheme='http://www.blogger.com/atom/ns#' term='random'/><category scheme='http://www.blogger.com/atom/ns#' term='finance'/><title type='text'>I-bond rates at 4.6%</title><content type='html'>看完fatwallet的&lt;a href="http://www.fatwallet.com/forums/finance/1090220/"&gt;I-bond討論串&lt;/a&gt;得到以下結論:&lt;div&gt;&lt;ul&gt;&lt;li&gt;美國政府發行 可算是零風險的標的&lt;/li&gt;&lt;li&gt;每半年調整一次利率 (5月/11月) &lt;/li&gt;&lt;li&gt;利率有fixed跟variable兩部分。目前fixed是0%，variable 4.6%&lt;/li&gt;&lt;li&gt;Variable利率依照&lt;a href="http://www.bls.gov/cpi/"&gt;CPI-U&lt;/a&gt; index做調整&lt;/li&gt;&lt;li&gt;購買時以當時的利率算半年，半年後調整成半年後的利率再算半年，以此類推&lt;/li&gt;&lt;li&gt;最少需持有一年&lt;/li&gt;&lt;li&gt;五年以內贖回罰最後三個月利息&lt;/li&gt;&lt;li&gt;每個SSN每年購買上限$10000 ($5000 paper可在銀行購買 會寄紙本憑證，$5000 &lt;a href="http://www.treasurydirect.gov/tdhome.htm"&gt;online&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;State tax exempt&lt;/li&gt;&lt;li&gt;Exempt from fed. income tax if used to fund education&lt;/li&gt;&lt;li&gt;可選擇贖回時才繳fed. income tax&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/3988026139893898245-473234611303715785?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/473234611303715785/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=473234611303715785' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/473234611303715785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/473234611303715785'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2011/05/i-bond-rates-at-46.html' title='I-bond rates at 4.6%'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-654488943783021501</id><published>2011-04-13T14:47:00.000-07:00</published><updated>2011-04-13T14:49:02.614-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Symlink pathes in Flash player global security settings</title><content type='html'>Note to self: symlinks and Flash player security settings panel don't mix&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-654488943783021501?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/654488943783021501/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=654488943783021501' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/654488943783021501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/654488943783021501'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2011/04/symlink-pathes-in-flash-player-global.html' title='Symlink pathes in Flash player global security settings'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-3326243066532113314</id><published>2011-03-22T23:29:00.000-07:00</published><updated>2011-04-04T18:27:34.543-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='random'/><title type='text'>How to get integer overflow in Java...</title><content type='html'>private static final long MICROSECOND_IN_DAY = 24 * 60 * 60 * 1000 * 1000;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-3326243066532113314?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/3326243066532113314/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=3326243066532113314' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/3326243066532113314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/3326243066532113314'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2011/03/how-to-get-integer-overflow-in-java.html' title='How to get integer overflow in Java...'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-1536505012928391791</id><published>2011-03-03T22:50:00.000-08:00</published><updated>2011-03-03T22:56:03.087-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Random Python Performance Tips</title><content type='html'>&lt;ul&gt;&lt;li&gt;String concatenation should be done by filling out a list and then applying "".join()&lt;/li&gt;&lt;li&gt;List comprehension is faster than regular loop&lt;/li&gt;&lt;li&gt;Use dict.get or dict.setdefault to initialize dictionaries instead of cumbersome if else initialization&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/3988026139893898245-1536505012928391791?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/1536505012928391791/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=1536505012928391791' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/1536505012928391791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/1536505012928391791'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2011/03/random-python-performance-tips.html' title='Random Python Performance Tips'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-7824018541567534040</id><published>2011-01-31T19:41:00.000-08:00</published><updated>2011-01-31T21:35:36.678-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Optimization gone wrong, fix code.</title><content type='html'>I ran into this opaque error message when compiling some ActionScript code today. There was exactly &lt;a href="http://flash.digy.net/2011/01/error-optimization-gone-wrong-fix-code/"&gt;1 article&lt;/a&gt; on the entire internet talking about this error, so I thought I should share my findings.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I was trying to do conditional compilation following &lt;a href="http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_21.html"&gt;various&lt;/a&gt; &lt;a href="http://stackoverflow.com/questions/2736411/flash-flex-conditional-compilation-else"&gt;guides&lt;/a&gt; online. I wanted to toggle an import statement to be compiled based on a boolean constant:&lt;/div&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package {&lt;br /&gt; CONFIG::some_boolean_constant {&lt;br /&gt;   import com.aaa.ClassName;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; class Blah {&lt;br /&gt;   ...&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;The issue seems to be that the conditional compilation cannot happen outside of the class scope. Doing this instead makes the problem magically go away:&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package {&lt;br /&gt; class Blah {&lt;br /&gt;   CONFIG::some_boolean_constant {&lt;br /&gt;     import com.aaa.ClassName;&lt;br /&gt;   }&lt;br /&gt;   ...&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-7824018541567534040?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/7824018541567534040/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=7824018541567534040' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/7824018541567534040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/7824018541567534040'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2011/01/optimization-gone-wrong-fix-code.html' title='Optimization gone wrong, fix code.'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-6563439129627879827</id><published>2010-11-10T02:25:00.000-08:00</published><updated>2010-11-10T02:31:17.764-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mox'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Mocking out builtin methods with Mox</title><content type='html'>&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;import sys&lt;br /&gt;&lt;br /&gt;self.mox.StubOutWithMock(sys.modules['__builtin__'], 'open')&lt;br /&gt;&lt;br /&gt;stream = self.mox.CreateMockAnything()&lt;br /&gt;sys.modules['__builtin__'].open('foo.yml', 'r').AndReturn(stream)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Shamelessly copied from &lt;a href="http://blog.agoragames.com/2009/02/23/python-is-mocking-me-a-ruby-programmers-adventures-with-pythonmox/"&gt;this&lt;/a&gt; blog by Tim Jones&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-6563439129627879827?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/6563439129627879827/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=6563439129627879827' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6563439129627879827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6563439129627879827'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2010/11/mocking-out-builtin-methods-with-mox.html' title='Mocking out builtin methods with Mox'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-3777636978591556903</id><published>2010-08-07T02:53:00.000-07:00</published><updated>2010-08-07T03:22:55.930-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='GData API'/><category scheme='http://www.blogger.com/atom/ns#' term='Picasaweb'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Batch Delete Picasaweb Albums through GData API</title><content type='html'>Picasaweb沒有辦法簡單的對線上相簿/相片做批次編輯或刪除&lt;div&gt;幸好有提供好用的GData API&lt;/div&gt;&lt;div&gt;搭配&lt;a href="http://code.google.com/p/gdata-python-client/"&gt;GData Python Client&lt;/a&gt;只要短短幾行就可以做到批次清空所有相簿的功能&lt;/div&gt;&lt;div&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;import gdata.photos.service&lt;br /&gt;&lt;br /&gt;gd_client = gdata.photos.service.PhotosService()&lt;br /&gt;gd_client.ClientLogin(&amp;lt;username&amp;gt;, &amp;lt;password&amp;gt;)&lt;br /&gt;albums = gd_client.GetUserFeed()&lt;br /&gt;for album in albums.entry:&lt;br /&gt; gd_client.Delete(album)&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;其他包括對相簿批次重新命名, 相簿內的相片批次刪除, 編輯或刪除tag或comment, 或是批次上傳等等 GData API都可以做到&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-3777636978591556903?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/3777636978591556903/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=3777636978591556903' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/3777636978591556903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/3777636978591556903'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2010/08/batch-delete-picasaweb-albums-through.html' title='Batch Delete Picasaweb Albums through GData API'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-6503867935870043434</id><published>2010-08-01T19:27:00.000-07:00</published><updated>2010-08-01T20:06:20.554-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='exception handling'/><category scheme='http://www.blogger.com/atom/ns#' term='initialize static final variable'/><title type='text'>Exception handling for initializing static final variables in Java</title><content type='html'>這裡拜遇到一個Java問題&lt;div&gt;就是我想要宣告一個static final變數&lt;/div&gt;&lt;div&gt;一般來說很簡單的&lt;/div&gt;&lt;div&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;class A {&lt;br /&gt; static final int A = 1;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;就可以完成&lt;/div&gt;&lt;div&gt;但這次我要的static final並非簡單的int而是個複雜的class&lt;/div&gt;&lt;div&gt;該class的constructor還有可能會raise exception&lt;/div&gt;&lt;div&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;class ComplexStaticVar {&lt;br /&gt; public ComplexStaticVar () {&lt;br /&gt;  ....&lt;br /&gt;  throw new Exception();&lt;br /&gt; }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;嘗試用static initialization block並且用try...catch抓exception&lt;/div&gt;&lt;div&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;class A {&lt;br /&gt; static final ComplexStaticVar COMPLEX_STATIC_VAR;&lt;br /&gt;&lt;br /&gt; static {&lt;br /&gt;  try {&lt;br /&gt;   COMPLEX_STATIC_VAR = new ComplexStaticVar();&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   // Handle exception...&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;如此會出現錯誤: The blank final field COMPLEX_STATIC_VAR may not have been initialized&lt;/div&gt;&lt;div&gt;原因是因為若是創造ComplexStaticVar發生exception&lt;/div&gt;&lt;div&gt;則該static final變數有可能處在一個未初使化完全的狀態&lt;/div&gt;&lt;div&gt;這樣讓程式繼續執行很危險&lt;/div&gt;&lt;div&gt;必須要在抓到exception的時候重新raise一個runtime exception讓程式終止&lt;/div&gt;&lt;div&gt;防止static final變數在未初始化完全的情形下程式繼續執行&lt;/div&gt;&lt;div&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;class A {&lt;br /&gt; static final ComplexStaticVar COMPLEX_STATIC_VAR;&lt;br /&gt;&lt;br /&gt; static {&lt;br /&gt;  try {&lt;br /&gt;   COMPLEX_STATIC_VAR = new ComplexStaticVar();&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   // Handle exception...&lt;br /&gt;   throw new RuntimeException("Could not initialize class", e);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&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/3988026139893898245-6503867935870043434?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/6503867935870043434/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=6503867935870043434' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6503867935870043434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6503867935870043434'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2010/08/exception-handling-for-initializing.html' title='Exception handling for initializing static final variables in Java'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-6841257689067178528</id><published>2010-05-10T00:33:00.000-07:00</published><updated>2010-05-10T00:35:43.790-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='Hawaii'/><title type='text'>Big Island Trip</title><content type='html'>Going 5/28 ~ 6/2 :)&lt;br /&gt;&lt;br /&gt;&lt;iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps/ms?ie=UTF8&amp;amp;hl=en&amp;amp;msa=0&amp;amp;msid=104893859432221986990.000480b45b58de0ee1544&amp;amp;ll=19.49658,-155.438798&amp;amp;spn=0.87478,1.213517&amp;amp;output=embed"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;View &lt;a href="http://maps.google.com/maps/ms?ie=UTF8&amp;amp;hl=en&amp;amp;msa=0&amp;amp;msid=104893859432221986990.000480b45b58de0ee1544&amp;amp;ll=19.49658,-155.438798&amp;amp;spn=0.87478,1.213517&amp;amp;source=embed" style="color:#0000FF;text-align:left"&gt;Big Island&lt;/a&gt; in a larger map&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-6841257689067178528?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/6841257689067178528/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=6841257689067178528' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6841257689067178528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6841257689067178528'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2010/05/big-island-trip.html' title='Big Island Trip'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-2286799683059867388</id><published>2010-02-01T01:46:00.000-08:00</published><updated>2010-02-01T01:50:34.381-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ppstream'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu可看ppstream了 w00t!</title><content type='html'>Ubuntu TW有詳細安裝&lt;a href="http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?topic_id=21734&amp;amp;forum=10"&gt;教學&lt;/a&gt;&lt;br /&gt;看來家裡唯一一台Windows機器也可以變Linux了 cc&lt;br /&gt;還沒有試過穩定度有沒有比Windows的client好&lt;br /&gt;但基本上是用totem開的stream&lt;br /&gt;所以應該是大勝爛ppstream.exe吧&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-2286799683059867388?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/2286799683059867388/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=2286799683059867388' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/2286799683059867388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/2286799683059867388'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2010/02/ubuntuppstream-w00t.html' title='Ubuntu可看ppstream了 w00t!'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-1181341878697424710</id><published>2009-12-31T23:35:00.000-08:00</published><updated>2010-01-02T23:31:14.392-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2009'/><title type='text'>2009年回顧</title><content type='html'>2009年只剩不到十分鐘, 這時候寫回顧似乎很合適&lt;div&gt;記得以前每年都會寫的&lt;/div&gt;&lt;div&gt;但是隨著無名部落格一起煙消雲散了&lt;/div&gt;&lt;div&gt;從現在開始我要寫在blogger上&lt;/div&gt;&lt;div&gt;就不信blogger也會跟不爭氣的無名一樣煙銷雲散..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;今年真是eventful的一年&lt;/div&gt;&lt;div&gt;最大件的事肯定是結婚啦~&lt;/div&gt;&lt;div&gt;踏入已婚人士之列&lt;/div&gt;&lt;div&gt;感覺很奇妙&lt;/div&gt;&lt;div&gt;好像成長了 但又好像跟未婚沒什麼不一樣&lt;/div&gt;&lt;div&gt;我覺得很幸運遇到這Vicky&lt;/div&gt;&lt;div&gt;或許真的是一種緣分吧&lt;/div&gt;&lt;div&gt;還沒有在一起之前就覺得個性非常合得來&lt;/div&gt;&lt;div&gt;在一起之後更是覺得同步率爆表&lt;/div&gt;&lt;div&gt;很早就覺得我們肯定會走到最後&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;再來就是完全放棄PhD啦&lt;/div&gt;&lt;div&gt;其實最後決定比我想的簡單很多&lt;/div&gt;&lt;div&gt;最後一個quarter修了Korf的超應AI課&lt;/div&gt;&lt;div&gt;使出渾身解數還是只能拿B+&lt;/div&gt;&lt;div&gt;就深深覺得我不是個唸書的料&lt;/div&gt;&lt;div&gt;況且現在來說&lt;/div&gt;&lt;div&gt;resume上有沒有PhD這學歷也沒差了&lt;/div&gt;&lt;div&gt;算了 還是埋頭工作吧 XD&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;幸好職場上有點進展&lt;/div&gt;&lt;div&gt;至少拿到一個promotion&lt;/div&gt;&lt;div&gt;雖然我還是覺得我能力比起公司其他同事是差了許多&lt;/div&gt;&lt;div&gt;但至少證明我還是有在成長的&lt;/div&gt;&lt;div&gt;目前還是小聯盟選手&lt;/div&gt;&lt;div&gt;成長淺力未知 XD&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;旅遊方面&lt;/div&gt;&lt;div&gt;真是跟Vicky去了好多地方&lt;/div&gt;&lt;div&gt;Vegas, Santa Barbara, 日本, 舊金山, San Diego, 夏威夷&lt;/div&gt;&lt;div&gt;基本上美西幾乎玩遍了&lt;/div&gt;&lt;div&gt;之後的旅遊只能越去越遠了....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;很豐富的一年 :D&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-1181341878697424710?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/1181341878697424710/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=1181341878697424710' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/1181341878697424710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/1181341878697424710'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2009/12/2009.html' title='2009年回顧'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-678223448604672108</id><published>2009-07-29T18:43:00.000-07:00</published><updated>2009-07-29T21:21:56.201-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Voice'/><category scheme='http://www.blogger.com/atom/ns#' term='Gizmo 5'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Google voice + Gizmo5 + SIPdroid = unlimited free voip calling</title><content type='html'>Slickdeal上看到的&lt;br /&gt;只要有Google Voice跟Gizmo5帳號就可以從Android手機&lt;br /&gt;或任何有gizmo client的平台上撥打免費的voip電話.&lt;br /&gt;&lt;br /&gt;1) 在www.gizmo5.com申請一個帳號&lt;br /&gt;2) 在gizmo5的設定頁輸入Google Voice的帳號密碼 (如果不想給gmail的帳號密碼, 可以申請一個新帳號然後填&lt;a href="http://spreadsheets.google.com/viewform?formkey=cjlWRDFTWERkZEIxUzVjSmNsN0ExU1E6MA"&gt;這個&lt;/a&gt;表把Google Voice號碼轉到新帳號)&lt;br /&gt;3) 在SIPdroid或是gizmo5下載的client裡面:&lt;br /&gt;  - Username: 在gizmo5設定頁找到的11碼gizmo5號碼 (1-747-xxx-xxxx)&lt;br /&gt;  - Password: gizmo5密碼&lt;br /&gt;  - Server: proxy01.sipphone.com&lt;br /&gt;4) 登入Google Voice, 把gizmo號碼加入並認證&lt;br /&gt;&lt;br /&gt;認證完之後就可以用gizmo5 client打免費電話了!&lt;br /&gt;搭配tmobile的prepaid sidekick plan就可以有免榜約 無限通話 無限edge 2g上網的plan了!&lt;br /&gt;而且一天只要一塊錢 一個月$31, 實在是很便宜&lt;br /&gt;昨天試用2g + voip感覺音質比預期的好很多&lt;br /&gt;至少不會有lag或是雜音之類的&lt;br /&gt;以後有多一隻手機可以用了 :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-678223448604672108?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/678223448604672108/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=678223448604672108' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/678223448604672108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/678223448604672108'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2009/07/google-voice-gizmo5-sipdroid-unlimited.html' title='Google voice + Gizmo5 + SIPdroid = unlimited free voip calling'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-6440506866057546229</id><published>2009-07-17T18:56:00.000-07:00</published><updated>2009-07-17T19:56:35.804-07:00</updated><title type='text'>529 plan</title><content type='html'>最近在研究529 plan, 整理一下心得:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;529 plan是一種獎勵存錢給子女唸大學的優惠, 但事實上不一定只能給子女使用, 只要是近親都可使用 (配偶, 父母, 姪女, 祖父母...)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;529 plan有兩種: savings plan跟prepaid tuition plan&lt;br /&gt;&lt;/li&gt;&lt;li&gt;一般說的是savings plan, 跟Roth IRA很類似, after tax money放進去, 之後增值不課稅. 唯一跟Roth不同的限制是放進去的錢只能拿來付benefitiary的教育費.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;prepaid tuition plan是預購學分, 以現在的學費買學分給未來使用. 限制較多, 買那州的plan就只能在當州使用. Benefitiary也有年齡限制&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Benefitiary每年可換一次 直系血親皆可 甚至是自己未來想念MBA或研究所, 也可以填自己為benefitiary.&lt;/li&gt;&lt;li&gt;Savings plan的投資標的每個plan不同 大約是基金, 定存一類的. 選擇好標的之後一年只能進行一次的調整&lt;/li&gt;&lt;li&gt;若是提領的distribution不是拿來付教育相關費用, 不但要付income tax, 還有10% penalty. 但是如果benefitiary有拿到scholarship或公司funding, 就可以不用付penalty, income tax還是要付, 但可以以benefitiary當時的tax bracket算 一般來說學生的話 稅應該是很低&lt;br /&gt;&lt;/li&gt;&lt;li&gt;每個州的529 plan不盡相同, 有些對州民有州稅優惠 如果自己州的沒有特別的優惠 可以去買其他州比較好的plan. 大家比較推得有Ohio, Utah跟Nevada的plan.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.savingforcollege.com/"&gt;http://www.savingforcollege.com&lt;/a&gt;上面有各州529 plan的細節 也可以做side by side比較&lt;br /&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/3988026139893898245-6440506866057546229?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/6440506866057546229/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=6440506866057546229' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6440506866057546229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6440506866057546229'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2009/07/529-plan.html' title='529 plan'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-1893002311946508185</id><published>2009-06-08T17:04:00.000-07:00</published><updated>2010-04-07T13:01:31.400-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rent'/><category scheme='http://www.blogger.com/atom/ns#' term='Visualization API'/><category scheme='http://www.blogger.com/atom/ns#' term='Agoura Hills'/><category scheme='http://www.blogger.com/atom/ns#' term='Archstone'/><title type='text'>Archstone Agoura Hills Rent</title><content type='html'>&lt;iframe src="http://nigelvicky.twbbs.org/%7Encliang/index.html" frameborder="0" height="500" width="100%"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cron job parsing price from &lt;a href="http://www.archstoneagourahills.com/"&gt;Archstone&lt;/a&gt; website&lt;/li&gt;&lt;li&gt;Write date, price into js array&lt;/li&gt;&lt;li&gt;Create annoted timeline graph&lt;/li&gt;&lt;/ul&gt;It is the rent for a 1B1B apartment at my apartment complex. In comparison, I signed lease almost a year ago and got the "discounted" price of $1400... I guess it will not be long before it hits under $1200 :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-1893002311946508185?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/1893002311946508185/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=1893002311946508185' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/1893002311946508185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/1893002311946508185'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2009/06/fun-with-google-visualization-api.html' title='Archstone Agoura Hills Rent'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-8827651887406172262</id><published>2009-02-05T16:50:00.000-08:00</published><updated>2009-02-05T16:51:27.330-08:00</updated><title type='text'>Interesting histogram of S&amp;P 500 annual returns</title><content type='html'>&lt;a href="http://boingboing.net/2008/12/09/sp-returns-and-the-r.html"&gt;http://boingboing.net/2008/12/09/sp-returns-and-the-r.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-8827651887406172262?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/8827651887406172262/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=8827651887406172262' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/8827651887406172262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/8827651887406172262'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2009/02/interesting-histogram-of-s-500-annual.html' title='Interesting histogram of S&amp;P 500 annual returns'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-6563645905460915292</id><published>2008-12-22T11:48:00.000-08:00</published><updated>2008-12-22T11:53:08.705-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Christmas Gift 2008</title><content type='html'>&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com&amp;RGB=0x000000&amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2FNCLiang%2Falbumid%2F5282502426915252017%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-6563645905460915292?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/6563645905460915292/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=6563645905460915292' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6563645905460915292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6563645905460915292'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/12/christmas-gift-2008.html' title='Christmas Gift 2008'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-92379533340240193</id><published>2008-12-15T22:42:00.000-08:00</published><updated>2008-12-15T23:07:59.565-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><title type='text'>My day in pseudo-code</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;div&gt;def my_day(hour):&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  def fuzzy_time(hour, plus_minutes, minus_minutes=0):&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    return hour + rand(-1*minus_minutes, plus_minutes)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  hr = hour%24&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  if hr&amp;gt;=fuzzy_time(2, 60, 60) and hr&amp;lt;fuzzy_time(9, 60):&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;fuzzy_time(9,&gt;&lt;/fuzzy_time(9,&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    return self._sleep()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  else if hr&amp;gt;=fuzzy_time(9, 60) and hr&amp;lt;fuzzy_time(10, 60):&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;fuzzy_time(10,60):&gt;&lt;/fuzzy_time(10,60):&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    return self._driving()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  else if hr&amp;gt;=fuzzy_time(10,60) and \&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;      hr&amp;lt;fuzzy_time(21, 60, 60):&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;fuzzy_time(21,&gt;&lt;/fuzzy_time(21,&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    working[] = ["hard", "hardly"]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    return self._working(working[rand(0,1)])&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  else if hr&amp;gt;=fuzzy_time(21, 60, 60) and \&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;      hr&amp;lt;fuzzy_time(22, 60, 60):&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;fuzzy_time(22,&gt;&lt;/fuzzy_time(22,&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    return self._driving()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  else if hr&amp;gt;=fuzzy_time(22, 60, 60) and \&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;      hr&amp;lt;fuzzy_time(23,60,60):&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    return self._time_with_vicky()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  else:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    ptime_usage[] = ["school", "project", "random"]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    return self._personal_time(ptime_usage[rand(0, 3)])&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&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/3988026139893898245-92379533340240193?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/92379533340240193/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=92379533340240193' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/92379533340240193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/92379533340240193'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/12/my-day-in-pseudo-code.html' title='My day in pseudo-code'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-3658555434397612033</id><published>2008-11-24T18:33:00.000-08:00</published><updated>2008-11-24T20:02:54.252-08:00</updated><title type='text'>最近</title><content type='html'>好忙.... 要在Thanksgiving前做的事情好多 @@&lt;br /&gt;工作上, thanksgiving之後有launch&lt;br /&gt;學校: presentation, term project相繼要在thanksgiving前產出&lt;br /&gt;&lt;br /&gt;但是照例在最忙的時候&lt;br /&gt;都要找些無聊的事情做&lt;br /&gt;最近呢&lt;br /&gt;就是被Peter跟屯奇拉去玩facebook的RPG: Elven Blood&lt;br /&gt;這RPG相當好玩&lt;br /&gt;有很多任務可以執行&lt;br /&gt;完成任務會增加經驗值跟錢&lt;br /&gt;有些還會掉寶&lt;br /&gt;簡直就是個online game...&lt;br /&gt;&lt;br /&gt;但是很討厭的地方就是每個任務要耗費精力&lt;br /&gt;精力回複的速度又超慢 (300秒才回複一點)&lt;br /&gt;我經常都處在精力0 慢慢等回複的狀態 -.-&lt;br /&gt;這樣叫人完全沒辦法打怪練功阿~&lt;br /&gt;哪裡像RPG了&lt;br /&gt;&lt;br /&gt;於是為此寫了一個幫我練功的python script&lt;br /&gt;定時起來跑個簡單的任務賺經驗值跟錢&lt;br /&gt;簡直就是個DIY BOT阿~ XD&lt;br /&gt;沒想到用這個不到一天就被發現 停帳號了&lt;br /&gt;這遊戲的admin也太有效率了吧 -.-&lt;br /&gt;&lt;br /&gt;現在用Vicky的帳號繼續玩&lt;br /&gt;使用改良版的script&lt;br /&gt;會模擬真人的玩法, 有bursty event等&lt;br /&gt;看還會不會被抓&lt;br /&gt;再被抓就放棄了 cc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-3658555434397612033?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/3658555434397612033/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=3658555434397612033' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/3658555434397612033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/3658555434397612033'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/11/blog-post.html' title='最近'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-6597222660135410005</id><published>2008-11-19T20:26:00.000-08:00</published><updated>2008-11-19T20:40:16.951-08:00</updated><title type='text'>Safari trick to get FF-style tab shortcuts</title><content type='html'>I found &lt;a href="http://www.macosxhints.com/article.php?story=20070730145747991"&gt;this&lt;/a&gt; trick today on macosxhints.com. This has been a main issue keeping me away from Safari, I keep hitting cmd+1 expecting to go to my first open tab (usually gmail), and end up changing the page I am looking at to Amazon -.-&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To clarify on the instructions:&lt;/div&gt;&lt;div&gt; - Install &lt;a href="http://quicksilver.en.softonic.com/mac"&gt;Quicksilver&lt;/a&gt;&lt;/div&gt;&lt;div&gt; - Download &lt;a href="http://dl.getdropbox.com/u/127333/safari_ffsyle_tabchange_shortcut.sh"&gt;this&lt;/a&gt; script&lt;/div&gt;&lt;div&gt; - Execute the script in terminal window, it will create files Activate Tab {1-9} and Active Last Tab in the directory $HOME/Library/Scripts/Applications/Safari/&lt;/div&gt;&lt;div&gt; - In Quicksilver, add these triggers and assign them shortcut keys cmd-{0-9}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now I can actually USE Safari lol&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-6597222660135410005?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/6597222660135410005/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=6597222660135410005' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6597222660135410005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6597222660135410005'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/11/safari-trick-to-get-ff-style-tab.html' title='Safari trick to get FF-style tab shortcuts'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-3037801107270751844</id><published>2008-10-29T01:22:00.000-07:00</published><updated>2008-10-29T01:41:25.963-07:00</updated><title type='text'>Picasaweb冷知識</title><content type='html'>今天學到的冷知識&lt;br /&gt;&lt;br /&gt;Picasaweb的照片會隨著瀏覽器視窗動態調整大小&lt;br /&gt;要強制看到最高解析度的照片&lt;br /&gt;可以從右側Embed image的html碼中找出image url&lt;br /&gt;大約會長這樣:&lt;br /&gt;http://lh5.ggpht.com/NCLiang/SJKQglBYjrI/AAAAAAAAF4k/KM7eADaVOKw/s144/P1020910.JPG&lt;br /&gt;貼到broswer裡面, 把path裡面的s144改成 s1600就可以了&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-3037801107270751844?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/3037801107270751844/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=3037801107270751844' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/3037801107270751844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/3037801107270751844'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/10/picasaweb.html' title='Picasaweb冷知識'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-205750840903194390</id><published>2008-09-25T20:49:00.000-07:00</published><updated>2008-09-25T21:00:01.483-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Proxy'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Registry'/><title type='text'>Registry key for wininet proxy settings</title><content type='html'>&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\{ProxyServer, ProxyOverride, ProxyEnable}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Another way to control them through wininet is described &lt;a href="http://support.microsoft.com/?id=226473"&gt;here&lt;/a&gt;.&lt;br /&gt;In Python, INTERNET_OPTION_PER_CONNECTION_OPTION is not implemented in pywin32 yet...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-205750840903194390?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/205750840903194390/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=205750840903194390' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/205750840903194390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/205750840903194390'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/09/registry-key-for-wininet-proxy-settings.html' title='Registry key for wininet proxy settings'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-5860020901841824178</id><published>2008-09-19T11:21:00.000-07:00</published><updated>2008-09-19T11:44:23.000-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Exim'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>讓Linux可以從command line寄信</title><content type='html'>公司的電腦都設定好可以跑cron job然後把結果寄給我&lt;br /&gt;在家裡用的時候卻還需要些額外的設定&lt;br /&gt;&lt;ol&gt;&lt;li&gt;安裝exim&lt;pre   style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); line-height: 14px; width: 100%;font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;font-size:12px;"&gt;&lt;code&gt;sudo apt-get install exim4 exim4-config&lt;span style="font-family:Georgia,serif;"&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:Georgia,serif;"&gt;設定exim使用smart host處理外送信件, smart host主機用ISP提供的, Time Warner的在&lt;a href="http://www.realifewebdesigns.com/web-resources/pop3-smtp-timewarner.html"&gt;這裡&lt;/a&gt;查的到&lt;br /&gt;&lt;/span&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;sudo dpkg-reconfigure exim4-config&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;要從command line寄信的話 安裝mutt, mail之類的程式就可以了&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;sudo apt-get install mutt mailutils&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-5860020901841824178?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/5860020901841824178/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=5860020901841824178' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/5860020901841824178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/5860020901841824178'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/09/linuxcommand-line.html' title='讓Linux可以從command line寄信'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-840747980444838144</id><published>2008-08-26T22:53:00.000-07:00</published><updated>2008-08-27T19:00:20.483-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Ubuntu, Subversion, Eclipse</title><content type='html'>首先安裝設定subversion&lt;br /&gt;&lt;ul&gt;&lt;li&gt;安裝需要用的套件&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;sudo apt-get install subversion openssh-server&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;建立svn repository&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;sudo mkdir /var/svn&lt;br /&gt;sudo svnadmin create /var/svn/repos&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;建立一個使用者svn做為repository的owner&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;sudo adduser svn&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;讓所有人都能以svn登入&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;sudo vipw&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;把svn的login shell從/bin/bash改成/bin/false&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;svn:x:1010:1009:,,,:/home/svn:/bin/false&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;把repository的owner改成svn&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;sudo chown -R svn.svn /var/svn&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;把想存取repository的帳戶都加入svn這個group, 記得一定要加www-data這個apache用的帳戶否則會無法用http存取repository&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;sudo vigr&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;把svn那行改成&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;svn:x:1009:&lt;i&gt;username&lt;/i&gt;,www-data&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;做到這裡已經可以用&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;svn co svn+ssh://&lt;span style="font-style: italic;"&gt;username&lt;/span&gt;@&lt;span style="font-style: italic;"&gt;hostname&lt;/span&gt;/var/svn/repos&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;以svn protocol透過ssh tunnel存取repository了&lt;/li&gt;&lt;/ul&gt;接下來設定Apache, 以後可使用http://&lt;span style="font-style: italic;"&gt;hostname&lt;/span&gt;/svn/repos來存取repository&lt;br /&gt;&lt;ul&gt;&lt;li&gt;安裝需要用到的套件&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;sudo apt-get install &lt;/code&gt;libapache2-svn&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;在/etc/apache2/sites-enabled/000-default加入&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&amp;lt;Location /svn/repos&amp;gt;&lt;br /&gt;DAV svn&lt;br /&gt;SVNPath /var/svn/repos&lt;br /&gt;AuthType Basic&lt;br /&gt;AuthName "Subversion Repository"&lt;br /&gt;AuthUserFile /etc/apache2/passwords&lt;br /&gt;Require valid-user&lt;br /&gt;&amp;lt;/Location&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;建立可存取repository的帳號密碼&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;sudo htpasswd -cb /etc/apache2/passwords &lt;span style="font-style: italic;"&gt;username&lt;/span&gt; &lt;span style="font-style: italic;"&gt;passwd&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;重啟Apache, 如此就可以在http://&lt;span style="font-style: italic;"&gt;hostname&lt;/span&gt;/svn/repos看到你的repository了&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;sudo /etc/init.d/apache2 restart&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;接著在Eclipse裡面安裝設定subclipse這個plugin, 讓Eclipse可以整合svn, 不用跳到別的介面做check in, check out, sync等動作. Subclipse的網頁有安裝設定的說明: &lt;a href="http://subclipse.tigris.org/install.html"&gt;http://subclipse.tigris.org/install.html&lt;/a&gt;, 記得要安裝Subclipse跟JavaHL Adaptor這兩個, 其他的裝不裝無所謂.&lt;p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;安裝完之後進入SVN Repository Exploring perspective選Add SVN Repository. 在Url欄填入http://&lt;span style="font-style: italic;"&gt;hostname&lt;/span&gt;/svn/repos之後按Finish.&lt;p&gt;&lt;br /&gt;&lt;br /&gt;之後就可以在Eclipse的project上按右鍵-&gt;Team-&gt;Share Project...將整個project加入svn了. 之後個別檔案也可以在上面按右鍵-&gt;Team進行source control的動作.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-840747980444838144?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/840747980444838144/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=840747980444838144' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/840747980444838144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/840747980444838144'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/08/ubuntu-subversion-eclipse.html' title='Ubuntu, Subversion, Eclipse'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-2094617850053332948</id><published>2008-07-06T18:26:00.000-07:00</published><updated>2008-07-06T21:10:57.200-07:00</updated><title type='text'>Disneyland一日遊</title><content type='html'>&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com&amp;RGB=0x000000&amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2FNCLiang%2Falbumid%2F5220073218155921009%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;這次long weekend不想去太遠的地方&lt;br /&gt;就帶Vicky是迪士尼玩&lt;br /&gt;我是前不久才去過&lt;br /&gt;但是Vicky很久沒去了&lt;br /&gt;一早八點出發&lt;br /&gt;玩到半夜才到家&lt;br /&gt;實在是玩很久&lt;br /&gt;可惜最想玩的Nemo還是沒有玩到&lt;br /&gt;實在是太受歡迎了&lt;br /&gt;排隊都要一個小時以上才能玩的到...&lt;br /&gt;其他的ride倒是玩了許多&lt;br /&gt;太空山跟Star tour很昏&lt;br /&gt;Pirates of the Caribbean跟彼得潘很炫&lt;br /&gt;Indiana Jones很顛簸&lt;br /&gt;迷你賽車開不快...&lt;br /&gt;&lt;br /&gt;下次有機會再去California Adventure Park&lt;br /&gt;有比較多刺激的ride&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-2094617850053332948?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/2094617850053332948/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=2094617850053332948' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/2094617850053332948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/2094617850053332948'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/07/disneyland.html' title='Disneyland一日遊'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-8059629052634959058</id><published>2008-06-24T12:14:00.000-07:00</published><updated>2008-07-02T02:27:12.621-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>城邦書迷王</title><content type='html'>很久沒有新文章了&lt;br /&gt;來po一下最近寫的城邦小程式好了&lt;br /&gt;&lt;br /&gt;主要是看到B大在Oversea_Job版的這篇&lt;a href="http://www.ptt.cc/bbs/Oversea_Job/M.1212085278.A.D3A.html"&gt;文章&lt;/a&gt;&lt;br /&gt;城邦書店的活動&lt;br /&gt;內容是玩書名接龍&lt;br /&gt;接最長的贏&lt;br /&gt;獎品有20本書, 城邦圖書禮券, 之類的&lt;br /&gt;&lt;br /&gt;正如B大所說&lt;br /&gt;這是很常見的interview題目&lt;br /&gt;用DFS+hash就可以解覺&lt;br /&gt;沒用Python寫過DFS&lt;br /&gt;想說正好拿來試試&lt;br /&gt;&lt;br /&gt;大致上寫法就是用urllib抓下網頁&lt;br /&gt;用regular expression從網頁抓出書名&lt;br /&gt;這樣抓完大約有10000多本&lt;br /&gt;這些書名用一個tokenizer function抓出頭尾的token&lt;br /&gt;然後用開頭的token做key丟進一個hash table&lt;br /&gt;之後就是做DFS囉~&lt;br /&gt;很快就能找出一條長度800的接龍&lt;br /&gt;要等久一點的話&lt;br /&gt;我相信是可以找到更長的&lt;br /&gt;&lt;br /&gt;本來開開心心想去賺獎品的&lt;br /&gt;後來覺得勝之不武就放棄了&lt;br /&gt;&lt;br /&gt;回想大學時期也幹過類似的事情&lt;br /&gt;不過手法是拙劣多了&lt;br /&gt;光抓網頁parse字串出來就搞了一整晚&lt;br /&gt;&lt;br /&gt;慚愧慚愧&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-8059629052634959058?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/8059629052634959058/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=8059629052634959058' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/8059629052634959058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/8059629052634959058'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/06/blog-post.html' title='城邦書迷王'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-6857493837523112747</id><published>2008-06-17T12:08:00.000-07:00</published><updated>2008-06-19T13:43:33.900-07:00</updated><title type='text'>Firefox3 Download Day</title><content type='html'>今天是Firefox3 Download Day&lt;br /&gt;Mozilla.org呼籲大家在這24小時內下載FF3&lt;br /&gt;希望申請金氏世界紀錄&lt;br /&gt;似乎事很好的行銷手段&lt;br /&gt;不過發一下牢騷&lt;br /&gt;要搞行銷手段可以&lt;br /&gt;但至少要保證你server不能被traffic搞掛吧 -.-&lt;br /&gt;自己找來的DDoS攻擊&lt;br /&gt;就要有能力防禦阿 XD&lt;br /&gt;&lt;br /&gt;另外&lt;br /&gt;24小時的定義不清&lt;br /&gt;大家都以為是6/17/2008午夜零時起算&lt;br /&gt;沒想到今天早上才說是加州時間早上十點開始算&lt;br /&gt;給人的感覺整個很沒規劃&lt;br /&gt;看來open source還是乖乖寫code吧&lt;br /&gt;行銷這種東西&lt;br /&gt;還是閃開讓專業得來好些!&lt;br /&gt;&lt;br /&gt;附上可用的&lt;a href="http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0/win32/zh-TW/Firefox%20Setup%203.0.exe"&gt;下載連結&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-6857493837523112747?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/6857493837523112747/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=6857493837523112747' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6857493837523112747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6857493837523112747'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/06/firefox3-download-day.html' title='Firefox3 Download Day'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-2698293477665867917</id><published>2008-05-29T23:35:00.000-07:00</published><updated>2008-05-29T23:43:24.932-07:00</updated><title type='text'>I approved it today.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.cs.ucla.edu/~darwiche/take3.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 160px;" src="http://www.cs.ucla.edu/~darwiche/take3.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;副系主任寫來短短一句話&lt;br /&gt;表示我又向復學之路邁進了一大步!&lt;br /&gt;接下來不要被graduate division刁難就好&lt;br /&gt;畢竟這quarter都快結束了才在extend leave&lt;br /&gt;graduate division要有意見我也是能理解啦 XD&lt;br /&gt;明天有需要的話請半天假回學校去處理一下...&lt;br /&gt;&lt;br /&gt;旁邊是副系主任玉照&lt;br /&gt;以後在走廊上看到他要跟他謝謝一下 XD&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-2698293477665867917?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/2698293477665867917/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=2698293477665867917' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/2698293477665867917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/2698293477665867917'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/05/i-approved-it-today.html' title='I approved it today.'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-574393691528720233</id><published>2008-05-28T11:11:00.000-07:00</published><updated>2008-05-28T16:42:01.703-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Wretch'/><title type='text'>備份無名</title><content type='html'>知道無名將併入bs2之後&lt;br /&gt;一直覺得應該要把個版備份一下&lt;br /&gt;Google一下之後沒找到可以備份個版文章的程式&lt;br /&gt;於是把之前的Blogger同步script改一下&lt;br /&gt;變成一隻備份文章的&lt;a href="http://ncliang.googlepages.com/wretch_backup.py"&gt;script&lt;/a&gt;&lt;br /&gt;用法呢&lt;br /&gt;就是安裝Python之後&lt;br /&gt;把script裡面的WRETCH_LOGIN, WRETCH_PASSWD, WRETCH_BOARDNAME, BACKUP_EMAIL改成自己的唉低, 密碼, 個版版名, 跟想備份到的信箱&lt;br /&gt;用Python執行應該就可以了...&lt;br /&gt;&lt;br /&gt;另外&lt;br /&gt;用Blogger的話&lt;br /&gt;可以開啟email post到Blogger的服務&lt;br /&gt;直接用這個script寄信到Blogger上指定的email&lt;br /&gt;就會把文章全部轉到blog上了 :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-574393691528720233?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/574393691528720233/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=574393691528720233' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/574393691528720233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/574393691528720233'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/05/blog-post.html' title='備份無名'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-6750752178482442002</id><published>2008-05-26T23:03:00.000-07:00</published><updated>2008-06-19T13:41:20.320-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Travel'/><title type='text'>Seattle行</title><content type='html'>回來了!&lt;br /&gt;西雅圖真有趣&lt;br /&gt;完全不像印象中的陰雨綿綿&lt;br /&gt;事實上去的時候整天都是大太陽&lt;br /&gt;熱的要死 反而LA這邊很冷又下雨&lt;br /&gt;整個倒過來了....&lt;br /&gt;這麼說來&lt;br /&gt;這幾天似乎創了當地進幾年的最高溫&lt;br /&gt;也難得的幾乎沒有下雨 (晚上還是下了一些些啦 XD)&lt;br /&gt;但上次去的時候&lt;br /&gt;竟然是當地十年來最低溫 還下暴風雪 -.-&lt;br /&gt;看來我去的時候會造成極端的天氣&lt;br /&gt;下次去可能會有颱風之類的吧 XD&lt;br /&gt;&lt;br /&gt;去的景點就那些常去的&lt;br /&gt;派客市場 星巴客發源店 太空針 波音博物館 EMP&lt;br /&gt;派客市場就很像台灣的傳統市場&lt;br /&gt;有一部分轉型成很像新掘江的商店街&lt;br /&gt;去的時候已經有點晚了 所以很多店都關了&lt;br /&gt;有點可惜&lt;br /&gt;不過附近的星巴客還蠻有趣的&lt;br /&gt;小小一間店擠滿了觀光客&lt;br /&gt;還賣了很多那間店的限量商咖啡杯之類的&lt;br /&gt;去了當然免不了要買個咖啡跟紀念馬克杯之類的&lt;br /&gt;&lt;br /&gt;太空針是當地重要的地標&lt;br /&gt;是觀光客必須去看一下的景點&lt;br /&gt;實際上就跟一般高樓一樣&lt;br /&gt;從高高的地方看夜景 也不錯啦&lt;br /&gt;禮品部裡面賣了一張世界各大樓比較的海報&lt;br /&gt;台北101跟高雄東帝士都榜上有名呢!&lt;br /&gt;相較之下&lt;br /&gt;太空針連101的1/3都不到&lt;br /&gt;有點悲&lt;br /&gt;想不透在太空針怎麼會賣這種自暴其短的海報 XD&lt;br /&gt;&lt;br /&gt;波音也是蠻有趣的點&lt;br /&gt;被帶去參觀波音的工廠&lt;br /&gt;看到747 777 787的組裝線&lt;br /&gt;我是看不太懂啦&lt;br /&gt;但Vicky看了好像有懂一些的樣子&lt;br /&gt;一直跟我解釋787用carbon材料又輕 硬度又夠&lt;br /&gt;好像他們老闆之前也有跟波音合作的樣子&lt;br /&gt;要是他有身份&lt;br /&gt;大概就會跑來波音做飛機了吧 XD&lt;br /&gt;有看到他們工程師的cubical&lt;br /&gt;蠻慘的 直接就擺在飛機組裝線的旁邊&lt;br /&gt;去的時候是long weekend, 還看到很多苦命工程師在工廠上班&lt;br /&gt;看來工程師苦命是全世界都這樣阿~ T^T&lt;br /&gt;不過看完之後整個很震驚&lt;br /&gt;沒想到這麼大一架747&lt;br /&gt;只要3天就能組裝出來了&lt;br /&gt;實在是驚人&lt;br /&gt;&lt;br /&gt;EMP跟SFM也是很好玩的點&lt;br /&gt;可惜去的時候有點趕&lt;br /&gt;沒來的及好好參觀SFM&lt;br /&gt;不過EMP有花很多時間看&lt;br /&gt;重點在三樓&lt;br /&gt;之前的展覽我是覺得除非對美國流行音樂有研究的&lt;br /&gt;不然去看應該會覺得蠻boring的&lt;br /&gt;我們兩個就都沒啥興趣&lt;br /&gt;一開始以為是個無趣的點&lt;br /&gt;但到了三樓就整個部一樣了&lt;br /&gt;他有些sound studio&lt;br /&gt;裡面有鼓 吉他 keyboard 麥克風等 可以讓你自己玩&lt;br /&gt;外面也有擺樂器搭配電腦教學&lt;br /&gt;現場可以學到基本的keyboard 吉他 鼓&lt;br /&gt;邊學邊玩&lt;br /&gt;整個很開心 :D&lt;br /&gt;&lt;br /&gt;玩回來之後整個累攤了&lt;br /&gt;躺在床上就睡死了...&lt;br /&gt;偶爾這樣出去遊玩也不錯&lt;br /&gt;不然平常工程師的上班生活真是太枯燥了 :p&lt;br /&gt;&lt;br /&gt;照例要來個slideshow:&lt;br /&gt;&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&amp;RGB=0x000000&amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2FNCLiang%2Falbumid%2F5211235412363368401%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-6750752178482442002?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/6750752178482442002/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=6750752178482442002' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6750752178482442002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/6750752178482442002'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/05/seattle.html' title='Seattle行'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-3448716469181573667</id><published>2008-05-19T23:08:00.000-07:00</published><updated>2008-05-28T16:42:01.704-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Wretch'/><title type='text'>自動轉錄blog文章</title><content type='html'>最近都把文章po到blog上來&lt;br /&gt;無名的個版都很久沒新文章了&lt;br /&gt;每次上去幾乎都是收到要砍版的通知才去po一篇意思一下&lt;br /&gt;於是乎想到要寫個script把blog上的文章同步轉到無名去&lt;br /&gt;又剛好看到python有內建的telnetlib&lt;br /&gt;於是乎就想嚐試寫寫看&lt;br /&gt;&lt;br /&gt;寫下去才發現其實一點都不難&lt;br /&gt;feed parsing是python的強項之一&lt;br /&gt;幾乎是from xml.dom import minidom就搞定&lt;br /&gt;telnetlib基本上稍微包裝一下就可以使用了&lt;br /&gt;telnet的通訊協定極簡單&lt;br /&gt;一個read_very_eager 一個write就可搞定&lt;br /&gt;唯一的困難出現在我對&lt;a href="http://en.wikipedia.org/wiki/Control_characters"&gt;ctrl character&lt;/a&gt;的不熟悉 (ctrl+p, ctrl+x, etc)&lt;br /&gt;後來感謝ptt的CMJ0121幫忙指出控制鍵對應的ascii碼&lt;br /&gt;程式就完成啦~ XDD&lt;br /&gt;&lt;br /&gt;目前只是一隻在我的linux box上面跑的script&lt;br /&gt;有需要的話以改成ptt2使用&lt;br /&gt;也可以加個django frontend&lt;br /&gt;開放成一個web service給人使用&lt;br /&gt;甚至應該可以用Google App Engine重寫&lt;br /&gt;只要他支援telnetlib跟minidom就可&lt;br /&gt;不過這種奇怪的service&lt;br /&gt;真的有人會想用嗎 -.-?&lt;br /&gt;&lt;br /&gt;結果發現無名要併入bs2了...&lt;br /&gt;這script看來要廢了&lt;br /&gt;考慮寫個反方向的備份script...&lt;br /&gt;&lt;br /&gt;目前的known issues:&lt;ul&gt;&lt;li&gt;編輯最新的文章會重複post&lt;/li&gt;&lt;li&gt;網路斷線會terminate&lt;/li&gt;&lt;li&gt;username, password not encrypted&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/3988026139893898245-3448716469181573667?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/3448716469181573667/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=3448716469181573667' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/3448716469181573667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/3448716469181573667'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/05/blog.html' title='自動轉錄blog文章'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-5668070233184411322</id><published>2008-05-12T21:52:00.000-07:00</published><updated>2008-05-28T16:42:01.704-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>XOR Swap</title><content type='html'>今天在寫一個簡單的洗牌程式的時候&lt;br /&gt;使用了許久未用的XOR swap&lt;br /&gt;這XOR swap可是當年寫ACM的良伴阿&lt;br /&gt;沒想到上網查了一下資料&lt;br /&gt;發現大家普遍覺得他unreadable且performance未必比較好&lt;br /&gt;但怎麼想都覺得用XOR這麼帥氣的swap&lt;br /&gt;應該比一般普通的swap快一些吧~&lt;br /&gt;於是乎開始了我的profiling之旅&lt;br /&gt;&lt;br /&gt;首先&lt;br /&gt;我的implementation:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;#define XORSWAP(a, b) (((a)==(b))?:((a)^=(b),(b)^=(a),(a)^=(b)))&lt;br /&gt;#define ADDSWAP(a, b) (((a)==(b))?:((a)=(a)+(b),(b)=(a)-(b),(a)=(a)-(b)))&lt;br /&gt;#define SWAP(a, b, t) ((t)=(a), (a)=(b), (b)=(t))&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;順便把xor swap的變形add swap比進去&lt;br /&gt;不考慮overflow的問題&lt;br /&gt;純粹比速度!&lt;br /&gt;&lt;br /&gt;再來&lt;br /&gt;以下這個洗牌function大量使用swap&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;enum {&lt;br /&gt;  XOR_SWAP = 0,&lt;br /&gt;  ADD_SWAP,&lt;br /&gt;  NORM_SWAP&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int card[NUMCARDS];&lt;br /&gt;&lt;br /&gt;inline void shuffle_cards(int swap_type)&lt;br /&gt;{&lt;br /&gt;  int i, j, t;&lt;br /&gt;&lt;br /&gt;  for (i=NUMCARDS-1; i&gt;=0; i--)&lt;br /&gt;  {&lt;br /&gt;    j = rand() % (i+1);&lt;br /&gt;    switch (swap_type)&lt;br /&gt;    {&lt;br /&gt;    case XOR_SWAP:&lt;br /&gt;      XORSWAP(card[i], card[j]);&lt;br /&gt;      break;&lt;br /&gt;    case ADD_SWAP:&lt;br /&gt;      ADDSWAP(card[i], card[j]);&lt;br /&gt;      break;&lt;br /&gt;    default:&lt;br /&gt;      SWAP(card[i], card[j], t);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;把以上function重複跑100萬次&lt;br /&gt;用clock()計算中間用多少個clock cycle (不是很準 但將就一下...)&lt;br /&gt;使用gcc 4.2.3 compile&lt;br /&gt;使用的電腦是我老舊的P4 2.53G&lt;br /&gt;記憶體1G&lt;br /&gt;Ubuntu Hardy&lt;br /&gt;&lt;br /&gt;出來的結果有點出乎意料之外:&lt;br /&gt;&lt;iframe src="http://spreadsheets.google.com/pub?key=pcQdznjD5rJRSzaWFJo3sew&amp;amp;output=html&amp;amp;widget=true" scrolling="auto" width="340" frameborder="0" height="330"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;沒有optimization的情況下普通的swap樂勝&lt;br /&gt;加了optimization之後XOR跟ADD swap有追上一點點&lt;br /&gt;但是還是沒有普通的swap要好&lt;br /&gt;分析起來 可能造成這樣現象的原因有:&lt;ul&gt;&lt;li&gt;普通的swap基本上是三個assign operation, 而XOR/ADD swap除了三個xor/add operation以外 還多了判斷等於的operation&lt;/li&gt;&lt;li&gt;Compliler可能認得正常的swap因此可以用x86的XCHG指令&lt;/li&gt;&lt;li&gt;XOR/ADD swap指令間有相依性 可能比較難做pipeline&lt;/li&gt;&lt;/ul&gt;後來仔細看一下&lt;a href="http://en.wikipedia.org/wiki/XOR_swap_algorithm#Reasons_for_avoidance_in_practice"&gt;wiki&lt;/a&gt;&lt;br /&gt;發現其實wiki裡面早就說了modern desktop不適合用XOR swap....&lt;br /&gt;有種作白工的感覺... Orz&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-5668070233184411322?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/5668070233184411322/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=5668070233184411322' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/5668070233184411322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/5668070233184411322'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/05/xor-swap.html' title='XOR Swap'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-8503703446850715317</id><published>2008-05-07T00:58:00.000-07:00</published><updated>2008-05-07T01:30:44.963-07:00</updated><title type='text'>Carpool</title><content type='html'>最近公司來了新同事Dahn&lt;br /&gt;剛好我們住的地方很近&lt;br /&gt;就在同一條路上差幾個block而已&lt;br /&gt;於是乎嚐試跟他carpool去辦公室&lt;br /&gt;&lt;br /&gt;其實說起我carpool的經驗好像都沒有很好&lt;br /&gt;一次是剛來的時候&lt;br /&gt;那時候我還沒有買車&lt;br /&gt;都是別人開車&lt;br /&gt;說是carpool其實很勉強&lt;br /&gt;應該說是我搭別人便車然後分攤油錢比較貼切&lt;br /&gt;那時候真是好傻好天真&lt;br /&gt;沒想到這樣給別人造成的困擾有多少&lt;br /&gt;最後當然不歡而散 (好啦 不歡而散的原因也沒這麼單純啦...)&lt;br /&gt;真的對不起當時一起carpool的朋友&lt;br /&gt;後來各自發展 也沒機會真的好好跟他道歉...&lt;br /&gt;&lt;br /&gt;第二次跟人carpool&lt;br /&gt;也沒有怎麼輪流開到&lt;br /&gt;這次角色換過來&lt;br /&gt;我成了司機載別人在San Diego滿街跑&lt;br /&gt;說滿街跑一點都不誇張&lt;br /&gt;從接送上下班 搬家 到生病送去醫院掛急診&lt;br /&gt;全都是我開著我的小喜美載來載去&lt;br /&gt;我真可說是好人做到家了&lt;br /&gt;上下班時間都配合他的作息&lt;br /&gt;簡直是隨傳隨到的小弟&lt;br /&gt;當然他還是有跟我分油錢&lt;br /&gt;但這時我才瞭解這一丁點油錢是彌補不了carpool所失去的自由的&lt;br /&gt;也瞭解上次carpool給人添了多少麻煩&lt;br /&gt;&lt;br /&gt;有鑑於此&lt;br /&gt;這次carpool其實是有些擔心的&lt;br /&gt;要不是油價漲漲漲&lt;br /&gt;又是人家主動題的&lt;br /&gt;我想我也不會答應吧&lt;br /&gt;幸好到目前為止感覺都還不錯&lt;br /&gt;這次學乖了&lt;br /&gt;一定要輪流開&lt;br /&gt;在公平的起點上比較不容易那一方有怨言&lt;br /&gt;而且Dahn年紀比我大不少&lt;br /&gt;已經在業界打滾多年&lt;br /&gt;給我的感覺像是和藹的大叔&lt;br /&gt;但在公司我還算比他senior&lt;br /&gt;老闆本來還想找我當他的mentor&lt;br /&gt;可惜因我沒上過mentor的課程而作罷&lt;br /&gt;但上班的路上聊些辦公室的狀況&lt;br /&gt;這是不用上啥mentor課就可以做到的&lt;br /&gt;而且Dahn有很多生活經驗可以分享&lt;br /&gt;坐車聽他講故事&lt;br /&gt;也是挺有趣的&lt;br /&gt;&lt;br /&gt;目前還看不出這次carpool會維持多久&lt;br /&gt;試用期一個月之後再來評估吧 XD&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-8503703446850715317?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/8503703446850715317/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=8503703446850715317' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/8503703446850715317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/8503703446850715317'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/05/carpool.html' title='Carpool'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-7209209006279057401</id><published>2008-04-30T00:40:00.001-07:00</published><updated>2008-05-28T16:42:24.310-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Facebook爬爬爬</title><content type='html'>今天無聊回去看了一下當年寫的facebook crawler&lt;br /&gt;發現自己當年真的好傻好天真阿~&lt;br /&gt;直接post帳號, 密碼到login.facebook.com&lt;br /&gt;竟然就可以login拿到cookie&lt;br /&gt;之後在facebook上面就可橫行無阻!&lt;br /&gt;當年的facebook真的不是很secure.... Orz&lt;br /&gt;&lt;br /&gt;剛剛試著跑一下&lt;br /&gt;果然壞了&lt;br /&gt;畢竟都1年多沒更新了&lt;br /&gt;用Fiddler trace一下現在的login&lt;br /&gt;複雜了一點點&lt;br /&gt;但也不是太困難&lt;br /&gt;等哪天又有興趣了再把之前寫的東西update一下吧...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-7209209006279057401?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/7209209006279057401/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=7209209006279057401' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/7209209006279057401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/7209209006279057401'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/04/facebook.html' title='Facebook爬爬爬'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-1276012847276998870</id><published>2008-04-26T22:08:00.000-07:00</published><updated>2008-04-26T22:16:40.736-07:00</updated><title type='text'>晴天霹靂</title><content type='html'>措賽了....&lt;br /&gt;&lt;br /&gt;在學校的leave of absence這個quarter到期了&lt;br /&gt;結果我沒發現&lt;br /&gt;學校的復學通知寄到了舊家地址 沒有被轉過來&lt;br /&gt;現在情況很遭&lt;br /&gt;要繼續保持學籍要找到老師簽extend leave of absence的form&lt;br /&gt;但是老師現在人在國外  要五月初才會回來&lt;br /&gt;而且就算簽了附系主任也不一定會給過&lt;br /&gt;因為extend leave的deadline也過了.... 囧&lt;br /&gt;&lt;br /&gt;要是沒有extend的話&lt;br /&gt;就要apply for readmission&lt;br /&gt;那全部資料就要重新弄&lt;br /&gt;推薦信  成績單  SOP..... OMG&lt;br /&gt;還不保證一定回的去..... 囧囧&lt;br /&gt;原本美好的計畫完全被打亂了 Orz&lt;br /&gt;&lt;br /&gt;好消息是&lt;br /&gt;Vicky抽到H1了 :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-1276012847276998870?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/1276012847276998870/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=1276012847276998870' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/1276012847276998870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/1276012847276998870'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/04/blog-post_26.html' title='晴天霹靂'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-3175367641977465897</id><published>2008-04-24T01:09:00.001-07:00</published><updated>2008-05-28T16:42:01.705-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Some interview questions in Python</title><content type='html'>前幾天有學弟要去interview了&lt;br /&gt;來問我一些經點的interview問題&lt;br /&gt;我隨便講了reverse bit in integer那題&lt;br /&gt;結果赫然發現我好久沒寫這種東西了&lt;br /&gt;跟學弟講解的時候還真有點心虛&lt;br /&gt;&lt;br /&gt;今天閒來無事&lt;br /&gt;就想說複習一下好了&lt;br /&gt;之前習慣用C寫&lt;br /&gt;現在用Python來寫寫看&lt;br /&gt;沒想到跟C簡直一模一樣!&lt;br /&gt;&lt;br /&gt;code如下:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;def reverse_bits(i):&lt;br /&gt; """Reverse the bits in integer i&lt;br /&gt;&lt;br /&gt; Args:&lt;br /&gt;   i: int&lt;br /&gt;&lt;br /&gt; Returns:&lt;br /&gt;   An integer that is i with all it's bits reversed&lt;br /&gt; """&lt;br /&gt; dRet = 0&lt;br /&gt; while (i):&lt;br /&gt;   dRet = (dRet &amp;lt;&amp;lt; 1) | (i &amp;amp; 1)&lt;br /&gt;   i = i &amp;gt;&amp;gt; 1&lt;br /&gt; return dRet&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;寫完才發現註解好像比code還多....&lt;br /&gt;其實照理說應該要用個sizeof(i)之類的來決定要做幾次&lt;br /&gt;這樣0x01 reverse才會變0x80000000&lt;br /&gt;不過Python要做sizeof好像不是很trivial的事&lt;br /&gt;太low level的operation都被interpreter隱藏起來了&lt;br /&gt;真的要用的話好像要用ctypes包sizeof近來才能用&lt;br /&gt;十分麻煩&lt;br /&gt;&lt;br /&gt;當然如果事先就知道python default的int size是4個byte&lt;br /&gt;也是可以讓他跑固定的32次...&lt;br /&gt;&lt;br /&gt;另外一題經典題reverse words in a sentence&lt;br /&gt;在Python裡面就變太簡單了&lt;br /&gt;少了在C裡面那種處理pointer緊張的感覺&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;def reverse_words_in_sentence(s):&lt;br /&gt;  &amp;quot;&amp;quot;&amp;quot;Reverse the words in a sentence&lt;br /&gt;  &lt;br /&gt;  Args:&lt;br /&gt;    s: String&lt;br /&gt;  &lt;br /&gt;  Returns:&lt;br /&gt;    A strings which is a sentence with all the words of s reversed. &lt;br /&gt;    &amp;quot;This is a cat&amp;quot; -&amp;gt; &amp;quot;cat a is This&amp;quot;&lt;br /&gt;  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;  s_list = s.split(&amp;quot; &amp;quot;)&lt;br /&gt;  s_list.reverse()&lt;br /&gt;  szRet = &amp;quot;&amp;quot;&lt;br /&gt;  for a in s_list:&lt;br /&gt;    szRet = szRet + a + &amp;quot; &amp;quot;&lt;br /&gt;  return szRet.strip()&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-3175367641977465897?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/3175367641977465897/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=3175367641977465897' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/3175367641977465897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/3175367641977465897'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/04/interview-interview-reverse-bit-in.html' title='Some interview questions in Python'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-16573951822550714</id><published>2008-04-20T01:28:00.001-07:00</published><updated>2008-04-20T23:57:07.984-07:00</updated><title type='text'>劉兆玄 我的學思歷程</title><content type='html'>剛看完我媽轉給我的文章&lt;br /&gt;很有意思&lt;br /&gt;原文在此: &lt;a href="http://docs.google.com/Doc?id=dfn9xwkn_40dgxjsff7"&gt;link&lt;/a&gt;&lt;br /&gt;很長  但是值得一看&lt;br /&gt;&lt;br /&gt;2003年的文章&lt;br /&gt;想必是劉最近要當行政院院長了&lt;br /&gt;所以才又引來一些目光吧&lt;br /&gt;&lt;br /&gt;文中劉提到許多他以學者從政的有趣事情&lt;br /&gt;劉使用學者特有的分析能力&lt;br /&gt;勇於用創新的方法&lt;br /&gt;挑戰舊有無解  難解的問題&lt;br /&gt;看完之後對於學術界創新的重要又多一層認識&lt;br /&gt;也發現這方法其實可以使用在許多地方&lt;br /&gt;期望看到他未來繼續用學者的創意建設台灣&lt;br /&gt;&lt;br /&gt;文章裡引用李家同的一句話: 「你有很快樂的少年的話，一定有很悲慘的中年。」&lt;br /&gt;撇開李家同這人的爭議性&lt;br /&gt;這句話還蠻值得拿來警惕自己的&lt;br /&gt;中國人說: 「少壯不努力，老大徒傷悲」&lt;br /&gt;李家同不過是paraphrase這句話罷了&lt;br /&gt;但老外似乎不怎麼有類似的成語&lt;br /&gt;Y!字典的翻譯: If one does not exert oneself in youth, one will regret it in old age.&lt;br /&gt;像極了fortune cookie裡面才會看到的句子&lt;br /&gt;或許這是中國人特有的美德吧&lt;br /&gt;也造就了許多年輕賣肝的工程師 (笑)&lt;br /&gt;希望我最近一兩年的快樂&lt;br /&gt;不會造成太過悲慘的中年...&lt;br /&gt;照理說入境隨俗, when in Rome do as the Romans do&lt;br /&gt;這是中外皆通的道理&lt;br /&gt;因此人在國外  享受一下少年的尾巴&lt;br /&gt;應該是不會太罪過吧... :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-16573951822550714?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/16573951822550714/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=16573951822550714' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/16573951822550714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/16573951822550714'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/04/blog-post_5108.html' title='劉兆玄 我的學思歷程'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-2723343688909411335</id><published>2008-04-17T01:06:00.000-07:00</published><updated>2008-05-28T16:40:30.546-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Travel'/><title type='text'>Priceline賤招</title><content type='html'>昨天晚上在Slickdeal上面看到一個priceline的賤招&lt;br /&gt;原文如下: &lt;a href="http://forums.slickdeals.net/showthread.php?sduid=0&amp;amp;t=253736"&gt;http://forums.slickdeals.net/showthread.php?sduid=0&amp;amp;t=253736&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;大意是說&lt;br /&gt;在一開始競標的時候就先輸入假的資料跟一個無效的信用卡帳號&lt;br /&gt;卡號可以用:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;BOA/Citi的virtual credit card number, 在裡面只放$1...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;已經期的credit/debit card&lt;/li&gt;&lt;li&gt;已經關掉的account&lt;/li&gt;&lt;li&gt;只剩不到$5的Visa/Mastercard gift card&lt;/li&gt;&lt;/ul&gt;如此一來就算你不小心標到旅館了&lt;br /&gt;交易也會因為餘額不足而失敗&lt;br /&gt;這樣再搭配換區不換星的招數&lt;br /&gt;跟betterbidding.com, biddingfortravel.com一類的論壇&lt;br /&gt;根本就可以找出priceline的底價了!&lt;br /&gt;等到確定底價之後再用真實的資料下標&lt;br /&gt;真是太奸詐了!!!&lt;br /&gt;&lt;br /&gt;下次要去SF玩的時候使用看看&lt;br /&gt;剛好有張Sprint給的gift card被用到只剩幾塊錢了&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/3988026139893898245-2723343688909411335?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/2723343688909411335/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=2723343688909411335' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/2723343688909411335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/2723343688909411335'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/04/priceline.html' title='Priceline賤招'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-7763901747890928832</id><published>2008-04-14T23:29:00.000-07:00</published><updated>2008-04-14T23:47:34.523-07:00</updated><title type='text'>新電腦</title><content type='html'>有鑑於我的老舊Dell Dimension 4550最近跑Gutsy一直thrashing&lt;br /&gt;馬上Hardy又要出了&lt;br /&gt;恐怕他老人家經受不起&lt;br /&gt;於是今天終於下定決心敗了台新Dell&lt;br /&gt;&lt;br /&gt;在Slickdeal上面看到一個不錯的deal&lt;br /&gt;Dell Vostro 200只要$379&lt;br /&gt;詳細配備如下:&lt;br /&gt;Intel® Pentium® Dual-Core E2160 (1.80GHz, 1MB L2 Cache, 800FSB)&lt;br /&gt;Genuine Windows® XP Home Edition&lt;br /&gt;No Pre-installed Productivity Software&lt;br /&gt;Dell 19 inch Widescreen E198WFP Analog Flat Panel Monitor&lt;br /&gt;1GB Dual Channel DDR2 SDRAM 667MHz - 2DIMMs&lt;br /&gt;Single Drive: 16X DVD+/-RW Drive&lt;br /&gt;160GB Serial ATA Hard Drive (7200RPM) w/DataBurst Cache™&lt;br /&gt;Intel® Graphics Media Accelerator 3100&lt;br /&gt;No Floppy Drive&lt;br /&gt;No Modem Option&lt;br /&gt;Integrated 7.1 Channel Audio&lt;br /&gt;My Accessories&lt;br /&gt;No speakers (Speakers are required to hear audio from your system)&lt;br /&gt;Dell USB Keyboard&lt;br /&gt;Dell Scroll Mouse&lt;br /&gt;My Software&lt;br /&gt;No Pre-installed Anti-Virus/Security Software&lt;br /&gt;Free Microsoft Office Live Small Business&lt;br /&gt;Adobe Acrobat Reader&lt;br /&gt;My Services &amp;amp; Warranties&lt;br /&gt;1 Year Basic Limited Warranty and 1 Year NBD On-Site Service&lt;br /&gt;No Online Data Back Up Installed&lt;br /&gt;No Dell Automated PC Tune Up Installed&lt;br /&gt;Dell Network Assistant&lt;br /&gt;Purchase is not intended for resale.&lt;br /&gt;Also Included&lt;br /&gt;Windows XP™&lt;br /&gt;No ISP requested&lt;br /&gt;Integrated 10/100 Ethernet&lt;br /&gt;&lt;br /&gt;重點是包了一台19吋螢幕&lt;br /&gt;價錢跟正常沒家螢幕的沒差多少&lt;br /&gt;其實已經有台22吋跟17吋螢幕了&lt;br /&gt;這台螢幕就拿去craigslist或recycler上面拍賣吧&lt;br /&gt;craigslist上面價錢大概$170&lt;br /&gt;這樣算來一台不錯的主機只要$200出頭 還挺划算的 cc&lt;br /&gt;&lt;br /&gt;想想要幫他取啥名字吧&lt;br /&gt;以前那台的hostname是civic&lt;br /&gt;這台少說也要G35或IS250的level :p&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-7763901747890928832?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/7763901747890928832/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=7763901747890928832' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/7763901747890928832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/7763901747890928832'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/04/blog-post_14.html' title='新電腦'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-5956037431941581927</id><published>2008-04-08T01:00:00.000-07:00</published><updated>2008-04-08T01:18:04.853-07:00</updated><title type='text'>[轉錄] 起薪資訊</title><content type='html'>經常有人問我&lt;br /&gt;記得很久以前在oversea_jobs版看到duer大有po過一個整理&lt;br /&gt;我覺得範圍蠻合理的&lt;br /&gt;原文如下:  &lt;a href="http://www.ptt.cc/bbs/Oversea_Job/M.1196228267.A.8E9.html"&gt;link&lt;/a&gt;&lt;br /&gt;--&lt;br /&gt;作者: duer () 看板: Oversea_Job&lt;br /&gt;標題: Re: [北美] 請問美國的軟體工程師薪資到底有多高阿&lt;br /&gt;時間: Wed Nov 28 13:37:46 2007&lt;br /&gt;&lt;br /&gt;Roughly, this is what companies offer new grads:&lt;br /&gt;Amazon, WA - 85k + 25k bonus + 2000 stocks&lt;br /&gt;Microsoft, WA - 80k + 5k bonus + 1000 stocks&lt;br /&gt;Google, CA - 85k + 5k bonus + 130 stocks&lt;br /&gt;Bloomberg, NY - 85k + 2.5k bonus&lt;br /&gt;&lt;br /&gt;With experience:&lt;br /&gt;Amazon, WA - 85k + 25k bonus + 2000 stocks&lt;br /&gt;Microsoft, WA - 85k + 5k bonus + 1500 stocks&lt;br /&gt;Google, CA - 90k + 5k bonus + 150 stocks&lt;br /&gt;Bloomberg, NY - 95k + 2.5k bonus&lt;br /&gt;&lt;br /&gt;從google搜尋到的 不負責任&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;另, pest網友回應的www.mydanwei.com&lt;br /&gt;上面資料更詳細&lt;br /&gt;比對一下自己公司的薪資看來也差不多&lt;br /&gt;原文如下: &lt;a href="http://www.ptt.cc/bbs/Oversea_Job/M.1196231213.A.77F.html"&gt;link&lt;/a&gt;&lt;br /&gt;--&lt;br /&gt;作者: pest (這些分鐘妳有沒有想過我?) 看板: Oversea_Job&lt;br /&gt;標題: Re: [北美] 請問美國的軟體工程師薪資到底有多高阿&lt;br /&gt;時間: Wed Nov 28 14:26:51 2007&lt;br /&gt;&lt;br /&gt;※ 引述《duer ()》之銘言：&lt;br /&gt;: 從google搜尋到的 不負責任&lt;br /&gt;&lt;br /&gt;最近在找工作參考的薪資網站:&lt;br /&gt;&lt;br /&gt;http://www.mydanwei.com&lt;br /&gt;&lt;br /&gt;選 salary 欄位，然後用 @ 分隔 job title 和公司，例如，&lt;br /&gt;engineer@bloomberg&lt;br /&gt;&lt;br /&gt;例如前面提到的 bloomberg，在下面的連結:&lt;br /&gt;http://www.mydanwei.com/query.php?query=engineer%40bloomberg&amp;amp;type=salary&lt;br /&gt;&lt;br /&gt;我和朋友討論的結果，這個網站的資料應該來自 H-1B 的調查資料，&lt;br /&gt;所以可信度還蠻高的；實際給的 offer 大概也都在網站上的範圍，除了新公司&lt;br /&gt;資料稍微不準之外(比列出來的高...)&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-5956037431941581927?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/5956037431941581927/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=5956037431941581927' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/5956037431941581927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/5956037431941581927'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/04/blog-post.html' title='[轉錄] 起薪資訊'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-5242945113685995742</id><published>2008-04-06T00:29:00.000-07:00</published><updated>2008-05-28T16:40:30.547-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Travel'/><title type='text'>Solvang and Santa Barbara</title><content type='html'>今天跟[v]同遊丹麥村Solvang&lt;br /&gt;回程順便在Santa Barbara吃晚餐&lt;br /&gt;Solvang真是有夠遙遠的!&lt;br /&gt;開了兩個小時才到&lt;br /&gt;整個丹麥村很小&lt;br /&gt;可是很多有特色的建築&lt;br /&gt;也有些特色丹麥美食&lt;br /&gt;去吃了一家當地人推薦的Solvang Restaurant&lt;br /&gt;有個點心叫Aebleskiver好像挺有名的&lt;br /&gt;吃起來真的很不錯&lt;br /&gt;有點像球狀的鬆餅&lt;br /&gt;裹上果醬跟糖粉&lt;br /&gt;很甜很甜&lt;br /&gt;但是會讓你一直想吃 :p&lt;br /&gt;本來我們主餐叫很多 以為甜點應該吃不完了&lt;br /&gt;但是吃下第一口之後就停不下來了 Orz&lt;br /&gt;&lt;br /&gt;Solvang很小&lt;br /&gt;有很多有特色的店跟房子&lt;br /&gt;但很快就逛完了&lt;br /&gt;後來回程路上經過Santa Barbara&lt;br /&gt;就停下來吃晚餐&lt;br /&gt;順便逛逛&lt;br /&gt;只有在Pier附近走走&lt;br /&gt;但是也蠻好玩的&lt;br /&gt;只是有點太冷了&lt;br /&gt;&lt;br /&gt;此行最大的收穫:&lt;br /&gt;照了許多相片 XD&lt;br /&gt;請看!&lt;br /&gt;&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" flashvars="host=picasaweb.google.com&amp;amp;RGB=0x000000&amp;amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2FNCLiang%2Falbumid%2F5186021443579177601%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer" height="300" width="400"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-5242945113685995742?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/5242945113685995742/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=5242945113685995742' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/5242945113685995742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/5242945113685995742'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/04/solvang-and-santa-barbara.html' title='Solvang and Santa Barbara'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-4331253614415829058</id><published>2008-03-31T22:41:00.000-07:00</published><updated>2008-03-31T22:44:50.055-07:00</updated><title type='text'>二十有六了</title><content type='html'>手機沒電了就一直忘記充電 所以好像有很多人打電話來祝壽的都沒接到&lt;br /&gt;真是對不起大家...&lt;br /&gt;不過我有跟Vicky自己去吃大餐慶祝一下&lt;br /&gt;他買了一個Galileo thermometer給我&lt;br /&gt;很好玩喔!&lt;br /&gt;長這樣: &lt;a href="http://en.wikipedia.org/wiki/Galileo_thermometer" target="_blank"&gt;http://en.wikipedia.org/wiki&lt;wbr&gt;/Galileo_thermometer&lt;/a&gt;&lt;br /&gt;他的原理是利用液體熱脹冷縮改變密度&lt;br /&gt;使裡面的小球下沉或浮起來&lt;br /&gt;要看溫度是幾度就看浮起來的球裡面最底下那個是標幾度的就可以了&lt;br /&gt;不過不是很精準&lt;br /&gt;每個刻度的間距都是四度華氏&lt;br /&gt;放在房間裡的話大概都是維持在72或76度&lt;br /&gt;可能要到冬天才會下降一些吧&lt;br /&gt;&lt;br /&gt;好快! 都26歲了!&lt;br /&gt;現在看星光大道上唱歌的都才17 18歲&lt;br /&gt;覺得都像小孩子 我都快比他們大十歲了!&lt;br /&gt;但總覺得不久前才跟他們差不多大而已&lt;br /&gt;高中畢業 大學畢業 研究所畢業&lt;br /&gt;在忙碌中一切都過的太迅速了&lt;br /&gt;再過幾年就要結婚 生小孩 買房子 養小孩...&lt;br /&gt;好像有點恐怖...&lt;br /&gt;或許我們東方人真的比較不懂的品味生活吧&lt;br /&gt;每天過的忙忙碌碌&lt;br /&gt;尤其上班之後 好像總有忙不完的公事&lt;br /&gt;老闆交代的任務總覺得應該要完成&lt;br /&gt;就算犧牲週末加班也無所謂&lt;br /&gt;就這樣日子也過去了&lt;br /&gt;但留下的回憶好像也不怎麼多&lt;br /&gt;對生活的體驗好像也沒多麼深刻&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/3988026139893898245-4331253614415829058?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/4331253614415829058/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=4331253614415829058' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/4331253614415829058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/4331253614415829058'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/03/blog-post_31.html' title='二十有六了'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-7308137687255637485</id><published>2008-03-25T22:52:00.000-07:00</published><updated>2008-05-28T16:42:01.705-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Python</title><content type='html'>Python真是好物阿!&lt;br /&gt;功能整個很強大&lt;br /&gt;最近在用他做一個automation framework&lt;br /&gt;感覺比之前用的Eggplant好用多了!&lt;br /&gt;&lt;br /&gt;使用pywin32跟ctypes&lt;br /&gt;基本上windows的API全都可以call&lt;br /&gt;SendMessage call來call去真好玩 cc&lt;br /&gt;&lt;br /&gt;不過今天遇到一個問題是使用SendMessage傳WM_MOUSEDOWN進主程式模擬滑鼠點擊&lt;br /&gt;message傳進去之後會跳出一個confirmation dialogbox&lt;br /&gt;這個dialog box要verify並且點上面的button相當有點技巧&lt;br /&gt;因為SendMessage是synchronous的&lt;br /&gt;他會block住caller&lt;br /&gt;我又不是很想用SendNotifyMessage, PostMessage這類的asynchronous call&lt;br /&gt;最後只好讓SendMessage自己在一個thread裡面&lt;br /&gt;不要block到main thread&lt;br /&gt;這樣才能讓主程式繼續跑&lt;br /&gt;傳BM_CLICK給dialog box裡面的button把他點掉&lt;br /&gt;&lt;br /&gt;PIL功能也很強大&lt;br /&gt;為了要作verification, 必須要作些subimage matching來確認某些UI有顯示出來&lt;br /&gt;使用PIL只需要取difference就能比較兩個image是否一樣&lt;br /&gt;作subimage matching只要不停的作crop之後compare就好了&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;import ImageChops&lt;br /&gt;&lt;br /&gt;def equal(im1, im2):&lt;br /&gt;   return ImageChops.difference(im1, im2).getbbox() is None&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;以為這樣會很慢&lt;br /&gt;但實際上比我想像中快很多 :p&lt;br /&gt;&lt;br /&gt;現在主要的framework都出來了&lt;br /&gt;Q2大概是要看能automate多少test吧...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-7308137687255637485?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/7308137687255637485/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=7308137687255637485' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/7308137687255637485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/7308137687255637485'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/03/python.html' title='Python'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-5905053623603761825</id><published>2008-03-25T21:05:00.000-07:00</published><updated>2008-04-15T02:15:46.410-07:00</updated><title type='text'>投資台灣</title><content type='html'>買買買&lt;br /&gt;&lt;br /&gt;看上選舉慶祝行情&lt;br /&gt;買了一隻台股ETF (EWT)&lt;br /&gt;這隻很特別&lt;br /&gt;是美元計價的ETF&lt;br /&gt;所以台幣一直漲 美金一直跌&lt;br /&gt;他還是會漲 XD&lt;br /&gt;&lt;br /&gt;可惜慶祝行情只有一天...&lt;br /&gt;第二天就住套房了 XD&lt;br /&gt;&lt;br /&gt;總計買了110股  每股$16.98&lt;br /&gt;&lt;table id="tview_t" border="0" cellpadding="0" cellspacing="0"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td class="tcol_symbol" sort="alpha"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tcol_name" sort="alpha"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tcol_ttype" sort="num_with_null"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tcol_tdate" sort="num_with_null"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tcol_quantity" sort="num_with_null"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tcol_price" sort="num_with_null"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tcol_commission" sort="num_with_null"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tcol_notes" sort="alpha"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr class="highlightGrey" uid="EWT:702300:1000" id="tview_1"&gt;&lt;td class="tcol_symbol" pcol_val="EWT"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tcol_name" pcol_val="iShares MSCI Taiwan Index (ETF)"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tcol_ttype" pcol_val="1"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tcol_tdate" pcol_val="20080324"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tcol_quantity" pcol_val="11000"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tcol_price" pcol_val="1698"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tcol_commission" pcol_val="7000000"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tcol_notes"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-5905053623603761825?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/5905053623603761825/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=5905053623603761825' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/5905053623603761825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/5905053623603761825'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/03/blog-post.html' title='投資台灣'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3988026139893898245.post-8763793083820392062</id><published>2008-03-25T01:58:00.001-07:00</published><updated>2008-05-28T16:40:30.547-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Travel'/><title type='text'>第一po 西雅圖行行行</title><content type='html'>新Blog第一po&lt;br /&gt;其實也不曉得要寫啥&lt;br /&gt;拿他來紀錄一些生活的點滴好了&lt;br /&gt;&lt;br /&gt;最近跟Vicky在規劃Memorial Day long weekend出遊的行程&lt;br /&gt;預計要去西雅圖三天兩夜行&lt;br /&gt;機票 旅館 租車 加起來每人$280&lt;br /&gt;我覺得還好 沒有很貴&lt;br /&gt;priceline.com真是好物 自從我爸媽發現我會在上面訂便宜的旅館之後&lt;br /&gt;就把我當旅行社用了 還是不用付錢的旅行社 XD&lt;br /&gt;&lt;br /&gt;預計行程如下:&lt;br /&gt;5/24&lt;br /&gt;中午飛機 下午到西雅圖 拿車&lt;br /&gt;下午可以去EMP跟SFM 票是綁一起的 開到七點&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;改成先去pike place market 隔天再去EMP了 XD&lt;/span&gt;&lt;br /&gt;晚上去space needle看夜景&lt;br /&gt;&lt;br /&gt;5/25&lt;br /&gt;早上去pike place market看丟魚, 星盒子的發源店跟waterfront&lt;br /&gt;下午去波音或航空博物館參觀&lt;br /&gt;晚上 華大&lt;br /&gt;&lt;br /&gt;5/26&lt;br /&gt;飛機中午就飛了&lt;br /&gt;沒辦法排甚麼行程的樣子&lt;br /&gt;直接還車就要回去了 @@&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3988026139893898245-8763793083820392062?l=blog.nigelliang.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nigelliang.com/feeds/8763793083820392062/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3988026139893898245&amp;postID=8763793083820392062' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/8763793083820392062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3988026139893898245/posts/default/8763793083820392062'/><link rel='alternate' type='text/html' href='http://blog.nigelliang.com/2008/03/po.html' title='第一po 西雅圖行行行'/><author><name>Nigel.Liang</name><uri>http://www.blogger.com/profile/01426260995038336116</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://4.bp.blogspot.com/-D67z0t6Qx38/TgLNPawWm3I/AAAAAAAAUUw/EjfW96rX11E/s220/mo_crop.jpg'/></author><thr:total>0</thr:total></entry></feed>
