<?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-15139899</id><updated>2012-02-05T14:56:54.049+08:00</updated><category term='network'/><category term='blablabla'/><category term='google'/><category term='programming'/><title type='text'>Blablabla</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-15139899.post-2725022049935675974</id><published>2008-04-15T12:53:00.001+08:00</published><updated>2008-04-15T23:13:46.778+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Remove repeated lines</title><content type='html'>Unix command: &lt;br /&gt;$ uniq input.txt &gt; result.txt&lt;br /&gt;or&lt;br /&gt;(sorted output)&lt;br /&gt;$ sort -u input.txt &gt; result.txt&lt;br /&gt;&lt;br /&gt;Perl:&lt;br /&gt;&lt;blockquote&gt;open (FH,$ARGV[0]) or die ("No input file\n");&lt;br /&gt;read (FH,$file,-s $ARGV[0]);&lt;br /&gt;$file =~ s/^(.*[\n\r]+)\1+/$1/mg;&lt;br /&gt;print $file;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;blockquote&gt;cat a.txt | perl -ne 'print unless($s{$_}++)'&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-2725022049935675974?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/2725022049935675974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=2725022049935675974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/2725022049935675974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/2725022049935675974'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2008/04/remove-repeated-lines.html' title='Remove repeated lines'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-701129271875775067</id><published>2008-03-31T09:53:00.000+08:00</published><updated>2008-03-31T09:59:58.893+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Two useful VC2005 add-on</title><content type='html'>From &lt;a href="http://zero-one-zero.com/vs/"&gt;Visual Studio stuff&lt;/a&gt;.&lt;br /&gt;VSFileFinder2005 can add a file listing box and a filter text field for you to find files in solution quickly and then know where the file is located (in which project and in which directory)&lt;br /&gt;&lt;br /&gt;VSTabs is also a good utility but it only works for VC2003. I do not find related free add-on for VC2005.  &lt;br /&gt;&lt;br /&gt;BTW, &lt;a href="http://www.wholetomato.com/"&gt;Visual Assist X - an add-in for Visual Studio by Whole Tomato Software&lt;/a&gt; is the best add-on I have ever used. But it is not for free.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-701129271875775067?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/701129271875775067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=701129271875775067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/701129271875775067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/701129271875775067'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2008/03/two-useful-vc2005-add-on.html' title='Two useful VC2005 add-on'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-9164871144711651228</id><published>2007-10-29T22:47:00.000+08:00</published><updated>2007-10-29T22:49:48.869+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Googe Doc small bug</title><content type='html'>&lt;a href="http://www.flickr.com/photos/tapentan/1798450143/" title="Photo Sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2244/1798450143_70489e097a.jpg" width="500" height="325" alt="google_doc_bug.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;1. Login to Google Doc and open a spreadsheet with multiple sheets&lt;br /&gt;2. Open another window to other google page using the same browser&lt;br /&gt;3. Click "Logout" in the other google page&lt;br /&gt;4. Go back to the spreadsheet page and select another sheet&lt;br /&gt;Result: the spreadsheet shows the google login page BUT the left upper corner shows "Loading" and twinkling&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-9164871144711651228?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/9164871144711651228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=9164871144711651228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/9164871144711651228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/9164871144711651228'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2007/10/googe-doc-small-bug.html' title='Googe Doc small bug'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2244/1798450143_70489e097a_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-1454322095766552907</id><published>2007-10-22T19:37:00.000+08:00</published><updated>2007-10-22T19:46:58.941+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blablabla'/><title type='text'>iGoogle Bug?</title><content type='html'>A simple way to make your iGoogle page blocked&lt;br /&gt;&lt;br /&gt;1. Login to iGoogle, and select any gadget's option menu: Share this gadget.&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/tapentan/1683513080/" title="Photo Sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2151/1683513080_3561c59795.jpg" width="500" height="310" alt="a.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. Before the next page loading completely, press "Cancel" quickly.&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/tapentan/1682657939/" title="Photo Sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2033/1682657939_2dafee15e4.jpg" width="500" height="299" alt="b.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3.Now, the darken screen remains on screen and nothing you can do. (OK. you still can reload this page)&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/tapentan/1682658913/" title="Photo Sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2205/1682658913_324e1df384.jpg" width="500" height="477" alt="c.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. If you do not do this under a max screen size window, you can resize the screen, and a interesting screen shows up. you can still click anything outside the darken screen.&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/tapentan/1682659949/" title="Photo Sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2193/1682659949_eedbbff400.jpg" width="500" height="269" alt="d.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;m...... This bug happens just because we do not let Google to load the page done. But Google still can prevent this happens. :p&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-1454322095766552907?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/1454322095766552907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=1454322095766552907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/1454322095766552907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/1454322095766552907'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2007/10/igoogle-bug.html' title='iGoogle Bug?'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2151/1683513080_3561c59795_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-19092027568021139</id><published>2007-09-18T00:31:00.000+08:00</published><updated>2007-09-18T00:42:52.820+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='network'/><title type='text'>high-performance networking</title><content type='html'>Usually used in Cluster/Super Computer&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.quadrics.com/quadrics/QuadricsHome.nsf/DisplayPages/Homepage"&gt;Quadrics&lt;/a&gt; - &lt;a href="http://www.quadrics.com/Quadrics/QuadricsHome.nsf/DisplayPages/3A912204F260613680256DD9005122C7"&gt;QsNet&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.myri.com/"&gt;Myricom&lt;/a&gt; - &lt;a href="http://www.myri.com/myrinet/overview/"&gt;Myrinet&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/InfiniBand"&gt;InfiniBand&lt;/a&gt; (from ServerNet、FIO、NGIO)&lt;br /&gt;&lt;br /&gt;Cray - RapidArray(for XD1 Supercomputer)&lt;br /&gt;&lt;br /&gt;Fibre Channel/PCI Express/Serial ATA&lt;br /&gt;&lt;br /&gt;Ref: (Trad. Chinese) http://tech.digitimes.com.tw/ShowNews.aspx?zCatId=134&amp;zNotesDocId=79821739FC1238FF482570A000490A38&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-19092027568021139?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/19092027568021139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=19092027568021139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/19092027568021139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/19092027568021139'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2007/09/high-performance-networking.html' title='high-performance networking'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-5305395790620711205</id><published>2007-06-07T22:43:00.000+08:00</published><updated>2007-06-07T22:59:44.111+08:00</updated><title type='text'>User Postgresql SERIAL field type in Hibernate</title><content type='html'>If you meet the following exception when trying to use SERIAL type with Hibernate.&lt;br /&gt; &lt;br /&gt;&lt;blockquote&gt;ERROR JDBCExceptionReporter:78 - ERROR: relation "hibernate_sequence" does not exist&lt;br /&gt;Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not get next sequence value&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Tey to use the following generator setting:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&amp;lt;id name=&amp;quot;id&amp;quot; column=&amp;quot;id&amp;quot; type=&amp;quot;java.lang.Integer&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;generator class=&amp;quot;sequence&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;param name=&amp;quot;sequence&amp;quot;&amp;gt;account_id_seq&amp;lt;param&amp;gt;&lt;br /&gt;  &amp;lt;/generator&amp;gt;&lt;br /&gt;&amp;lt;/id&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Ref: &lt;a href="http://forum.hibernate.org/viewtopic.php?t=968817&amp;highlight=postgresql+serial"&gt;http://forum.hibernate.org/viewtopic.php?t=968817&amp;highlight=postgresql+serial&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-5305395790620711205?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/5305395790620711205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=5305395790620711205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/5305395790620711205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/5305395790620711205'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2007/06/user-postgresql-serial-field-type-in.html' title='User Postgresql SERIAL field type in Hibernate'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-116091961768150915</id><published>2006-10-15T20:55:00.000+08:00</published><updated>2006-10-15T21:40:18.153+08:00</updated><title type='text'>jUploadr 1.1.1 win32 installer</title><content type='html'>jUploadr is written by Java, you need to install JDK(or JRE) before using it.&lt;br /&gt;But the win32 version of jUploadr use a batch file to start jUploadr, the batch file require REG.exe (which is included in WinXP by default no in Win2000). &lt;br /&gt;&lt;br /&gt;You can get reg.exe from the following links:&lt;br /&gt;&lt;a href="http://www.petri.co.il/download_free_reskit_tools.htm"&gt;http://www.petri.co.il/download_free_reskit_tools.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In my environment (Win2000), there is still some problem in the batch file to start jUploadr. Thus, I have packaged the jUplaodr using InstallAnywhere. The installer will help you to install jUploadr and help you execute jUploadr more easily. (no more DOS command window)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://athena.cs.ccu.edu.tw/~yhn91/files/jUploadr_1.1.1_setup.exe"&gt;jUploadr_1.1.1_setup.exe (Without JVM)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(You still need to install JDK first)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-116091961768150915?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/116091961768150915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=116091961768150915' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/116091961768150915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/116091961768150915'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2006/10/juploadr-111-win32-installer.html' title='jUploadr 1.1.1 win32 installer'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-115650833889268236</id><published>2006-08-25T20:17:00.000+08:00</published><updated>2006-08-25T20:19:02.110+08:00</updated><title type='text'>Design by Contract (DBC) Tool for Java</title><content type='html'>iContract2 (from iContract)&lt;br /&gt;&lt;a href="http://icontract2.org/"&gt;http://icontract2.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;JMSAssert&lt;br /&gt;&lt;a href="http://www.mmsindia.com/JMSAssert.html"&gt;http://www.mmsindia.com/JMSAssert.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;jContractor&lt;br /&gt;&lt;a href="http://jcontractor.sourceforge.net/"&gt;http://jcontractor.sourceforge.net/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-115650833889268236?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/115650833889268236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=115650833889268236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/115650833889268236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/115650833889268236'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2006/08/design-by-contract-dbc-tool-for-java.html' title='Design by Contract (DBC) Tool for Java'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-114454361323744675</id><published>2006-04-09T08:46:00.000+08:00</published><updated>2006-04-09T08:48:17.996+08:00</updated><title type='text'>Source Code Beautifier for C/C++</title><content type='html'>Resources&lt;br /&gt;-------------------------&lt;br /&gt;http://www.chedong.com/tech/indent_tools.html&lt;br /&gt;http://directory.google.com/Top/Computers/Programming/Languages/Java/Development_Tools/Code_Beautifiers/&lt;br /&gt;http://www.google.com/Top/Computers/Programming/Development_Tools/Source_Code_Formatters/?il=1&lt;br /&gt;&lt;br /&gt;Free&lt;br /&gt;-------------------------&lt;br /&gt;GNU Indent&lt;br /&gt;http://directory.fsf.org/GNU/indent.html&lt;br /&gt;http://mysite.wanadoo-members.co.uk/indent/beautify.html&lt;br /&gt;&lt;br /&gt;Uncrustify&lt;br /&gt;http://uncrustify.sourceforge.net/&lt;br /&gt;&lt;br /&gt;Artistic Style&lt;br /&gt;http://sourceforge.net/projects/astyle/&lt;br /&gt;&lt;br /&gt;GC GreatCode&lt;br /&gt;http://sourceforge.net/projects/gcgreatcode&lt;br /&gt;&lt;br /&gt;Code Chameleon&lt;br /&gt;http://www.c-point.com/code_chameleon.php&lt;br /&gt;http://swblog.popsoftlib.com/2006/01/23/code-chameleon/&lt;br /&gt;&lt;br /&gt;Commertial&lt;br /&gt;-------------------------&lt;br /&gt;StyleManager&lt;br /&gt;http://www.profactor.co.uk/products.php?gclid=CLjgyKXEnoQCFQISGAod0kjpfg&lt;br /&gt;&lt;br /&gt;SourceStyler C++&lt;br /&gt;http://www.cine.idv.tw/Downloads/source-styler-1.4.1/&lt;br /&gt;http://www.ochresoftware.com/sourcestyler-overview.html&lt;br /&gt;&lt;br /&gt;SQCBW&lt;br /&gt;http://www.sqcbw.com/source-code-beautifier-formatter-indenter-tool-utility-en/&lt;br /&gt;&lt;br /&gt;Polystyle&lt;br /&gt;http://www.polystyle.com/index.jsp&lt;br /&gt;&lt;br /&gt;Crystal C/C++&lt;br /&gt;http://www.sgvsarc.com/&lt;br /&gt;&lt;br /&gt;SourceFormatX &lt;br /&gt;http://www.textrush.com/formatx.htm&lt;br /&gt;&lt;br /&gt;Source code formatter&lt;br /&gt;http://www.semdesigns.com/Products/Formatters/index.html&lt;br /&gt;&lt;br /&gt;Online Service&lt;br /&gt;-------------------------&lt;br /&gt;Pretty Printer for PHP, Java, C++, C, Perl, JavaScript, CSS &lt;br /&gt;http://www.prettyprinter.de/index.php&lt;br /&gt;&lt;br /&gt;Reference - Coding Standards&lt;br /&gt;------------------------&lt;br /&gt;GNU coding standards&lt;br /&gt;http://www.gnu.org/prep/standards/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-114454361323744675?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/114454361323744675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=114454361323744675' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/114454361323744675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/114454361323744675'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2006/04/source-code-beautifier-for-cc.html' title='Source Code Beautifier for C/C++'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-114036775174672442</id><published>2006-02-20T00:48:00.000+08:00</published><updated>2006-08-22T12:57:54.096+08:00</updated><title type='text'>[Links] Collection Managers</title><content type='html'>[Online Service] &lt;br /&gt;Listal - A web based DVD, music, game and book collection manager&lt;br /&gt;&lt;a href="http://www.listal.com/"&gt;http://www.listal.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;LibraryThing&lt;br /&gt;&lt;a href="http://www.librarything.com/index.php"&gt;http://www.librarything.com/index.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My search experience:&lt;br /&gt;I just forgot the Listal web site at first when my friend send me the link of &lt;a href="http://www.delicious-monster.com/"&gt;Delicious Library&lt;/a&gt;, a collection manager software for Mac. And then I try to find out where I had seen Listal before, I lookup the blogs that I had read recently but I got nothing. &lt;br /&gt;Then I try to search it in Google using keywords like "books, dvd, collection manager",  but I do not see Listal at first. But I see the LibraryThing, it's a similar service. So I just search LibraryThing in Google Directory Search, I found it is belong to the category "Reference &gt; Libraries &gt; Library and Information Science &gt; Software &gt; Collection Managers", and Listal is just one of them, too.&lt;br /&gt;&lt;br /&gt;[Software]&lt;br /&gt;Delicious Library(Mac)&lt;br /&gt;&lt;a href="http://www.delicious-monster.com/"&gt;http://www.delicious-monster.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;BookCAT (PC)&lt;br /&gt;&lt;a href="http://www.fnprg.com/bookcat/index.html"&gt;http://www.fnprg.com/bookcat/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Readerware (Mac/PC)&lt;br /&gt;&lt;a href="http://www.readerware.com/"&gt;http://www.readerware.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Collectorz.com (Mac/PC)&lt;br /&gt;&lt;a href="http://www.collectorz.com/"&gt;http://www.collectorz.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Booxter (Mac)&lt;br /&gt;&lt;a href="http://www.deepprose.com/"&gt;http://www.deepprose.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tellico(KDE)&lt;br /&gt;&lt;a href="http://periapsis.org/tellico/"&gt;http://periapsis.org/tellico/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Alexandria(GNOME)&lt;br /&gt;&lt;a href="http://alexandria.rubyforge.org/"&gt;http://alexandria.rubyforge.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;mCatalog(GNOME)&lt;br /&gt;&lt;a href="http://www.mcatalog.net/"&gt;http://www.mcatalog.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thokbook&lt;br /&gt;&lt;a href="http://thokbook.sourceforge.net/"&gt;http://thokbook.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ref:&lt;br /&gt;&lt;a href="http://www.google.com/Top/Reference/Libraries/Library_and_Information_Science/Software/Collection_Managers/?il=1"&gt;Google Directory Result&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/larryosterman/archive/2006/08/08/692649.aspx"&gt;Collectionz&lt;/a&gt;&lt;br /&gt;&lt;a href="http://discuss.joelonsoftware.com/default.asp?joel.3.378798.0"&gt;Simple library software?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-114036775174672442?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/114036775174672442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=114036775174672442' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/114036775174672442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/114036775174672442'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2006/02/links-collection-managers.html' title='[Links] Collection Managers'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-114002118756875120</id><published>2006-02-16T00:30:00.000+08:00</published><updated>2006-02-16T00:33:07.946+08:00</updated><title type='text'>[Perl] e-book and tutorial for Perl</title><content type='html'>Beginning Perl&lt;br /&gt;&lt;a href="http://learn.perl.org/library/beginning_perl/"&gt;http://learn.perl.org/library/beginning_perl/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Perl 5 by Example&lt;br /&gt;&lt;a href="http://www.codebits.com/p5be/"&gt;http://www.codebits.com/p5be/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Perl e-Book:&lt;br /&gt;&lt;a href="http://www.freeprogrammingresources.com/perlbook.html"&gt;http://www.freeprogrammingresources.com/perlbook.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Introduction to Perl (from University of Missouri - Columbia):&lt;br /&gt;&lt;a href="http://www.cclabs.missouri.edu/things/instruction/perl/perlcourse.html"&gt;http://www.cclabs.missouri.edu/things/instruction/perl/perlcourse.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Perl Tutorial:&lt;br /&gt;&lt;a href="http://www.comp.leeds.ac.uk/Perl/start.html"&gt;http://www.comp.leeds.ac.uk/Perl/start.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-114002118756875120?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/114002118756875120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=114002118756875120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/114002118756875120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/114002118756875120'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2006/02/perl-e-book-and-tutorial-for-perl.html' title='[Perl] e-book and tutorial for Perl'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-113868071119076714</id><published>2006-01-31T11:59:00.000+08:00</published><updated>2006-01-31T12:11:51.200+08:00</updated><title type='text'>[Java] Use webcam in Java</title><content type='html'>&lt;span style="font-weight:bold;"&gt;By Twain (for Win32)&lt;/span&gt;&lt;br /&gt;JTwain &lt;br /&gt;&lt;a href="http://asprise.com/product/jtwain/index.php"&gt;http://asprise.com/product/jtwain/index.php&lt;/a&gt;&lt;br /&gt;Morena&lt;br /&gt;&lt;a href="http://www.gnome.sk/Twain/jtp.html"&gt;http://www.gnome.sk/Twain/jtp.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;By SANE (for Unix-like platforms)&lt;br /&gt;JSANE &lt;br /&gt;&lt;a href="http://asprise.com/product/jsane/index.php"&gt;http://asprise.com/product/jsane/index.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;By JMF&lt;br /&gt;(some sample codes)&lt;br /&gt;&lt;a href="http://ltu164.ltu.edu/itseng/version.htm"&gt;http://ltu164.ltu.edu/itseng/version.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Others&lt;br /&gt;TimCam&lt;br /&gt;&lt;a href="http://timcam.sourceforge.net/"&gt;http://timcam.sourceforge.net/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-113868071119076714?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/113868071119076714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=113868071119076714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/113868071119076714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/113868071119076714'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2006/01/java-use-webcam-in-java.html' title='[Java] Use webcam in Java'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-113794491049212746</id><published>2006-01-22T23:45:00.000+08:00</published><updated>2006-01-22T23:48:30.503+08:00</updated><title type='text'>[Programming] some articles</title><content type='html'>Why I don't believe in code review.&lt;br /&gt;http://blogs.sun.com/roller/page/gameguy?entry=why_i_don_t_believe&lt;br /&gt;&lt;br /&gt;Everything you ever wanted to know about C types, Part 1: What's in a type?&lt;br /&gt;http://www-128.ibm.com/developerworks/power/library/pa-ctypes1/?ca=dgr-lnxwCTypesP1&lt;br /&gt;&lt;br /&gt;Is Design Dead? &lt;br /&gt;http://martinfowler.com/articles/designDead.html&lt;br /&gt;(S.Chinese) http://blog.csdn.net/ai92/archive/2005/11/23/535430.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-113794491049212746?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/113794491049212746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=113794491049212746' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/113794491049212746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/113794491049212746'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2006/01/programming-some-articles.html' title='[Programming] some articles'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-113577261433148530</id><published>2005-12-28T20:14:00.000+08:00</published><updated>2006-06-01T00:39:43.920+08:00</updated><title type='text'>Unit Testing framework for C</title><content type='html'>[Free] &lt;br /&gt;CuTest&lt;br /&gt;http://cutest.sourceforge.net/&lt;br /&gt;&lt;br /&gt;Check&lt;br /&gt;http://check.sourceforge.net/&lt;br /&gt;&lt;br /&gt;MinUnit &lt;br /&gt;http://www.jera.com/techinfo/jtns/jtn002.html&lt;br /&gt;&lt;br /&gt;[Commercial]&lt;br /&gt;C++Test&lt;br /&gt;http://www.parasoft.com/jsp/products/home.jsp?product=CppTest&lt;br /&gt;&lt;br /&gt;-----&lt;br /&gt;Reference:&lt;br /&gt;http://sastools.com/b2/post/79394064&lt;br /&gt;&lt;br /&gt;A List of Unit Testing framework can be found at&lt;br /&gt;http://www.xprogramming.com/software.htm&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-113577261433148530?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/113577261433148530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=113577261433148530' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/113577261433148530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/113577261433148530'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2005/12/unit-testing-framework-for-c.html' title='Unit Testing framework for C'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-113235995539474127</id><published>2005-11-19T08:23:00.000+08:00</published><updated>2005-11-19T08:26:58.803+08:00</updated><title type='text'>[Security] Hackers Cracked Gmail</title><content type='html'>There is a bug in GMail that can be cracked. This bug is fixed now.&lt;br /&gt;&lt;br /&gt;News from&lt;br /&gt;&lt;a href="http://www.redherring.com/Article.aspx?a=14525&amp;hed=Hackers+Cracked+Gmail&amp;sector=Industries&amp;subsector=InternetAndServices" target="_blank"&gt;Hackers Cracked Gmail&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.elhacker.net/gmailbug/english_version.htm" target="_blank"&gt;Gmail Bug&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-113235995539474127?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/113235995539474127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=113235995539474127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/113235995539474127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/113235995539474127'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2005/11/security-hackers-cracked-gmail.html' title='[Security] Hackers Cracked Gmail'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-113235968602760695</id><published>2005-11-19T08:20:00.000+08:00</published><updated>2005-11-19T08:21:26.036+08:00</updated><title type='text'>[Security] MD5 Collision Source Code</title><content type='html'>&lt;a href="http://it.slashdot.org/article.pl?sid=05/11/15/2037232"&gt;MD5 Collision Source Code Released&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.stachliu.com.nyud.net:8090/collisions.html"&gt;MD5 Collision Generation&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-113235968602760695?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/113235968602760695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=113235968602760695' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/113235968602760695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/113235968602760695'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2005/11/security-md5-collision-source-code.html' title='[Security] MD5 Collision Source Code'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-112887235319953771</id><published>2005-10-09T23:32:00.000+08:00</published><updated>2005-10-24T23:07:42.383+08:00</updated><title type='text'>Build automation tools</title><content type='html'>CruiseControl&lt;br /&gt;http://cruisecontrol.sourceforge.net/&lt;br /&gt;&lt;br /&gt;Luntbuild &lt;br /&gt;http://www.pmease.com/luntbuild/&lt;br /&gt;&lt;br /&gt;Anthill&lt;br /&gt;http://www.urbancode.com/projects/anthill/default.jsp&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-112887235319953771?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/112887235319953771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=112887235319953771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112887235319953771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112887235319953771'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2005/10/build-automation-tools.html' title='Build automation tools'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-112887190400919468</id><published>2005-10-09T22:45:00.001+08:00</published><updated>2009-01-20T10:36:20.440+08:00</updated><title type='text'>Software Configuration Management</title><content type='html'>OpenSource&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Versions Control&lt;br /&gt;---------------&lt;br /&gt;&lt;a href="http://www.nongnu.org/cvs/"&gt;CVS&lt;/a&gt;&lt;br /&gt;&lt;a href="http://subversion.tigris.org/" target="_blank"&gt;SubVersion&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.kernel.org/pub/software/scm/cogito/README"&gt;Cogito&lt;/a&gt;&lt;br /&gt;&lt;a href="http://git.or.cz/"&gt;Git - Fast Version Control System (Linux Kernel use this)(Distributed)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.selenic.com/mercurial/wiki/"&gt;Mercurial (Distributed)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://bazaar-vcs.org/"&gt;Bazaar (Distributed)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://svk.elixus.org/"&gt;SVK (decentralized version control system built with Subversion)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Issue Manager&lt;br /&gt;---------------&lt;br /&gt;&lt;a href="http://roundup.sourceforge.net/" target="_blank"&gt;Roundup Issue Tracker&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.bestpractical.com/rt/" target="_blank"&gt;RT: Request Tracker&lt;/a&gt;&lt;br /&gt;&lt;a href="http://trac.edgewall.org/"&gt;Trac&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Commercial&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Versions Control&lt;br /&gt;---------------&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/vstudio/previous/ssafe/" target="blank"&gt;Microsoft Visual SourceSafe（VSS）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www-306.ibm.com/software/awdtools/clearcase/" target="_blank"&gt;Rational Clear Case&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.borland.com/us/products/starteam/index.html" target="_blank"&gt;Borland StarTeam&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.serena.com/" target="_blank"&gt;Merant PVCS Version Manager&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.bitkeeper.com/"&gt;BitKeeper&lt;/a&gt; (Linux kernel use this before, use git now)&lt;br /&gt;&lt;a href="http://www.perforce.com/"&gt;Perforce&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Issue Manager&lt;br /&gt;---------------&lt;br /&gt;&lt;a href="http://www.atlassian.com/software/jira/" target="_blank"&gt;Jira&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mantisbt.org/" target="_blank"&gt;Mantis bugtracking system&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.trackstudio.com/index.html"&gt;TrackStudio&lt;/a&gt;(hierarchical issue tracking and bug tracking system)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-112887190400919468?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/112887190400919468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=112887190400919468' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112887190400919468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112887190400919468'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2005/10/software-configuration-management.html' title='Software Configuration Management'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-112584902522968136</id><published>2005-09-04T23:33:00.000+08:00</published><updated>2005-09-05T00:38:30.233+08:00</updated><title type='text'>Web design and CSS</title><content type='html'>A List Apart: A List Apart&lt;br /&gt;http://www.alistapart.com&lt;br /&gt;&lt;br /&gt;SimpleBits (author of Web Standards Solutions/Bulletproof Web Design)&lt;br /&gt;http://www.simplebits.com/&lt;br /&gt;&lt;br /&gt;css Zen Garden: The Beauty in CSS Design&lt;br /&gt;http://www.csszengarden.com/&lt;br /&gt;&lt;br /&gt;Eric A. Meyer (author of Eric Meyer on CSS: Mastering the Language of Web Design) &lt;br /&gt;http://www.meyerweb.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-112584902522968136?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/112584902522968136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=112584902522968136' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112584902522968136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112584902522968136'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2005/09/web-design-and-css.html' title='Web design and CSS'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-112557618939843589</id><published>2005-09-01T20:02:00.000+08:00</published><updated>2005-09-05T00:38:51.946+08:00</updated><title type='text'>Install PostgreSQL on MacOSX</title><content type='html'>PostgreSQL on Mac OS X&lt;br /&gt;http://developer.apple.com/internet/opensource/postgres.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-112557618939843589?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/112557618939843589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=112557618939843589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112557618939843589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112557618939843589'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2005/09/install-postgresql-on-macosx.html' title='Install PostgreSQL on MacOSX'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-112557250382353442</id><published>2005-09-01T18:59:00.000+08:00</published><updated>2005-09-05T00:39:11.890+08:00</updated><title type='text'>IoC</title><content type='html'>Inversion of Control Containers and the Dependency Injection pattern&lt;br /&gt;http://martinfowler.com/articles/injection.html&lt;br /&gt;&lt;br /&gt;A good explanation for IoC (Trad. Chinese)&lt;br /&gt;http://www.javaworld.com.tw/jute/post/print?bid=25&amp;id=28808&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-112557250382353442?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/112557250382353442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=112557250382353442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112557250382353442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112557250382353442'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2005/09/ioc.html' title='IoC'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-112556944999085561</id><published>2005-09-01T18:08:00.000+08:00</published><updated>2006-01-14T23:35:58.220+08:00</updated><title type='text'>Java web application framework</title><content type='html'>Wicket (component-based approach)&lt;br /&gt;http://wicket.sourceforge.net/&lt;br /&gt;&lt;br /&gt;RIFE (mix of Request-based/Component-based)&lt;br /&gt;http://rifers.org/about&lt;br /&gt;&lt;br /&gt;Stripes&lt;br /&gt;http://stripes.mc4j.org/confluence/display/stripes/Home&lt;br /&gt;&lt;br /&gt;Tapestry&lt;br /&gt;WebWork&lt;br /&gt;Echo2&lt;br /&gt;Click&lt;br /&gt;Maverick&lt;br /&gt;Millstone&lt;br /&gt;JBlooming&lt;br /&gt;SOFIA&lt;br /&gt;Shale&lt;br /&gt;Chrysalis&lt;br /&gt;StrutsTi&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-112556944999085561?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/112556944999085561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=112556944999085561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112556944999085561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112556944999085561'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2005/09/java-web-application-framework.html' title='Java web application framework'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-112556894720260732</id><published>2005-09-01T17:54:00.000+08:00</published><updated>2005-09-01T18:06:44.166+08:00</updated><title type='text'>Ports on MacOSX</title><content type='html'>DarwinPorts (Base on FreeBSD ports)&lt;br /&gt;--------------------------------------&lt;br /&gt;http://darwinports.opendarwin.org/&lt;br /&gt;&lt;br /&gt;Quick Install Guide (Trad. Chinese)&lt;br /&gt;http://blog.ijliao.info/archives/2004/12/23/957/&lt;br /&gt;&lt;br /&gt;Flink (Base on Debain dpkg)&lt;br /&gt;--------------------------------------&lt;br /&gt;http://fink.sourceforge.net/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-112556894720260732?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/112556894720260732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=112556894720260732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112556894720260732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112556894720260732'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2005/09/ports-on-macosx.html' title='Ports on MacOSX'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15139899.post-112325126554225204</id><published>2005-08-05T22:13:00.000+08:00</published><updated>2005-08-05T22:14:25.546+08:00</updated><title type='text'>First blog test to blogspot</title><content type='html'>Test Test Test.&lt;br /&gt;so many test....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15139899-112325126554225204?l=tapentan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tapentan.blogspot.com/feeds/112325126554225204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15139899&amp;postID=112325126554225204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112325126554225204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15139899/posts/default/112325126554225204'/><link rel='alternate' type='text/html' href='http://tapentan.blogspot.com/2005/08/first-blog-test-to-blogspot.html' title='First blog test to blogspot'/><author><name>Mark Yang</name><uri>https://profiles.google.com/106251057754277493087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-5ZEBDEIMJiI/AAAAAAAAAAI/AAAAAAAABWo/n9fmYa4pSnM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
