<?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-3451922019587875700</id><updated>2012-02-16T02:24:17.858-08:00</updated><category term='code'/><category term='Music'/><title type='text'>Try to make things easy.</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default?start-index=101&amp;max-results=100'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>113</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-7719576712473384088</id><published>2012-02-03T07:04:00.000-08:00</published><updated>2012-02-03T07:10:04.160-08:00</updated><title type='text'>subversion can't roll back source file.</title><content type='html'>&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="background-color: white; line-height: 18px;"&gt;Hmm.. If I misunderstand, please someone correct me.&lt;/span&gt;&lt;br style="background-color: white; line-height: 18px;" /&gt;&lt;span style="background-color: white; line-height: 18px;"&gt;Subversion doesn't support "clean" way to roll back source code!! &amp;nbsp;Again, delta based VCS is broken from the concept. &amp;nbsp;This is not an issue with "git".&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; line-height: 18px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; line-height: 18px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;If I messed up codes, but they are not checked in, then simply subversion rolls back happily.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; line-height: 18px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;"svn revert [filenames]"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; line-height: 18px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;I happily checked in a source change, and found out that I messed up later, merge comes into play.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;From svn book,&amp;nbsp;&lt;/span&gt;&lt;a href="http://svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerging.html#svn.branchmerge.basicmerging.undo"&gt;http://svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerging.html#svn.branchmerge.basicmerging.undo&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Command is simply this.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;"&lt;span style="background-color: white;"&gt;svn merge -c -303 http://svn.example.com/repos/calc/trunk"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Now this is troublesome. &amp;nbsp;What if the revision 303 check-in is huge, with many other files checked-in together?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;In other words, revision 303 contains my mess-up, but all other check-ins from other files are fine, what should we do? &amp;nbsp;We kill good changes simply exchange for roll back my bad change?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Does anyone know if merge can work in file level?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-7719576712473384088?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/7719576712473384088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=7719576712473384088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7719576712473384088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7719576712473384088'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2012/02/subversion-cant-roll-back-source-file.html' title='subversion can&apos;t roll back source file.'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-3843278885963547727</id><published>2012-01-31T15:31:00.001-08:00</published><updated>2012-01-31T15:31:40.018-08:00</updated><title type='text'>My Youtube #6</title><content type='html'>my youtube #6&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=CzdT-YY3J8k"&gt;http://www.youtube.com/watch?v=CzdT-YY3J8k&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/CzdT-YY3J8k/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/CzdT-YY3J8k?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/CzdT-YY3J8k?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-3843278885963547727?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/3843278885963547727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=3843278885963547727' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3843278885963547727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3843278885963547727'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2012/01/my-youtube-6.html' title='My Youtube #6'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-1920193404207508783</id><published>2011-12-31T21:08:00.001-08:00</published><updated>2011-12-31T21:10:38.837-08:00</updated><title type='text'>youtube #5</title><content type='html'>&lt;a href="http://www.youtube.com/watch?v=0-xWadhoWKE"&gt;My youtube #5&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://1.gvt0.com/vi/0-xWadhoWKE/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/0-xWadhoWKE&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/0-xWadhoWKE&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-1920193404207508783?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/1920193404207508783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=1920193404207508783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1920193404207508783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1920193404207508783'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2011/12/youtube-5.html' title='youtube #5'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-1167779952571746247</id><published>2011-12-26T18:55:00.000-08:00</published><updated>2011-12-26T18:57:55.334-08:00</updated><title type='text'>youtube upload #4</title><content type='html'>This time, it is Korean heavy metal.&lt;br /&gt;&lt;br /&gt;Kim Kyungho, "Judgement Day"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://3.gvt0.com/vi/EwMlPOALm3s/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/EwMlPOALm3s&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/EwMlPOALm3s&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-1167779952571746247?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/1167779952571746247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=1167779952571746247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1167779952571746247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1167779952571746247'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2011/12/youtube-upload-4.html' title='youtube upload #4'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-2046158494202145615</id><published>2011-10-27T05:23:00.000-07:00</published><updated>2011-10-27T05:23:48.148-07:00</updated><title type='text'>Hard to keep up the blog, thanks to twitter, G+, facebook.</title><content type='html'>Thanks to those easy to use social media, I forget my blogs more often.&amp;nbsp; I hope to get something interesting to post.&amp;nbsp; These days, I don't have any specific subjects.&amp;nbsp; Other than work and music, I don't run my side projects and researches.&lt;br /&gt;&lt;br /&gt;Maybe I can put my "type slow" practice.&amp;nbsp; I definitely get benefit from that practice.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-2046158494202145615?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/2046158494202145615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=2046158494202145615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2046158494202145615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2046158494202145615'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2011/10/hard-to-keep-up-blog-thanks-to-twitter.html' title='Hard to keep up the blog, thanks to twitter, G+, facebook.'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-7952836103919684799</id><published>2011-09-08T05:07:00.000-07:00</published><updated>2011-09-08T05:07:16.703-07:00</updated><title type='text'></title><content type='html'>My third youtube upload.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://1.gvt0.com/vi/2FRXDvM05e0/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/2FRXDvM05e0&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/2FRXDvM05e0&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-7952836103919684799?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/7952836103919684799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=7952836103919684799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7952836103919684799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7952836103919684799'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2011/09/my-third-youtube-upload.html' title=''/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-3594845906468463951</id><published>2011-08-02T21:52:00.000-07:00</published><updated>2011-09-08T05:03:32.534-07:00</updated><title type='text'>Classical piece</title><content type='html'>Uploaded Bach BWV 997, on clean tone with my practice guitar.&lt;br /&gt;Classical sounds lovely, but following music is different from playing, even in technical perspective.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://2.gvt0.com/vi/aDz9yDztAfY/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/aDz9yDztAfY&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/aDz9yDztAfY&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;a href="http://www.youtube.com/watch?v=aDz9yDztAfY"&gt;http://www.youtube.com/watch?v=aDz9yDztAfY&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-3594845906468463951?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/3594845906468463951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=3594845906468463951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3594845906468463951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3594845906468463951'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2011/08/classical-piece.html' title='Classical piece'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-9184818757320146358</id><published>2011-06-24T06:47:00.000-07:00</published><updated>2011-06-24T07:04:12.305-07:00</updated><title type='text'>Code browsing (ETAGS vs. Eclipse)</title><content type='html'>I am an Emacs enthusiast, and I always try to resolve my problems in Emacs.&lt;br /&gt;However, today, I gave up Etags.  I don't compile codes on Eclipse, yet.  For code browsing capability, Eclipse is far better and intuitive.  I can't clearly distinguish/categorize properties of "This is better on Emacs" vs "This is better on Eclipse".  Truely, editing task is better on Emacs, but, code browsing is better on Eclipse.&lt;br /&gt;&lt;br /&gt;The nature of code browsing is different from actual coding.&lt;br /&gt;When writing a project, the author of the project knows details up front, such as where to look, how these variables/functions are used.  When modifying someone else's project, initially readers don't have a clue.  The readers will collect details by asking many questions (in browsing terms, querying symbol/usage chain/see declaration/see definition/ etc... ).   On emacs, interface is too flat.  I use Etags often, but still I have to look up, though.  On Eclipse, interface is hierarchic, and grouped based on situation.&lt;br /&gt;&lt;br /&gt;I can't describe better than this.  Sorry for rough explaining.  At this point, I remember that someone mentioned "Eclipse vs. Emacs is facing the same argument of Emacs vs. Vi when Emacs got attentions first time.  One example is that "Eclipse is heavy".  Emacs was heavy when it appeared for the first time.&lt;br /&gt;&lt;br /&gt;One nice tip, to browse through history, use ALT-left and ALT-right.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-9184818757320146358?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/9184818757320146358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=9184818757320146358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/9184818757320146358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/9184818757320146358'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2011/06/code-browsing-etags-vs-eclipse.html' title='Code browsing (ETAGS vs. Eclipse)'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-3693122550497459589</id><published>2011-05-31T09:25:00.000-07:00</published><updated>2011-06-01T04:52:27.452-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Metronome for Linux in Python</title><content type='html'>I changed my metronome.c in python to work with Windows.  ( Initially, I made a mistake which errored in Windows.)   I didn't distinguish binary/text mode in Windows, which doesn't matter in Linux.  After adding sys.platform condition, it works, but looks a little clumsy.&lt;br /&gt;&lt;br /&gt;To use this,&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt;$ python metronome.py [sample_file] [bpm] [duration in sec]&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For example, this command will generate "a.wav" which has 120 BPM beat for 15 sec.  s3.wav is a simple beep wav in 44100 wav encode.&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt;$ python metronome.py s3.wav 120 15&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here is the code:&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;import os&lt;br /&gt;import sys&lt;br /&gt;import struct&lt;br /&gt;&lt;br /&gt;empty_sound = struct.pack('bbbbbbbb', *( 4,0,0,0,6,0,6,0 ))&lt;br /&gt;&lt;br /&gt;class WavHeader(object):&lt;br /&gt;    def __init__(self, rawdata):&lt;br /&gt;        self.tup = struct.unpack("iiiiihhiihhii", rawdata)&lt;br /&gt;        self.chunk_id        = self.tup[0]&lt;br /&gt;        self.chunk_sz        = self.tup[1]&lt;br /&gt;        self.format          = self.tup[2]&lt;br /&gt;        self.sub_chunk1_id   = self.tup[3]&lt;br /&gt;        self.sub_chunk1_sz   = self.tup[4]&lt;br /&gt;        self.audio_format    = self.tup[5]&lt;br /&gt;        self.num_channel     = self.tup[6]&lt;br /&gt;        self.sample_rate     = self.tup[7]&lt;br /&gt;        self.byte_rate       = self.tup[8]&lt;br /&gt;        self.block_align     = self.tup[9]&lt;br /&gt;        self.bits_per_sample = self.tup[10]&lt;br /&gt;        self.sub_chunk2_id   = self.tup[11]&lt;br /&gt;        self.sub_chunk2_sz   = self.tup[12]&lt;br /&gt;&lt;br /&gt;    def pack(self):&lt;br /&gt;        return struct.pack("iiiiihhiihhii",  self.chunk_id, self.chunk_sz,&lt;br /&gt;                                             self.format  , self.sub_chunk1_id,&lt;br /&gt;                                             self.sub_chunk1_sz , self.audio_format,&lt;br /&gt;                                             self.num_channel   , self.sample_rate ,&lt;br /&gt;                                             self.byte_rate     , self.block_align ,&lt;br /&gt;                                             self.bits_per_sample, self.sub_chunk2_id,&lt;br /&gt;                                             self.sub_chunk2_sz )&lt;br /&gt;&lt;br /&gt;ONE_SEC = 88200&lt;br /&gt;def bytes_for_beat(bpm):&lt;br /&gt;    ratio = bpm/60.0&lt;br /&gt;    bytes_per_beep = ONE_SEC / ratio&lt;br /&gt;    return int(bytes_per_beep)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def main():&lt;br /&gt;    sample_fname = sys.argv[1]&lt;br /&gt;    tempo = int(sys.argv[2])&lt;br /&gt;    if tempo &lt; 40:&lt;br /&gt;        print &gt;&gt; sys.stderr, "Invalid tempo:    Make it between 40 - MAX"&lt;br /&gt;        print &gt;&gt; sys.stderr, "   * longer the sample length, smaller the MAX"&lt;br /&gt;        sys.exit(1)&lt;br /&gt;    dura = int(sys.argv[3])&lt;br /&gt;    if dura &lt;= 0:&lt;br /&gt;        print &gt;&gt; sys.stderr, "Invalid duration:  Make it greater than 0"&lt;br /&gt;        sys.exit(2)&lt;br /&gt;&lt;br /&gt;    # Reading sample header&lt;br /&gt;    if sys.platform == 'win32':&lt;br /&gt;        rd = open(sample_fname, "rb")&lt;br /&gt;    else:&lt;br /&gt;        rd = open(sample_fname, "r")&lt;br /&gt;    sample_hdr = WavHeader(rd.read(44))&lt;br /&gt;    sample_data = rd.read()&lt;br /&gt;    rd.close()&lt;br /&gt;&lt;br /&gt;    # Generating Beat data as WAV, storing temp file 't.wav'&lt;br /&gt;    if sys.platform == 'win32':&lt;br /&gt;        bdata = open("t.wav", "wb")&lt;br /&gt;    else:&lt;br /&gt;        bdata = open("t.wav", "w")&lt;br /&gt;    tot_beats = dura * (tempo/60.0);&lt;br /&gt;    bps = bytes_for_beat(tempo);&lt;br /&gt;    tot_bytes = 0;&lt;br /&gt;    for i in range( int(tot_beats)):&lt;br /&gt;        bdata.write( sample_data )&lt;br /&gt;        tot_bytes += sample_hdr.sub_chunk2_sz;&lt;br /&gt;        for j in range( (bps - sample_hdr.sub_chunk2_sz)/8):&lt;br /&gt;            bdata.write( empty_sound )&lt;br /&gt;            tot_bytes += len(empty_sound)&lt;br /&gt;    bdata.close()&lt;br /&gt;&lt;br /&gt;    # Overwrite new size, and Generate output wav file 'a.wav'&lt;br /&gt;    sample_hdr.sub_chunk2_sz = tot_bytes&lt;br /&gt;    if sys.platform == 'win32':&lt;br /&gt;        outf = open("a.wav", 'wb')&lt;br /&gt;    else:&lt;br /&gt;        outf = open("a.wav", 'w')&lt;br /&gt;    outf.write( sample_hdr.pack() )&lt;br /&gt;    if sys.platform == 'win32':&lt;br /&gt;        outf.write( open('t.wav', 'rb').read() )&lt;br /&gt;    else:&lt;br /&gt;        outf.write( open('t.wav').read() )&lt;br /&gt;    outf.close()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;    main()&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-3693122550497459589?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/3693122550497459589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=3693122550497459589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3693122550497459589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3693122550497459589'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2011/05/metronome-for-linux-in-python.html' title='Metronome for Linux in Python'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-8694370590423104263</id><published>2011-05-29T11:11:00.001-07:00</published><updated>2011-06-01T04:52:43.393-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Metronome for Linux</title><content type='html'>A solution for "Metoronome" is a very simple algorithm&lt;br /&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; def metronome(bpm, how_long):  &lt;br /&gt;  while how_long &amp;gt; 0:  &lt;br /&gt;   beep()  &lt;br /&gt;   time.sleep( 60.0 / bpm )  &lt;br /&gt;   how_long -= 60.0/bpm  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, this wouldn't work on regular OS like Linux or Windows on PC, since they are not real time OS.  To make the matter worse, sleep() operation will definitely context switch out the process, and coming back will not be in consistent interval.  &lt;br /&gt;&lt;br /&gt;I needed a metronome.  I knew that there are softwares doing "Metronome", mostly commercial.&lt;br /&gt;&lt;br /&gt;So, dig through, and found one open source solution (open metronome), written in MFC.  Since my computer for music is Linux, I just read and learned its brilliant idea.  It generates WAV file for beeping.  I wrote a program, doing so.&lt;br /&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; #include &amp;lt;stdio.h&amp;gt;  &lt;br /&gt; #include &amp;lt;stdlib.h&amp;gt;  &lt;br /&gt; #include &amp;lt;stdint.h&amp;gt;  &lt;br /&gt; #include &amp;lt;sys/types.h&amp;gt;  &lt;br /&gt; #include &amp;lt;sys/stat.h&amp;gt;  &lt;br /&gt; #include &amp;lt;fcntl.h&amp;gt;  &lt;br /&gt; #include &amp;lt;string.h&amp;gt;  &lt;br /&gt; char empty_sound[8] = { 4, 0, 0, 0, 6, 0, 6, 0 };  &lt;br /&gt; struct wav_header {  &lt;br /&gt;   // "RIFF" chunk descriptor  &lt;br /&gt;   int32_t  chunk_id;  &lt;br /&gt;   int32_t  chunk_sz;  &lt;br /&gt;   int32_t  format;  &lt;br /&gt;   // "fmt (header)" sub-chunk  &lt;br /&gt;   int32_t  sub_chunk1_id;  &lt;br /&gt;   int32_t  sub_chunk1_sz;  &lt;br /&gt;   int16_t  audio_format;  &lt;br /&gt;   int16_t  num_channel;  &lt;br /&gt;   int32_t  sample_rate;  &lt;br /&gt;   int32_t  byte_rate;  &lt;br /&gt;   int16_t  block_align;  &lt;br /&gt;   int16_t  bits_per_sample;  &lt;br /&gt;   // "data (easily, music)" sub-chunk  &lt;br /&gt;   int32_t  sub_chunk2_id;  &lt;br /&gt;   int32_t  sub_chunk2_sz;  &lt;br /&gt;   char   *data;  &lt;br /&gt; };  &lt;br /&gt; #define ONE_SEC 88200  // bytes  &lt;br /&gt; static void print_header(struct wav_header *hdr)  &lt;br /&gt; {  &lt;br /&gt;   printf("(0) chunk id  : %x\n", hdr-&amp;gt;chunk_id);  &lt;br /&gt;   printf("(4) chunk size : %d\n", hdr-&amp;gt;chunk_sz);  &lt;br /&gt;   printf("(8) format   : %x\n\n", hdr-&amp;gt;format);  &lt;br /&gt;   printf("(12) sub chunk1 id  : %d\n", hdr-&amp;gt;sub_chunk1_id);  &lt;br /&gt;   printf("(16) sub chunk1 size : %d\n", hdr-&amp;gt;sub_chunk1_sz);  &lt;br /&gt;   printf("(20) audio format  : %d\n", hdr-&amp;gt;audio_format);  &lt;br /&gt;   printf("(22) num channels  : %d\n", hdr-&amp;gt;num_channel);  &lt;br /&gt;   printf("(24) sample rate   : %d\n", hdr-&amp;gt;sample_rate);  &lt;br /&gt;   printf("(28) byte rate    : %d\n", hdr-&amp;gt;byte_rate);  &lt;br /&gt;   printf("(32) block align   : %d\n", hdr-&amp;gt;block_align);  &lt;br /&gt;   printf("(34) bits per sample : %d\n\n", hdr-&amp;gt;bits_per_sample);  &lt;br /&gt;   printf("(36) sub chunk2 id  : %d\n", hdr-&amp;gt;sub_chunk2_id);  &lt;br /&gt;   printf("(40) sub chunk2 size : %d\n", hdr-&amp;gt;sub_chunk2_sz);  &lt;br /&gt;   printf("(44 -- ) DATA\n\n");  &lt;br /&gt; }  &lt;br /&gt; static int bytes_for_sec(int bpm)  &lt;br /&gt; {  &lt;br /&gt;   float ratio = bpm/60.0;  &lt;br /&gt;   float bytes_per_beep = ONE_SEC / ratio;  &lt;br /&gt;   return (int)bytes_per_beep;  &lt;br /&gt; }  &lt;br /&gt; int main(int argc, char **argv)  &lt;br /&gt; {  &lt;br /&gt;   char *sample_fname;  &lt;br /&gt;   int tempo, dura, bps;  &lt;br /&gt;   int rfd;       // Sample file descriptor  &lt;br /&gt;   int wfd;       // Output file descriptor  &lt;br /&gt;   int rc, i, j, tot_beats;  &lt;br /&gt;   char buf[512 + 1];   // Sample hdr buffer  &lt;br /&gt;   char *sample_buf, *ptr;  &lt;br /&gt;   struct wav_header *hdr;  &lt;br /&gt;   struct wav_header new_hdr;  &lt;br /&gt;   if (argc &amp;lt; 3) {  &lt;br /&gt;     printf("USAGE: %s &amp;lt;sample_wav&amp;gt; &amp;lt;tempo in BPM&amp;gt; &amp;lt;duration in sec&amp;gt;\n", argv[0] );  &lt;br /&gt;     printf(" * sample_wav must be aligned by sample. Random clip of data may make a noise.\n");  &lt;br /&gt;     printf(" example: $ %s s3.wav 120 60\n", argv[0]);  &lt;br /&gt;     printf("  This will make an output of 'a.wav', using s3.wav as sample, 120 bps for 60sec.\n");  &lt;br /&gt;     exit(0);  &lt;br /&gt;   }  &lt;br /&gt;   sample_fname = argv[1];  &lt;br /&gt;   tempo = atoi(argv[2]);  &lt;br /&gt;   if (tempo &amp;lt; 40) {  &lt;br /&gt;     printf("Invalid tempo:  Make it between 40 - MAX, which is the fastest from sample\n");  &lt;br /&gt;     exit(1);  &lt;br /&gt;   }  &lt;br /&gt;   dura = atoi(argv[3]);  &lt;br /&gt;   if (dura == 0) {  &lt;br /&gt;     printf("Invalid duration: Make it greater than 0.\n");  &lt;br /&gt;     exit(2);  &lt;br /&gt;   }  &lt;br /&gt;   rfd = open(sample_fname, O_RDONLY);  &lt;br /&gt;   rc = read(rfd, buf, 44);  &lt;br /&gt;   if (rc &amp;lt; 0) {  &lt;br /&gt;     perror("Sample read error\n");  &lt;br /&gt;     exit(3);  &lt;br /&gt;   }  &lt;br /&gt;   hdr = (struct wav_header *)buf;  &lt;br /&gt;   if ( NULL == (sample_buf = malloc( hdr-&amp;gt;sub_chunk2_sz )) ) {  &lt;br /&gt;     perror("Mem alloc failed (1)\n");  &lt;br /&gt;     exit(4);  &lt;br /&gt;   }  &lt;br /&gt;   // copying sample data  &lt;br /&gt;   ptr = sample_buf;  &lt;br /&gt;   while ( 0 &amp;lt; (rc = read(rfd, ptr, 512)) ) {  &lt;br /&gt;     ptr += rc;  &lt;br /&gt;   }  &lt;br /&gt;   wfd = open("t.wav" , O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);  &lt;br /&gt;   if (wfd &amp;lt; 0) {  &lt;br /&gt;     perror("Error opening write file");  &lt;br /&gt;   }  &lt;br /&gt;   tot_beats = dura * (tempo/60.0);  &lt;br /&gt;   bps = bytes_for_sec(tempo);  &lt;br /&gt;   int tot_bytes = 0;  &lt;br /&gt;   for (i =0; i&amp;lt;tot_beats; ++i) {  &lt;br /&gt;     write(wfd, sample_buf, hdr-&amp;gt;sub_chunk2_sz);  &lt;br /&gt;     tot_bytes += hdr-&amp;gt;sub_chunk2_sz;  &lt;br /&gt;     for (j = 0; j&amp;lt; (bps - hdr-&amp;gt;sub_chunk2_sz)/8; ++j) {  &lt;br /&gt;       write(wfd, empty_sound, 8);  &lt;br /&gt;       tot_bytes += 8;  &lt;br /&gt;     }  &lt;br /&gt;   }  &lt;br /&gt;   close(wfd);  &lt;br /&gt;   memcpy(&amp;amp;new_hdr, hdr, 44);  &lt;br /&gt;   new_hdr.sub_chunk2_sz=tot_bytes;  &lt;br /&gt;   wfd = open("h.wav", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);  &lt;br /&gt;   write(wfd, &amp;amp;new_hdr, 44);  &lt;br /&gt;   close(wfd);  &lt;br /&gt;   system("/bin/cat h.wav t.wav &amp;gt; a.wav");  &lt;br /&gt;   return 0;  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Finally, I generated 30 sec of each speed (40, 44, 48, .... 208), and converted them into mp3.  For example, 160 bpm wav (160.wav) is converted to 160.mp3 in 128 bit encoding.&lt;br /&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; $ lame -h -b 128  160.wav  160.mp3&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now, if I need 5 min of 160 bpm, I just feed this 10 times in mpg123.&lt;br /&gt;&lt;br /&gt;My favorite application of this was "speed trainer."  For example, made 30 secs of 160, 161, 162, 163, 164 bpm and played it.  &lt;br /&gt;&lt;br /&gt;$ mpg123 16[0-4].mp3&lt;br /&gt;&lt;br /&gt;Or making a 15 minute mp3 beat file isn't bad.  Roughly 1 meg for 1 min, so 15 min is less than 15 meg byte.  If it is encoded 64bit, the size will be even smaller.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-8694370590423104263?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/8694370590423104263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=8694370590423104263' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8694370590423104263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8694370590423104263'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2011/05/metronome.html' title='Metronome for Linux'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-3723019806757012404</id><published>2011-02-11T01:23:00.001-08:00</published><updated>2011-06-01T04:49:06.504-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><title type='text'>First Youtube upload</title><content type='html'>Yesterday, I stayed home.  Enjoyed a relaxed day, with a little excuse of my son's school meeting.  During 1 spare hour before the meeting, I made this.  I always wish that I have more time to practice my guitar.  &lt;br /&gt;&lt;br /&gt;&lt;iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/d8RMaic3Loc" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-3723019806757012404?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/3723019806757012404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=3723019806757012404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3723019806757012404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3723019806757012404'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2011/02/first-youtube-upload.html' title='First Youtube upload'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/d8RMaic3Loc/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-7332488300928417843</id><published>2011-01-17T08:40:00.000-08:00</published><updated>2011-01-17T08:41:17.088-08:00</updated><title type='text'>python unittest skipping test.</title><content type='html'>I just found this feature, and I love it.&lt;br /&gt;&lt;br /&gt;http://docs.python.org/library/unittest.html#skipping-tests-and-expected-failures&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-7332488300928417843?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/7332488300928417843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=7332488300928417843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7332488300928417843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7332488300928417843'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2011/01/python-unittest-skipping-test.html' title='python unittest skipping test.'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-6733505771052750988</id><published>2010-11-12T01:45:00.001-08:00</published><updated>2010-11-12T01:48:59.782-08:00</updated><title type='text'>Neglecting upgrade</title><content type='html'>As I neglected the blog, I neglected my OS upgrades, too.  Most of my machines are running Fedora Core 12.  Two versions behind.  As long as kernel is up-to-date, I probably won't upgrade FC12.  At least for a while.  I realized that only thing I need is up-to-date version of gcc w/ libc, python(2/3), emacs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-6733505771052750988?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/6733505771052750988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=6733505771052750988' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/6733505771052750988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/6733505771052750988'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2010/11/neglecting-upgrade.html' title='Neglecting upgrade'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-1648708186989813452</id><published>2010-08-06T13:51:00.000-07:00</published><updated>2011-06-01T04:52:58.720-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Drupal menu disappeared.</title><content type='html'>I am not an expert of Drupal.  Actually, I am new to Drupal.  Somehow, someway, our team selected Drupal for our interactive method to collaborate with entire company.  Make sense because we don't want to spend whole lot of time just for method.  We want the result.&lt;br /&gt;&lt;br /&gt;While I was enabling "Views" module in drupal, it acted up.  Views did not show up.  So, I disabled Views and tried to re-install.  But, right after disabling Views, menu is screwed up.  Like this.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_c6sA-rPrMlo/TFx2uWGjFdI/AAAAAAAAAKE/FuP3hWfLWw8/s1600/bad1.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 312px; height: 320px;" src="http://3.bp.blogspot.com/_c6sA-rPrMlo/TFx2uWGjFdI/AAAAAAAAAKE/FuP3hWfLWw8/s320/bad1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5502403383319008722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_c6sA-rPrMlo/TFx2uwRknyI/AAAAAAAAAKM/J8zcVzAgKYQ/s1600/bad2.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 300px;" src="http://2.bp.blogspot.com/_c6sA-rPrMlo/TFx2uwRknyI/AAAAAAAAAKM/J8zcVzAgKYQ/s320/bad2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5502403390344568610" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;I couldn't administer menu, modules, and theme any more!  That is a disaster for admin user.  I was so tempted to re-install drupal, but then, migrating old database to new one is another challenge.  Old one was in dev, but we already collected some data.  And, old site were configured too.&lt;br /&gt;So, only option is "FIX".  But, fixing a software that I never deal with was a quite discouraging moment.  I prepared fresh install of drupal, and diff'd the files.  Files looked similar.  Then, all modification must be in the database.&lt;br /&gt;So, I wrote a database diff tool.  &lt;br /&gt;&lt;br /&gt;Successfully, I found it is because menu_router table is corrupted.  I restored.&lt;br /&gt;Here is the sample code that I used:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code-python"&gt;&lt;br /&gt;#!/usr/bin/env python                                                                                                                &lt;br /&gt;&lt;br /&gt;import MySQLdb&lt;br /&gt;import os&lt;br /&gt;import sys&lt;br /&gt;&lt;br /&gt;def main():&lt;br /&gt;    try:&lt;br /&gt;        cn1 = MySQLdb.connect(host="172.16.136.114", db="drupal_prod")&lt;br /&gt;        cn2 = MySQLdb.connect(host="172.16.136.114", db="drupal_dev")&lt;br /&gt;    except:&lt;br /&gt;        print &gt;&gt;sys.stderr, "ERROR: connection"&lt;br /&gt;        sys.exit(1)&lt;br /&gt;&lt;br /&gt;    while 1:&lt;br /&gt;        table = raw_input("Table name: ")&lt;br /&gt;        sql = "select count(*) from %s" % table&lt;br /&gt;&lt;br /&gt;        cur1 = cn1.cursor()&lt;br /&gt;        cur1.execute(sql)&lt;br /&gt;        cur2 = cn2.cursor()&lt;br /&gt;        cur2.execute(sql)&lt;br /&gt;&lt;br /&gt;        r1 = cur1.fetchone()&lt;br /&gt;        r2 = cur2.fetchone()&lt;br /&gt;        if r1[0] == r2[0] == 0:&lt;br /&gt;            print "SAME!"&lt;br /&gt;            continue&lt;br /&gt;&lt;br /&gt;        if r1[0] == r2[0]:&lt;br /&gt;            print "Same COUNT! "&lt;br /&gt;        else:&lt;br /&gt;            print "DIFF Found! "&lt;br /&gt;&lt;br /&gt;        inp = raw_input("specific sql? ")&lt;br /&gt;        if inp.strip() == '':&lt;br /&gt;            sql = "select * from %s" % table&lt;br /&gt;        else:&lt;br /&gt;            sql = inp&lt;br /&gt;        print "SQL used:      %s; " % sql&lt;br /&gt;        cur1.execute(sql)&lt;br /&gt;        cur2.execute(sql)&lt;br /&gt;&lt;br /&gt;        try:&lt;br /&gt;            while 1:&lt;br /&gt;                r1 = cur1.fetchone()&lt;br /&gt;                r2 = cur2.fetchone()&lt;br /&gt;&lt;br /&gt;                if r1 is None and r2 is None:&lt;br /&gt;                    break&lt;br /&gt;&lt;br /&gt;                if r1.__str__() != r2.__str__():&lt;br /&gt;                    print "* ", r1, "\n", "# ", r2&lt;br /&gt;        except:&lt;br /&gt;            pass&lt;br /&gt;&lt;br /&gt;        print "Repeat- SQL Used:\n%s;" % sql&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;    main()&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-1648708186989813452?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/1648708186989813452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=1648708186989813452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1648708186989813452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1648708186989813452'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2010/08/drupal-menu-disappeared.html' title='Drupal menu disappeared.'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_c6sA-rPrMlo/TFx2uWGjFdI/AAAAAAAAAKE/FuP3hWfLWw8/s72-c/bad1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-4535726244060474977</id><published>2010-05-05T04:40:00.000-07:00</published><updated>2010-05-05T04:41:39.895-07:00</updated><title type='text'>PostgreSQL 9.0 beta released</title><content type='html'>Finally, they supported the first version of built-in replication.  Very exciting feature.&lt;br /&gt;&lt;br /&gt;http://www.postgresql.org/docs/9.0/static/high-availability.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-4535726244060474977?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/4535726244060474977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=4535726244060474977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4535726244060474977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4535726244060474977'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2010/05/postgresql-90-beta-released.html' title='PostgreSQL 9.0 beta released'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-837762221563629919</id><published>2010-04-27T07:40:00.000-07:00</published><updated>2010-04-27T07:42:02.174-07:00</updated><title type='text'>Begin to learn tcl</title><content type='html'>tcl is a very interesting language.  I don't want to spend time to learn through it, but I need to learn to go through my work.  It looks useful tool.  However, although inefficient in python about what tcl does, I am producing code faster in python.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-837762221563629919?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/837762221563629919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=837762221563629919' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/837762221563629919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/837762221563629919'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2010/04/begin-to-learn-tcl.html' title='Begin to learn tcl'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-5699627139676772024</id><published>2010-02-05T04:52:00.001-08:00</published><updated>2010-02-05T04:58:56.059-08:00</updated><title type='text'>firefox only?</title><content type='html'>Before Firefox was popular, we saw many websites only for internet explorer.  Many linux users complained IE only features such as (evil) active X technology.  Yesterday, I ran into one of our internal tools using google chrome.  Page did not redirect as it should.  Firefox, however, worked smoothly.  Because it is not in my domain, I just tolerated.&lt;br /&gt;Later, I had conversation with the developer, and he said that it doesn't work with Internet Explorer either!   That website only works with Firefox.&lt;br /&gt;&lt;br /&gt;I am not good at web stuff.  But, that sounds so funny.  This time, no complaint from me.  IE in the past was not cross platform, but Firefox is.  Although chrome is my main, Firefox runs on my desktop.  So, I'm okay.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-5699627139676772024?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/5699627139676772024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=5699627139676772024' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5699627139676772024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5699627139676772024'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2010/02/firefox-only.html' title='firefox only?'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-985645032214375777</id><published>2010-01-23T12:29:00.000-08:00</published><updated>2010-01-23T12:32:05.491-08:00</updated><title type='text'>I love Fedora Core groupinstall</title><content type='html'>I just installed FC12 on my laptop.  As usual, I used group install to set up my dev environment.   This one shot command did save my keystrokes a lot.  Just today, I feel so grateful to FC.&lt;br /&gt;&lt;br /&gt;$ sudo yum groupinstall "Development Libraries" "Development Tools"&lt;br /&gt;&lt;br /&gt;I love Fedora Core.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-985645032214375777?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/985645032214375777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=985645032214375777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/985645032214375777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/985645032214375777'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2010/01/i-love-fedora-core-groupinstall.html' title='I love Fedora Core groupinstall'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-8198370716459312925</id><published>2009-12-03T06:57:00.001-08:00</published><updated>2009-12-03T06:58:30.728-08:00</updated><title type='text'>twitter and google wave</title><content type='html'>After I use twitter and google wave, I am getting lazier on my blog.  I may not post often enough, but somehow I should prepare something worth to read on my blog.  I feel guilty.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-8198370716459312925?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/8198370716459312925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=8198370716459312925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8198370716459312925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8198370716459312925'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/12/twitter-and-google-wave.html' title='twitter and google wave'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-6326191469894060976</id><published>2009-12-03T06:55:00.000-08:00</published><updated>2009-12-03T06:56:48.047-08:00</updated><title type='text'>Fedora Core 12 is good</title><content type='html'>I was late to post this, but I like Fedora Core.  And not surprisingly, FC12 did not disappoint me.  Again, well thought-through OS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-6326191469894060976?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/6326191469894060976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=6326191469894060976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/6326191469894060976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/6326191469894060976'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/12/fedora-core-12-is-good.html' title='Fedora Core 12 is good'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-3744204271751362629</id><published>2009-11-23T07:52:00.000-08:00</published><updated>2009-11-23T07:56:38.943-08:00</updated><title type='text'>GIT</title><content type='html'>I am getting to love git.&lt;br /&gt;I followed someone's post (using Subversion as a main repository in Dropbox).  It was a wonderful idea.  It was useful.  But, svnroot on Dropbox makes nature a little awkward by svn design.  And, peeking GIT rougly, it fits much better in Dropbox.  So, I decided to learn, and it works out well.&lt;br /&gt;&lt;br /&gt;The primary motivation is 'Lock vs. No Lock'.  So, for VC using Dropbox, I recommend git.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-3744204271751362629?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/3744204271751362629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=3744204271751362629' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3744204271751362629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3744204271751362629'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/11/git.html' title='GIT'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-8849675526602056389</id><published>2009-08-06T07:38:00.000-07:00</published><updated>2009-08-06T07:39:24.296-07:00</updated><title type='text'>People who likes Twitter down.</title><content type='html'>Obviously, if twitter is down, &lt;a href="http://istwitterdown.com/"&gt;This&lt;/a&gt; website will be very hot.  I did the same thing :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-8849675526602056389?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/8849675526602056389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=8849675526602056389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8849675526602056389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8849675526602056389'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/08/people-who-likes-twitter-down.html' title='People who likes Twitter down.'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-4455607137438256757</id><published>2009-08-06T07:18:00.000-07:00</published><updated>2009-08-06T07:22:12.612-07:00</updated><title type='text'>Bash, [C-xC-e] command editor</title><content type='html'>I found this accidentally and luckily.  With predefined EDITOR env variable, C-xC-e will bring current command line into EDITOR.  Regular expression based change can be applied.&lt;br /&gt;&lt;br /&gt;I set up my EDITOR variable to 'emacs -q'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-4455607137438256757?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/4455607137438256757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=4455607137438256757' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4455607137438256757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4455607137438256757'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/08/bash-c-xc-e-command-editor.html' title='Bash, [C-xC-e] command editor'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-5371067069011216806</id><published>2009-07-20T11:09:00.001-07:00</published><updated>2009-07-20T11:21:04.781-07:00</updated><title type='text'>Emacs, - for navigating buffers</title><content type='html'>One of emacs pain is 'too many key-strokes for a certain thing'.  &lt;a href="http://xkcd.com/378/"&gt;This xkcd&lt;/a&gt; partly shows this problem.  But, true.  Laughing at 'C-x r j "register"' is legitimate, especially from vim users.  Vim way of 'doing a certain thing' is wicked fast.  The key stroke that I describe is Emacs way of switching to a buffer.  (OMG, 4 key strokes for just switching buffer??).  Vim way is ':e "filename"' or ":bp", simpler than emacs way.&lt;br /&gt;&lt;br /&gt;So, borrowing CTRL-TAB idea from windows, I installed buffer-stack.el, and bound keys for CTRL-TAB and CTRL-SHIFT-TAB.  Easier to navigate.  Hurray~&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-5371067069011216806?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/5371067069011216806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=5371067069011216806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5371067069011216806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5371067069011216806'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/07/emacs-for-navigating-buffers.html' title='Emacs, &lt;ctrl&gt;-&lt;tab&gt; for navigating buffers'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-3027264681691035926</id><published>2009-07-06T10:56:00.001-07:00</published><updated>2009-07-06T10:58:54.001-07:00</updated><title type='text'>Swim, not that bad</title><content type='html'>This week, I reduced my swim by 5 seconds.  I was only training 50 meters, and I could do 60 seconds for 50 meters.  If I swim at 65 seconds for 50 meters, my breath was much smoother and I could go further.  But, today's train was focused just for 50 meters.&lt;br /&gt;&lt;br /&gt;I realized that I need more muscle.  I definitely felt the resistance of my forearm pushing, but couldn't push hard enough.  I feel so good!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-3027264681691035926?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/3027264681691035926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=3027264681691035926' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3027264681691035926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3027264681691035926'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/07/swim-not-that-bad.html' title='Swim, not that bad'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-2338534729812096659</id><published>2009-06-26T15:03:00.001-07:00</published><updated>2009-06-26T15:08:43.380-07:00</updated><title type='text'>Improving my swim</title><content type='html'>My shoulder muscle needs to improve.  These days, my swim speed got better and my endurance level got better.  It takes 70 seconds for 50 meter swim, 155 seconds for 100 meter swim.  Better but, way worse than excellent swimmers.  Olympic swimmers are less than 50 seconds for 100 meter.  &lt;br /&gt;&lt;br /&gt;I saw one of master swim person making 45 seconds for 50 meters consistently forever.  At this time, my goal is 120 seconds for 100 meter.  Long way to go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-2338534729812096659?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/2338534729812096659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=2338534729812096659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2338534729812096659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2338534729812096659'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/06/improving-my-swim.html' title='Improving my swim'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-7250734327994967232</id><published>2009-05-28T07:19:00.000-07:00</published><updated>2011-06-01T04:53:43.896-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><title type='text'>Oldies but Goodies</title><content type='html'>David Coverdale was one of the biggest influence of rock music history.  His old songs are still touching.  Here are two of my recent favorites.  Sailing ships are originally played by Steve Vai.  The guitarist on this video is Adrian Vandenberg.  &lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/L5QKBmBAxQk&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/L5QKBmBAxQk&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Very famous "Soldier of Fortune".  I don't need to comment/explanation, do I?&lt;br /&gt;...&lt;br /&gt;all the song that I have sung, echo in the distance,&lt;br /&gt;like the sound of the windmill going round&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Gyj01YnOQOE&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Gyj01YnOQOE&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-7250734327994967232?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/7250734327994967232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=7250734327994967232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7250734327994967232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7250734327994967232'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/05/oldies-but-goodies.html' title='Oldies but Goodies'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-4532243655675481113</id><published>2009-05-27T10:53:00.001-07:00</published><updated>2011-06-01T04:57:26.857-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><title type='text'>keep watching this video.</title><content type='html'>Megadeth, Tornado of souls.&lt;br /&gt;This song reminds my wild young life.  I loved this song.  I was just a stupid young rocker-wanna-be.  &lt;br /&gt;Anyway, very well performed live.  Planning to buy this DVD.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/u0k8holIGTU&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/u0k8holIGTU&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-4532243655675481113?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/4532243655675481113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=4532243655675481113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4532243655675481113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4532243655675481113'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/05/keep-watching-this-video.html' title='keep watching this video.'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-2469597572924252285</id><published>2009-05-12T07:54:00.001-07:00</published><updated>2009-05-12T08:19:02.475-07:00</updated><title type='text'>Still using Emacs</title><content type='html'>I am still intimidated by Emacs internals.  I can barely customise my emacs as I wish with lots of research.  Sometimes, it looks counter-economic.  To to a little thing, I have to pay the time price.  I know modern technology of "Eclipse" or "Net Beans" to replace Emacs.&lt;br /&gt;But, I still use Emacs because it is fun.  No need to fall into debates of 'Eclipse is in the position where early Emacs was.'  I just do this especially for fun of functional programming with Lisp.&lt;br /&gt;&lt;br /&gt;Elisp isn't the same as Common Lisp.  Functional programming sometimes was bothered by Object Oriented Programming knowledge.  It is a different world.  Just trust the 30 years of evolution of Emacs.  It is Rock Solid.  &lt;br /&gt;&lt;br /&gt;I am taking an approach far from the perfect way.  I just implement/tweak .emacs/.emacs.d as I need.  I don't worry about Emacs API.  Later when I find a piece that makes a better way to replace my stupid code, then I fix it.  Sure I still need to design the code before a keystroke, but, I don't take serious design as I do in real life work.&lt;br /&gt;&lt;br /&gt;Eclipse plugin can be also written using Java and Eclipse SDK.  True... But not as enjoying and easy like Emacs.  Eclipse SDK learning curve is far bigger than Elisp learning curve.  No fun.  And Eclipse plugin development seems more serious than Elisp customization.&lt;br /&gt;&lt;br /&gt;"Hey, come back to modern world."  I know, and I have to.  If I work with Java, I will.  But in Python perspective, I still love python-mode, rather than PyDev in Eclipse.  Oh, yeah..  Way better.  How does Eclipse handle Python natural "undeterministic code indentation"?  Not better than Emacs "tab".  How does Eclipse handle calendar library to ad-hoc insert "Today's date"?   not better than Emacs "calendar" library.   And in anything can happen on any place as Emacs does?  Can Eclipse give a reference of individual open document (or buffer in emacs term)?&lt;br /&gt;&lt;br /&gt;Most simply can Eclipse give a current position as a handle?  Eclipse can be an IDE, but not an editor.  It is not customizable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-2469597572924252285?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/2469597572924252285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=2469597572924252285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2469597572924252285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2469597572924252285'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/05/still-using-emacs.html' title='Still using Emacs'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-3702928586084412293</id><published>2009-04-28T10:21:00.000-07:00</published><updated>2009-04-28T10:24:24.694-07:00</updated><title type='text'>CVS checking out behind webproxy</title><content type='html'>CVS is not a minor version control, yet.  Especially for old projects like emacs still use CVS.  One of my co-worker had hard time checking out emacs since our firewall blocks most of outgoing traffic.  Luckily we have a web-proxy.  Use this command.&lt;br /&gt;&lt;br /&gt;cvs -z3 "-d:pserver;proxy=PROXY_SERVER;proxyport=PROXY_PORT:anonymous@cvs.savannah.gnu.org:/sources/emacs" co emacs&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-3702928586084412293?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/3702928586084412293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=3702928586084412293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3702928586084412293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3702928586084412293'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/04/cvs-checking-out-behind-webproxy.html' title='CVS checking out behind webproxy'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-7637044480466159250</id><published>2009-03-12T08:02:00.000-07:00</published><updated>2009-03-12T08:20:34.164-07:00</updated><title type='text'>Swimming, one recovery strategy</title><content type='html'>Today, I made another 12 lap swimming at one shot and didn't get tired.  Total of around 40 some laps.  At this point, doing many laps without improving swim skill is meaningless.  So, I thought what will be the first one to fix?&lt;br /&gt;I made several laps just checking as many I can see myself, and found I made inconsistent recovery especially on my left arm.  Sometimes I make a splash during recovery.  So, let's fix this during March.&lt;br /&gt;&lt;br /&gt;Recovery is a procedure of an arm going back to front for the next swing.  Each arm takes turn to propel.  The best strategy to recover is to relax or spend the least energy to its original position.  Splashing obviously isn't good.  Splash by itself isn't bad.  Drag after splash is bad.  So, I took this approach.  During recovery, focus on the elbow.  Forearm just hang below elbow.  While driving the elbow above the water, stay 'stream-lined'.  That is important not to waste energy.  At the final stage of recovery, Imagine that a hand opens a hole at the surface of the water, and put the entire arm through the hole.  While doing this, the next swing starts and the body rotates.  Obviously, this is the best time to initiate the propel.  &lt;br /&gt;&lt;br /&gt;So, again, at the final step of recovery, &lt;br /&gt;1) push the arm through the imaginary hole,&lt;br /&gt;2) kick the other foot to initiate hip rotation,&lt;br /&gt;3) start the other arm swing.  ( Remember the best efficient path of arm )&lt;br /&gt;4) stretch for the stream line.&lt;br /&gt;&lt;br /&gt;Swim is so much fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-7637044480466159250?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/7637044480466159250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=7637044480466159250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7637044480466159250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7637044480466159250'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/03/swimming-one-recovery-strategy.html' title='Swimming, one recovery strategy'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-8314590379100589010</id><published>2009-03-09T07:11:00.000-07:00</published><updated>2009-03-12T08:23:40.000-07:00</updated><title type='text'>Swimming is just fun.</title><content type='html'>From beginning of this year, I began to swim.  The whole first month was just struggling in the water, but after two months later, I can do 8 laps (200m) without taking a break.  For me, the process to improve my swim was like tuning a sloppy software.  But, in the end, nothing is more important than the fact that "Swimming is just so much fun."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-8314590379100589010?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/8314590379100589010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=8314590379100589010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8314590379100589010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8314590379100589010'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/03/swimming-is-just-fun.html' title='Swimming is just fun.'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-4673466401422911685</id><published>2009-02-24T04:14:00.000-08:00</published><updated>2009-02-24T04:17:39.777-08:00</updated><title type='text'>Bash 4.0 released</title><content type='html'>I have not posted in Feb.  But, I am not losing interest on my blog.  Just my work was too busy and I was very tired at home.  &lt;br /&gt;&lt;br /&gt;Bash 4.0 is just released.  Once again, I have to defer trying this out.  I am still using fish.  I like fish, but some features from bash are missed.  In completion features, bash 4.0 didn't improve too much (as far as I read their change log.)  So, I am not sure if I come back to bash.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-4673466401422911685?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/4673466401422911685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=4673466401422911685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4673466401422911685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4673466401422911685'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/02/bash-40-released.html' title='Bash 4.0 released'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-6118333779079168482</id><published>2009-01-08T06:17:00.001-08:00</published><updated>2009-01-08T06:37:01.146-08:00</updated><title type='text'>TCP segmentation example</title><content type='html'>Let's straight to the point.&lt;br /&gt;Simply to make tcp segmented traffic, we need to turn off Nagle's algorithm.  We can accomplish this with TCP_NODELAY option.  I needed one for my test, but I couldn't find an example.&lt;br /&gt;Since it is not that hard, I just wrote one.  Don't expect too much in this example, however.  I just needed this real quick, and wrote very sloppy.  Here it comes:&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;#include &amp;lt;netdb.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;#include &amp;lt;netinet/in.h&amp;gt;&lt;br /&gt;#include &amp;lt;netinet/tcp.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;#include &amp;lt;arpa/inet.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#define handle_error(msg) \&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;do { perror(msg); exit(EXIT_FAILURE); } while (0)&lt;br /&gt;&lt;br /&gt;#define MAXDATASIZE  8192&lt;br /&gt;#define SERVER_ADDR  "172.16.136.147"&lt;br /&gt;#define SERVER_PORT  80&lt;br /&gt;#define PAYLOAD  "GET /index.html"&lt;br /&gt;#define CHUNK    2            // chunk size.  2 byte segment for each.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int sockfd, numbytes;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char buf[MAXDATASIZE] = {0, };&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int optval;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct sockaddr_in srv;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sockfd = socket(PF_INET, SOCK_STREAM, 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (sockfd == -1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;handle_error("socket failed");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;optval = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ( 0 &amp;gt; setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &amp;optval, sizeof optval))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;handle_error("sockopt, REUSEADDR");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;optval = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ( 0 &amp;gt; setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *) &amp;optval, sizeof optval))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;handle_error("sockopt, NO NAGLE");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memset(&amp;srv, '\0', sizeof srv);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;srv.sin_family = AF_INET;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;srv.sin_port = htons(SERVER_PORT);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ( 0 &amp;gt; inet_pton(AF_INET, SERVER_ADDR, &amp;srv.sin_addr))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;handle_error("lookup fail");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// CONNECT!&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ( 0 &amp;gt; connect(sockfd, (struct sockaddr *)&amp;srv, sizeof srv))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;handle_error("connect error");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Lazy: I'm not handling buffer overflow.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strcpy(buf, PAYLOAD);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char sbuf[ CHUNK ];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (i=0; i&amp;lt;strlen(PAYLOAD); i += CHUNK) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strncpy(sbuf, buf+i, CHUNK);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;write(sockfd, sbuf, CHUNK);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;usleep(100000);   // give time to clear the system call.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;write(sockfd, "\n\n", 2);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;handle_error("recv");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf[numbytes] = '\0';&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("client: received '%s'\n",buf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;close(sockfd);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-6118333779079168482?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/6118333779079168482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=6118333779079168482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/6118333779079168482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/6118333779079168482'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2009/01/tcp-segmentation-example.html' title='TCP segmentation example'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-4475360553998797040</id><published>2008-12-24T08:01:00.001-08:00</published><updated>2008-12-24T08:11:38.781-08:00</updated><title type='text'>Xterm with Truetype font?</title><content type='html'>I am not kidding.  It has been a while, too.  Just I knew that now.  I simply googled and found &lt;a href="http://gopalarathnam.com/weblog/2007/11/22/anti-aliasing-and-truetype-fonts-with-xterm.html"&gt;this link.&lt;/a&gt;  &lt;br /&gt;This assumes xterm is compiled with xft library, which will be true for most of decent Linux distro like Fedora Core or Ubuntu.  Especially, I am a fan of 'screen' utility, I don't need top menu, icons, tab names, etc.  So!!! Try this:&lt;br /&gt;&lt;br /&gt;$ xterm -fa 'Monospace-9'&lt;br /&gt;&lt;br /&gt;Amazing.&lt;br /&gt;Now, temptation for Enlightenment instead of KDE?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-4475360553998797040?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/4475360553998797040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=4475360553998797040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4475360553998797040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4475360553998797040'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/12/xterm-with-truetype-font.html' title='Xterm with Truetype font?'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-7228963074566516279</id><published>2008-12-18T15:11:00.000-08:00</published><updated>2008-12-18T15:17:00.271-08:00</updated><title type='text'>new process state in linux kernel 2.6.25</title><content type='html'>I am obviously losing kernel tracking.  I can't keep up linux kernel any more due to busy life.  Today, while researching on my regular works, I ran into this article.&lt;br /&gt;&lt;br /&gt;http://www.ibm.com/developerworks/linux/library/l-task-killable/index.html&lt;br /&gt;&lt;br /&gt;In short, linux innovated new process state, called TASK_KILLABLE.  Operating system is still evolving.  Almost 50 years after its first version of Unix, still finding a way for innovation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-7228963074566516279?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/7228963074566516279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=7228963074566516279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7228963074566516279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7228963074566516279'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/12/new-process-state-in-linux-kernel-2625.html' title='new process state in linux kernel 2.6.25'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-2794566406949846534</id><published>2008-12-17T07:58:00.000-08:00</published><updated>2008-12-18T04:38:51.085-08:00</updated><title type='text'>Adding unittest in python with TestSuite</title><content type='html'>Unittest is an important fundamental for solid software development.  At the same time, maintaining proper unittests is also a burden.  Managing good unittest is always a challenge.&lt;br /&gt;&lt;br /&gt;One of the challenge in python comes when unittest.TestSuite is needed.  Generally, each class will split out to each of unittest.TestCase class.  But, to teach TestSuite what TestCase to load, we have to pass a list of TestCases, and writing a list manually like this isn't fun.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;suite = unittest.TestSuite([&lt;br /&gt;        unittest.TestLoader().loadTestsFromTestCase(FirstTest),&lt;br /&gt;        unittest.TestLoader().loadTestsFromTestCase(SecondTest),&lt;br /&gt;        unittest.TestLoader().loadTestsFromTestCase(ThirdTest),&lt;br /&gt;        .....&lt;br /&gt;        ])&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;It is error prone.  More annoyingly, if I add a new test case, I have to modify suite, also. Using this driver will auto discover test classes in the current module.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;moduleList = [ globals()[mod] for mod in globals().keys() if mod.endswith('Test') ]&lt;br /&gt;suite = unittest.TestSuite([&lt;br /&gt;        unittest.TestLoader().loadTestsFromTestCase(i) for i in moduleList&lt;br /&gt;        ])&lt;br /&gt;unittest.TextTestRunner(verbosity=1).run(suite)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This uses naming convention of "SomethingTest" as a test case for class "Something".&lt;br /&gt;Keeping this convention will be a keystroke save.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-2794566406949846534?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/2794566406949846534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=2794566406949846534' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2794566406949846534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2794566406949846534'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/12/adding-unittest-in-python-with.html' title='Adding unittest in python with TestSuite'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-6994718275557705212</id><published>2008-12-05T06:28:00.000-08:00</published><updated>2008-12-15T07:46:02.664-08:00</updated><title type='text'>Tools for these days</title><content type='html'>I adapted two major changes in my tool set.  &lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://www.fishshell.org"&gt;fish&lt;/a&gt; instead of zsh/bash&lt;br /&gt;Most linux ships bash.  I have used bash mostly.  zsh was okay.  But after I found fish, settled in fish.  It is different but not difficult to migrate from bash.  Nice color coding with good completion like zsh.  Its script syntax resembles to tcl.  I don't like tcl, but I could handle fish okay.  Another unusual, but eventually more useful thing is the lack of history expansion.  !! or !$ in bash does not exist in fish.  Instead of them, fish simplifies all history recall with Up/Down and Alt-Up/Alt-Down.  Action oriented :)&lt;br /&gt;fish is very useful in many aspects.  One useful thing is its history keeps not only history of the commands, but also keeps the timestamp when it ran.&lt;br /&gt;&lt;br /&gt;2. &lt;a href="http://www.gnu.org/software/screen"&gt;screen&lt;/a&gt; instead of multiple xterm&lt;br /&gt;Spreading xterms all around desktop looked sloppy.  So, I tried to pack them into one screen session.  At first, the environment was not familiar, but later I got used to it and navigated fine.  So, mostly my dual screen is one emacs session plus one konsole with screen.  These look more elegant than patching desktop with many xterms.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-6994718275557705212?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/6994718275557705212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=6994718275557705212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/6994718275557705212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/6994718275557705212'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/12/tools-for-these-days.html' title='Tools for these days'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-928242204364493536</id><published>2008-11-18T05:00:00.000-08:00</published><updated>2008-12-29T03:06:54.322-08:00</updated><title type='text'>Best Python debugger</title><content type='html'>I don't use pdb often, but today, I needed one.  I suspected that there should be a pdb module for emacs.  Although GUD requires separate wrapper to PUD, there is a built-in module in Emacs.  I just realized that GUD is a wrapper for another process instance.  Not a big deal.  &lt;br /&gt;Create this file in somewhere PATHable and name it pdb.&lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;exec python2.6 /usr/lib/python2.6/pdb.py $1 $2 $3 $4 $5 $6 $7 $8 $9&lt;br /&gt;&lt;br /&gt;And then, you are good to go.  Someone mentioned that backtracing does not work across modules.  I didn't test that because his/her post was dated long time ago with emacs 21.&lt;br /&gt;With pdb, 'C-x +' (balance-windows) will be very useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-928242204364493536?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/928242204364493536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=928242204364493536' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/928242204364493536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/928242204364493536'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/11/best-python-debugger.html' title='Best Python debugger'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-8930170401649856850</id><published>2008-11-14T12:42:00.001-08:00</published><updated>2008-11-17T05:20:21.645-08:00</updated><title type='text'>Emacs pinky problem</title><content type='html'>I am not talking about L-CTRL sitting on a lower left corner.  I already switched CAPS and L-CTRL.  However, as Emacs still requires so many CTRL key strokes, my left pinky is getting tired.  Now I am using R-CTRL and R-ALT.  This works in my work desktop, but several problems await me.&lt;br /&gt;&lt;br /&gt;1. Some machines don't understand R-ALT and R-CTRL. &lt;br /&gt;2. Laptop and Desktop keyboard layout make me confused for these keys.&lt;br /&gt;&lt;br /&gt;Intentionally, xmodmaps are turned off these days to remind myself to use Right side.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-8930170401649856850?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/8930170401649856850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=8930170401649856850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8930170401649856850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8930170401649856850'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/11/emacs-pinky-problem.html' title='Emacs pinky problem'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-2172807707996163971</id><published>2008-11-07T04:34:00.000-08:00</published><updated>2008-11-07T04:38:50.510-08:00</updated><title type='text'>Nehalem architecture</title><content type='html'>Intel took a new approach to resolve the bandwidth problem, traditionally Intel suffered.  If Intel Core 2 duo was focused on more efficient computation, this is major replacement of architecture design.  As a programmer, we can just enjoy more clock cycles on less power consumption :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://arstechnica.com/articles/paedia/cpu/what-you-need-to-know-about-nehalem.ars/1"&gt;Here &lt;/a&gt; is an article about a very nice overview.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-2172807707996163971?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/2172807707996163971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=2172807707996163971' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2172807707996163971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2172807707996163971'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/11/nehalem-architecture.html' title='Nehalem architecture'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-5745485184778949180</id><published>2008-10-03T05:01:00.000-07:00</published><updated>2008-10-09T06:51:32.278-07:00</updated><title type='text'>Like a stone, Audioslave</title><content type='html'>This morning, I ran a random list in amarok, and this song was played.  I purchased this song from Rhapsody several years ago.  Once again, I felt touched when listening to this.  Another song that I like is Cochise.&lt;br /&gt;Not his song, but he is very special to my life.  I loved rock music when I was young.  I loved to play guitar.  When I was early 20's, Korea was not ready for Rock.  There were people who love rock music, but popularity came from dance music mostly.  Also, the media didn't carry much of rocks.  So, I was thirsty about rock culture.  Only way to access was spending money on CD.&lt;br /&gt;The fall of 1994, I came to US.  Luckily, I happened to have a chance to watch M-TV.  And I enjoyed ROCK music all night long.  For the first time in my life in the first night in the US.  I remember there were "interstate lovesong" from 'Stone Temple Pilots', something from 'REM', "When I come around" from 'Green day'.  But most amazing songs were from Sound Garden.  "Spoon man", "Fell on black days", and "Black hole Sun".  I think I watched "Fell on black days" on that night and amazed.  The vocalist of Sound Garden is the one in Audioslave...&lt;br /&gt;&lt;br /&gt;Just a memory, 14 years ago...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-5745485184778949180?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/5745485184778949180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=5745485184778949180' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5745485184778949180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5745485184778949180'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/10/like-stone-audioslave.html' title='Like a stone, Audioslave'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-4854953254976757997</id><published>2008-10-02T11:44:00.000-07:00</published><updated>2008-10-02T12:42:20.232-07:00</updated><title type='text'>KDE4.1 on Fedora Core 9</title><content type='html'>It is pretty busy days.  I can't find time for a technical post.  But, I want to mention that I am happy with new KDE 4.1 update with FC9.&lt;br /&gt;I generally don't follow updating my work desktop.  Recently, I did it and required rebooting for kernel 2.6.23 update.  After logging in, I found KDE is updated to 4.1.  It had enhanced look, and I updated my nvidia card from livna, and OpenGL based theme worked.  It looks much cooler.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-4854953254976757997?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/4854953254976757997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=4854953254976757997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4854953254976757997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4854953254976757997'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/10/kde41-on-fedora-core-9.html' title='KDE4.1 on Fedora Core 9'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-8825774228827064201</id><published>2008-09-25T04:53:00.000-07:00</published><updated>2008-09-25T08:13:10.865-07:00</updated><title type='text'>Good excuses NOT to use version control</title><content type='html'>Recent post from stackoverflow.com made me laugh.  &lt;a href="http://stackoverflow.com/questions/132520/good-excuses-not-to-use-version-control"&gt;'No version control' execuse&lt;/a&gt;.  I have to reveal my stupid experience for this.  It was my first year in career.  I developed a replacement of production data feeder.  It had a significant improvement, and I was sure it will make other people's life easier.  But, suddenly, an accident happened.  At that time, neither did I version control, nor backed up a source.  The fact that first year professional doesn't know version control system should not be a good execuse, but I didn't know that.&lt;br /&gt;&lt;br /&gt;My intention was to clean up test data like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ rm -fr $PRJ_HOME/data&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But, actual command was issued like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ rm -fr $PRJ_HOME/ data&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With just an extra space, I screw up the $PRJ_HOME.  Fortunately, I had spare partition with enough disk space.  I dumped /dev/sdaN to a single file.  It was too big to open in vim, so chopped in pieces, and went through ugly binary format searching for my piece of code.  After recovering all of my sources, I learned CVS and spent a week to learn to setup and manage CVS.  Now it became Subversion.&lt;br /&gt;&lt;br /&gt;There is no execuse, no good reason not to use VCS(Version Control System).&lt;br /&gt;I can think of one.  Temporary project only, which will create noisy commits on main VCS.  However, even though the project is temporary, building on my own subversion tree locally and stuff into it before going to main VCS is not a bad idea.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-8825774228827064201?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/8825774228827064201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=8825774228827064201' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8825774228827064201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8825774228827064201'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/09/good-excuses-not-to-use-version-control.html' title='Good excuses NOT to use version control'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-3054787204969554257</id><published>2008-09-23T05:13:00.000-07:00</published><updated>2008-09-23T05:17:05.689-07:00</updated><title type='text'>Emacs, company-mode</title><content type='html'>I ran into a &lt;a href="http://nschum.de/src/emacs/company-mode/"&gt;company-mode&lt;/a&gt;.  This is a new completion style, and I like it.  I recommend to watch its &lt;a href="http://nschum.de/src/emacs/company-mode/screencast/"&gt;demo screencast&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;company-expand-common function will take your TAB key away.  I rebound it to [C-tab].&lt;br /&gt;Very useful and good looking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-3054787204969554257?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/3054787204969554257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=3054787204969554257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3054787204969554257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3054787204969554257'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/09/emacs-company-mode.html' title='Emacs, company-mode'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-5380244006975018304</id><published>2008-09-22T04:03:00.000-07:00</published><updated>2008-09-25T09:53:58.296-07:00</updated><title type='text'>Chaining condition</title><content type='html'>I was reading a python code and discovered this useful feature.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if LOWER &amp;lt; x &amp;lt; UPPER&lt;br /&gt;&lt;br /&gt; do_something&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I have expressed this "&lt;span style="font-family:courier new;"&gt;if LOWER &amp;lt; x and x &amp;lt; UPPER&lt;/span&gt;" until I discovered chaining expression like this.&lt;br /&gt;Perl and Ruby didn't accept chaining expression.  C and C++ will not work because, (let's see the parsing)&lt;br /&gt;&lt;br /&gt;1. C replaces expression with result of evaluation.  Therefore, '1 &amp;lt; x &amp;lt; 10' expression will be '( (1 &amp;lt; x) &lt; 10 )' and it will be evaluated to non-zero for any x.&lt;br /&gt;&lt;br /&gt;2. C++ also replaces expression, but it knows boolean (true/false).  Therefore, '1 &lt; x &lt; 10' expression will be either 'true &lt; 10' or 'false &lt; 10'.  Since C++ is strong-typed language, this expression requires support of additional function like "boolean operator&lt;(bool&amp;amp;, int&amp;amp;)".  If it is supported, it should also support "boolean operator&lt;(int&amp;amp;, bool&amp;amp;)".   Now, int is not the only comparable.  Beginning with float and double, signed/unsigned char, etc.  It gets ugly very easily.  Another approach will be replace true to (int)1 and false to (int)0 so that it can leverage existing framework.  Anyway, end result is not related to the result of '1 &lt; x &lt; 10'&lt;br /&gt;&lt;br /&gt;3. Due to this nature, supporting this expression in dynamic language isn't simple problem.  For example of '( (1 &lt; x) &lt; 10)' case, inner expr can be any type based on 'what x is', the interpreter should be able to handle this fine.&lt;br /&gt;&lt;br /&gt;Anyway, "1 &lt; x &lt; 10" is more elegant than " (1 &lt; x) and (x &lt; 10)".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-5380244006975018304?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/5380244006975018304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=5380244006975018304' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5380244006975018304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5380244006975018304'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/09/chaining-condition.html' title='Chaining condition'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-5971304422973029280</id><published>2008-08-10T00:15:00.001-07:00</published><updated>2008-08-11T06:47:54.838-07:00</updated><title type='text'>Howto install Emacs snapshot (v23.x)</title><content type='html'>It's another 3:00am.&lt;br /&gt;I am an emacs advocate.  I used vim enough, and still use vim for certain circumstances.  However, I use emacs mainly for development.&lt;br /&gt;Stable version of Emacs is v22.  v23 is development tree.  There is one big advantage compiling emacs v23.  "xft" support.  So, if you want to use 'Consolas' font in emacs, using v23 will simplify a lot.  Configure switch is:&lt;br /&gt;&lt;br /&gt;#  ./configure --with-x-toolkit=gtk --enable-font-backend --with-xft \&lt;br /&gt;  --prefix=/usr/local/emacs-snapshot  --with-tiff=no&lt;br /&gt;&lt;br /&gt;It requires gtk.h.  So, you need gtk2-devel package for Fedora Core.  (Other distro like Ubuntu should not be a problem to find equivalent package. )  Then,&lt;br /&gt;&lt;br /&gt;# make bootstrap&lt;br /&gt;# make install&lt;br /&gt;&lt;br /&gt;Then, add following line to use Consolas font.&lt;br /&gt;(set-default-font "Consolas-11")&lt;br /&gt;&lt;br /&gt;Simple enough.  :)  &lt;br /&gt;&lt;br /&gt;Now, for people who didn't read README, like me, here is some quarks.&lt;br /&gt;If you happened to execute 'make' before 'make bootstrap', you may run into a problem.  (might be different problems, depending on revision).  In my case, I cvs up and just issued "make" assuming that previous config information would be transparent.  Not really.  The top most error was:&lt;br /&gt;&lt;br /&gt;"faces.el:29:13:Error: Symbol's function definition is void: cl-compile-time-init"&lt;br /&gt;&lt;br /&gt;That line is (require 'cl).  If you open Makefile, you will see that "make" and "make bootstrap" targets are different.  In this case, somehow cl(common lisp) package was not ready when faces.el was compiling.  According to Makefile, make bootstrap will 'force clean and bootstrap from a clean state'  My assumption was partially right, but Makefile case did not cover my case, yet.  Went through several seg-fault and compiled on my own and made it to work.  &lt;br /&gt;&lt;br /&gt;I believe that the easiest way was to "make clean" and start from scratch  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-5971304422973029280?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/5971304422973029280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=5971304422973029280' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5971304422973029280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5971304422973029280'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/08/emacs-snapshot-v23x-compiling.html' title='Howto install Emacs snapshot (v23.x)'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-643565685362665674</id><published>2008-07-31T07:17:00.000-07:00</published><updated>2008-07-31T08:04:42.184-07:00</updated><title type='text'>Shell, recall last argument</title><content type='html'>This is also very good shell feature, but many times I failed to use.  I will encourage myself by posting this.  Here we go.&lt;br /&gt;&lt;br /&gt;Suppose I created a temp dir, and move to it.&lt;br /&gt;&lt;br /&gt;$ pushd .&lt;br /&gt;$ mkdir /tmp/lalala&lt;br /&gt;$ cd /tmp/lalala&lt;br /&gt;&lt;br /&gt;The last command can be easily made by, recall by arrow-up, ctrl-A, remove 'mkdir', and type cd.  Not bad, but bash has better option.&lt;br /&gt;&lt;br /&gt;$ pushd .&lt;br /&gt;$ mkdir /tmp/lalala&lt;br /&gt;$ cd !$&lt;br /&gt;&lt;br /&gt;Confused or frowned for another cryptic symbol memorization?  That was my first impression.  But, actually not.  It is very elegant usage.&lt;br /&gt;&lt;br /&gt;! is history recall.  As we usually do "$ !510" - recall command number 510 in history.&lt;br /&gt;$ is regex.  End of line.  Then, we can think usage of '!^'.&lt;br /&gt;&lt;br /&gt;$ cat a b c d e&lt;br /&gt;$ cat !^&lt;br /&gt;cat a&lt;br /&gt;&lt;br /&gt;So, each run will remember previous argv vector, and we can call by placer(^,$).&lt;br /&gt;Another nice feature.  I am interested in middle one, like c in previous example.&lt;br /&gt;&lt;br /&gt;$ cat a b c d e&lt;br /&gt;$ cat !:3&lt;br /&gt;cat c&lt;br /&gt;&lt;br /&gt;Not bad.  Here is another interesting one.&lt;br /&gt;&lt;br /&gt;$ cat a b c d e&lt;br /&gt;$ cat !:1-&lt;br /&gt;cat a b c d&lt;br /&gt;$ cat !:1-&lt;br /&gt;cat a b c&lt;br /&gt;&lt;br /&gt;Popping every argument..&lt;br /&gt;In my opinion, this is a gift from bash for who think before hand.  Someone who lavishes meaningless 'ls', like me, wouldn't get benefit.  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-643565685362665674?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/643565685362665674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=643565685362665674' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/643565685362665674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/643565685362665674'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/07/shell-recall-last-argument.html' title='Shell, recall last argument'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-8655067064516782206</id><published>2008-07-15T05:49:00.000-07:00</published><updated>2008-07-15T05:58:33.835-07:00</updated><title type='text'>Transaction in MySQL</title><content type='html'>Personally, I use PostgreSQL.  PostgreSQL is the most advanced open-source database.  I am bravely saying that it is more advanced than MySQL is at the time of this writing.  However, my department is running MySQL 5.0.  I feel lucky that it is not MySQL 4.1.  I have to migrate my current works stored in my desktop in postgresql to mysql.  It is anticipated from the beginning, but I just didn't prepare.&lt;br /&gt;The migration will not be hard, though.  It is easy to convert postgres dump to mysql dump for import.  I searched my favorite function, Transaction.  To make transaction work, InnoDB must be used, which implies mysql should be compiled with support of InnoDB.  Mostly it is true.&lt;br /&gt;Here is one additional change to apply for postgres dump.  Any create table statement should have something like this.&lt;br /&gt;&lt;br /&gt;create table table_name ( ...description... ) TYPE=InnoDB;&lt;br /&gt;&lt;br /&gt;Simple, but just wonder why InnoDB is not a default type, and who wants some table type without transaction support.  Transaction on mysql is relatively new feature, on the other hand, PostgreSQL already supported long time ago.  Oh well..  It is what it is.  We use mysql, so be it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-8655067064516782206?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/8655067064516782206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=8655067064516782206' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8655067064516782206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8655067064516782206'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/07/transaction-in-mysql.html' title='Transaction in MySQL'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-5813431746217300339</id><published>2008-06-24T03:23:00.003-07:00</published><updated>2008-06-24T03:39:24.263-07:00</updated><title type='text'>Going back to Fedora Core</title><content type='html'>My recent Fedora Core 9 can be said successful.  I still like Gentoo so much.  But, in the work place, running gentoo may risk me to stay longer in the office.  My choice of alternative is "Fedora Core 9".&lt;br /&gt;I began this with Ubuntu 7.04 which was the left over from the previous.  And switched to Kubuntu 8.04 with KDE4 three or four months later.  Disappointed so much and tried Fedora Core 9.  Thought about Open Suse, but FC was the next.&lt;br /&gt;&lt;br /&gt;I tried Fedora Core just once about two years ago for a couple months.  I guess it was FC6 or FC7.  I switched to Gentoo when RedHat 9 became Fedora Core.  So basically, I left RedHat world long time.  I don't even remember how it was.  &lt;br /&gt;&lt;br /&gt;In short, Fedora Core changed a lot from where I stopped using.  The biggest advantage of FC9 is very considerate default.  Different from Ubuntu policy (literally enabling everything regardless of system resource for ease of use), FC focused more on lower level stability such as kernel API compatibility across the versions.  Hibernate works very nice.  Good for laptop.  So, in kernel level, Fedora Core opens flexibility more, and it is stable more. &lt;br /&gt;But don't get wrong with X11 crashes.  That's not due to unstable kernel.  That's because the gap between distro's open end and user failure to provide suitable driver.  I believe this has been and will be the endless fight for Linux kernel and X11 driver.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-5813431746217300339?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/5813431746217300339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=5813431746217300339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5813431746217300339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5813431746217300339'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/06/going-back-to-fedora-core.html' title='Going back to Fedora Core'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-4980988454873439733</id><published>2008-06-13T10:59:00.000-07:00</published><updated>2008-06-13T11:13:05.758-07:00</updated><title type='text'>KDE4: Gentoo, Kubuntu, and Fedora Core 9</title><content type='html'>I am okay with KDE4.  There are still some quarks in KDE4, but generally I like how it is now.  I can't explain detail of KDE4 in each distribution.  In short, I dropped Kubuntu for KDE4.  I agree that Ubuntu linux is doing a great work, but with KDE4, they need to catch up.&lt;br /&gt;&lt;br /&gt;With Gentoo, things are smooth.  Sure!!  I pay huge compile time for this.  In my work place, things are moving in fast phase.  So, having gentoo isn't quite suitable.  I chose Kubuntu when I had a chance to refresh my work desktop.  Kubuntu KDE4 was pretty disappointing.  One of most annoying example is that I couldn't move widgets in panel.  Right click did not even offer "Move" option which I remembered it was there on Gentoo.  So, I had to find another time to refresh my desktop.  My desktop didn't find time to kick out Kubuntu, yet.  I could flush and rebuild my laptop during the last weekend with Fedora Core 9.  Still some issues, but much better than Kubuntu.&lt;br /&gt;&lt;br /&gt;When I get a chance, I will compare rpm vs. deb.  In short, deb is more convinent, but rpm is more flexible.  dpkg(deb package) mainly uses package based dependancy and extends out to file based integrity check if it needs to.  RPM, on the other hand, takes file based, but yum wraps these into package level and group level ( collection of packages ).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-4980988454873439733?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/4980988454873439733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=4980988454873439733' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4980988454873439733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4980988454873439733'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/06/kde4-gentoo-kubuntu-and-fedora-core-9.html' title='KDE4: Gentoo, Kubuntu, and Fedora Core 9'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-3534700691446246844</id><published>2008-05-29T03:55:00.001-07:00</published><updated>2008-05-29T04:09:26.038-07:00</updated><title type='text'>to filter .svn view</title><content type='html'>find is a great tool.  But, find treats all files and all directories equally including .svn dirs.  Suppose we need to see the directory structure of a certain directory and issue this command:&lt;br /&gt;&lt;br /&gt;$ find . -type d&lt;br /&gt;&lt;br /&gt;If the current directory is under svn version control, find will show many .svn directories, too.  Well, since find is &lt;span style="font-weight:bold;"&gt;a great tool&lt;/span&gt;, it will have some filtering functions, too.  'man find' and we can come up with this to filter out .svn.&lt;br /&gt;&lt;br /&gt;$ find . -name .svn -prune -o -print&lt;br /&gt;&lt;br /&gt;Hmmm.. We select non-.svn by inverting the result.  But, we don't know it is a file or directory.  Unix has another great tool called egrep.&lt;br /&gt;&lt;br /&gt;$ find . -type d | egrep -iv ".svn"&lt;br /&gt;&lt;br /&gt;We used invert matching not in find, but in egrep.  Inspecting a directory will be much easier with these two tools.  For svn specific, we can use 'ls' command on svn.&lt;br /&gt;&lt;br /&gt;$ svn ls -R&lt;br /&gt;&lt;br /&gt;But, ls isn't good for distinguish file or diectory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-3534700691446246844?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/3534700691446246844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=3534700691446246844' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3534700691446246844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3534700691446246844'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/05/to-filter-svn-view.html' title='to filter .svn view'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-7579248275882996017</id><published>2008-05-08T04:52:00.000-07:00</published><updated>2008-05-08T04:57:00.160-07:00</updated><title type='text'>Python and DB2</title><content type='html'>We have a DB2 backend and I started to test it with PyDB2.  Here is a tutorial &lt;a href="https://www6.software.ibm.com/dw/education/dm/db2pylnx/index.html"&gt;link&lt;/a&gt;.  In short, nothing is surprising.  It uses standard python DBAPI interface with some good utility in DB2.db2util package.  &lt;br /&gt;Initially, I thought this client package would give different usage because DB2 client is different than postgres, mysql, or Oracle.  However, PyDB2 is written well by supporting standard API.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-7579248275882996017?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/7579248275882996017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=7579248275882996017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7579248275882996017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7579248275882996017'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/05/python-and-db2.html' title='Python and DB2'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-2195458787531334829</id><published>2008-05-05T01:53:00.000-07:00</published><updated>2008-05-05T01:59:26.320-07:00</updated><title type='text'>Shell, Brace expansion</title><content type='html'>I found that I research this whenever I think of this function.&lt;br /&gt;If I have to select file a,b,c only in /tmp, brace expansion is the answer.  /tmp may have bunch of other files.  Also repeating /tmp/a, /tmp/b, /tmp/c is annoying.&lt;br /&gt;&lt;br /&gt;$ ls /tmp/{a,b,c}&lt;br /&gt;&lt;br /&gt;Brace expansion is not used often, but when it is needed, it is super useful.  I have to leave this note hoping that I have a place to lookup at least.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-2195458787531334829?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/2195458787531334829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=2195458787531334829' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2195458787531334829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2195458787531334829'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/05/shell-brace-expansion.html' title='Shell, Brace expansion'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-6993082385390898257</id><published>2008-04-27T00:26:00.000-07:00</published><updated>2008-04-27T00:38:13.388-07:00</updated><title type='text'>KDE 4</title><content type='html'>I am a little late to install KDE 4 since it was out in the last year.  One of my biggest woe was 'what if it is not fully compatible to KDE 3?'  It didn't happen, yet.  I enabled OpenGL.  After I lost interests about compiz-fusion, it's been a long time to work with visual effects.  &lt;br /&gt;KDE4 looked nice.  At first, I was confused from reorganized menu.  But once used to it, it was useful.  I liked tab with recent items.  KDE4 has zoom feature.  I am not sure if it is from OpenGL because it responds pretty fast.&lt;br /&gt;Migration is generally successful.  Now, I have to find a time for my work desktop.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-6993082385390898257?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/6993082385390898257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=6993082385390898257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/6993082385390898257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/6993082385390898257'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/04/kde-4.html' title='KDE 4'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-8892980421816940991</id><published>2008-04-16T23:34:00.000-07:00</published><updated>2008-04-17T00:04:13.230-07:00</updated><title type='text'>Another 2:00am wakeup</title><content type='html'>This happens quite often, these days.  I used to sleep through the night.  Usually I enjoy doing things in early morning, like 5:00am.  2 isn't good time to wake up.  This happens especially I get to sleep with some thoughts.  Last night, I was thinking about 'How to generalize test directories'.  I collected good number of test cases.  My solution is providing default callback handlers, and specific handlers will override if specified.  Loading/Unloading/Reloading modules at runtime isn't fun, but better than introspect.  &lt;br /&gt;If someone asks 'why is introspect bad?', I don't want to say it is bad.  It isn't suitable for callback handler.  The code is half open, and the rest half will be provided at runtime.  Thanks to duck typing, traceback will byte me way later.  With introspect, class name doesn't need to be fixed.  I need to grab class name on the fly.  But, other than this benefit, whole chain of responsibility comes after that.  It is very difficult problem to figure out "Is this the callback handler for event A or B, or is it really a call back handler??"  C++ compiler will be useful in this case ;)&lt;br /&gt;If constraining class name by fixing it, I know what I am binding.  Much simpler and yeah.. I am lazy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-8892980421816940991?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/8892980421816940991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=8892980421816940991' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8892980421816940991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8892980421816940991'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/04/another-200am-wakeup.html' title='Another 2:00am wakeup'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-8965043516690752161</id><published>2008-04-15T08:15:00.000-07:00</published><updated>2008-04-15T18:28:00.886-07:00</updated><title type='text'>Drawing Chart options.</title><content type='html'>Pretty chart drawing is a very attractive feature in any software.  Why chart is nice?  Human perceives 3D space, but human communication is 1D space (Linear!)  We speak in just one direction.  We read in one direction.  But, mixing one segment of information with another is not natural communication method.  Remember your history class.  For comparative topics between other nations along side with time line, it requires some table.  Primitive 2D communication.  And if table can be quantified, Chart can come into play for visualizing the quantity.  Enhanced 2D communication.&lt;br /&gt;&lt;br /&gt;Okay, my tool of choice is python.&lt;br /&gt;First option.  Raw rendering using Xlib or GTK or Qt4.  Unless they support widgets to play with, rendering with fundamental components (Point, Line, Rectangle, Circle) is painful.  It is not an option but making life painful.&lt;br /&gt;Next option.  PyChart.  Free library to generate image of a chart.  Eh~~ okay to use, but not pretty.  If I am drawing something, the fancier the better!&lt;br /&gt;Then, Chart Director from advsofteng.com.  Prettier, and free if their credit lable can be bearable.  To remove this label, I need to purchase the license.  Fortunately, their pricing makes very sense.  However, not free.&lt;br /&gt;ReportLab can be another option.  ReportLab is a perfect tool for PDF generation, but not very good for rendering sophisticated graphs.  And its output format is only PDF. &lt;br /&gt;Gnuplot is another good one.  Especially, for time series, gnuplot is one of the best.  But, it is a mathematical graph.  If I am drawing certain shape, and it does not meet mathematical property, it is not good.  And gnuplot speaks its own language.  Need to learn it from the documentation.&lt;br /&gt;&lt;br /&gt;Google Chart API is my choice.  And they begin to support geographical map chart.  How nice is it.  Limitation of map chart is the size.  I can not create bigger map than size of 440x220.  Other than that, Google Chart API wins all other options.  Wait... Other libraries don't even mention map support.  Google API already won on it.&lt;br /&gt;&lt;br /&gt;But~~ it is web-request.  No problem.  Python has great urllib2 library.&lt;br /&gt;Here is my sample code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;#!/usr/bin/python&lt;br /&gt;import urllib2&lt;br /&gt;&lt;br /&gt;# If you are behind proxy to go through,&lt;br /&gt;my_proxy = urllib2.ProxyHandler( {"http" : "http://proxy_host:proxy_port"} )&lt;br /&gt;opener = urllib2.build_opener(my_proxy)&lt;br /&gt;&lt;br /&gt;api_url = 'http://chart.apis.google.com/chart'&lt;br /&gt;chart_property = dict(cht='p3', chd='t:30,20,50', chs='250x100', chl='Hello|World|Raymond')&lt;br /&gt;&lt;br /&gt;def make_request( api_url, chart_property ):&lt;br /&gt;&amp;nbsp;&amp;nbsp;return api_url + "?" + '&amp;'.join( [ "%s=%s" % (k,v) for k,v in chart_property.items() ] )&lt;br /&gt;&lt;br /&gt;png = urllib2.urlopen(make_request(api_url, chart_property)).read()&lt;br /&gt;fh = open('test.png','w')&lt;br /&gt;print &gt;&gt; fh, png&lt;br /&gt;fh.close()&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-8965043516690752161?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/8965043516690752161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=8965043516690752161' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8965043516690752161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8965043516690752161'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/04/drawing-chart-options.html' title='Drawing Chart options.'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-4169876646840251487</id><published>2008-04-14T05:30:00.000-07:00</published><updated>2008-04-14T05:32:35.417-07:00</updated><title type='text'>Nice python interactive: ipython</title><content type='html'>ipython can be replaced with default command line python interpreter.  One obvious add on from default python is readline capability.  [TAB] will look up locals() and filenames at the same time.  NICE!  Noah Gift, the organizer of PyAtl introduced this in the presentation, and the very night, I tried and liked it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-4169876646840251487?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/4169876646840251487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=4169876646840251487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4169876646840251487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4169876646840251487'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/04/nice-python-interactive-ipython.html' title='Nice python interactive: ipython'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-2714844751443288937</id><published>2008-04-11T07:44:00.000-07:00</published><updated>2008-04-11T07:47:38.839-07:00</updated><title type='text'>PyAtl</title><content type='html'>Last month, I joined Python users group in Atlanta.  Yesterday was my second attendance.  Before the meet up, some members had dinner together in a restaurant.  People are very nice, but more importantly, the presentations are great.  Here is our &lt;a href="http://pyatl.org"&gt;group page&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-2714844751443288937?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/2714844751443288937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=2714844751443288937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2714844751443288937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2714844751443288937'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/04/pyatl.html' title='PyAtl'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-5584058614281384088</id><published>2008-04-10T07:52:00.001-07:00</published><updated>2008-04-10T07:58:18.689-07:00</updated><title type='text'>Find glibc version.</title><content type='html'>This morning, one of my co-worker asked me how to find the version of glibc on the system.  I never thought about this problem.  Generally, if version number is not specified in the .so name, we just hope that it is defined in the program that can be accessed.  Version number is totally man made, and nothing to do with the program by itself.  &lt;br /&gt;Eh~~ I will be short this time.  gnu_get_libc_version() returns a char pointer.  I guessed it from the symbol table of /usr/lib/libc.a.  I actually began that this would be a variable (hoped not to be static variable.)  It was a function.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-5584058614281384088?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/5584058614281384088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=5584058614281384088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5584058614281384088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5584058614281384088'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/04/finding-glibc-version.html' title='Find glibc version.'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-8097388797901757245</id><published>2008-04-09T19:37:00.000-07:00</published><updated>2008-04-09T19:46:57.590-07:00</updated><title type='text'>ping</title><content type='html'>I am alive... Just too busy for blogging.  No active project is going on.  Well, it's been a long time I activated my own project.  Recently, I draw some basic shapes for my son like triangles, squares, circles, and put them on OpenGL using python-opengl.  Some pyramids, boxes, spheres, etc.  Thanks to my son, I refreshed some opengl stuff that I haven't touched since undergrad.&lt;br /&gt;Then, he wanted a car on screen.  Okay, I thought it was easy.  Just find a free 3D model and import in my python script.  Wrong!  It depends how the model is represented.  If it is written in 3D-Max, it needs some other script to convert for opengl to understand.  What if my son wants something like 'Mickey Mouse'?  He will recognize fake Mickey.  He will want REAL Mickey which is really expensive.&lt;br /&gt;I better learn some drawing skill  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-8097388797901757245?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/8097388797901757245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=8097388797901757245' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8097388797901757245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8097388797901757245'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/04/ping.html' title='ping'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-3075850718426383761</id><published>2008-03-19T05:05:00.000-07:00</published><updated>2008-03-19T09:19:37.686-07:00</updated><title type='text'>collecting dmidecode information</title><content type='html'>dmidecode is very useful to look into system bios information.  However, dmidecode -s requires long parameter.  Since I prefer dump all information on one screen, I wrote this simple tool.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;#!/usr/bin/python&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import os, sys, commands, re&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;for p in commands.getoutput('dmidecode -s').split('\n'):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;if re.search('^  ',p):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print '%-25s: %s' % (p.strip(), \&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;commands.getoutput('dmidecode -s %s' % p) )&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Use this with 'sudo'.  Especially this is useful for 'DELL service TAG' information.  Service tag text can be copy and pasted. :)&lt;br /&gt;&lt;br /&gt;Anyone wants to challenge stuffing this into one line?  One line bash with pipes are welcome, too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-3075850718426383761?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/3075850718426383761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=3075850718426383761' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3075850718426383761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3075850718426383761'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/03/collecting-dmidecode-information.html' title='collecting dmidecode information'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-3497010544967288476</id><published>2008-03-13T05:02:00.000-07:00</published><updated>2008-03-29T05:27:40.011-07:00</updated><title type='text'>Calculating Weekdays in Python</title><content type='html'>Calculating weekdays is simple for human being.  But, it isn't for a computer.  The task requires that the logic understands calendar due to adding/subtracting dates.  Doomsday algorithm is needed to get which weekday for a given day.  &lt;br /&gt;Python has two time packages.  time and datetime.  time package works like standard C library package except its basic representation is so called time-tuple rather than epoch.  ( it knows how to convert to epoch )  datetime provides 1) higher level interface, 2) capability to manipulate dates, and 3) compatibility to time package.  So, working with datetime is the most cases.  &lt;br /&gt;Hey, let's just see the code.&lt;br /&gt;&lt;br /&gt;from datetime import timedelta, date&lt;br /&gt;def weekdays(givenDate):&lt;br /&gt;&amp;nbsp;&amp;nbsp;start = givenDate if givenDate else date.today()&lt;br /&gt;&amp;nbsp;&amp;nbsp;start = start - timedelta(start.weekday())&lt;br /&gt;&amp;nbsp;&amp;nbsp;end = start + timedelta(days=5)&lt;br /&gt;&amp;nbsp;&amp;nbsp;return start, end&lt;br /&gt;&lt;br /&gt;Pretty simple.  Now, we can use some decorator to make it useful.  For example, to provide postgresql where clause, we can write like this.&lt;br /&gt;&lt;br /&gt;def pgsqlRangeWks(givenDate=None):&lt;br /&gt;&amp;nbsp;&amp;nbsp;fmt = '%Y-%m-%d %H:%M'&lt;br /&gt;&amp;nbsp;&amp;nbsp;start, end = weekdays(givenDate)&lt;br /&gt;&amp;nbsp;&amp;nbsp;return "ts &gt; '%s' and ts &lt; '%s'" % \&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;( start.strftime(fmt), end.strftime(fmt))&lt;br /&gt;&lt;br /&gt;Again, python is well balanced language in performance and robustness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-3497010544967288476?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/3497010544967288476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=3497010544967288476' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3497010544967288476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3497010544967288476'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/03/calculating-weekdays-in-python.html' title='Calculating Weekdays in Python'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-219845011856533072</id><published>2008-03-11T06:40:00.001-07:00</published><updated>2008-03-11T06:42:06.104-07:00</updated><title type='text'>eject command to close CD tray</title><content type='html'>I happen to find 'eject' command today, and I found that I can close CD tray without bending my back to reach to CD.  :)&lt;br /&gt;&lt;br /&gt;eject [device]  will open,&lt;br /&gt;eject -t [device]  will close.&lt;br /&gt;&lt;br /&gt;man eject.  This is interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-219845011856533072?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/219845011856533072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=219845011856533072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/219845011856533072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/219845011856533072'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/03/eject-command-to-close-cd-tray.html' title='eject command to close CD tray'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-4541700603113025490</id><published>2008-03-05T01:28:00.000-08:00</published><updated>2008-03-05T01:39:46.685-08:00</updated><title type='text'>FreeBSD 7.0</title><content type='html'>After one line qsort() craziness, I still didn't get back to sleep.  I read about FreeBSD 7.0.  FreeBSD has been proud of making better codes in the kernel than Linux evolves.  They heavily used asynchronous IO before Linux introduced asynch layer.  epoll() in Linux still needs more work.  This time, FreeBSD proved their superiority once again.  Linearly scalable SMP.  According to their history, it took seven years to complete the solution.  They staged into sub-solution for each releases (5.x, 6.x), and the war was over at 7.0.   When I looked at the graph, it was definitely attractive.  &lt;br /&gt;They added more stable wireless support. But, my stupid BCM943xx card is not supported.  Due to lack of my wireless support, I lost interest about FBSD 7.  I am not good at  BSD system, anyway.  But,  I swear that I wouldn't buy Dell laptop anymore.  If I am buying a Dell once again ( I doubt this may happen ), the wireless should be Intel.  PERIOD!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-4541700603113025490?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/4541700603113025490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=4541700603113025490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4541700603113025490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4541700603113025490'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/03/freebsd-70.html' title='FreeBSD 7.0'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-9096930706141143652</id><published>2008-03-05T00:24:00.000-08:00</published><updated>2008-03-05T00:50:30.524-08:00</updated><title type='text'>1 line qsort() in python</title><content type='html'>quick sort is very simple, but generally fast algorithm.  If it is implemented in python, seeing the simplicity is obvious.  Thanks to ease of boundary check, code will look like this:&lt;br /&gt;&lt;br /&gt;def qsort(lst):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if len(lst) &lt;= 1: return lst&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;left = [ e for e in lst[1:] if e &lt;= lst[0] ]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;right = [ e for e in lst[1:] if e &gt; lst[0] ]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return qsort(left) + [lst[0]] + qsort(right)&lt;br /&gt;&lt;br /&gt;Now, if evil lambda comes into play, we express this in one line.&lt;br /&gt;&lt;br /&gt;qs = lambda lst: qs([ e for e in lst[1:] if e&lt;=lst[0] ]) + \&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[lst[0]] + qs([ e for e in lst[1:] if e&gt;lst[0]]) \&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if len(lst) &gt; 1 else lst&lt;br /&gt;&lt;br /&gt;hehe.. Okay, I admit that it is not simple one line.  I am insisting this to be one line.&lt;br /&gt;I appologize for trolling :)  Maybe I am going wierd at 3:30 in the morning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-9096930706141143652?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/9096930706141143652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=9096930706141143652' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/9096930706141143652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/9096930706141143652'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/03/qsort-in-python.html' title='1 line qsort() in python'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-7233140588975374859</id><published>2008-02-28T06:14:00.000-08:00</published><updated>2008-02-28T06:18:34.331-08:00</updated><title type='text'>OpenOffice compile on Gentoo</title><content type='html'>http://forums.gentoo.org/viewtopic-t-529291-postdays-0-postorder-asc-highlight-openoffice-start-75.html&lt;br /&gt;&lt;br /&gt;44 minutes and 6 seconds!  This is incredible.  I remember when I compile it for the first time on mmy old P4 with 512 Mb.  It didn't finish for long time, so I went to sleep to see it working the next day.  44 minutes is not a short time, but big improvement.  New intel quad core with 4G ram must be cranking up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-7233140588975374859?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/7233140588975374859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=7233140588975374859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7233140588975374859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7233140588975374859'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/02/openoffice-compile-on-gentoo.html' title='OpenOffice compile on Gentoo'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-8324061451783095792</id><published>2008-02-22T00:40:00.000-08:00</published><updated>2008-03-09T07:52:52.200-07:00</updated><title type='text'>b43-fwcutter-011</title><content type='html'>I should not be the only one thirsty for this package, and now it is available!  Combined with the recent kernel (2.6.24-r2), now I am free from ndiswrapper for my wireless.  Without Gentoo linux, this should be harder.  Once again, I appreciate Gentoo linux. In short, I used &lt;a href="http://gentoo-wiki.com/HARDWARE_Dell_Inspiron_1520"&gt;this wiki&lt;/a&gt;.  But I had to compile b43-fwcutter version 011 myself because it was not on portage, yet.&lt;br /&gt;&lt;br /&gt;I have waited for this to happen for around two years.  My previous Dell E1505 and current Dell 1521 had both Dell 1390 wireless, which has bcm43xx type chip.  Older kernel called this bcm4311 or Dell 1390 in lspci, but  from 2.6.20 (I guess...) it is called bcm94311.  Whenever I had spare time, I tried different method but to fail.&lt;br /&gt;bcm43xx series were broken to work with me always.  And it is a black box system.  I just cut out the firmware file from tarball without knowing who made how.  I tried windows version, openwrt version, etc.  Since I am not a hardware expert, I could only use things available by other people.  Once it is installed on my /lib/firmware, I always hoped to 'Please work...'  Interfacing this with Linux kernel was even more tricky.  But no kernel module were co-operating on my side. I tried wireless debug on and tried to trace where things were broken.  But, failed point I found was always beyond my capability  :(  And went back to ndiswrapper with rough riding on wireless.&lt;br /&gt;I used to succeed by using Ubuntu.  Their bcm43xx somehow knew what combination worked.  I bear with this for a while but gave up Ubuntu for my laptop.  First, hibernate was broken on me.  So I had to wait 3 minutes after turn-on.  My battery lost about 5% of its capacity just for booting.  Second, their solution pulled out only 5.5 Mbps.  No duplex communication.  Third, LCD brightness control was broken with Ubuntu.  When I was working in my dark room, this 100% bright LCD not only ruined my eyes, but also sucked up my battery.&lt;br /&gt;&lt;br /&gt;From kernel 2.6.24, broadcom wireless chip is introduced under network device driver as CONFIG_B43.  In hand in hand, b43-fwcutter released new version (011) in February this year.  Kernel interfacing is officially resolved, and if new b43-fwcutter-011 knows about this, my long fight would be over.&lt;br /&gt;I was right and now my 'dhcpcd wlan0' smoothly loaded my wireless.  Full bandwidth of 11Mbps.  I was so happy and tried from reboot.  Still working  :)   Bye rough ndiswrapper.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-8324061451783095792?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/8324061451783095792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=8324061451783095792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8324061451783095792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8324061451783095792'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/02/b43-fwcutter-011.html' title='b43-fwcutter-011'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-1081761089642632130</id><published>2008-01-24T19:08:00.000-08:00</published><updated>2008-02-22T01:35:40.604-08:00</updated><title type='text'>Easy solution on complex problem.</title><content type='html'>We call this &lt;span style="font-weight:bold;"&gt;"elegant solution"&lt;/span&gt;.  It is obviously very hard to achieve.  One example of "Do things easy way" will be a book "The C programming Language by Ritchie and Kernighan."  Reading this book several times is recommended.  This thin book brought me new things each of three readings so far.&lt;br /&gt;I admit that I used to be a spoiled programmer.  "Jump on to the code without thorough thinking, busy in applying modern buzz worded technologies, proud of solving problems harder way than it supposed to be.  Threaded, J2EE chasing,  Fancy message passing methodology over MQ systems, Application Servers,.." Name it! I have tried many things on a lot of topics.  Right, buzz words make my solution look fancier.&lt;br /&gt;I remember a team when I was in AOL.  It was my favorite team in my career so far.  The team was handling 5000 servers directly, more than 15000 indirectly.  To tell the truth, the best people that I remember are all them.  Their solutions were very &lt;span style="font-weight:bold;"&gt;elegant&lt;/span&gt;.  Berkeley DB was used for distributed storage.  Socket was used, but home grown message router is involved in.  No wonder that message router does not use any buzz word.  Non-blocking IO is essential because of massive data size.  But, most technical topics were pretty simple and basic.  Only exception was Java WebStart.  Grapher for analyzing data was written in Java Swing and it is distributed by webstart.  That was convenient.&lt;br /&gt;&lt;br /&gt;Elegant solution comes from thorough understanding of 1)nature of the problem, and 2)considering permutation of many possible subsolutions.  Sloppy engineer doesn't have room to think alternatives.  But, real guru can draw a complete solution in brain without touching a keyboard.  And he enjoys several pictures of solutions and choose what will be the best.  In this case, when he is using "global variable" (ah.. inevitable evil...), this really brings more &lt;span style="font-weight:bold;"&gt;&lt;/span&gt;convenience than complexity, with complete control.  One example will be main() and PostmasterMain() of postgresql.  It is beautiful piece of code.&lt;br /&gt;&lt;br /&gt;Again, architecture is the key thing to make solution elegant.  Do not just rush for a solution.  Prepare a big chunk of brain for a complete solution.  Key capability will be memory...  Yeah.  This is the train that I need to go for near future.  Either I become a code monkey or I grow up as an architect.  Things are not impossible.  The best people that I remember are also 'human beings'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-1081761089642632130?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/1081761089642632130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=1081761089642632130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1081761089642632130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1081761089642632130'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/01/easy-solution-on-complex-problem.html' title='Easy solution on complex problem.'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-2039382126403227517</id><published>2008-01-04T10:32:00.000-08:00</published><updated>2008-02-22T01:40:22.693-08:00</updated><title type='text'>simplest way for "ALT" key in xterm</title><content type='html'>After relocating to new place, Atlanta, with new work, my tasks are involved in many systems at the same time.  In this case, using xterm is more useful than konsole.  My konsole and emacs pair is generally one desktop, but multiple konsole or tabbed konsole for concurrent monitoring is annoying.  So, working with many xterms on one desktop.  xterm sucks when I need 'ALT' key.  The easiest way is to replace xterm with rxvt.  Here is my rxvt options:&lt;br /&gt;rxvt -mod alt -bg black -fg white  -vb +sb -fn 6x13&lt;br /&gt;&lt;br /&gt;Bind this command with 'WIN'+x, then it is easy to bring up Xterm-like terminal emulator with 'ALT' enabled.  If you are a fan of transparent background, Aterm is another good choice.  I don't use aterm any more.  First, transparency is obsolete since modern 3D based desktop manager(compiz-fusion/beryl) supports transparency for any type of win-frame.  Second, more importantly, I am not a fan of transparency anymore.&lt;br /&gt;&lt;br /&gt;One cool thing that I remember about transparent term is this.  I made no-frame 100% transparent terminal with enough width.  It is spawned with command "sudo tail -f /var/log/messages".   It fakes like log messages flowing on Desktop directly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-2039382126403227517?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/2039382126403227517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=2039382126403227517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2039382126403227517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2039382126403227517'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2008/01/simplest-way-for-in-xterm.html' title='simplest way for &quot;ALT&quot; key in xterm'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-1396699988898588287</id><published>2007-12-31T12:57:00.000-08:00</published><updated>2007-12-31T13:01:32.822-08:00</updated><title type='text'>Happy new year..</title><content type='html'>Unlike American culture, we Korean celebrate new year more than 'Merry Christmas'.  In more detail, new year has two sorts.  Solar (regular new year) and lunar ( aka Chinese new year ).  &lt;br /&gt;Anyway, for all of you who read this post, I wish truly your 'Happy new year.'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-1396699988898588287?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/1396699988898588287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=1396699988898588287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1396699988898588287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1396699988898588287'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/12/happy-new-year.html' title='Happy new year..'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-9048024345183599775</id><published>2007-12-24T11:40:00.000-08:00</published><updated>2008-02-22T01:42:53.998-08:00</updated><title type='text'>Emacs code folding with python</title><content type='html'>I tried out several packages.  outline-mode, allout, ecb, and hide-show.  hide-show was the only package that I can work with for 'code-folding'.  By the way, it is surprising that ECB didn't have code folding mode, even for major languages like C/C++.  &lt;br /&gt;&lt;br /&gt;Using hide-show is very easy.  No need to install extra package.&lt;br /&gt;M-x hs-minor-mode will activate it.&lt;br /&gt;&lt;br /&gt;The basic functions are:&lt;br /&gt;hs-hide-block&lt;br /&gt;hs-show-block&lt;br /&gt;&lt;br /&gt;And, maybe this will be useful:&lt;br /&gt;hs-show-all&lt;br /&gt;&lt;br /&gt;It has a short cut, too.  I am not used to it, at this time.  Shortcut makes sense, but I call this by M-x.  Maybe when I'm tired of function name, I will use their short cut key because I generally avoid my own short cut.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-9048024345183599775?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/9048024345183599775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=9048024345183599775' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/9048024345183599775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/9048024345183599775'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/12/emacs-code-folding-with-python.html' title='Emacs code folding with python'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-3529328732870818463</id><published>2007-12-18T10:55:00.000-08:00</published><updated>2007-12-18T10:56:42.758-08:00</updated><title type='text'>when thunderbird doesn't minimize to system tray,</title><content type='html'>issue 'kdocker thunderbird' when brining it up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-3529328732870818463?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/3529328732870818463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=3529328732870818463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3529328732870818463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3529328732870818463'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/12/when-thunderbird-doesnt-minimize-to.html' title='when thunderbird doesn&apos;t minimize to system tray,'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-4377778411134077150</id><published>2007-11-26T07:57:00.000-08:00</published><updated>2008-01-08T15:51:56.480-08:00</updated><title type='text'>/proc/[pid]/smaps and Perl Linux::Smaps</title><content type='html'>Recently, I came across a topic about 'Memory usage'.  In a doc of &lt;a href="http://www.kdedevelopers.org/node/1567"&gt;KDE memusage issue&lt;/a&gt; and &lt;a href="http://virtualthreads.blogspot.com/2006/02/understanding-memory-usage-on-linux.html"&gt; a post from here&lt;/a&gt;, measuring memory usage is tricky especially when the process is involved with shmem and shared libraries.  At the end of the doc, a reply is posted that 'from linux-2.6.14, smaps is supported.'&lt;br /&gt;Okay... 2.6.14 was published in 2005.  Catching up Kernel update should not be neglected like this.  :)   I definitely have been LAZY.&lt;br /&gt;Anyway, smaps is very useful to see actual memory mapping with content of a process.  Analyzing it seems awkward. So, I searched any useful tool at least making total of RSS.  It seems like Perl people came up with something.  ( I respect Perl hackers. )  Search for Linux::Smaps in CPAN..  Sounds very cool utility.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-4377778411134077150?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/4377778411134077150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=4377778411134077150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4377778411134077150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4377778411134077150'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/11/procsmaps-and-perl-linuxsmaps.html' title='/proc/[pid]/smaps and Perl Linux::Smaps'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-1382526641164865542</id><published>2007-11-14T08:23:00.000-08:00</published><updated>2008-02-22T01:46:50.471-08:00</updated><title type='text'>Result of new install</title><content type='html'>As mentioned, I recently wiped out my laptop and newly installed gentoo.  ATI with AIGLX still has problem with Xcomposite (xorg).  I thought 'well.. I will just wait and try 8.43 driver a few months later.'  Right.  I am no longer young and enthusiastic, but wait until someone fixes the problem.  &lt;br /&gt;&lt;br /&gt;Another issue is my Korean language pack.  skim does not work with QT4, but Gentoo ships qt4 by default.  I love newer version, always.  But, going back to nabi for this was face-frowning situation.  It's getting close to 10 years livinig in the US, I am using Korean less and less.  I meet Korean people, but in the work, I use English mostly.  More importantly, when I use computer, I tend to search more English websites than Korean websites.  So, no Korean language until it is fixed with qt4.  Again, I am getting old  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-1382526641164865542?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/1382526641164865542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=1382526641164865542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1382526641164865542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1382526641164865542'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/11/result-of-new-install.html' title='Result of new install'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-7863735667882675518</id><published>2007-11-12T05:58:00.000-08:00</published><updated>2007-11-12T09:28:12.401-08:00</updated><title type='text'>ATI and AIGLX support</title><content type='html'>1. Recently, ATI announced that fglrx-8.42 will support AIGLX.   &lt;br /&gt;2. Gentoo recently put compiz-fusion in their main repository&lt;br /&gt;&lt;br /&gt;Although some people had problem with AMD64 platform, I decided to try it out. Nothing wrong with Ubuntu Gutsy with Xgl, I always feel slightly uncomfortable on non-gentoo linux.  SO!! I wipe out and reinstall gentoo on my laptop.  Currently, emerge -uDN world is running before X11 install.  Once X11 is installed, I will download recent fireGL driver.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-7863735667882675518?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/7863735667882675518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=7863735667882675518' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7863735667882675518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7863735667882675518'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/11/ati-and-aiglx-support.html' title='ATI and AIGLX support'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-8483072042319738968</id><published>2007-11-04T22:43:00.000-08:00</published><updated>2008-02-22T01:51:20.678-08:00</updated><title type='text'>Emacs and Info page.</title><content type='html'>It's 1:43am.  If usual day-light-saving was applied, it is 2:43am.  I woke up in the middle of the night without any reason, and couldn't go back to sleep.  I thought about, 'This is a perfect chance to catch up my researches deferred for many months!' &lt;br /&gt;&lt;br /&gt;But, I couldn't start any of project.  I was not just for programming at this moment.  Instead, I decided to catch up some emacs stuff.  Emacs became my favorite editor for 6 months.  My previous post revealed that I was a vim user.  I used it for 8 years, and I switched to Emacs.  When I started to use Emacs this year, I thought 'Why do people cry about emacs so much?'  As vim was not intuitive, Emacs was not either.  Advanced stuff in Vim requires extensive knowledge, Emacs needs it, too.  First, it started with curiosity, after 6 months later I realize why Emacs is so much a great editor.&lt;br /&gt;&lt;br /&gt;Info must be one which makes emacs great editor.  In my opinion, info page in Emacs is one of the greatest documentation tool.  It had some of topics I already read from the web, or other sources.  If someone starts to use linux, I will recommend to learn how to use Info page.  Because, documentation accessibility is great.  It is like a good book shelf for many topics.  It is very well organized.  I would like to have chances to visit as many pages as possible.&lt;br /&gt;&lt;br /&gt;Luckily, I still remember core of vim.  I found myself editing files using vim when I sshed to servers.  I could bring Emacs over X forward, but these servers were mostly configured by vim.  I guess it's momentum.  I would not give up Vim, because it is also a great tool, but I would not spend time to research about vim anymore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-8483072042319738968?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/8483072042319738968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=8483072042319738968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8483072042319738968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8483072042319738968'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/11/emacs-and-info-page.html' title='Emacs and Info page.'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-2778294690978058421</id><published>2007-10-28T02:46:00.000-07:00</published><updated>2008-02-22T01:54:36.777-08:00</updated><title type='text'>Documentation..</title><content type='html'>I found myself writing a lot of documentation from my work.  Usually, I write a documentation only on source code.  This helps me tracking what I did.  I have a request to publish this in clear form to read, not in source code comment level.  So, I revise my projects and move documents into HTML form.  I remind the first time I came to work here.&lt;br /&gt;Our department did NOT have CMS.  No central documentation system.  The defense word was, 'we are small.'  I didn't bother to start one like tikiwiki.  I actually enjoyed not documenting my work :)   We have issue tracking system, but it is not used for programming issue.  We purchased it long time ago, and I feel very sorry that we are stuck to this.&lt;br /&gt;Back to documenting story, my best option to publish my work was HTML.  When I listed number of my projects, gosh it went up to 20.  It is still growing.  Sure, I worked a lot.  :)&lt;br /&gt;I am moving on.  I don't know what will be my next job, but excited to relocating to my new place in Atlanta, GA !!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-2778294690978058421?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/2778294690978058421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=2778294690978058421' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2778294690978058421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2778294690978058421'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/10/documentation.html' title='Documentation..'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-2881507075916539835</id><published>2007-10-15T09:31:00.000-07:00</published><updated>2008-02-22T01:58:18.157-08:00</updated><title type='text'>Suffering by cold</title><content type='html'>It's been a while that I didn't post any.  Something big occurs these days, but not complete yet.  When that happens, I will post.&lt;br /&gt;One of major thing happened that I can reveal is "COLD".  My big son suffered by this for 2 weeks.  It got to worse to 'pneumonia'.  Only thing I could do was just watch him fighting through it.  After his recover, my little one suffered by the similar symptom.  It had not worsened to pneumonia.   However, it must have been very painful for 4 month old baby.&lt;br /&gt;My wife was the next.  She can not finish a sentence without intervened by cough.  And once she starts to cough, it sounds very bad.  She lost her voice significantly.  She is recovering at this stage.  I guess she need a week or two for complete recovery.&lt;br /&gt;Now, I picked up a cold last weekend.  Last saturday, it started with small escalated temperature.  And, it is getting worse and worse.  I don't cough, but headache is the most annoying.  It is very bad for a programmer :(&lt;br /&gt;Worse part is, I have no sick leave left.  A hahaha.  It was very nice to have a month of paternity leave when Jaron was born.  :)    I don't regret.  Since I am a healthy young man, I think I can fight through this disease without any sick leave.  Luckily, I don't cough.  So, people don't feel get spread by me.&lt;br /&gt;When Jake was sick, he had 103 F temperature.  That must be very hard for him.  I feel so much sorry about him, and I appreciate him to finish his sickness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-2881507075916539835?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/2881507075916539835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=2881507075916539835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2881507075916539835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2881507075916539835'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/10/suffering-by-cold.html' title='Suffering by cold'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-1344574742152168794</id><published>2007-08-13T15:40:00.000-07:00</published><updated>2007-08-13T15:52:57.716-07:00</updated><title type='text'>One main advantage of using/programming in KDE</title><content type='html'>IPC is a common problem for system programming.  If IPC mechanism is designed poorly, the cost comes when the software needs scalability.  However, designing full blown IO framework upfront is painful.  ( Blocked forever is the worst case, and I may not want to think of non-blocking or asynchronous by signal yet. )  If this bothers, I recommend using DCOP interface.&lt;br /&gt;Example will explain better.  I am reading documents using 'kpdf'.  And I want to trace my reading on this document.  One application of this log will be my reading speed on this document.  &lt;br /&gt;If you are running KDE, dcop server is already running.  If not, dcop server can be still manually started.  Assuming we have dcop server, try this command.&lt;br /&gt;&lt;br /&gt;$dcop&lt;br /&gt;&lt;br /&gt;Then, a list of dcop(pable) application will appear. Then,&lt;br /&gt;&lt;br /&gt;$ dcop kpdf-6961 kpdf currentPage&lt;br /&gt;223&lt;br /&gt;&lt;br /&gt;Walla.  It gave me current page that I am on.  If you play with dcop a little further, you will be amazed that it can be a better way to talk to another process.  Registering a function to dcop(pability) isn't hard either.  If IPC should be considered for local application, this approach should be very appealing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-1344574742152168794?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/1344574742152168794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=1344574742152168794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1344574742152168794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1344574742152168794'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/08/one-main-advantage-of-usingprogramming.html' title='One main advantage of using/programming in KDE'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-3998782643970483229</id><published>2007-08-08T07:31:00.000-07:00</published><updated>2007-08-08T07:38:43.414-07:00</updated><title type='text'>krusader</title><content type='html'>I used konqueror as my file manager.  konqueror supported enough features that I needed.  A few days ago, I read something about KDE.  I think it was about KDE4.  In the article, krusader was mentioned and today I installed it.  It was amazing.  It had more than I needed, however having these feature in hands definitely should help.  &lt;br /&gt;I love KDE.  Mostly this preference comes from my laziness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-3998782643970483229?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/3998782643970483229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=3998782643970483229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3998782643970483229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3998782643970483229'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/08/krusader.html' title='krusader'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-5568776293115132909</id><published>2007-08-06T02:49:00.000-07:00</published><updated>2007-08-06T07:18:47.538-07:00</updated><title type='text'>compiz-fusion.</title><content type='html'>I have succeeded in installing compiz-fusion.  I liked shift-switcher.  I am greedy that I want shift-switcher to provide a mode change by short cut key.  Currently only way to change mode from 'cover' to 'flip' can be done through menu, only.  I hope this can be done  ;)&lt;br /&gt;In the meanwhile, I bound a short cut for CompizConfig.  Ctrl + Super + Alt + 'C'.  Couldn't bring any other unique combination without conflict.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-5568776293115132909?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/5568776293115132909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=5568776293115132909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5568776293115132909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/5568776293115132909'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/08/compiz-fusion.html' title='compiz-fusion.'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-575082376027525448</id><published>2007-08-04T20:04:00.000-07:00</published><updated>2007-08-04T20:11:40.040-07:00</updated><title type='text'>KDE struggles on my new hardware</title><content type='html'>I am so depressed.  I hope I know KDE framework better to fight through my favorite KDE applications.  I sent a bug-report about amarok and konqueror, but I know I just gave them a burden without much of useful information.  I couldn't attach any useful clue.  &lt;br /&gt;&lt;br /&gt;When I brought up amarok for the first, it gave me a pop up of 'want to install MP3 plugin?'.  At that time, my wireless was struggling.  So, 'not now' was my answer.  After that, amarok wouldn't respond at all.  I thought it remembers my network carrier as a wireless.  So, I dropped ndiswrapper and plug in for eth1 (wired network).   Not working still..  I am using audacious instead.&lt;br /&gt;&lt;br /&gt;Konqueror is better than this situation.  But, I can not bring many features as I expect.  It is a big cost for very young and new hardwares.  &lt;br /&gt;To make all this worse, my right hand wrist is picking up a soaring pain.  I am still young to have a joint problem  :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-575082376027525448?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/575082376027525448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=575082376027525448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/575082376027525448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/575082376027525448'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/08/kde-struggles-on-my-new-hardware.html' title='KDE struggles on my new hardware'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-4381104988574796390</id><published>2007-08-03T05:38:00.000-07:00</published><updated>2008-02-22T02:03:43.493-08:00</updated><title type='text'>I am alive</title><content type='html'>I know that I am not a popular blogger, and nobody cares if I haven't pinged to my readers.  But, I do anyway.  Hey, I am alive :)&lt;br /&gt;&lt;br /&gt;Okay, I got my new laptop which dragged me several days.  I audaciously tried gentoo linux on brand new Dell 1521.  It has 2x64bit turion with 2GB of memory.  ATI Xpress 1270 onboard VGA.  I was very brave to give gentoo on it, and I struggle, now.&lt;br /&gt;Dell 1521 is introduced in the market only 2 months ago and its HW parts are very new.  And it is 64bit processor.. sigh..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-4381104988574796390?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/4381104988574796390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=4381104988574796390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4381104988574796390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/4381104988574796390'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/08/i-am-alive.html' title='I am alive'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-8044568043320897995</id><published>2007-07-26T05:56:00.000-07:00</published><updated>2007-07-26T06:04:03.293-07:00</updated><title type='text'>Bye, Xemacs 21. Move to Emacs 23</title><content type='html'>I was a vim user for long time.  And I moved to emacs world about 4 months ago. &lt;br /&gt;I am getting used to it more and more.  I especially liked lisp syntax to configure the environment.  Currently, I am working on writing emacs plugin to look up english dictionary.  I need urllib or socket with some nice parser.  Anyway, getting into it and enjoying emacs.&lt;br /&gt;One thing I couldn't bare on Xemacs was that it was not friendly with Korean Language system in KDE, I believe it starts from X layer.  Before I fight with UTF-8 on Xemacs, I looked up emacs.kldp.org and found Emacs 23 supports UTF-8 with Korean enabled out of the box!&lt;br /&gt;I tried it out, and loved it.  I migrated custom.el from .xemacs to .emacs file. &lt;br /&gt;It is very radical move because Emacs 22 is still not in stable tree.&lt;br /&gt;But, I got what I wanted and life goes on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-8044568043320897995?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/8044568043320897995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=8044568043320897995' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8044568043320897995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8044568043320897995'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/07/bye-xemacs-21-move-to-emacs-23.html' title='Bye, Xemacs 21. Move to Emacs 23'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-320496396406010697</id><published>2007-07-18T03:50:00.001-07:00</published><updated>2007-11-12T07:54:30.295-08:00</updated><title type='text'>Gentoo: tip for KDE</title><content type='html'>Yesterday, I mentioned that I am thinking of gentoo for my office machine and will be planned for later.  Wrong!  I did it yesterday a while after I posted the article.  I admit that I was nervous a little bit because the machine contains many bits and pieces for work.  If any of them failed to be migrated, it will cost me extra recovery time.&lt;br /&gt;Then, I thought, "Why not?".  It does not cost me loss of data.  It only costs me extra work for recovery.  As long as, I can bring data back, that's fine.&lt;br /&gt;&lt;br /&gt;Things went okay.  I backed up most or all of necessary data, and restored them back including pg dbs.  My tool for window manager is still KDE.  It took me just about a day to bring up.  Full blown kde-meta compilation will take longer than that.  And, slow.&lt;br /&gt;To make KDE responsive and fast, I do this.&lt;br /&gt;&lt;br /&gt;# emerge kdebase-startkde     ( for basic kde)&lt;br /&gt;# emerge konsole   ( I always need terminal with enhanced control )&lt;br /&gt;# emerge kicker kmenuedit&lt;br /&gt;&lt;br /&gt;You can think of KDE with only these three for XFCE, stripped down version of Gnome.  Then, build in anything that will be needed.  For example, my favorite amarok.&lt;br /&gt;&lt;br /&gt;# emerge amarok.&lt;br /&gt;&lt;br /&gt;:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-320496396406010697?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/320496396406010697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=320496396406010697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/320496396406010697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/320496396406010697'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/07/gentoo-tip-for-kde.html' title='Gentoo: tip for KDE'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-2828449447632013349</id><published>2007-07-17T03:56:00.000-07:00</published><updated>2007-07-18T03:31:12.211-07:00</updated><title type='text'>Linux: Gentoo vs. Ubuntu</title><content type='html'>I am a big fan of gentoo.  I believe it is the most flexible Linux distribution.  My laptops were gentoo.  However, in my workplace, I use Ubuntu.  My supervisor does not like tweaked solution, and I understand.  If I am a manager, I don't want to solve problems harder than necessary.  Our deploying target is RedHat AS and my environment is already not matching and it does not need to match.  Anyway, my package will be installed with install script.  Why not use Gentoo?&lt;br /&gt;&lt;br /&gt;I would like to.  That is currently a big dilemma.  We are pretty busy this summer, but after the summer, let's consider :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-2828449447632013349?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/2828449447632013349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=2828449447632013349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2828449447632013349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2828449447632013349'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/07/linux-vs-ubuntu.html' title='Linux: Gentoo vs. Ubuntu'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-7632618071541014646</id><published>2007-07-12T10:18:00.000-07:00</published><updated>2007-07-16T07:25:04.059-07:00</updated><title type='text'>gentoo on slow system</title><content type='html'>This is a dilemma.  Modern operating system does not like slow system with not enough memory.  Let me give my old laptop as an example.  This is Celeron 1.1Ghz with 256MB ram.   Cache size is 256Kb.  First, Windows XP, the mostly used OS these days, can survive barely with fresh install from original recovery CD (Home edition).  But, as patches and service packs are added up, getting sluggish.  Eventually, fully patched machine will give unusably slow machine.  To use this computer, exposing to risk of unpatched status is inevitable.&lt;br /&gt;&lt;br /&gt;Second, Windows 2000.  Ha ha ha.  Unless somebody has a too much time to experiment how long it takes for fully patched with gazillian times of reboot.  I don't want to try, but I can imagine myself stuck in this ugly box patching and rebooting repeatedly.&lt;br /&gt;&lt;br /&gt;Then, linux becomes the key.  However, current ubuntu/kubuntu desktop release will not be happy with 256Mb ram.  It will be as slow as Windows XP.  We can use debian or ubuntu server and start from there.  Light window manager like fluxbox or window maker with small but powerful system monitor like conky will do it.  Personally, I prefer fluxbox.&lt;br /&gt;&lt;br /&gt;When eagerness to offload unused kernel module or strip down application thanks to USE flags comes into play, gentoo brings serious dilemma.  As much I don't want to be stuck updating windows machine, as the same I don't want to be stuck looking at compiling screens.&lt;br /&gt;&lt;br /&gt;I can just compile and leave.  What if emerge process failes in the middle?  Okay, then use the box while compiling.  That's what I do. Then, the machine is usable, but not fun.  Especially, when emerging, it already lost sometimes half, sometimes fully lost cpu resource.  Plus, firefox is slow!!&lt;br /&gt;But, the result will be the cleanest.&lt;br /&gt;&lt;br /&gt;The last thing that I want to see is 'update candidate, glibc.'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-7632618071541014646?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/7632618071541014646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=7632618071541014646' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7632618071541014646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7632618071541014646'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/07/gentoo-on-slow-system.html' title='gentoo on slow system'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-7603898498865312117</id><published>2007-07-11T23:55:00.000-07:00</published><updated>2007-07-12T10:50:01.423-07:00</updated><title type='text'>gentoo: ndiswrapper can't find CONFIG_NET_RADIO</title><content type='html'>I was very interested in tickless kernel for longer battery life on laptop.   So, when I saw kernel-2.6.22 on portage, I began to emerge.  Although it was 3:00 in the morning, I couldn't go to sleep without finishing the job.&lt;br /&gt;&lt;br /&gt;My gentoo system is very slow machine.  5 year-old Intel Celeron (256KB cache) with 256MB ram.  Taking so long time for kernel compilation was bothersome especially in sleepy brain.  Well, finally finished, (GOSH! forgot to check how long it took.  Kernel compile does not leave a log in /var/log/emerge.log  )&lt;br /&gt;&lt;br /&gt;By reboot, I found two things broken.  My sound and ndiswrapper.  ndiswrapper 1.44 ebuild was complaining CONFIG_NET_RADIO.  At first, I thought, 'I forgot to visit networking section.'  :)   But, before menuconfig,  &lt;span style="font-weight: bold;"&gt;grep 'NET_RADIO' .config&lt;/span&gt; on /usr/src/linux surprised me.  Nothing!!&lt;br /&gt;Okay, if an application is complaining an non-existing CONFIG option in kernel, most likely this must be gone.  I found this  entry from googling:&lt;br /&gt;&lt;a href="http://www.blogger.com/img/gl.link.gif"&gt;http://bugs.gentoo.org/show_bug.cgi?id=179951&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I turned on new config, CONFIG_WIRELESS_EXT, and spent compiling kernel in sleepy brain once again, rebooting, touching /etc/portage/package.mask and package.keywords for ndiswrapper, and emerging...  And it was solved.  modprobe successfully loaded ndiswrapper.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-7603898498865312117?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/7603898498865312117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=7603898498865312117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7603898498865312117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7603898498865312117'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/07/gentoo-ndiswrapper-cant-find.html' title='gentoo: ndiswrapper can&apos;t find CONFIG_NET_RADIO'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-6625282160457760884</id><published>2007-07-03T05:50:00.000-07:00</published><updated>2007-07-03T06:14:44.078-07:00</updated><title type='text'>firefox: not carrot, but caret browsing (F7)</title><content type='html'>Carrot?  where did I bring this word from?&lt;br /&gt;Reminding the early version of firefox, it successfully gave focus on the link that I typed.  That was nice feature, but I didn't use it much.  The primary reason was, I think, if the page has so many 'keywords' that I type, I still need to use mouse.&lt;br /&gt;Today, I accidentally pressed F7, and it said 'caret'.  But somehow I misinterpreted it to carrot.  And googled it.  Later I found it was caret.  By changing mode, it gives a little finer control on the webpage.&lt;br /&gt;For example, in caret mode, it is possible to click a link using keyboard.  Press Ctrl-F or '/'.  ( '/' is a vim search key.  )  type some word and enter.  The caret will highlight the link and pressing enter once again will click.  Based on one's preference, this can be useful or equally inconvenient as mouse.&lt;br /&gt;I am taking the latter.  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-6625282160457760884?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/6625282160457760884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=6625282160457760884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/6625282160457760884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/6625282160457760884'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/07/firefox-not-carrot-but-caret-browsing.html' title='firefox: not carrot, but caret browsing (F7)'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-1347153613687654117</id><published>2007-06-28T09:41:00.000-07:00</published><updated>2007-06-28T09:50:52.710-07:00</updated><title type='text'>oracle: data with single quote</title><content type='html'>When using java, prepared statement can insert string with single quote easily.  I tried to achieve the same thing with python.  I finally got prepared statement using cx_Oracle, but it was very ugly and unintuitive.&lt;br /&gt;I tried this task with postgresql hoping for a better solution.  Things were worse in Postgres.  I knew that my favorite psycopg2 does not support prepared statement, yet.  But, the rest of the drivers, such as pypgsql and all others that I have researched, were in the same status.&lt;br /&gt;&lt;br /&gt;Anyway, I found this this link:&lt;br /&gt;&lt;a href="http://catherinedevlin.blogspot.com/2005_07_01_archive.html"&gt;http://catherinedevlin.blogspot.com/2005_07_01_archive.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Oracle had a different idea.  Different quote operator.  q'| |'.  Like python block quote('''), it relieves single quote when wrapped around it.&lt;br /&gt;&lt;br /&gt;Insert into tbl(txt) values ( q'|Hello world's geeks.|' );&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-1347153613687654117?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/1347153613687654117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=1347153613687654117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1347153613687654117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1347153613687654117'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/06/oracle-data-with-single-quote.html' title='oracle: data with single quote'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-8697036414833135128</id><published>2007-06-28T07:31:00.000-07:00</published><updated>2007-06-28T07:40:15.456-07:00</updated><title type='text'>Coming back to work after the vacation</title><content type='html'>Thanks to my second son, Jaron, I had a wonderful vacation.  It was the best and the busiest vacation that I had.  Actually, I came back early this week.  I already spent three business days in my office.  I was afraid of the big eagerness of leaving my office, but that wasn't too much bad.  I sit down nicely and processed pending jobs.&lt;br /&gt;Programming skills needed time to get up to speed.  English was troubled for a while, Korean much more fluent :)  I hope my kids pick up Korean first.&lt;br /&gt;&lt;br /&gt;Now, the good days of vacation is over and the life resumes with an additional responsibility.  I don't mind, though.  Maybe, Jake will object?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-8697036414833135128?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/8697036414833135128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=8697036414833135128' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8697036414833135128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8697036414833135128'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/06/coming-back-to-work-after-vacation.html' title='Coming back to work after the vacation'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-3204183456603423199</id><published>2007-06-07T21:05:00.001-07:00</published><updated>2007-06-07T21:28:56.458-07:00</updated><title type='text'>my new family.</title><content type='html'>On May 26th, 2007, my second son, Jaron, was born.  Having paternity leave now.  Yeah~~~.  It was the same hospital, the same level, but the room was the other side of hall as we were there two years ago.  Funny thing is that not my wife but I am having emotional fluctuation mostly toward happy side with a little bit of tears ( Shame on ME, a man with tear! )&lt;br /&gt;Anyway, his first image brought a deja-vu.  He looks exactly the same with my first one, Jake.  When getting a chance, I want to show pictures of my sons side by side.  My wife and I took a picture on purpose when we put Jaron in the baby basket for the first time.  We successfully took the same angle, the same pause, but in different clothes two years ago as we took Jake.  If somebody sees these pictures side by side, 'Hmmmm,... Why did you change baby's clothes on discharge from the hospital?  Were you guys bored enough?'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-3204183456603423199?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/3204183456603423199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=3204183456603423199' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3204183456603423199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3204183456603423199'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/06/my-new-family.html' title='my new family.'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-7336449871696685153</id><published>2007-05-23T05:24:00.001-07:00</published><updated>2007-05-23T05:33:31.668-07:00</updated><title type='text'>Python twisted part 2</title><content type='html'>Several days ago, I have introduced python twisted (and I just mentioned perl POE. )  The application that I have created on that day needed a new feature, Control Port.  It wasn't a big deal.  I opened another port with separate protocol that I have defined and spit back CSV of requested report.   CSV can be easily turned into a graph.  Supporting XML seems like too much for this but can be done easily thanks to BeautifulSoup.  I also supported 'stop the daemon' for fun.  Took me just 1 hour !!&lt;br /&gt;The beauty of this was that control part seamlessly communicates with collectors because they are running under the same application.  At the same time, I do NOT need to think about Threading and locking.  How nice it is !!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-7336449871696685153?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/7336449871696685153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=7336449871696685153' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7336449871696685153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/7336449871696685153'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/05/python-twisted-part-2.html' title='Python twisted part 2'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-2579475609237758169</id><published>2007-05-17T05:18:00.000-07:00</published><updated>2007-06-06T16:00:21.574-07:00</updated><title type='text'>python twisted</title><content type='html'>It is just over 1 year that I have used &lt;a href="http://twistedmatrix.com/"&gt;twisted&lt;/a&gt;.  I actually used Perl &lt;a href="http://poe.perl.org/"&gt;POE&lt;/a&gt; before I used twisted.  It does not matter which one is chosen.  Python users will use twisted, Perl users will use POE.  They both are very useful.  Personally, I prefer twisted simply because I am a python user.&lt;br /&gt;These are called asynchronous high level network framework.  Sometimes word 'abstracted' is attached in introductory contents.&lt;br /&gt;First thing we have to focus is what it is.   'Abstracted' or 'High level' can be best described as 'Protocol Implemented'.  I do not have to worry about protocol specifics. I just call methods from objects instantiated from twisted.SomePackage.   And asynchronous means, not synchronous.  Then, someone may ask what is synchronous?  Let's simplify that 'synchronous' is similar way to have  conversation between human beings.   One person asks, and wait until the other responses.  Peers don't speak at the same time.  In asynch mode, they do.  More in detail can be found in Unix Network Programming ( a.k.a &lt;a href="http://books.google.com/books?id=ptSC4LpwGA0C&amp;dq=unix+network+programming&amp;amp;pg=PP1&amp;ots=Kp7GPgeqTn&amp;amp;sig=WMyWY3XLv82H4oi711TpbLb3M0w&amp;prev=http://www.google.com/search%3Fq%3Dunix%2Bnetwork%2Bprogramming%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu:en-US:official%26client%3Dfirefox-a&amp;amp;sa=X&amp;oi=print&amp;amp;ct=title"&gt;UNP&lt;/a&gt; ).  There are more in detail about asynchronous communication (non-blocking, signal driven, etc.) I recommend reading UNP for network programmers.  Chapters about Async-communication was the best.&lt;br /&gt;With these network frameworks, any network driven application can be very simplified in terms of number of lines of code.  Especially, server applications processing custom protocols are very simplified.  Buffer handling/IO handling is almost trivial and the performance is even faster thanks to async IO's better utilization of bandwidth.&lt;br /&gt;&lt;br /&gt;This morning, I have written another network server processing message from various servers.  The key word is 'This Morning'.  That's right.  I wrote this in low degree of hours.  Actually, in 2 hours.  I just process the message and stuff into sqlite3, and my life goes on.  If I have to write the same code in C, it should take up at least 1 day.  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-2579475609237758169?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/2579475609237758169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=2579475609237758169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2579475609237758169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2579475609237758169'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/05/python-twisted.html' title='python twisted'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-1595629641688231556</id><published>2007-05-08T12:58:00.000-07:00</published><updated>2007-05-08T13:08:56.617-07:00</updated><title type='text'>Stripping HTML tag</title><content type='html'>I had to write a module to 'word count' a web page.  This required to strip the HTML tags out of the url read.  I quickly googled, but I felt that this kind of easy problem doesn't even need googling.  So, I came up with simple solution.&lt;br /&gt;&lt;br /&gt;This is very rough test code written using BeautifulSoup.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lucky.umd.edu/code/strip-htmltag.py"&gt;http://lucky.umd.edu/code/strip-htmltag.py&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-1595629641688231556?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/1595629641688231556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=1595629641688231556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1595629641688231556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/1595629641688231556'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/05/stripping-html-tag.html' title='Stripping HTML tag'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-3725826542895203640</id><published>2007-05-01T04:56:00.000-07:00</published><updated>2007-05-10T10:50:42.090-07:00</updated><title type='text'>My tool set</title><content type='html'>1. springnote.com and basKet:&lt;br /&gt;&lt;br /&gt;These are my note takers.  I normally use springnote.com because of accessibility.   'Hey, it is another  Korean website.'   Sorry  :)&lt;br /&gt;&lt;br /&gt;2.  Google tool set:&lt;br /&gt;&lt;br /&gt;I do not have to explain what are google tool set.  Google always brings one of the essential tools for life.  Beginning with gmail, there are calendar, map, earth, doc, personalized google portlets, blog(Of course!), analytics, talk, and most infamous Google SEARCH!  I can not live without google.&lt;br /&gt;&lt;br /&gt;3. flickr, kflickr, flickrapi(by Beej)&lt;br /&gt;&lt;br /&gt;This is one that google couldn't rule.  I tried to use picasa from google, flickr really ruled.  My pictures and my family's pictures are posted there.&lt;br /&gt;&lt;br /&gt;4. kdissert, vym for brain storming.&lt;br /&gt;&lt;br /&gt;There is a project called 'freemind'.  I used to use it but after I migrated to KDE from gnome, I used kdissert instead.  vym helps kdissert.  'freemind' is not a bad tool, but I like simplicity to use in kdissert.&lt;br /&gt;&lt;br /&gt;5. bloglines  for news read&lt;br /&gt;&lt;br /&gt;I use this not only for news reader, but also for good article keeper with 'important' tag.  That is very useful.&lt;br /&gt;&lt;br /&gt;6. KDE desktop with Gentoo, Ubuntu&lt;br /&gt;&lt;br /&gt;When using linux, I chose KDE for my desktop.  I started with bare gnome about 7-8 years ago when I first used Linux ( At that time, I just started computer science degree ).  Then I moved to blackbox, later it became fluxbox.  Then, I moved back to gnome after CPU hits GHz and 512 Mb became general PC memory size.  And then, I settled in KDE.  KDE is just very easy and well-balanced desktop environment.&lt;br /&gt;&lt;br /&gt;7. keychain for ssh-agent&lt;br /&gt;&lt;br /&gt;Because of my work, I have to jump from machines to machines.  Without this, typing up my password everytime should not be imagined!!&lt;br /&gt;&lt;br /&gt;8. Other utilities for fun&lt;br /&gt;&lt;br /&gt;Such as amaroK, mplayer, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-3725826542895203640?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/3725826542895203640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=3725826542895203640' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3725826542895203640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/3725826542895203640'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/05/my-tool-set.html' title='My tool set'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-76673614551869467</id><published>2007-04-26T04:20:00.000-07:00</published><updated>2007-04-27T10:27:29.284-07:00</updated><title type='text'>One thing at a time...</title><content type='html'>I am not saying that things should be accomplished in steps.  I am talking about myself.&lt;br /&gt;&lt;br /&gt;My mindset is one thing at a time.  Once a subject takes over my mind, that thing has it all.  When I learned and worked computer programmings before my son was born, I used to hadve topics of programmings in all of my mind.  I thought about coding when driving, walking, and sitting on my desk.  This was very productive way so that I was always ready to jump in.&lt;br /&gt;&lt;br /&gt;Not any more.  My son has my mind all.  I need a warm-up period for my brain to get up to speed when coding.  Evaluation of 'Okay, what is the situation that I am in? ' takes longer than I used to evaluate.  Worse thing is that I forget all of my work as soon as I see the pictures of my son on my desk.&lt;br /&gt;Back in my young life, I was indulged in playing guitar.  After my high school, I practiced my guitar like professional.  At least 10 hours a day, and 12 hours straight playing was easy.  I remember that sometimes I couldn't speak.  I lost my verbal ability temporarily because of music.  One thing at a time went very extreme.&lt;br /&gt;&lt;br /&gt;My wife mentioned that she felt that she lost a bit of her short term memorization after having our first son, Jake.  Biologically, that was a proper side effect of pregnancy.  But, me???  I was not the person carrying a baby and suffering for 10 months.  But, why am I losing my memory?  And ability to concentration?&lt;br /&gt;&lt;br /&gt;To tell the truth and conclusion, this is good.  I have never been happier than these days.  Especially, we will have our second son in 6 weeks.  I always thought I have been a lucky man with my basic needs were always met.  But, these days are the happiest moment.&lt;br /&gt;Losing my productivity is my side effect, but that's okay as long as I meet the expectation for my performance review.  Eventually, I will get my productivity back.  Enjoying with my family is more fun at this moment, and that's what my mind said, 'One at a time.'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-76673614551869467?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/76673614551869467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=76673614551869467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/76673614551869467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/76673614551869467'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/04/one-thing-at-time.html' title='One thing at a time...'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-8828581373375289106</id><published>2007-04-25T11:25:00.000-07:00</published><updated>2007-04-25T13:10:35.567-07:00</updated><title type='text'>Dynamic prefix of PYTHON</title><content type='html'>autoconf suggests --prefix switch.  Probably, anyone who has compiled a package from source(such as apach or mysql) may be familiar to this switch.  If we look into a little further, any binary file needs to be copied into memory (we call this process image), all of file locations must be known beforehand.  Therefore, compiling C/C++ sources requires where to find other objects, especially if the objects are *.so.&lt;br /&gt;Then, once it copied into process memory, the process doesn't care where this object file came from.  This is a different problem.  Probably, anyone who has compiled a package from source for multiple versions suffered for libraries of different versions.  One of the primary reason is that compiled object remembers wrong places for library, but different object file exists there as the same name.  'make clean' or 'make distclean' should be used in proper time.&lt;br /&gt;&lt;br /&gt;Python, on the other hand, is an interpreted language.  Compilation is not required.  (*.pyc matters, but let's simplify at this moment. )  Python searches library at runtime, and it loads the library at runtime.  So far, no difference.  But, the library location does not need to be known beforehand.  The most beautiful thing is that the location can be determined by looking at stack frame!  This can eliminate the needs of compilation '--prefix' switch.&lt;br /&gt;Consider this segment of code.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lucky.umd.edu/code/dynamic-prefix.py"&gt;http://lucky.umd.edu/code/dynamic-prefix.py&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This segment of code is very simple (6 lines of code including spaces.)  It just prints what is the absolute path of the executable.  Regardless how it is called, it should return the same path.  If we have [Arbitrary App Home] and, under this [Arbitrary App Home] are subdirectories of bin, etc, and lib.  And bin subdir has executable runme.py.   Regardless of how runme.py was called, it knows where it is and set right value of the [Arbitrary App Home].  Therefore, we  don't need --prefix at all.&lt;br /&gt;&lt;br /&gt;This is VERY Nice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-8828581373375289106?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/8828581373375289106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=8828581373375289106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8828581373375289106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/8828581373375289106'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/04/dynamic-prefix-of-python.html' title='Dynamic prefix of PYTHON'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3451922019587875700.post-2205404293995582539</id><published>2007-04-23T10:57:00.000-07:00</published><updated>2007-04-26T08:57:15.826-07:00</updated><title type='text'>begin to flickring..</title><content type='html'>I started to use flickr.&lt;br /&gt;I thought about using picasa first, because I like what google is doing.&lt;span style="font-weight: bold;"&gt;  &lt;/span&gt;While I was playing with Gdata client, picasa client wasn't in the package.  There were Java and .Net client, but no python.  Since there were 3 posts on picasa python client/library, I could wait until they release the code.  Or I checked flickr and found flickrapi written by beej.  :)&lt;br /&gt;I just uploaded 80 pictures from infamous cyworld.  Since cyworld didn't expose an interface downloading pictures, I had to work around.  It was annoying..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3451922019587875700-2205404293995582539?l=litdream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://litdream.blogspot.com/feeds/2205404293995582539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3451922019587875700&amp;postID=2205404293995582539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2205404293995582539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3451922019587875700/posts/default/2205404293995582539'/><link rel='alternate' type='text/html' href='http://litdream.blogspot.com/2007/04/begin-to-flickring.html' title='begin to flickring..'/><author><name>Raymond</name><uri>http://www.blogger.com/profile/12590881589757651877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://bp1.blogger.com/_c6sA-rPrMlo/R4QL8wzkBTI/AAAAAAAAACM/ZiIEJ1499sw/S220/images.jpeg'/></author><thr:total>0</thr:total></entry></feed>
