<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><!-- generator="wordpress/2.3.3" --><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Bryan Tsai</title>
	<link>http://www.bryantsai.com</link>
	<description>I need to think ...</description>
	<pubDate>Fri, 21 Nov 2008 13:00:49 +0800</pubDate>
	<lastBuildDate>Fri, 27 Jul 2007 13:41:57 +0800</lastBuildDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<ttl>60</ttl>

			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/bryantsai" type="application/rss+xml" /><feedburner:emailServiceId>122148</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item>
		<title>Password Nightmare</title>
		<link>http://feeds.feedburner.com/~r/bryantsai/~3/90169662/password-nightmare.html</link>
		<comments>http://www.bryantsai.com/archives/password-nightmare.html#comments</comments>
		<pubDate>Tue, 13 Feb 2007 17:10:14 +0800</pubDate>
		<dc:creator>bryan</dc:creator>
		
		<category><![CDATA[security]]></category>

		<category><![CDATA[utility]]></category>

		<guid isPermaLink="false">http://www.bryantsai.com/archives/password-nightmare.html</guid>
			<content:encoded><![CDATA[<p>Almost every useful/interesting web site requires a password (<a href="http://digg.com">Digg</a>, <a href="http://del.icio.us">del.icio.us</a>, you name it). If you want to play with them, you&#8217;ll need to register. To register, you&#8217;ll need a password. It&#8217;s just the way it is on the net these days.</p>

<p>However, it&#8217;s a nightmare considering the number of my daily visited web sites.</p>

<p>Well, I don&#8217;t know how you handle it, personally I have my own mental system for this. Obviously I shouldn&#8217;t use the same password for every web site. I don&#8217;t trust anyone, not even Google (do you?). Therefore, I use a few primary words plus some special characters to generate a unique password for each site. For example, for web site <i>foobar.com</i> I might choose a primary word <i>foobarcom</i> mixed with <i>6&amp;8</i> to generate a unique password <i>foo6bar&amp;com8</i><sup class="footnote" id="47-rn1"><a href="#47-fn1">1</a></sup>.</p>

<p>That&#8217;s for generating passwords, the easy one. The hard one is to actually remember them. Currently I rely on Firefox<sup class="footnote" id="47-rn2"><a href="#47-fn2">2</a></sup>. But there&#8217;s one problem: it&#8217;s hard/troublesome to keep sync between multiple computers. Also, if I can&#8217;t use my own computer, I&#8217;m in trouble.</p>

<p>A more thorough refection on this issue could be found here: <a href="http://alexking.org/blog/2007/02/05/more-on-passwords">More on Passwords</a>. And there&#8217;s a new way of handling it: <a href="http://crypto.stanford.edu/PwdHash/">Web Password Hashing</a>.</p>

<p>Basically <a href="https://addons.mozilla.org/firefox/1033/">PwdHash</a> lets you generate a unique password for each site based on a primary word you choose. Yes, it&#8217;s a little like my system described above but without requiring you to remember the special characters (and how to mix them with the primary word). So now all you need to remember is a few primary words (and on which web sites they are used).</p>

<p>PwdHash is a Firefox extension and is very easy to use. Whenever you need to enter a password (for a specific web site), just press F2 (or a special prefix &#8220;@@&#8221;) before you type your chosen primary word. PwdHash would generate a unique password for this site (only) based on the primary word you type<sup class="footnote" id="47-rn3"><a href="#47-fn3">3</a></sup>.</p>

<p>Please bear in mind that I don&#8217;t really think it&#8217;s a good idea to use the exact same method for treating your critical passwords. Be very serious about your critical, secret passwords.</p>

<blockquote><p>Keep your secrets in you mind only, or it is not secret anymore.</p></blockquote>

<p class="footnote" id="47-fn1"><sup>1</sup> Well, this might work for non-critical web sites. But for other critical, life-supporting sites (like <a href="http://etrade.com/">E*Trade</a>, <a href="http://netbank.com/">NetBank</a>), using the same system to generate passwords is simply unacceptable. It is wise to keep them completely separate from those used for non-critical web sites. If you&#8217;ve never been worried about it, you should start to worry. <a href="#47-rn1">&uarr;</a></p>

<p class="footnote" id="47-fn2"><sup>2</sup> Again, that&#8217;s for normal non-critical web sites. For critical passwords, I use <a href="http://www.tranglos.com/free/oubliette.html">Oubliette</a>. These days, web sites start to require you to change your passwords every few months. I really can&#8217;t remember them without some kind of help. <a href="#47-rn2">&uarr;</a></p>

<p class="footnote" id="47-fn3"><sup>3</sup> If you don&#8217;t know what hashing means. Hashing is a process for generating unique word from a given input. It will always generates exactly the same word if the same input is given. And by unique we mean hashing will generate a completely different word if a different input is given (even just a single character change). <a href="#47-rn3">&uarr;</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/bryantsai?a=jVlyprel"><img src="http://feeds.feedburner.com/~f/bryantsai?i=jVlyprel" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=XmFCoTv3"><img src="http://feeds.feedburner.com/~f/bryantsai?i=XmFCoTv3" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=qAOIXK5v"><img src="http://feeds.feedburner.com/~f/bryantsai?i=qAOIXK5v" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=Dh0I9P6e"><img src="http://feeds.feedburner.com/~f/bryantsai?i=Dh0I9P6e" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=QlfCys2J"><img src="http://feeds.feedburner.com/~f/bryantsai?i=QlfCys2J" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bryantsai/~4/90169662"/>]]></content:encoded>
			<wfw:commentRss>http://www.bryantsai.com/archives/password-nightmare.html/feed</wfw:commentRss>
		<feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=bryantsai&amp;itemurl=http%3A%2F%2Fwww.bryantsai.com%2Farchives%2Fpassword-nightmare.html</feedburner:awareness><feedburner:origLink>http://www.bryantsai.com/archives/password-nightmare.html</feedburner:origLink></item>
		<item>
		<title>Harry Potter and the Deathly Hallows</title>
		<link>http://feeds.feedburner.com/~r/bryantsai/~3/85698778/harry-potter-and-the-deathly-hallows.html</link>
		<comments>http://www.bryantsai.com/archives/harry-potter-and-the-deathly-hallows.html#comments</comments>
		<pubDate>Sat, 03 Feb 2007 10:07:59 +0800</pubDate>
		<dc:creator>bryan</dc:creator>
		
		<category><![CDATA[book]]></category>

		<guid isPermaLink="false">http://www.bryantsai.com/archives/harry-potter-and-the-deathly-hallows.html</guid>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/dp/0545029376?tag=bryantsaicom-20"><img src="http://www.bryantsai.com/wp/wp-content/uploads/2007/02/harry_potter_7.png" title="Harry Potter and the Deathly Hallows" alt="Harry Potter and the Deathly Hallows" height="240" width="165" /></a></p>

<p>The sequels are getting longer and longer and finally there comes the finale. I really can&#8217;t wait longer ... I definitely will get one on the very first days when it gets to the market.</p>

<p>Oh! This time remember not to read any news from July 21th until you finish reading it. Last year it was too late when I realized I knew the ending before I even got the book. I just can&#8217;t get why people would like to know who gets killed and what the ending is on the very first day the book is published (from newspaper!!). Sham on you whoever wrote that on paper!</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/bryantsai?a=Yo4S1W7u"><img src="http://feeds.feedburner.com/~f/bryantsai?i=Yo4S1W7u" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=o3JIOQIm"><img src="http://feeds.feedburner.com/~f/bryantsai?i=o3JIOQIm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=TVm2Zc5Y"><img src="http://feeds.feedburner.com/~f/bryantsai?i=TVm2Zc5Y" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=f7yhkOUe"><img src="http://feeds.feedburner.com/~f/bryantsai?i=f7yhkOUe" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=80kSJSdI"><img src="http://feeds.feedburner.com/~f/bryantsai?i=80kSJSdI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bryantsai/~4/85698778"/>]]></content:encoded>
			<wfw:commentRss>http://www.bryantsai.com/archives/harry-potter-and-the-deathly-hallows.html/feed</wfw:commentRss>
		<feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=bryantsai&amp;itemurl=http%3A%2F%2Fwww.bryantsai.com%2Farchives%2Fharry-potter-and-the-deathly-hallows.html</feedburner:awareness><feedburner:origLink>http://www.bryantsai.com/archives/harry-potter-and-the-deathly-hallows.html</feedburner:origLink></item>
		<item>
		<title>My Hosting Service</title>
		<link>http://feeds.feedburner.com/~r/bryantsai/~3/80800647/my-hosting-service.html</link>
		<comments>http://www.bryantsai.com/archives/my-hosting-service.html#comments</comments>
		<pubDate>Wed, 24 Jan 2007 21:18:43 +0800</pubDate>
		<dc:creator>bryan</dc:creator>
		
		<category><![CDATA[hosting]]></category>

		<guid isPermaLink="false">http://www.bryantsai.com/archives/my-hosting-service.html</guid>
			<content:encoded><![CDATA[<p>Besides the recent relaunch of this site with a new theme, you might not notice that I&#8217;ve made  a transition of the hosting service. It took me almost a full month to complete the transition ...</p>

<p>Well, that&#8217;s a long story but let me start on my hosting service first.</p>

<p>I&#8217;ve been a faithful customer of <a href="http://www.icdsoft.com/?aff=bryantsai.smallicon"><span class="caps">ICDS</span>oft</a> for quite a long time (more than 4 years). Don&#8217;t misunderstand me, I did not say they provide lousy service. Quite contrary to that, they have the best customer service I&#8217;ve ever seen. Though they don&#8217;t provide telephone support along with my cheap hosting plan, they do have an almost real-time on-line customer service. During the last 4 years, I&#8217;ve opened 20 support tickets to them and each of them was responded/resolved within 5 minutes. These tickets were opened both at day and night. I have to say they really take customer support very seriously (considering my hosting plan only cost $4 a month).</p>

<p>So what&#8217;s good about <span class="caps">ICDS</span>oft?</p>


<ul>
<li>Cheap!</li>
<li>Damn superb <a href="http://suresupport.com/">customer service</a> !!</li>
<li>Support all major scripting languages (php, perl, python, ruby ...). This is a must for developers like me.</li>
<li>Generous. My hosting plan initially has only 333MB but now it has grown to 1GB (for free!). They occasionally upgrade all plans for free.</li>
<li>You get to choose the physical location of your server (only two options, HongKong or <span class="caps">U.S.</span>). This might be beneficial if your audience are mostly in Asia.</li>
<li>See the <a href="http://www2.icdsoft.com/hosting.php?aff=bryantsai.smallicon">plans</a> for yourself</li>
</ul>



<p>Seriously, why did I switch? Just got bored?</p>

<p>Well, sort of :) I was somewhat disappointed at the following facts:</p>


<ul>
<li>No FastCGI support. This is probably the main reason as I really couldn&#8217;t stand for the slowness of my Rails application.</li>
<li>No shell access (unless you pay more). So I didn&#8217;t have the leisure to install whatever I wanted but not provided by them (for example, subversion repository).</li>
</ul>



<p>That led me to <a href="http://www.dreamhost.com/r.cgi?254521">DreamHost</a>. What&#8217;s good about DreamHost?</p>


<ul>
<li>FastCGI support.</li>
<li>Shell access, either telnet or ssh. Now I can have my own subversion repositories. I even installed <a href="http://svk.elixus.org/">svk</a> :)</li>
<li>Incredibly large disk storage (200GB!! Better yet, it grows every week!). This made my remote secondary backup plan feasible.</li>
<li>Cheap. I really doubt if there&#8217;s any better price tag on the net with the same set of service ...</li>
<li>See the <a href="http://www.dreamhost.com/r.cgi?254521/shared/comparison.html">plans</a> by yourself.</li>
</ul>



<p>Unfortunately, there&#8217;s no perfect world. On one hand, I really miss the customer support of <span class="caps">ICDS</span>oft (yes, I&#8217;m implying DreamHost only has so-so customer support compared to <span class="caps">ICDS</span>oft). On the other hand, DreamHost&#8217;s plan gives me what I want for so long. However, DreamHost&#8217;s server downtime seems to be a little bit more frequent (at least so far). Also, the FastCGI support is not yet solid enough (except for Rails) at the moment.</p>

<p>Oh well, I probably would stick with DreamHost for now. I really can&#8217;t afford of having another transition back to <span class="caps">ICDS</span>oft (unless I got bored again someday :p).</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/bryantsai?a=hffjMKxM"><img src="http://feeds.feedburner.com/~f/bryantsai?i=hffjMKxM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=wJs51QAG"><img src="http://feeds.feedburner.com/~f/bryantsai?i=wJs51QAG" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=28x42d4Q"><img src="http://feeds.feedburner.com/~f/bryantsai?i=28x42d4Q" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=8yVfP1KX"><img src="http://feeds.feedburner.com/~f/bryantsai?i=8yVfP1KX" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=o2LOBdc3"><img src="http://feeds.feedburner.com/~f/bryantsai?i=o2LOBdc3" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bryantsai/~4/80800647"/>]]></content:encoded>
			<wfw:commentRss>http://www.bryantsai.com/archives/my-hosting-service.html/feed</wfw:commentRss>
		<feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=bryantsai&amp;itemurl=http%3A%2F%2Fwww.bryantsai.com%2Farchives%2Fmy-hosting-service.html</feedburner:awareness><feedburner:origLink>http://www.bryantsai.com/archives/my-hosting-service.html</feedburner:origLink></item>
		<item>
		<title>Open Office?</title>
		<link>http://feeds.feedburner.com/~r/bryantsai/~3/77611096/open-office.html</link>
		<comments>http://www.bryantsai.com/archives/open-office.html#comments</comments>
		<pubDate>Sat, 09 Sep 2006 10:22:29 +0800</pubDate>
		<dc:creator>bryan</dc:creator>
		
		<category><![CDATA[management]]></category>

		<guid isPermaLink="false">http://www.bryantsai.com/?p=37</guid>
			<content:encoded><![CDATA[<blockquote><p>Yeah, we all work in cubicles, but everyone works in a cubicle up to and including the <span class="caps">CEO</span>!</p>

<p>The <span class="caps">CEO</span>? Does the <span class="caps">CEO </span>really work in a cubicle?</p>

<p>Well, he has a cubicle, but actually now that you mention it there&#8217;s this one conference room that he goes to for all his important meetings.</p></blockquote>

<p>I cound&#8217;t describe <a href="http://www.joelonsoftware.com/articles/FieldGuidetoDevelopers.html">it</a> better.</p>

<p>I&#8217;m not complaining, but with those bosses? Please, please stop talking about how great or how generous they are (because of) having the same small, crappy, noisy cubicles as we developers have. You just always ended finding that bosses always stay in the conference room or in the hallway (and probably the ultimate source of all the noise).</p>

<p>And if you dare to ask them about it, they probably would say it&#8217;s policy. Which is always some kind of bureaucracy anyway.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/bryantsai?a=vFOlngj5"><img src="http://feeds.feedburner.com/~f/bryantsai?i=vFOlngj5" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=FyMXU4Mu"><img src="http://feeds.feedburner.com/~f/bryantsai?i=FyMXU4Mu" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=kGu1WoE4"><img src="http://feeds.feedburner.com/~f/bryantsai?i=kGu1WoE4" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=DsRLLSCp"><img src="http://feeds.feedburner.com/~f/bryantsai?i=DsRLLSCp" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=8PGZWWKL"><img src="http://feeds.feedburner.com/~f/bryantsai?i=8PGZWWKL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bryantsai/~4/77611096"/>]]></content:encoded>
			<wfw:commentRss>http://www.bryantsai.com/archives/open-office.html/feed</wfw:commentRss>
		<feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=bryantsai&amp;itemurl=http%3A%2F%2Fwww.bryantsai.com%2Farchives%2Fopen-office.html</feedburner:awareness><feedburner:origLink>http://www.bryantsai.com/archives/open-office.html</feedburner:origLink></item>
		<item>
		<title>Advanced SQL - Selecting Rows with Max Value from Groups</title>
		<link>http://feeds.feedburner.com/~r/bryantsai/~3/77611097/advanced-sql-selecting-rows-with-max-value-from-groups.html</link>
		<comments>http://www.bryantsai.com/archives/advanced-sql-selecting-rows-with-max-value-from-groups.html#comments</comments>
		<pubDate>Wed, 30 Aug 2006 17:00:00 +0800</pubDate>
		<dc:creator>bryan</dc:creator>
		
		<category><![CDATA[programming]]></category>

		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.bryantsai.com/?p=36</guid>
			<content:encoded><![CDATA[<p><span class="caps">SQL </span>is never hard but definitely tedious. You know what I mean.</p>

<p>Occasionally I tend to create a relatively complicated query instead of fetching the data back and do the processing in my code. Sometimes for the performance, and sometimes just because I like challenges.</p>

<p>I know, I never am a <span class="caps">SQL </span>expert. But anyway, it might help.</p>

<p>Say we have a table like the following:</p>

<table><tr><th>Department</th><th>Employee</th><th>Salary</th></tr><tr><td align="center">A</td><td align="right">John</td><td align="right">1000</td></tr><tr><td align="center">A</td><td align="right">Michael</td><td align="right">1200</td></tr><tr><td align="center">A</td><td align="right">Bob</td><td align="right">880</td></tr><tr><td align="center">B</td><td align="right">Ted</td><td align="right">2000</td></tr><tr><td align="center">B</td><td align="right">Jane</td><td align="right">2000</td></tr><tr><td align="center">C</td><td align="right">Ally</td><td align="right">2000</td></tr><tr><td align="center">C</td><td align="right">Kent</td><td align="right">4000</td></tr></table>

<p>And we want to get a query of all employees having the highest pay from each department. What <span class="caps">SQL </span>query should we have?</p>

<p>Well, first we need to find what the highest pay of each department is:</p>

<pre><code language="sql">SELECT 
  DEP.DEPARTMENT, MAX(DEP.SALARY) 
FROM 
  DEPARTMENT DEP 
GROUP BY 
  DEP.DEPARTMENT </code></pre>

<p>This will give you a list of department with its highest pay. But we do want to fetch the complete row so that we could know who that employee is. So how do we proceed from here?</p>

<p>We need sub query and <span class="caps">EXISTS </span>predicate:</p>

<pre><code language="sql">SELECT * 
FROM 
  DEPARTMENT 
WHERE 
  EXISTS (
    SELECT 
      DEP.DEPARTMENT 
    FROM 
      DEPARTMENT DEP 
    GROUP BY 
      DEP.DEPARTMENT 
    HAVING 
      DEPARTMENT.DEPARTMENT= DEP.DEPARTMENT AND 
      DEPARTMENT.SALARY = MAX(DEP.SALARY)
  )</code></pre>

<p>The result looks like this:</p>

<table><tr><th>Department</th><th>Employee</th><th>Salary</th></tr><tr><td align="center">A</td><td align="right">Michael</td><td align="right">1200</td></tr><tr><td align="center">B</td><td align="right">Ted</td><td align="right">2000</td></tr><tr><td align="center">B</td><td align="right">Jane</td><td align="right">2000</td></tr><tr><td align="center">C</td><td align="right">Kent</td><td align="right">4000</td></tr></table>

<p>The speed of this query doesn&#8217;t seem very bad. In fact, it performs far better than I originally thought since it involves sub query.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/bryantsai?a=zY9PPTrW"><img src="http://feeds.feedburner.com/~f/bryantsai?i=zY9PPTrW" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=yLrC6YGT"><img src="http://feeds.feedburner.com/~f/bryantsai?i=yLrC6YGT" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=jT1HJl3n"><img src="http://feeds.feedburner.com/~f/bryantsai?i=jT1HJl3n" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=HLhh3wAa"><img src="http://feeds.feedburner.com/~f/bryantsai?i=HLhh3wAa" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=gPYa7Hme"><img src="http://feeds.feedburner.com/~f/bryantsai?i=gPYa7Hme" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bryantsai/~4/77611097"/>]]></content:encoded>
			<wfw:commentRss>http://www.bryantsai.com/archives/advanced-sql-selecting-rows-with-max-value-from-groups.html/feed</wfw:commentRss>
		<feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=bryantsai&amp;itemurl=http%3A%2F%2Fwww.bryantsai.com%2Farchives%2Fadvanced-sql-selecting-rows-with-max-value-from-groups.html</feedburner:awareness><feedburner:origLink>http://www.bryantsai.com/archives/advanced-sql-selecting-rows-with-max-value-from-groups.html</feedburner:origLink></item>
		<item>
		<title>PMP</title>
		<link>http://feeds.feedburner.com/~r/bryantsai/~3/77611098/pmp.html</link>
		<comments>http://www.bryantsai.com/archives/pmp.html#comments</comments>
		<pubDate>Mon, 19 Jun 2006 13:42:14 +0800</pubDate>
		<dc:creator>bryan</dc:creator>
		
		<category><![CDATA[book]]></category>

		<category><![CDATA[project_management]]></category>

		<guid isPermaLink="false">http://www.bryantsai.com/?p=34</guid>
			<content:encoded><![CDATA[<p>Have you heard of <a href="http://www.pmi.org/info/PDC_CertificationsOverview.asp"><span class="caps">PMP</span></a>? Probably you have, I guess.</p>

<p>My feeling about <span class="caps">PMP </span>(or any other certificate) has always been somewhat in line with <a href="http://www.scottberkun.com/blog/?p=260">Scott Berkun: License to manage?</a>. Certificates are nice to have, but not requirements.</p>

<p>Most certificates today have specialized learning guide for you to quickly grasp everything you need to get those certificates. I do admit the acquiring a certificate itself does add some value in learning a topic. It gives you a goal and some study area (most of the time with a truly excellent study guide). I do tend to acquire certificates as bonus for learning a new topic (if I don&#8217;t need to pay for them). It might not be useful, but certainly not harmful.</p>

<p>Well, <span class="caps">PMP </span>is by far the most painful one I&#8217;ve ever tried (and probably the most valuable one). Naturally there&#8217;s an excellent study guide for it:</p>

<p><a href="http://www.amazon.com/exec/obidos/ASIN/1932735003/bryantsaicom-20"><img src="http://images.amazon.com/images/P/1932735003.01._SCMZZZZZZZ_.jpg" title="" alt="" height="160" width="125" /></a></p>

<p><a href="http://www.amazon.com/exec/obidos/ASIN/1932735003/bryantsaicom-20"><span class="caps">PMP</span> Exam Prep, Fifth Edition: Rita&#8217;s Course in a Book for Passing the <span class="caps">PMP</span> Exam</a><br />by Rita Mulcahy</p>

<p>I would say the book itself (along with its simulation software) should be enough for you to pass the exam. I have read it thoroughly for 3 times and have done 4 simulations (all with scores much higher than the passing criteria).</p>

<p><span class="caps">BTW,</span> I did take several project management courses during the last few years. So my experience might not be a perfect match for you.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/bryantsai?a=NMwrtH29"><img src="http://feeds.feedburner.com/~f/bryantsai?i=NMwrtH29" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=PZzYEPh5"><img src="http://feeds.feedburner.com/~f/bryantsai?i=PZzYEPh5" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=WGjsjycR"><img src="http://feeds.feedburner.com/~f/bryantsai?i=WGjsjycR" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=GfZtMyht"><img src="http://feeds.feedburner.com/~f/bryantsai?i=GfZtMyht" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=SPBNR4sb"><img src="http://feeds.feedburner.com/~f/bryantsai?i=SPBNR4sb" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bryantsai/~4/77611098"/>]]></content:encoded>
			<wfw:commentRss>http://www.bryantsai.com/archives/pmp.html/feed</wfw:commentRss>
		<feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=bryantsai&amp;itemurl=http%3A%2F%2Fwww.bryantsai.com%2Farchives%2Fpmp.html</feedburner:awareness><feedburner:origLink>http://www.bryantsai.com/archives/pmp.html</feedburner:origLink></item>
		<item>
		<title>Stock Quote Feed</title>
		<link>http://feeds.feedburner.com/~r/bryantsai/~3/77611099/stock-quote-feed.html</link>
		<comments>http://www.bryantsai.com/archives/stock-quote-feed.html#comments</comments>
		<pubDate>Tue, 09 May 2006 15:00:00 +0800</pubDate>
		<dc:creator>bryan</dc:creator>
		
		<category><![CDATA[utility]]></category>

		<guid isPermaLink="false">http://www.bryantsai.com/?p=33</guid>
			<content:encoded><![CDATA[<p><span class="caps">OK,</span> I admit I cannot live without <a href="http://bloglines.com">Bloglines</a>.</p>

<p>I read news, technical publications, and friend blogs everyday on my Bloglines page. Almost everything has feed these days and it&#8217;s just damn convenient to be able to have-it-all in a single place.</p>

<p>Well, almost ...</p>

<p>One of the strangest thing keeps knocking my head is that there&#8217;s no stock quote feed (or at least I&#8217;m not aware of). There are a lot of web site for you to check the current stock quote, but none of them provide a feed. All I want is a simple feed of stock quote so I can read it on Bloglines once a day (or maybe once a week). I don&#8217;t want to maintain a portfolio on a financial portal site and have to manually log in everyday just to learn the current stock quote.</p>

<p>Luckily, someone has a solution: <a href="http://blog.tc.dk/item/8">Yahoo stock to <span class="caps">RSS </span>converter</a>. It&#8217;s a <span class="caps">PHP </span>script which parses Yahoo&#8217;s stock quote data to generate a feed. Simply put it on a <span class="caps">PHP </span>supported server and you get a personal stock quote feed for your own needs (there are quite a few parameters which let you tune the generated <span class="caps">RSS </span>content).</p>

<p>Since I&#8217;m using it with Bloglines, I have modified it a little bit to fit Bloglines&#8217; interface. The original version makes Bloglines treat each quote update as a new entry. That ends up generating lots of entries for each stock (Yahoo&#8217;s stock quote updates every half an hour) and annoys me since I only care about the most current quote. Here&#8217;s the modified version (download and rename it): <a href="http://www.bryantsai.com/wp/wp-content/uploads/2007/01/stockrss.txt">stockrss</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/bryantsai?a=Xux3PtTo"><img src="http://feeds.feedburner.com/~f/bryantsai?i=Xux3PtTo" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=Xi6F0iIu"><img src="http://feeds.feedburner.com/~f/bryantsai?i=Xi6F0iIu" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=X4elbPss"><img src="http://feeds.feedburner.com/~f/bryantsai?i=X4elbPss" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=RQApzSAT"><img src="http://feeds.feedburner.com/~f/bryantsai?i=RQApzSAT" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=5o1ou4Gp"><img src="http://feeds.feedburner.com/~f/bryantsai?i=5o1ou4Gp" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bryantsai/~4/77611099"/>]]></content:encoded>
			<wfw:commentRss>http://www.bryantsai.com/archives/stock-quote-feed.html/feed</wfw:commentRss>
		<feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=bryantsai&amp;itemurl=http%3A%2F%2Fwww.bryantsai.com%2Farchives%2Fstock-quote-feed.html</feedburner:awareness><feedburner:origLink>http://www.bryantsai.com/archives/stock-quote-feed.html</feedburner:origLink></item>
		<item>
		<title>Lotus Notes Parser for MoinMoin and Trac</title>
		<link>http://feeds.feedburner.com/~r/bryantsai/~3/77611100/lotus-notes-parser-for-moinmoin-and-trac.html</link>
		<comments>http://www.bryantsai.com/archives/lotus-notes-parser-for-moinmoin-and-trac.html#comments</comments>
		<pubDate>Tue, 04 Apr 2006 14:57:02 +0800</pubDate>
		<dc:creator>bryan</dc:creator>
		
		<category><![CDATA[utility]]></category>

		<guid isPermaLink="false">http://www.bryantsai.com/?p=32</guid>
			<content:encoded><![CDATA[<p>I have been using <a href="http://moinmoin.wikiwikiweb.de/">MoinMoin</a> and <a href="http://www.edgewall.com/trac/">trac</a> in my project for a long time. They are really great tools for development work. It&#8217;s imply damn cool to merge bug tracking with wiki (and vice versa).</p>

<p>However, it&#8217;s another story when you want to use wiki for project management purpose. One thing that keeps annoying me was that we use Lotus Notes in our company. My work as a project manager has to copy and paste those business emails  into wiki. Since nobody would write their emails in wiki format, and in order to make email looks reasonably ok, I have to manually edit each email before I put it into wiki. What a nightmare!</p>

<p>That&#8217;s not respectable work anyway.</p>

<p>To make my life (and the team&#8217;s) easier, I hacked out a parser for just that purpose. The parser recognize the content you copied from Lotus Notes and will format it in an easier-to-read style (by making email headers stand out). Now I just need to copy-and-paste (but no edit anymore!).</p>

<p><a href="http://moinmoin.wikiwikiweb.de/ParserMarket#LotusNotesParser">Lotus Notes Parser for MoinMoin</a></p>

<p><a href="http://trac-hacks.org/wiki/LotusNotesParserMacro">Lotus Notes Parser for trac</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/bryantsai?a=bv7LEvy6"><img src="http://feeds.feedburner.com/~f/bryantsai?i=bv7LEvy6" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=xeSXxj6i"><img src="http://feeds.feedburner.com/~f/bryantsai?i=xeSXxj6i" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=kQQ0XPuD"><img src="http://feeds.feedburner.com/~f/bryantsai?i=kQQ0XPuD" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=z7WHKN5t"><img src="http://feeds.feedburner.com/~f/bryantsai?i=z7WHKN5t" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=9cAo34qM"><img src="http://feeds.feedburner.com/~f/bryantsai?i=9cAo34qM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bryantsai/~4/77611100"/>]]></content:encoded>
			<wfw:commentRss>http://www.bryantsai.com/archives/lotus-notes-parser-for-moinmoin-and-trac.html/feed</wfw:commentRss>
		<feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=bryantsai&amp;itemurl=http%3A%2F%2Fwww.bryantsai.com%2Farchives%2Flotus-notes-parser-for-moinmoin-and-trac.html</feedburner:awareness><feedburner:origLink>http://www.bryantsai.com/archives/lotus-notes-parser-for-moinmoin-and-trac.html</feedburner:origLink></item>
		<item>
		<title>Cruisecontrol 2.3 Released</title>
		<link>http://feeds.feedburner.com/~r/bryantsai/~3/77611101/cruisecontrol-23-released.html</link>
		<comments>http://www.bryantsai.com/archives/cruisecontrol-23-released.html#comments</comments>
		<pubDate>Tue, 30 Aug 2005 17:25:00 +0800</pubDate>
		<dc:creator>bryan</dc:creator>
		
		<guid isPermaLink="false">http://www.bryantsai.com/?p=31</guid>
			<content:encoded><![CDATA[<p><a title="ReleaseNotes_2.3" href="http://confluence.public.thoughtworks.org/display/CC/ReleaseNotes_2.3">ReleaseNotes</a></p>

<p>The most notable new thing (to me) in this version is that now we don&#8217;t need to install a separate application server for the reporting application. CruiseControl can now embed a <a href="http://jetty.mortbay.org/jetty/index.html">Jetty</a> server so it is even easier to set it up.</p>

<p>Oh, the bug of detecting Subversion modification set introduced in version 2.2.1 is also fixed (mentioned in <a href="http://blog.bryantsai.com/archives/2005/03/000021.html">Self-Controlled CruiseControl</a>). It was strange that I couldn&#8217;t Google any information related this bug (was it only me?). Anyway, the problem is gone in this new version.</p>

<p>I also complained about the inability of adding/removing projects without restarting build loop before. Guess what? It is now possible to achieve <a href="http://blog.bryantsai.com/archives/2005/03/000021.html">Self-Controlled CruiseControl</a>.</p>

<p>Another major new feature is that we can now define Ant style properties in the configuration file. It should be a lot easier to structure the configuration file (also a lot simpler).</p>

<p>The new release includes many fixes and several new plugins. For example, a new <span class="caps">RSS </span>publisher is added (as well as <span class="caps">RSS </span>support in reporting pages). There is also a preliminary support for distributed building. Check out the release note for yourself and get it now!</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/bryantsai?a=cLGzqvjo"><img src="http://feeds.feedburner.com/~f/bryantsai?i=cLGzqvjo" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=e1XDXhKC"><img src="http://feeds.feedburner.com/~f/bryantsai?i=e1XDXhKC" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=6MGEzvEa"><img src="http://feeds.feedburner.com/~f/bryantsai?i=6MGEzvEa" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=M0doq9PJ"><img src="http://feeds.feedburner.com/~f/bryantsai?i=M0doq9PJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=eC4DZ4Qv"><img src="http://feeds.feedburner.com/~f/bryantsai?i=eC4DZ4Qv" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bryantsai/~4/77611101"/>]]></content:encoded>
			<wfw:commentRss>http://www.bryantsai.com/archives/cruisecontrol-23-released.html/feed</wfw:commentRss>
		<feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=bryantsai&amp;itemurl=http%3A%2F%2Fwww.bryantsai.com%2Farchives%2Fcruisecontrol-23-released.html</feedburner:awareness><feedburner:origLink>http://www.bryantsai.com/archives/cruisecontrol-23-released.html</feedburner:origLink></item>
		<item>
		<title>Hiring the Best Does Matter</title>
		<link>http://feeds.feedburner.com/~r/bryantsai/~3/77611102/hiring-the-best-does-matter.html</link>
		<comments>http://www.bryantsai.com/archives/hiring-the-best-does-matter.html#comments</comments>
		<pubDate>Tue, 02 Aug 2005 10:40:01 +0800</pubDate>
		<dc:creator>bryan</dc:creator>
		
		<category><![CDATA[management]]></category>

		<guid isPermaLink="false">http://www.bryantsai.com/?p=29</guid>
			<content:encoded><![CDATA[<p>Recently I&#8217;ve been involved in many interviews in order to assemble a project team. It was really hard to find a match. Most of the time, I simply had to compromise since the demands were large. The supply simply is not enough.</p>

<p>It is my belief that only the best can produce quality software. However, that&#8217;s not what most people believe. Most managers seem to think all developers (or testers or project managers or whomever) are equivalent (or replaceable if you interpret it).</p>

<p>I feel sad about it as a developer.</p>

<p>The fundamental problem with this is that people (who produce software) don&#8217;t differentiate software with quality and software without quality. That&#8217;s simply not what they care about.</p>

<p>I still feel sad.</p>

<p>Joel Spolsky says: </p>

<blockquote><p>The quality of the work and the amount of time spent are simply uncorrelated.</p></blockquote>

<p>One of my professor once said: </p>

<blockquote><p>As a computer scientist, it is our responsibility to build high quality software. Only in that way can we change the industry eventually.</p></blockquote>

<p>I still believe that.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/bryantsai?a=U43ZnpAC"><img src="http://feeds.feedburner.com/~f/bryantsai?i=U43ZnpAC" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=uN8MsteQ"><img src="http://feeds.feedburner.com/~f/bryantsai?i=uN8MsteQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=uEr2cr6Y"><img src="http://feeds.feedburner.com/~f/bryantsai?i=uEr2cr6Y" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=RvIJ3f5R"><img src="http://feeds.feedburner.com/~f/bryantsai?i=RvIJ3f5R" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/bryantsai?a=5KWzQ4fY"><img src="http://feeds.feedburner.com/~f/bryantsai?i=5KWzQ4fY" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bryantsai/~4/77611102"/>]]></content:encoded>
			<wfw:commentRss>http://www.bryantsai.com/archives/hiring-the-best-does-matter.html/feed</wfw:commentRss>
		<feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=bryantsai&amp;itemurl=http%3A%2F%2Fwww.bryantsai.com%2Farchives%2Fhiring-the-best-does-matter.html</feedburner:awareness><feedburner:origLink>http://www.bryantsai.com/archives/hiring-the-best-does-matter.html</feedburner:origLink></item>
	<feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetFeedData?uri=bryantsai</feedburner:awareness></channel>
</rss><!-- Dynamic Page Served (once) in 4.520 seconds --><!-- Cached page served by WP-Cache -->
