<?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-1755575872729350021</id><updated>2011-10-19T22:20:19.371-07:00</updated><category term='google app engine'/><category term='syntax highlight'/><category term='code'/><category term='voice-enable'/><category term='blog'/><category term='application'/><category term='vietnam'/><category term='ajax'/><category term='windows live messenger'/><category term='chinese chess'/><title type='text'>Pragmatic Logic Labs</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pragmaticlogiclabs.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Kevin Hoang Le</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1755575872729350021.post-276004244143764932</id><published>2010-05-20T07:09:00.000-07:00</published><updated>2010-05-20T07:09:56.090-07:00</updated><title type='text'>FIFA World Cup 2010 theme songs</title><content type='html'>Enjoy the official FIFA World Cup 2010 theme songs.  Just can't wait for the opener.  I know I'll miss it once the Cup is over because the next one won't happen for another 4 years.    &lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/kfZIIKVfJ1w&amp;hl=en_US&amp;fs=1&amp;"&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/kfZIIKVfJ1w&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ftIfFafTA0o&amp;hl=en_US&amp;fs=1&amp;"&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/ftIfFafTA0o&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&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/1755575872729350021-276004244143764932?l=pragmaticlogiclabs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pragmaticlogiclabs.blogspot.com/feeds/276004244143764932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2010/05/enjoy-official-fifa-world-cup-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/276004244143764932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/276004244143764932'/><link rel='alternate' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2010/05/enjoy-official-fifa-world-cup-2010.html' title='FIFA World Cup 2010 theme songs'/><author><name>Kevin Hoang Le</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1755575872729350021.post-67453080740686979</id><published>2010-04-27T21:35:00.001-07:00</published><updated>2010-04-27T21:37:16.139-07:00</updated><title type='text'>Python 2.5, Google AppEngine and Ubuntu 10.04</title><content type='html'>One day before Ubuntu 10.04 is released, I just can&amp;#39;t wait so I built a live, persistent Ubuntu 10.04 on a USB flash drive.&amp;nbsp; I recently decided to install Windows 7 on my really, really old laptop which only has 40GB hard-drive, partitioning for a dual-boot of Windows 7 and Ubuntu would not leave too much space left for Windows.&amp;nbsp; So I wanted to move my entire Google App Engine development environment computer onto a USB flash drive.&amp;nbsp; I paid $10 for a 4GB Microcenter-brand USB flash drive. &amp;nbsp; &lt;br&gt;&lt;br&gt;But I am quickly disappointed to find out that &lt;a href="http://code.google.com/appengine/docs/" id="a:th" title="Python 2.5 which is still a requirement for Google App Engine"&gt;Python 2.5 which is still a requirement for Google App Engine&lt;/a&gt; has been permanently &lt;a href="https://bugs.launchpad.net/ubuntu/+source/pylucene/+bug/538654" id="nd7y" title="removed"&gt;removed&lt;/a&gt; &lt;a href="http://ubuntuforums.org/showthread.php?t=1425306" id="rwt7" title="from Ubuntu 10.04"&gt;from Ubuntu 10.04&lt;/a&gt;.&amp;nbsp; So it looks like I would have to take an alternative route which is using Java.&amp;nbsp; Of course, there are worse things in life than having to develop Java-based Google App Engine applications.&amp;nbsp; Having said that, I will monitor any news coming out &lt;a href="http://code.google.com/events/io/2010/" id="w046" title="Google I/O 2010"&gt;Google I/O 2010&lt;/a&gt;, since I have a feeling it&amp;#39;s about the right time that App Engine moves to Python 2.6.&amp;nbsp; Google I/O seems like the right setting for this announcement. &lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1755575872729350021-67453080740686979?l=pragmaticlogiclabs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pragmaticlogiclabs.blogspot.com/feeds/67453080740686979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2010/04/python-25-google-appengine-and-ubuntu.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/67453080740686979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/67453080740686979'/><link rel='alternate' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2010/04/python-25-google-appengine-and-ubuntu.html' title='Python 2.5, Google AppEngine and Ubuntu 10.04'/><author><name>Kevin Hoang Le</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1755575872729350021.post-4602331226280662453</id><published>2010-04-22T21:57:00.000-07:00</published><updated>2010-04-23T14:21:57.967-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vietnam'/><title type='text'>Hello Vietnam</title><content type='html'>The singer's name is Pham Quynh Anh who's a Vietnamese-Belgian.  I don't have any musical talent but I know when I hear a really great voice, like hers.  The song is pretty good too.&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube-nocookie.com/v/ZLBlowqRvMg&amp;hl=en_US&amp;fs=1&amp;rel=0"&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-nocookie.com/v/ZLBlowqRvMg&amp;hl=en_US&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&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/1755575872729350021-4602331226280662453?l=pragmaticlogiclabs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pragmaticlogiclabs.blogspot.com/feeds/4602331226280662453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2010/04/hello-vietnam.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/4602331226280662453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/4602331226280662453'/><link rel='alternate' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2010/04/hello-vietnam.html' title='Hello Vietnam'/><author><name>Kevin Hoang Le</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1755575872729350021.post-2008213742581560602</id><published>2010-04-14T00:09:00.001-07:00</published><updated>2010-04-14T20:14:40.814-07:00</updated><title type='text'>Ngô Bảo Châu and the Fundamental Lemma</title><content type='html'>&lt;div&gt;My mother called the other day and asked if I know who Ng&amp;ocirc; B&amp;#7843;o Ch&amp;acirc;u is. &amp;nbsp;I didn&amp;#39;t know, so while she was on the phone, I found a few links about this Vietnamese man and why he is considered so influential.&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;a href="http://en.wikipedia.org/wiki/Ngo_Bao_Chau" id="r2j-" title="http://en.wikipedia.org/wiki/Ngo_Bao_Chau"&gt;http://en.wikipedia.org/wiki/Ngo_Bao_Chau&lt;/a&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://talk.onevietnam.org/influential-vietnamese-ngo-bao-chau-and-the-fundamental-lemma/" id="ilz1" title="http://talk.onevietnam.org/influential-vietnamese-ngo-bao-chau-and-the-fundamental-lemma/"&gt;http://talk.onevietnam.org/influential-vietnamese-ngo-bao-chau-and-the-fundamental-lemma/&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;His work was listed by &lt;a href="http://time.com" id="zo7r" title="Time"&gt;Time&lt;/a&gt; as one of the Top 10 Scientific Discoveries of 2009.&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;a href="http://www.time.com/time/specials/packages/article/0,28804,1945379_1944416_1944435,00.html" id="gx5q" title="http://www.time.com/time/specials/packages/article/0,28804,1945379_1944416_1944435,00.html"&gt;http://www.time.com/time/specials/packages/article/0,28804,1945379_1944416_1944435,00.html&lt;/a&gt;&lt;/div&gt;&lt;br&gt;So I was curious about what exactly this &lt;a href="http://en.wikipedia.org/wiki/Fundamental_lemma_(automorphic_forms)" id="fef7" title="Fundamental Lemma"&gt;Fundamental Lemma&lt;/a&gt; is, so I followed a few links from the wikipedia&amp;#39;s articles listed above. &amp;nbsp;Saying that this stuff is over my head is a huge understatement. &amp;nbsp;So without even trying to understand what this is, I just wonder if this Fundamental Lemma thing, whatever it is, will play some role in the field of Computer Science, perhaps in the next century? &amp;nbsp;If that&amp;#39;s the case, I&amp;#39;m surely glad I wouldn&amp;#39;t be around to &lt;a href="http://arxiv.org/pdf/math/0404454v2" id="gh85" title="learn about it"&gt;learn about it&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1755575872729350021-2008213742581560602?l=pragmaticlogiclabs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pragmaticlogiclabs.blogspot.com/feeds/2008213742581560602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2010/04/ngo-bao-chau-and-fundamental-lemma.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/2008213742581560602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/2008213742581560602'/><link rel='alternate' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2010/04/ngo-bao-chau-and-fundamental-lemma.html' title='Ngô Bảo Châu and the Fundamental Lemma'/><author><name>Kevin Hoang Le</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1755575872729350021.post-8636625347891474874</id><published>2010-04-11T00:19:00.000-07:00</published><updated>2010-04-18T16:31:04.300-07:00</updated><title type='text'>How to build voice-enabled web applications that run on all browsers</title><content type='html'>I am planning to expand this article by re-writing with more details and will also include one or two samples, but for now, in the interest of time, it just has minimal information.  In addition, the plugin itself is still in its infancy.  It does what I need it to do for the &lt;a href="http://weather-and-traffic-report.appspot.com/talk"&gt;Voice-enabled Weather and Traffic Report&lt;/a&gt; application that I built, but I am also planning and hopefully others would join me to further improve it.&lt;br /&gt;&lt;br /&gt;When I say "all browsers", yes, I mean that this also includes IE6.  For IE8, IE7 and IE6, somehow, you would have to instruct your users that they would need to install the QuickTime plugin for a seamless user experience.  If you figure out to make it work seamlessly with Media Player, please let me know.  For Opera, the end users would have to configure their browsers by going to "Settings-&gt;Preferences-&gt;Network" and uncheck the box labeled "Send Referer information".  Out of the box, it seems to work best with FireFox, Safari and Chrome.  &lt;br /&gt;&lt;br /&gt;First, grab the &lt;a href="http://code.google.com/p/jqtts/source/checkout"&gt;jQuery Text-to-Speech&lt;/a&gt; and &lt;a href="http://www.happyworm.com/jquery/jplayer/download.htm"&gt;jPlayer&lt;/a&gt; plugins:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/jqtts/source/checkout"&gt;http://code.google.com/p/jqtts/source/checkout&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.happyworm.com/jquery/jplayer/download.htm"&gt;http://www.happyworm.com/jquery/jplayer/download.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then in the &amp;lt;head&gt; tag, add the following lines:&lt;br /&gt;&lt;script class="brush:js" type="syntaxhighlighter"&gt;&lt;![CDATA[&lt;head&gt;    &amp;lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"&gt;&amp;lt;/script&gt;        &amp;lt;script src="&lt;path to&gt;/jquery.jplayer.min.js" type="text/javascript"&gt;&amp;lt;/script&gt;    &amp;lt;script src="&lt;path to&gt;/jquery.jqtts-0.1.js" type="text/javascript"&gt;&amp;lt;/script&gt;    ...&lt;/head&gt;]]&gt;&lt;/script&gt;&lt;br /&gt;Somewhere inside the &amp;lt;body&gt; tag (I put mine right after the opening of the &amp;lt;body&gt; tag), add a couple of divs:&lt;br /&gt;&lt;script class="brush:js" type="syntaxhighlighter"&gt;&lt;![CDATA[&lt;body&gt;    &amp;lt;div id="jtts"/&gt;    &amp;lt;div id="embedPlayer"/&gt;    ...&lt;/body&gt;]]&gt;&lt;/script&gt;&lt;br /&gt;In your JavaScript code, initialize and then call the play() method.:&lt;br /&gt;&lt;script class="brush:js" type="syntaxhighlighter"&gt;&lt;![CDATA[var jtts = $('#jtts');jtts.jtts({    elem: '#embedPlayer',    jPlayer: {                    customCssIds: true,        //swfPath is path to the swf file (included in jPlayer download)        swfPath: '/media/swf/'     }});//Now, in the event handler to a button click or something like that, you can simply call:var sentences = ['hello', 'goodbye']; //array of stringjtts.play(sentences).bind('onComplete', function() {   //This is the event handler when after all the sentences are "spoken"});]]&gt;&lt;/script&gt;&lt;br /&gt;That's it.  This should be enough for anyone to start now.  As I mentioned, I am planning to expand this article in the next few days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1755575872729350021-8636625347891474874?l=pragmaticlogiclabs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pragmaticlogiclabs.blogspot.com/feeds/8636625347891474874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2010/04/how-to-build-voice-enabled-web.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/8636625347891474874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/8636625347891474874'/><link rel='alternate' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2010/04/how-to-build-voice-enabled-web.html' title='How to build voice-enabled web applications that run on all browsers'/><author><name>Kevin Hoang Le</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1755575872729350021.post-4600630068832780158</id><published>2010-04-11T00:09:00.000-07:00</published><updated>2010-04-12T11:37:14.290-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='application'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='voice-enable'/><title type='text'>About the Voice-enabled Weather and Traffic Report</title><content type='html'>I want to keep this "About" page as non-technical as possible, since there's no doubt, a majority of visitors who land here are not interested and do not care about the technical details.  If you want to find out about the technical details and want to learn about how to voice-enable web applications for almost all web browsers, please reas this &lt;a href="http://pragmaticlogiclabs.blogspot.com/2010/04/how-to-build-voice-enabled-web.html"&gt;post&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;The &lt;a href="http://weather-and-traffic-report.appspot.com/talk"&gt;Voice-enabled Weather and Traffic Report&lt;/a&gt; is an easy-to-use, easy-to-understand site that does exactly what it says it would do in its title.  You would type in a U.S. (and maybe part of Canada) zip code and it would speak to you, literally, about the results for both the weather and traffic for that zip code.  Of course, you can still read the results on your monitor screen.  If you forget to type in the zip code, it would speak to you, telling that you need to type a valid zip code in the box.  If you mistype a zip code, it would speak to you, telling that you entered an invalid zip code.&lt;br /&gt;&lt;br /&gt;That's it.  It's free to use and it's that easy.  There's no other non-technical information that I could tell you.  I build this application, oops ... I mean to say this web site by &lt;a href="http://en.wikipedia.org/wiki/Mashup_(web_application_hybrid)"&gt;"mashing up"&lt;/a&gt; the information from &lt;a href="http://developer.yahoo.com/yql/"&gt;Yahoo's sources&lt;/a&gt; and host the site on &lt;a href="http://code.google.com/appengine/"&gt;Google's infrastructure&lt;/a&gt;, so the web site should be very accurate and highly-available.  Occasionally, if you don't hear anything immediately, you might need to refresh or reload the page once or twice (using the F5 key on your browser, if you're using Windows).   &lt;br /&gt;&lt;br /&gt;I already mentioned about Yahoo and Google, but there are a couple of other individuals that I want to say "Thanks" to.  First, I want to thank &lt;a href="http://weston.ruter.net/about/"&gt;Weston Ruter&lt;/a&gt; for sharing his &lt;a href="http://weston.ruter.net/projects/google-tts/#hl=en&amp;text=Hello%2C+World!"&gt;discovery about Google Translate&lt;/a&gt;.  After reading his article, I was inspired and came up with the idea to do this project.  Second, I want to thank &lt;a href="http://woorkup.com/about/"&gt;Antonio Lupetti&lt;/a&gt; for his &lt;a href="http://woork.blogspot.com/2008/06/clean-and-pure-css-form-design.html"&gt;clean and pure CSS form&lt;/a&gt;.  If you think the web site looks nice and clean, that's because it's thanks to Antonio.  If you think otherwise, it's because I tried to customize and messed it up.       &lt;br /&gt;&lt;br /&gt;Last but not least, I AM NOT RESPONSIBLE AND NOT LIABLE FOR ANYTHING.  USE AT YOUR OWN RISK.&lt;br /&gt;&lt;i&gt;&lt;br /&gt;Note: For IE and Opera users:&lt;br /&gt;&lt;br /&gt;For IE8, IE7 and IE6, you would need to install the &lt;a href="http://www.apple.com/quicktime/download/"&gt;QuickTime plugin&lt;/a&gt; for a seamless user experience.&lt;br /&gt;&lt;br /&gt;For Opera, you would need configure your browsers by going to "Settings-&gt;Preferences-&gt;Network" and uncheck the box labeled "Send Referer information".&lt;br /&gt;&lt;br /&gt;Out of the box, it seems to work best with FireFox, Safari and Chrome.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1755575872729350021-4600630068832780158?l=pragmaticlogiclabs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pragmaticlogiclabs.blogspot.com/feeds/4600630068832780158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2010/04/about-voice-enabled-weather-and-traffic.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/4600630068832780158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/4600630068832780158'/><link rel='alternate' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2010/04/about-voice-enabled-weather-and-traffic.html' title='About the Voice-enabled Weather and Traffic Report'/><author><name>Kevin Hoang Le</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1755575872729350021.post-790916370134591573</id><published>2009-10-21T09:39:00.000-07:00</published><updated>2009-10-21T14:52:06.750-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax highlight'/><title type='text'>Syntax highlighting your code snippets in Blogger</title><content type='html'>If you want to add syntax highlighting to code snippets in your blog, Blogger specifically, you are more than likely get the following &lt;a href="http://www.google.com/search?hl=en&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;amp;q=blogger+code+syntax+highlight&amp;amp;btnG=Search"&gt;results&lt;/a&gt; back from a Google search.  At least that's what I get at the time of this writing.  &lt;br /&gt;&lt;br /&gt;But I soon realized that the instructions in all of those blog articles, while they must be useful in the past, are now obsolete with the latest &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter"&gt;SyntaxHighlighter from Alex Gorbachev&lt;/a&gt;.  So here's how to add syntax highlighting to code snippets in your Blogger:&lt;br /&gt;&lt;br /&gt;1. Navigate to Layout-&amp;gt;Edit HTML, find the &amp;lt;head&amp;gt; tag.  Right after that &amp;lt;head&amp;gt; tag, add the following (I use the Eclipse theme as shown on line 2 and include the scripts for the languages that I will be blogging about.  But there are many more other &lt;a href="http://alexgorbatchev.com/pub/sh/current/styles/"&gt;themes&lt;/a&gt; and &lt;a href="http://www.undermyhat.org/blog/2009/09/list-of-brushes-syntaxhighligher/http://www.undermyhat.org/blog/2009/09/list-of-brushes-syntaxhighligher/"&gt;languages&lt;/a&gt; supported):&lt;br /&gt;&lt;script class="brush:js" type="syntaxhighlighter"&gt;&lt;![CDATA[&lt;link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/&gt;&lt;link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeEclipse.css' rel='stylesheet' type='text/css'/&gt;&lt;script language='javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js'/&gt;&lt;script language='javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js'/&gt;&lt;script language='javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js'/&gt;&lt;script language='javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js'/&gt;&lt;script language='javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushErlang.js'/&gt;&lt;script language='javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js'/&gt;&lt;script type='text/javascript'&gt;SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf';SyntaxHighlighter.all();&amp;lt;/script&gt;]]&gt;&lt;/script&gt;&lt;br /&gt;2. Wrap any code that you want to hightlight inside the following &amp;lt;script&amp;gt; tag (this example uses the brush:js for JavaScript, but again, there are brushes for many other languages, &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter:Brushes"&gt;standard&lt;/a&gt; and &lt;a href="http://www.undermyhat.org/blog/2009/09/list-of-brushes-syntaxhighligher/"&gt;non-standard&lt;/a&gt;.  The ... is where your code snippets should be residing):&lt;br /&gt;&lt;script class="brush:js" type="syntaxhighlighter"&gt;&lt;![CDATA[&lt;script class="brush:js" type="syntaxhighlighter"&gt;&lt;![CDATA[.........]]&gt;&amp;lt;/script&gt;&lt;/script&gt; &lt;br /&gt;3. There are a couple of advantages that I see over using the legacy version 1.5 of the script.  One advantage is that there are more than just one theme supported.  The other advantage is inside the CDATA, you don't need to escape the &amp;lt; charater.  You can just copy and paste anything from your IDE to the area inside the CDATA.  However, the Blogger editor might complain by putting up the message:  "&lt;span style="color: #800000;"&gt;Your HTML cannot be accepted: Tag is broken: &amp;lt;![CDATA[&lt;/span&gt;".  I just checked the check box "Stop showing HTML errors for the body of this post" and publish again, and it seems to forgive.&lt;br /&gt;&lt;br /&gt;Here's an example in Python:&lt;br /&gt;&lt;script class="brush:python" type="syntaxhighlighter"&gt;&lt;![CDATA[class SomeClass:    def __init__( self, aList=None ):        if aList:            pass        else:            pass]]&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IMPORTANT&lt;/b&gt;: When I saved as draft with the check box "Stop showing HTML errors for the body of this post" checked, and returned to the list of posts, I didn't see my post.  So I quickly hit the back button on the browser, and published the post.  What this means is while it's nice to be able to copy and paste code snippets directly from the IDE to the Blogger editor without worrying about escaping all the &amp;lt; characters, we might lose the ability to save as drafts.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1755575872729350021-790916370134591573?l=pragmaticlogiclabs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pragmaticlogiclabs.blogspot.com/feeds/790916370134591573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2009/10/test.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/790916370134591573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/790916370134591573'/><link rel='alternate' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2009/10/test.html' title='Syntax highlighting your code snippets in Blogger'/><author><name>Kevin Hoang Le</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1755575872729350021.post-8551286373320244005</id><published>2009-03-17T08:27:00.000-07:00</published><updated>2009-10-21T08:53:21.876-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='windows live messenger'/><category scheme='http://www.blogger.com/atom/ns#' term='google app engine'/><category scheme='http://www.blogger.com/atom/ns#' term='chinese chess'/><title type='text'>Live Chinese Chess is Live</title><content type='html'>&lt;a href="http://livechinesechess.appspot.com"&gt;Live Chinese Chess&lt;/a&gt; (LCC) has been deployed on &lt;a href="http://appengine.google.com/"&gt;Google App Engine&lt;/a&gt; and is now live.  &lt;a href="http://messenger.live.com"&gt;Windows Live Messenger&lt;/a&gt; users can sign in to Live Chinese Chess using their &lt;i&gt;&lt;a href="http://login.live.com/"&gt;Windows Live IDs&lt;/a&gt;&lt;/i&gt; and start playing Chinese Chess while chatting with each other normally.  There's no need to download or install any software or plug-in to the browsers.&lt;br /&gt;&lt;br /&gt;LCC is an Ajax application on AppEngine that allows players to make and receive moves with very low latency, so it also fits in the category of Comet applications.  But &lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=377"&gt;Comet and App Engine are still currently not possible together&lt;/a&gt;.  Frequent polling the App Engine application is also out of the question, since quotas can be easily exceeded or the latency will be high.  &lt;br /&gt;&lt;br /&gt;LCC takes advantage of the &lt;a href="http://msdn.microsoft.com/en-us/library/cc298458.aspx"&gt;Windows Live Messenger SDK&lt;/a&gt;, and the result, as seen &lt;a href="http://livechinesechess.appspot.com"&gt;here&lt;/a&gt;, is quite positive.  The low latency is not noticeable at all to the players, yet there's no danger of getting anywhere close to the quotas imposed by App Engine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1755575872729350021-8551286373320244005?l=pragmaticlogiclabs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pragmaticlogiclabs.blogspot.com/feeds/8551286373320244005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2009/03/live-chinese-chess-is-live.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/8551286373320244005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1755575872729350021/posts/default/8551286373320244005'/><link rel='alternate' type='text/html' href='http://pragmaticlogiclabs.blogspot.com/2009/03/live-chinese-chess-is-live.html' title='Live Chinese Chess is Live'/><author><name>Kevin Hoang Le</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry></feed>
