<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>.::output &gt;&gt; /dev/null::. : </title>
    <link>http://blog.vazexqi.com/articles.rss</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>where otherwise good ideas go to waste</description>
    <item>
      <title>Making Objective-C Land More Habitable</title>
      <description>&lt;p&gt;
Over these past few months, I have been working on a long-term class project using OS X technologies in both Objective-C and &lt;a href="http://developer.apple.com/safari/library/documentation/AppleApplications/Conceptual/SafariJSProgTopics/Tasks/ObjCFromJavaScript.html"&gt;Javascript&lt;/a&gt;. Overall, the experience was pretty good (except for the Javascript part) -- and I suspect much easier compared to having to use Java. Using Java would require us to hunt down various libraries and then filter through them since there are probably 10++ different libraries for each thing that we need to do. So using OS X was a good choice.
&lt;/p&gt;

&lt;p&gt;
However, there are a few tools that I wished I had known earlier....
&lt;/p&gt;

&lt;h2&gt;GHUnit&lt;/h2&gt;
&lt;p&gt;
Unit testing using Cocoa is pretty complicated. In fact, it's unnecessarily more complicated than Java, Ruby or Smalltalk. It's &lt;em&gt;only&lt;/em&gt; less complicated than unit testing C++ (which doesn't say much)! There are &lt;strong&gt;two&lt;/strong&gt; things that particularly irk me:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Not seeing green/red!&lt;/strong&gt; - You have to actually &lt;strong&gt;read&lt;/strong&gt; the text in the build log to see which of your tests pass and fail. This is completely ridiculous - it's so easy to miss a failing test case because of this. Anyone who has used the &lt;a href="http://en.wikipedia.org/wiki/XUnit"&gt;Xunit&lt;/a&gt; testing framework family is accustomed to seeing &lt;span style="background: green; color: white;"&gt;green&lt;/span&gt; for passing tests and &lt;span style="background: red; color: white;"&gt;red&lt;/span&gt; for failing tests.

&lt;br/&gt;
&lt;div style="text-align:center;"&gt;
&lt;a href="http://developer.apple.com/tools/unittest.html"&gt;
&lt;img src="http://developer.apple.com/tools/images/BuildWindow.jpg" alt="A Failed Test Logged in the Xcode Build Results Window" border="0" width="50%" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;small&gt;A Failed Test Logged in the Xcode Build Results Window&lt;/small&gt;
&lt;/div&gt;
&lt;br/&gt;
&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Not being able to debug your unit tests&lt;/strong&gt; - You have to perform some boilerplate &lt;a href="http://chanson.livejournal.com/120740.html"&gt;steps&lt;/a&gt; on your own. Such steps should be automated for you!&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
Fortunately, &lt;a href="http://rel.me/2009/02/21/unit-testing-for-mac-os-x-and-iphone-ghunit/"&gt;GHUNit&lt;/a&gt; comes along. And at least solves those &lt;strong&gt;two&lt;/strong&gt; problems. It has become my choice for unit testing in Cocoa and all my future projects will use it. It's released under a very liberal open source &lt;a href="http://github.com/gabriel/gh-unit/blob/master/LICENSE"&gt;license&lt;/a&gt; so using it in your own project shouldn't be a problem. Apple and the Xcode team should integrate this directly into Xcode.
&lt;/p&gt;

&lt;div style="text-align:center;"&gt;
&lt;a href="http://bytebucket.org/vazexqi/healthmonitor/wiki/Images/GHUnitTest.png" title="View 'Create an External Build System project' on Flickr.com"&gt;
&lt;img src="http://bytebucket.org/vazexqi/healthmonitor/wiki/Images/GHUnitTest.png" alt="GHUnit in action" border="0" width="50%" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;small&gt;GHUnit in action&lt;/small&gt;
&lt;/div&gt;

&lt;h2&gt;F-Script&lt;/h2&gt;
&lt;p&gt;
The cocoa libraries are nice. But sometimes the documentation can be a bit confusing. So, the best way to find out what a method or class does it to write some code for it and try it out. But honestly, would you like writing a small program each time to try a method or class out?
&lt;/p&gt;

&lt;p&gt;
That's when you need &lt;a href="http://www.fscript.org/"&gt;F-Script&lt;/a&gt; which allows you to call run Objective-C like you would run a scripting language. Need to find out how that NSString method behaves? Just type in into the F-Script REPL workspace. You can even play around with &lt;a href="http://www.fscript.org/documentation/LearnFScriptIn20Minutes/index.htm"&gt;Core Image&lt;/a&gt; easily in the F-Script workspace! 
&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;a href="http://www.fscript.org/images/screenshots/shell.jpg"&gt;
&lt;img src="http://www.fscript.org/images/screenshots/shell.jpg" alt="GHUnit in action" border="0" width="50%" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;small&gt;F-Script shell in action&lt;/small&gt;
&lt;/div&gt;

&lt;p&gt;
But wait! F-Script has even more to offer. Using &lt;a href="http://pmougin.wordpress.com/2009/08/29/f-script-anywhere-on-snowy/"&gt;F-Script &lt;em&gt;Anywhere&lt;/em&gt;&lt;/a&gt; allows you to inject the F-Script environment into any Cocoa application. That way you can quickly figure out and play around with other people's application!
&lt;/p&gt;

&lt;p&gt;
The only thing you need to do is spend about 20 minutes learning the F-Script syntax which is very similar to Smalltalk's - so it only took me about 5 minutes.
&lt;/p&gt;

&lt;h2&gt;Clang Static Analyzer&lt;/h2&gt;
&lt;p&gt;
One area where Java really shines is the abundance of high-quality tools for static analysis. Using these tools allow you to avoid a lot of silly mistakes before you even compile or run your Java code.
&lt;/p&gt;

&lt;p&gt;
Previously, Objective-C was definitely lacking in this area. However, the &lt;a href="http://clang-analyzer.llvm.org/"&gt;Clang Static Analyzer&lt;/a&gt; hopes to change that. In fact, if you are using the latest version of Xcode under Snow Leopard, it should be &lt;a href="http://developer.apple.com/mac/library/featuredarticles/StaticAnalysis/index.html"&gt;integrated&lt;/a&gt; already. Here's the static analyzer in action:
&lt;/p&gt;

&lt;div style="text-align:center;"&gt;
&lt;a href="http://developer.apple.com/mac/library/featuredarticles/StaticAnalysis/index.html"&gt;
&lt;img src="http://developer.apple.com/mac/library/featuredarticles/StaticAnalysis/Art/uninitialized.jpg" alt="GHUnit in action" border="0" width="50%" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;small&gt;Uninitialized Variable Error&lt;/small&gt;
&lt;/div&gt;

&lt;p&gt;
For our particular project, we needed to use OS X Leopard so followed &lt;a href="http://clang-analyzer.llvm.org/scan-build.html"&gt;these&lt;/a&gt; steps to get the static analyzer to work. Even though it took a few more steps, the extra trouble is worth it since it catches a lot of garbage collection issues that we might have missed otherwise.
&lt;/p&gt;

&lt;p&gt;
The Clang Static Analyzer is based on the &lt;a href="http://llvm.org/"&gt;LLVM&lt;/a&gt; compiler infrastructure developed here the University of Illinois at Urbana-Champaign.
&lt;/p&gt;

&lt;h2&gt;BWToolkit&lt;/h2&gt;

&lt;p&gt;
Interface Builder is awesome. It definitely beats any other interface builder that I have tried. However, it can be too &lt;em&gt;basic&lt;/em&gt; at times. It works very well, if you are doing a simple UI. But it lacks the palettes for some of the more advanced (but pretty commonplace) UI that you see in Mail.app, iCal.app, etc.
&lt;/p&gt;

&lt;p&gt;
That's when &lt;a href="http://www.brandonwalkin.com/blog/2008/11/13/introducing-bwtoolkit/"&gt;BWToolkit&lt;/a&gt; comes in. It offers a plethora of different palettes which makes designing your UI extremely easy. And you can use all of them using drag-and-drop from Interface Builder.
&lt;/p&gt;

&lt;div style="text-align:center;"&gt;
&lt;a href="http://brandonwalkin.com/blog/images/transparent3.png"&gt;
&lt;img src="http://brandonwalkin.com/blog/images/transparent3.png" alt="BWToolkit" border="0" width="50%" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;small&gt;BWToolkit's suite of controls for HUD windows&lt;/small&gt;
&lt;/div&gt;

&lt;p&gt;
It's released under the liberal BSD license so you don't need to worry about using it for your projects. GHUnit itself uses it and that's actually how I discovered this wonderful toolkit.
&lt;/p&gt;

&lt;hr /&gt;

Overall, OS X has a lot to offer in both &lt;a href="http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/OSX_Technology_Overview/About/About.html"&gt;libraries&lt;/a&gt; and &lt;a href="http://developer.apple.com/tools/"&gt;tools&lt;/a&gt;. And when it falls short, some other developer out there is usually passionate enough to create and share their tools with you. It just takes &lt;em&gt;too&lt;/em&gt; long sometimes to find those tools. So hopefully, this list will be useful to some other aspiring OS X developer.

</description>
      <pubDate>Thu, 17 Dec 2009 13:58:00 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:66f7eb28-cf7c-4c20-89c1-133e6d3f2ce1</guid>
      <comments>http://blog.vazexqi.com/2009/12/17/making-objective-c-land-more-habitable#comments</comments>
      <category>development</category>
      <category>software</category>
      <category>clang</category>
      <category>bwtoolkit</category>
      <category>script</category>
      <category>f</category>
      <category>ghunit</category>
      <category>osx</category>
      <category>c</category>
      <category>objective</category>
      <category>cocoa</category>
      <trackback:ping>http://blog.vazexqi.com/trackbacks?article_id=316</trackback:ping>
      <link>http://blog.vazexqi.com/2009/12/17/making-objective-c-land-more-habitable</link>
    </item>
    <item>
      <title>Modifying plugin.xml of Existing Eclipse plugins</title>
      <description>&lt;p&gt;
I have been taking a deeper look at &lt;a href="http://mercurial.selenic.com/wiki/"&gt;Mercurial&lt;/a&gt; for some of my projects. And I was interested in looking at its source code. I usually do a lot of Java development and have gotten used to all the nifty navigation features that Eclipse/NetBeans/IntelliJ have to offer such as "Jump to Declaration", "Open Type Herarchy", etc. So I wanted to find a good IDE for going through the Mercurial source code, which is written in Python. Apparently, there isn't a de-facto IDE for Python. But &lt;a href="http://pydev.org/"&gt;PyDev&lt;/a&gt; comes close.
&lt;/p&gt;

&lt;p&gt;
Unfortunately &#8211; I am not sure whether this was intentional or not &#8211; the keyboard shortcuts for PyDev aren't very platform friendly. Instead of the default modifier key (Ctrl on Windows/Linux and &amp;#8984; on Mac) the developers have hardcoded the modifier to Ctrl for all platforms. So to invoke the I would have to use Ctrl + Shift + T instead of &amp;#8984; + Shift + T.
&lt;/p&gt;

&lt;p&gt;
So how do we change the keybindings? Well, there is an extension point in the Eclipse plugin architecture for specifying the keybindings. Take a look at &lt;a href="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/extension-points/org_eclipse_ui_bindings.html"&gt;org.eclipse.ui.bindings&lt;/a&gt; And those keybindings are stored as plain text in a plugin.xml file. For PyDev, it would be in the &lt;em&gt;plugins&lt;/em&gt; folder of your Eclipse installation. In my case, it was under eclipse-galileo/plugins/org.python.pydev_1.5.0.1251989166/plugin.xml
&lt;/p&gt;

&lt;p&gt;
So we can edit the plugin.xml file by looking for the 
&lt;pre&gt;
      ...
      &amp;lt;key
            sequence="Ctrl+Shift+T"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.pyShowBrowser"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"&amp;gt;
      &amp;lt;/key&amp;gt;
      ...
&lt;/pre&gt;

and changing the Ctrl to M1 which stands for the default modifier key on your platform i.e. 

&lt;pre&gt;
      ...
      &amp;lt;key
            sequence="M1+Shift+T"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.pyShowBrowser"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"&amp;gt;
      &amp;lt;/key&gt;
      ...
&lt;/pre&gt;

&lt;/p&gt;

&lt;p&gt;
Unfortunately, we are not done. And it took me some time to figure out the problem. Apparently, Eclipse doesn't read the plugin.xml every time. Instead, it caches a version of it somewhere. So even if we modify the plugin.xml, Eclipse might not know about it.
&lt;/p&gt;

&lt;p&gt;
What we  have to do is to &lt;em&gt;tell&lt;/em&gt; Eclipse to clean its cache. And we can do that by using the  &lt;code&gt;-clean&lt;/code&gt; option in its eclipse.ini file. On the Mac, this file in located in Eclipse.app/Contents/MacOS/eclipse.ini (you need to right-click on the Eclipse application and select "Show Package Contents").
&lt;/p&gt;

&lt;p&gt;
Change the first line so that it read something like this:
&lt;pre&gt;
-clean
-startup
../../../plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
--launcher.library
...
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;
Now when Eclipse starts up, it will clean its cache and read the newly modified plugin.xml file. Once we are done with this step, we should remove the &lt;code&gt;-clean&lt;/code&gt; option since this causes Eclipse to start up slower. And &lt;strong&gt;who&lt;/strong&gt; would want Eclipse to start up any slower than it already does?!
&lt;/p&gt;

&lt;p&gt;
And this is what the keybindings look like after the changes:
&lt;/p&gt;

&lt;a href="/files/pydev.png" title="PyDev with Mac-friendly Keybindings"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="/files/pydev.png" alt="PyDev with Mac-friendly Keybindings" border="0" width="375" height="340" /&gt;&lt;/div&gt;&lt;/a&gt;


</description>
      <pubDate>Sun, 11 Oct 2009 17:10:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:0356602b-aac2-4353-b231-bace4e60698f</guid>
      <comments>http://blog.vazexqi.com/2009/10/11/modifying-plugin-xml-of-existing-eclipse-plugins#comments</comments>
      <category>development</category>
      <category>eclipse</category>
      <category>keybindings</category>
      <category>pydev</category>
      <category>plugin.xml</category>
      <category>eclipse</category>
      <enclosure length="108857" url="http://blog.vazexqi.com/files/pydev.png" type="image/png"/>
      <link>http://blog.vazexqi.com/2009/10/11/modifying-plugin-xml-of-existing-eclipse-plugins</link>
    </item>
    <item>
      <title>Hacking Lua (in Xcode)</title>
      <description>&lt;p&gt;
I have always been fascinated by &lt;a href="http://en.wikipedia.org/wiki/Comparison_of_application_virtual_machines"&gt;application virtual machines&lt;/a&gt;. And I have been trying to find a simple but well-documented one to work on for fun. There is a proliferation of Javascript VMs out there but they are pretty big (V8 is the latest kid on the block and it's about 100 000 lines of C++, not my favorite language) and aren't as well documented.
&lt;/p&gt;

&lt;p&gt;
There are some smaller ones like &lt;a href="http://code.macournoyer.com/tinyrb/"&gt;tinyrb&lt;/a&gt; and &lt;a href="http://www.tinypy.org/"&gt;tinypy&lt;/a&gt; but the goal of such projects aren't really clear. I am not sure how much of Ruby/Python they are trying to support. They are great for hacking on if you have some experience with VMs already and can contribute to the design/implementation. But otherwise, it can be pretty hard to comprehend what is going on.
&lt;/p&gt;

&lt;p&gt;
Both tinyrb and tinypy did mention that they were trying to emulate the Lua VM. So I decided to check it out. The Lua VM (like the &lt;a href="http://www.parrot.org/"&gt;Parrot VM&lt;/a&gt;) is a register-based VM, which is pretty unusual since most VMs are stack-based. Its use of registers instead of a stack makes it more fascinating to study.
&lt;/p&gt;

&lt;p&gt;
And I like what I have seen so far. There is good documentation on &lt;em&gt;multiple&lt;/em&gt; levels: the language itself, the architecture of the VM and plenty of examples. Also, the code is in C which is less messy than C++. The Makefile is simple and isn't using any cryptic tricks. And Lua itself seems like a simple language to learn.
&lt;/p&gt;

&lt;p&gt;
So my plan is to dive into the source for Lua and then see what can be done to improve tinyrb. But first, I need to set up an environment to develop in.
&lt;/p&gt;

&lt;p&gt;
I could certainly continue to use vim/TextMate, but I have been using Xcode more because I am doing some iPhone development and have gotten use to some of its features. And I like its built-in debugger which saves me from having to interact with gdb directly for the common tasks. In fact, I am not sure if there are &lt;em&gt;better&lt;/em&gt; C/C++ IDEs for OS X. The Eclipse CDT project is the closest that I can think of but I haven't used it much.
&lt;/p&gt;


&lt;p&gt;
So here are my steps for doing this: from getting the source into Xcode and also starting a debugging session. I am using the All-in-one look for Xcode so your UI might look different.
&lt;/p&gt;

&lt;p&gt;
Grab the source for Lua-5.1.4 from &lt;a href="http://www.lua.org/ftp/lua-5.1.4.tar.gz"&gt;http://www.lua.org/ftp/lua-5.1.4.tar.gz&lt;/a&gt;. Unarchive it. For this article, I will be unarchiving it in ~/Xcode.
&lt;/p&gt;

&lt;a href="http://www.flickr.com/photos/37092324@N00/3282596714" title="View 'Create an External Build System project' on Flickr.com"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://farm4.static.flickr.com/3602/3282596714_e4bea7e203.jpg" alt="Create an External Build System project" border="0" width="500" height="372" /&gt;&lt;/div&gt;&lt;/a&gt;

&lt;p&gt;
Fire up Xcode and create a new External Build System project. I called my project Lua. You can put the project wherever you want. It doesn't need to be in the same directory where you unarchived the Lua source code since we will be &lt;em&gt;referencing&lt;/em&gt; the source files anyway. 
&lt;/p&gt;

&lt;a href="http://www.flickr.com/photos/37092324@N00/3281775589" title="View 'Add the existing Lua files' on Flickr.com"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://farm4.static.flickr.com/3289/3281775589_e28284b40e.jpg" alt="Add the existing Lua files" border="0" width="500" height="363" /&gt;&lt;/div&gt;&lt;/a&gt;

&lt;p&gt;
Right-click on the project and add the &lt;em&gt;entire&lt;/em&gt; directory where you unarchived the Lua source code. In my case it would be ~/Xcode/lua-5.1.4.
&lt;/p&gt;

&lt;a href="http://www.flickr.com/photos/37092324@N00/3282596760" title="View 'After adding the files' on Flickr.com"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://static.flickr.com/3426/3282596760_5cd1fca875.jpg" alt="After adding the files" border="0" width="" height="" /&gt;&lt;/div&gt;&lt;/a&gt;

&lt;p&gt;
This is what it looks like after adding all the files.
&lt;/p&gt;

&lt;a href="http://www.flickr.com/photos/37092324@N00/3281775761" title="View 'Make changes to the Makefile for OS X' on Flickr.com"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://static.flickr.com/3248/3281775761_3d00ee18bf.jpg" alt="Make changes to the Makefile for OS X" border="0" width="" height="" /&gt;&lt;/div&gt;&lt;/a&gt;

&lt;p&gt;
Next, we need to edit &lt;strong&gt;two&lt;/strong&gt; of the Makefiles. First, we need to edit the top level Makefile in ~/Xcode/lua-5.1.4. Change &lt;strong&gt;line 8&lt;/strong&gt; to PLAT= macosx since we are targeting the OS X platform. Then, we need to make changes to the Makefile in ~/Xcode/lua-5.1.4/src. Change &lt;strong&gt;line 17&lt;/strong&gt; to MYCFLAGS+= (we want the + symbol). Change &lt;strong&gt;line 108&lt;/strong&gt; to 	$(MAKE) all MYCFLAGS+=-DLUA_USE_LINUX MYLIBS="-lreadline" (again, we want the + symbol). In fact, by default, it should have the + symbol so that we can easily accumulate our own settings. I suspect that this is a careless omission in the Makefile for Lua.
&lt;/p&gt;

&lt;a href="http://www.flickr.com/photos/37092324@N00/3281775837" title="View 'Changing the parameters of the Lua target' on Flickr.com"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://static.flickr.com/3156/3281775837_ebc0be8f0d.jpg" alt="Changing the parameters of the Lua target" border="0" width="" height="" /&gt;&lt;/div&gt;&lt;/a&gt;

&lt;p&gt;
We need to make some changes to the Target configuration for our Project. So navigate to the Lua target in your Groups &amp;amp; Files (it's the left navigation pane). And double-click the Lua target. Then edit it so that it resembles the image above. Notice the line that says "Settings show Debug" near the top of the window; we are changing the settings for Debug (and not Release).
&lt;/p&gt;

&lt;p&gt;
You need to change the directory to the location where you unarchived the Lua source so that it can find the top-level Makefile.
&lt;/p&gt;

&lt;p&gt;
Then you need to add a new build setting, MYCFLAGS so that we can pass the -g flag (for debug) to the compiler. Without this flag, we cannot debug our program effectively with the debugger (it doesn't have all the necessary debugging information).
&lt;/p&gt;

&lt;a href="http://www.flickr.com/photos/37092324@N00/3281775787" title="View 'The result of the build (for debug)' on Flickr.com"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://static.flickr.com/3586/3281775787_05edcafb11.jpg" alt="The result of the build (for debug)" border="0" width="" height="" /&gt;&lt;/div&gt;&lt;/a&gt;
 
&lt;p&gt;
Now we can build our project by going to Build &amp;gt; Build. And notice that we are building for the Debug configuration i.e. on the menu item at the top it says 10.5 | Debug | i386. The settings that we made for our Lua target are reflected in the output of the build e.g. gcc -O2 -Wall -g .... (the -g flag that we specified in the settings).
&lt;/p&gt;

&lt;a href="http://www.flickr.com/photos/37092324@N00/3281775925" title="View 'Executing Lua in the command line' on Flickr.com"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://static.flickr.com/3411/3281775925_52caa58b17.jpg" alt="Executing Lua in the command line" border="0" width="" height="" /&gt;&lt;/div&gt;&lt;/a&gt;

&lt;p&gt;
Now that the project builds, we can proceed to debug it (or rather we just want to step through its execution in the debugger to find out how it works). The image above shows how we would run that executable (notice that we are passing some arguments to it). We want mimic this and run the program in the debugger.&lt;/p&gt;


&lt;a href="http://www.flickr.com/photos/37092324@N00/3281775649" title="View 'Create a new executable that you can launch from Xcode' on Flickr.com"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://farm4.static.flickr.com/3568/3281775649_5c9532ee50.jpg" alt="Create a new executable that you can launch from Xcode" border="0" width="500" height="375" /&gt;&lt;/div&gt;&lt;/a&gt;

&lt;p&gt;
So we create a new Custom Executable. We call it Lua.
&lt;/p&gt;

&lt;a href="http://www.flickr.com/photos/37092324@N00/3281775899" title="View 'Parameters for Lua custom executable' on Flickr.com"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://static.flickr.com/3659/3281775899_4a60fdbe58.jpg" alt="Parameters for Lua custom executable" border="0" width="" height="" /&gt;&lt;/div&gt;&lt;/a&gt;

&lt;p&gt;
In the dialog that pops-up, remember to specify the location of the lua executable (you will only have it after you have built the project).
&lt;/p&gt;

&lt;a href="http://www.flickr.com/photos/37092324@N00/3281775869" title="View 'Don't load symbols lazily' on Flickr.com"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://static.flickr.com/3501/3281775869_58ff456e07.jpg" alt="Don't load symbols lazily" border="0" width="" height="" /&gt;&lt;/div&gt;&lt;/a&gt;

&lt;p&gt;
Before we can debug the lua executable, there is one more setting that we have to perform: change the way debugging symbols are loaded. So, open up the preferences for Xcode, and switch to the debugging tab. Ensure that the "Load symbols lazily" is &lt;strong&gt;unchecked&lt;/strong&gt;.
&lt;/p&gt;

&lt;a href="http://www.flickr.com/photos/37092324@N00/3281775609" title="View 'Build and Debug your program' on Flickr.com"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://farm4.static.flickr.com/3373/3281775609_29b58f2147.jpg" alt="Build and Debug your program" border="0" width="500" height="375" /&gt;&lt;/div&gt;&lt;/a&gt;

&lt;p&gt;
Now we need to set a breakpoint. Notice in the image above that I have set one on line 378 in the lua.c (Xcode/lua-5.1.4/src/lua.c) file. After that we can invoke the debugger from the Build &amp;gt; Build and Debug menu.
&lt;/p&gt;

&lt;a href="http://www.flickr.com/photos/37092324@N00/3282597014" title="View 'Debugger in action' on Flickr.com"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://static.flickr.com/3662/3282597014_dbb8e2e57d.jpg" alt="Debugger in action" border="0" width="" height="" /&gt;&lt;/div&gt;&lt;/a&gt;

&lt;p&gt;
And finally we have our debugger in action.
&lt;/p&gt;

&lt;p&gt;
The steps above are applicable for any other external project that you need to work on (sans the modifications to the Makefiles since that is Lua-specific).
&lt;/p&gt;

</description>
      <pubDate>Sun, 15 Feb 2009 13:03:00 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:ed0e3918-6584-4863-9c3b-98398f9e624b</guid>
      <comments>http://blog.vazexqi.com/2009/02/15/hacking-lua-in-xcode#comments</comments>
      <category>development</category>
      <category>software</category>
      <link>http://blog.vazexqi.com/2009/02/15/hacking-lua-in-xcode</link>
    </item>
    <item>
      <title>Online Gradebooks - Something Worth Hating</title>
      <description>&lt;p&gt;&lt;a href="http://www.its2.uidaho.edu/blackboard/help_docs/Instructor/gradebook/reorder.htm"&gt;Instructor Help: Reorder Grade Book Columns&lt;/a&gt;:
&lt;/p&gt;

&lt;blockquote cite="http://www.its2.uidaho.edu/blackboard/help_docs/Instructor/gradebook/reorder.htm" title="Instructor Help: Reorder Grade Book Columns"&gt; "The following tutorial shows how to reorder and hide/show columns in the Grade Book. Each Grade Book view tab (Grades, Members, View All, Custom View, SCORM Grades) has its own independent display order. The order for a specific view tab can be changed by pressing the Reorder Columns button when viewing that tab. If you wish all of the views to display in the same order, use the Reorder Columns button for each view."
&lt;/blockquote&gt;

&lt;a href="http://www.its2.uidaho.edu/blackboard/help_docs/Instructor/gradebook/images/reorder_02.gif"&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://www.its2.uidaho.edu/blackboard/help_docs/Instructor/gradebook/images/reorder_02.gif" width="326" align="center"&gt;
&lt;/div&gt;&lt;/a&gt;

&lt;p&gt;
The University of Illinois uses the same grading system that the University of Idaho does. And it is fortunate too since I was having a hard time trying to figure out who to reorder some of the columns. It is so hard that I actually need to search for instructions on how to do it from the internet. It is always a bad sign when something as simple as reordering some columns requires the user to read a manual.
&lt;/p&gt;

&lt;p&gt;
I had optimistically assumed that in this modern age of AJAX that a mundane task like reordering columns was basically &lt;strong&gt;solved&lt;/strong&gt;. I was proven wrong.
&lt;/p&gt;

&lt;p&gt;
Before you read more, it might be best to read the instructions above first to see how unintuitive the UI is for the &lt;a href="http://www.blackboard.com/products/academic_suite/learning_system/index"&gt;Blackboard Learning System&lt;/a&gt; really is.
&lt;/p&gt;

&lt;p&gt;
Compare this to how a simple (and useful app) like Basecamp does it:
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.basecamphq.com/help/todos/#reorder_items_lists"&gt;Basecamp help: To-do lists&lt;/a&gt;:
&lt;/p&gt;

&lt;blockquote cite="http://www.basecamphq.com/help/todos/#reorder_items_lists" title="Basecamp help: To-do lists"&gt; "To the left of each title, you'll see the reorder icon (it looks like four arrows). Click the icon and drag the list up or down to the location you want."
&lt;/blockquote&gt;

&lt;p&gt;
Simple: drag-and-drop. 
&lt;/p&gt;

&lt;p&gt;
And to make matters even worse, the entire Blackboard system is written in Java, takes a &lt;strong&gt;long&lt;/strong&gt; time to load and does not even take advantage of all that Java has to offer. I am sure someone can come up with a better UI in Java. How hard can it be to support drag-and-drop in Java?
&lt;/p&gt;

&lt;p&gt;
No one (student or instructor) that I have talked to likes using this online gradebook. So it really makes me wonder, is this the best that software developers can do for online gradebooks? Or is it this bad just because there aren't enough competitors in this field?
&lt;/p&gt;

</description>
      <pubDate>Fri, 19 Dec 2008 17:18:30 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:17cb9dd6-96bf-4157-bfc5-3902e2bb6037</guid>
      <comments>http://blog.vazexqi.com/2008/12/19/online-gradebooks-something-worth-hating#comments</comments>
      <category>college stuff</category>
      <link>http://blog.vazexqi.com/2008/12/19/online-gradebooks-something-worth-hating</link>
    </item>
    <item>
      <title>Who The Hell is Bob Costas?</title>
      <description>&lt;p&gt;
At the recommendation of my mom back home, I decided to watch the opening ceremony of the 2008 Summer Olympics. Disappointingly, I did not have right cable package so I could not watch it live with them.
&lt;/p&gt;

&lt;p&gt;
Instead, I had to wait until 7:30 pm (it was happening live at around 7:00 am local time in Beijing) to watch the delayed telecast on NBC. I was actually looking forward to it based on what I had heard and read from the Internet earlier today.
&lt;/p&gt;

&lt;p&gt;
The telecast started off well with the spectacular performances in the &lt;a href="http://en.wikipedia.org/wiki/Beijing_National_Stadium"&gt;Bird's Nest&lt;/a&gt; stadium. I was really impressed by what the Chinese had put on. By this point, the commentator had already begun to annoy me a bit with his weird, uncalled-for and out-of-place comments. But there was nothing really bad about his comments yet.
&lt;/p&gt;

&lt;p&gt;
Then the time came for all the contingents to come marching in. And here is where Mr. Bob Costas started making all sorts of weird comments. I cannot remember all of them, so I have to paraphrase it.
&lt;/p&gt;

&lt;blockquote&gt;
"Of the xxx number of countries participating here, most of them will not receive a medal".
&lt;/blockquote&gt;

&lt;blockquote&gt;
"Malaysians are rather particular about people knowing where their country is. They get upset when people don't. So let's see where the country is...."
&lt;/blockquote&gt;

&lt;blockquote&gt;
"The president of xxx promised that the athlete who brings home a medal will be awarded a dream house... looks like he has nothing to worry about since there probably wouldn't be one."
&lt;/blockquote&gt;

&lt;blockquote&gt;
"This nation's flag bearer was chosen through a series of text messages. She had 73% of the votes. I bet she was sitting there texting in her name all day..."
&lt;/blockquote&gt;

&lt;blockquote&gt;
"And here are the xxx who have won more medals at the Math Olympiad..."
&lt;/blockquote&gt;

... And many others that I can't remember. I am sure someone else will blog about this soon.

&lt;p&gt;
I don't think I am overly sensitive to his comments. I can definitely take a joke or too, but the inanity of his comments just puts me in an unhappy mood.
&lt;/p&gt;

&lt;p&gt;
It seems that this is not the first time he has done something like this. His &lt;a href="http://en.wikipedia.org/wiki/Bob_Costas"&gt;wikipedia entry&lt;/a&gt; tells of his past faux pass (if one can still call them that; they seem more like &lt;em&gt;verbal crimes&lt;/em&gt;):
&lt;/p&gt;

&lt;blockquote cite="http://en.wikipedia.org/wiki/Bob_Costas#Olympics" title="Bob Costas - Wikipedia, the free encyclopedia"&gt; "During the 1992 Barcelona and 1996 Atlanta Opening Ceremonies, Costas' remarks on the China Team's possible drug use caused an uproar among the American Chinese and International communities. Thousands of dollars were raised to purchase ads in the Washington Post and Sunday New York Times, featuring an image of the head of a statue of Apollo and read: 'Costas Poisoned Olympic Spirit, Public Protests NBC'."
&lt;/blockquote&gt;

&lt;p&gt;
I will be looking forward to the closing ceremony but hopefully not with Bob Costas. I am also rather surprised with NBC's decision to put Bob Costas as one of the commentators given his less-than-impressive history with making such blunders.
&lt;/p&gt;

</description>
      <pubDate>Fri, 08 Aug 2008 19:47:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:1d20774a-1efd-4442-98ed-22e32a18ea0a</guid>
      <comments>http://blog.vazexqi.com/2008/08/08/who-the-hell-is-bob-costas#comments</comments>
      <link>http://blog.vazexqi.com/2008/08/08/who-the-hell-is-bob-costas</link>
    </item>
    <item>
      <title>A Pattern Language for Screencasting</title>
      <description>&lt;p&gt;
&lt;a href="http://blog.vazexqi.com/articles/2007/09/30/on-screencasts"&gt;About 9 months ago&lt;/a&gt;, I said that I will be looking into collecting different patterns for screencasting. So finally....
&lt;/p&gt;
&lt;p&gt;
I just finished writing a pattern language for screencasting based on my experiences producing and observing various screencasts on the internet. Through my experiences I have noticed various patterns that myself and other screencasters have used. Applying those patterns would certainly help the presentation of your screencast but, more importantly, I believe that the patterns enhance the teaching-learning experience of screencasts. And ultimately that is what matters most.
&lt;/p&gt;

&lt;p&gt;
Interested readers may view the patterns &lt;a href="http://softwareengineering.vazexqi.com/files/screencast_patterns.html"&gt;here&lt;/a&gt;. The pictures that I have included are based on software for the Mac since that is what I  use for my screencasting.
&lt;/p&gt;

&lt;p&gt;
At the moment, it's a rather complete version of what I had originally envisioned for such a document. It can definitely be improved but I would like to get a version out on the web for people to read in case anyone is interested in providing feedback or suggestions.
&lt;/p&gt;

&lt;p&gt;
I do maintain copyright on the document in case I ever decide to publish it at some pattern conference.
&lt;/p&gt;

</description>
      <pubDate>Mon, 02 Jun 2008 19:24:02 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:a157d2a4-f058-4e7e-b3fb-d0afd8e667b9</guid>
      <comments>http://blog.vazexqi.com/2008/06/02/a-pattern-language-for-screencasting#comments</comments>
      <category>software engineering</category>
      <link>http://blog.vazexqi.com/2008/06/02/a-pattern-language-for-screencasting</link>
    </item>
    <item>
      <title>Antony Blakey's Efforts on VisualWorks</title>
      <description>&lt;p&gt;&lt;a href="http://www.cincomsmalltalk.com/userblogs/antony/blogView?showComments=true&amp;printTitle=The_end_of_LLVM/WebKit_VW_integration_and_layout_improvements.&amp;entry=3389549973"&gt;The end of LLVM/WebKit VW integration and layout improvements.&lt;/a&gt;:
&lt;/p&gt;

&lt;blockquote cite="http://www.cincomsmalltalk.com/userblogs/antony/blogView?showComments=true&amp;printTitle=The_end_of_LLVM/WebKit_VW_integration_and_layout_improvements.&amp;entry=3389549973" title="The end of LLVM/WebKit VW integration and layout improvements."&gt; "Over the last 18 months or so I've put a lot of work into enhancing VisualWorks with WebKit integration, GCCXML, and later LLVM integration, as well as improving the GUI layout system. I've stopped development on these projects, primarily because there seems to be no external interest in these projects."
&lt;/blockquote&gt;

&lt;p&gt;
I am really sad that Antony Blakey is going to stop work on the GUI layout improvements for VisualWorks. His work actually made the VisualWorks UI &lt;em&gt;pleasant&lt;/em&gt; and usable. Here's a screenshot to illustrate what I mean.
&lt;/p&gt;

&lt;div&gt;&lt;a href="http://www.flickr.com/photos/37092324@N00/2536550223" title="View 'VisualWorks 7.6 on Mac' on Flickr.com"&gt;&lt;img src="http://static.flickr.com/2004/2536550223_9bff204d6f.jpg" alt="VisualWorks 7.6 on Mac" border="0" width="" height="" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;small&gt;On the left is the version enhanced with Antony's packages. And on the right is the original UI look of VisualWorks for the Mac. Notice how the tabs, find menu bar and the fonts look so out-of-place for the version on the right. And notice how they look more &lt;em&gt;native&lt;/em&gt; for the version on the left. If you just glanced at this you might not find them to be much different but if you had to use the layout everyday, which would you actually prefer?&lt;/small&gt;
&lt;/div&gt;
&lt;br /&gt;

&lt;p&gt;
I am glad that he has pushed his GUI layout work onto the Cincom public repository so we could actually look at it and modify them as necessary. A cursory glance reviews that all of the code is written in Smalltalk without the need for calling C code. So there is the possibility that I can actually decipher the code and make changes if necessary. I am not an expert on VisualWorks so this might still prove to be rather challenging.
&lt;/p&gt;

&lt;p&gt;
On the other hand, while I am definitely impressed by his work on LLVM/WebKit integration, I am not sure if I have the right level of knowledge to hop on board and contribute. I definitely would like to and perhaps after a year of using VisualWorks I would be able to. But right now, I wouldn't be of much help. Moreover, if I read his blog entries on these subjects correctly, the LLVM/WebKit integration involves diving into the VM source code and actually changing the internals of the system. I think it even requires a custom version of the VM. Also, he hasn't pushed all of his work on LLVM/WebKit integration onto the store (he has an interesting &lt;a href="http://www.cincomsmalltalk.com/userblogs/antony/blogView?showComments=true&amp;printTitle=Store_is_the_boat_anchor_that_will_sink_VisualWorks&amp;entry=3389572049"&gt;article&lt;/a&gt; on why the Cincom public store is not really suitable for collaborative development)
&lt;/p&gt;

&lt;p&gt;
Most people might argue that the VisualWorks UI is actually much better than the one for Squeak with all its colorful windows and non-standard layout. But here's a quote that exemplifies what UI design (taken literally as a quote like I would from Shakespeare with none of all the mumbo jumbo of religion):
&lt;/p&gt;

&lt;blockquote cite="http://www.biblegateway.com/passage/?search=rev%203:16&amp;version=31;" title="BibleGateway.com - Passage&#160;Lookup: Rev 3:16"&gt; "So, because you are lukewarm &#8211; neither hot nor cold &#8211; I am about to spit you out of my mouth. &#8211; Revelation 3:16"
&lt;/blockquote&gt;

&lt;p&gt;
So the Squeak UI isn't all that bad. It's different enough that your mind just accepts it as being different. On the other hand, the standard VisualWorks UI for OS X tries to blend in but does it in a way that is just &lt;em&gt;lukewarm&lt;/em&gt;... This isn't to say that the Squeak UI or the VisualWorks UI can't be improved on....
&lt;/p&gt;

&lt;p&gt;
In short, I am really impressed by Antony Blakey's efforts. He definitely has some radical ideas for improving (&lt;em&gt;modernizing?&lt;/em&gt;) Smalltalk, hence, the title of his blog: "The creation of a new order of things". I will definitely continue to monitor his future work on Smalltalk.
&lt;/p&gt;

</description>
      <pubDate>Fri, 30 May 2008 16:10:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:e01419f4-20a5-4304-88eb-2fbbb44d1f94</guid>
      <comments>http://blog.vazexqi.com/2008/05/30/antony-blakeys-efforts-on-visualworks#comments</comments>
      <category>software</category>
      <category>ui</category>
      <category>visualworks</category>
      <category>smalltalk</category>
      <link>http://blog.vazexqi.com/2008/05/30/antony-blakeys-efforts-on-visualworks</link>
    </item>
    <item>
      <title>Drag and Drop on Mail Dock Icon</title>
      <description>&lt;p&gt;&lt;a href="http://www.quotegarden.com/programming.html"&gt;Programming Quotes, Sayings about Programmers, Software Developers, Application Development&lt;/a&gt;:
&lt;/p&gt;

&lt;blockquote cite="http://www.quotegarden.com/programming.html" title="Programming Quotes, Sayings about Programmers, Software Developers, Application Development"&gt; "The only way for errors to occur in a program is by being put there by the author.&#160; No other mechanisms are known.&#160; Programs can't acquire bugs by sitting around with other buggy programs.&#160; ~Harlan Mills"
&lt;/blockquote&gt;

&lt;p&gt;
The last time I updated to OS X 10.5.2, some developer inserted this extremely annoying bug into Mail-- dragging any file onto its dock icon would crash it! 
This is particularly annoying because I already had it wired onto my reflexes to perform a drag and drop every time I want to send an attachment to someone.
&lt;/p&gt;

&lt;p&gt;
Eventually I was able to find the &lt;a href="http://discussions.apple.com/message.jspa?messageID=6903761#6903761"&gt;&lt;em&gt;solution&lt;/em&gt;&lt;/a&gt;: change Mail's composing preference to RTF instead of plain text. Well that isn't really a &lt;em&gt;solution&lt;/em&gt; since that means that I will have to compose all my e-mails as RTF which is something that I don't agree on. &lt;strong&gt;E-mail messages should be plain text whenever possible!&lt;/strong&gt; RTF might be better than HTML but it is still egregious compared to plain text.
&lt;/p&gt;

&lt;p&gt;
Anyway, I found an alternative solution. Instead of dragging the file to the dock icon, create a new empty message first and then drag the file onto the body of the message. This involves the extra step of creating a new empty message but at least it does not crash Mail nor force me to use RTF. Being able to drag the attachment into the mail message body without crashing it (even with the plain text setting) just illustrates that this is a bug that could have been avoided/fixed since there is nothing inherently wrong underneath with Mail. Instead it's probably just the drag and drop component that needs some reworking.
&lt;/p&gt;

&lt;p&gt;
Yesterday I upgraded to OS X 10.5.3 because I wanted to install the latest iPhone Beta SDK. The README specifically said that OS X 10.5.3 is required.
&lt;/p&gt;

&lt;p&gt;
And I was rather disappointed (but not really surprised) to discover that this Mail bug &lt;a href="http://discussions.apple.com/message.jspa?messageID=7139032#7139032"&gt;has &lt;strong&gt;not&lt;/strong&gt; been fixed&lt;/a&gt; yet. Fortunately I could use the alternative solution which will suffice until this bug gets fixed (if ever). I'd rather have less features (for instance remove the useless Stationary/Template feature from Mail) than to have a program crashed on the most rudimentary of tasks.
&lt;/p&gt;


</description>
      <pubDate>Fri, 30 May 2008 10:29:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:efa727b9-7e44-4033-8432-219de0184c97</guid>
      <comments>http://blog.vazexqi.com/2008/05/30/drag-and-drop-on-mail-dock-icon#comments</comments>
      <category>software</category>
      <category>apple</category>
      <category>bug</category>
      <category>mail</category>
      <link>http://blog.vazexqi.com/2008/05/30/drag-and-drop-on-mail-dock-icon</link>
    </item>
    <item>
      <title>(Finally) Some Good Use for the Camera Phone</title>
      <description>&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2391181360" title="View 'Evernote' on Flickr.com"&gt;&lt;img src="http://static.flickr.com/2336/2391181360_943d577d87.jpg" alt="Evernote" border="0" width="" height="" /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I've been reading some mentions/reviews of &lt;a href="http://www.evernote.com/"&gt;Evernote&lt;/a&gt; on various sites so I decided to try it out for myself. Right now, the latest beta version is by-invitation only. I tried my luck at their &lt;a href="http://www.evernote.com/about/prereg/"&gt;invitation-only beta registration&lt;/a&gt; and was  lucky enough to get an invite the next day. Since then I have sent out 5 (of the 10 invites) to my friends.
&lt;/p&gt;

&lt;p&gt;
The coolest feature of Evernote is its ability to recognize text within images (see this &lt;a href="http://www.youtube.com/watch?v=i_ncr1Ee9e8"&gt;demo video&lt;/a&gt;). The ability to recognize text in images is not something new but this is the first time I have seen it offered in a consumer application. Because of this,  I finally found a good use for the built-in camera of my iPhone.
&lt;/p&gt;

&lt;p&gt;
Text recognition is not built-in to the application itself. Instead anything that you store in Evernote is synchronized with the Evernote's servers (this allows you access your notes from the web). The text detection/processing is done at the servers and the metadata is sent back to your application. That means that unless you sync with the servers, you can't actually get text recognition. I think this is a good idea since it lets Evernote change its recognition algorithm without bothering the user with some software update.
&lt;/p&gt;

&lt;p&gt;
So how good is the text recognition? I decided to do some experiments and come up with the following observations. These are merely observations so they are not rigorously tested. Also, expect the recognition capabilities to increase over time.
&lt;/p&gt;


&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2390454511" title="View 'Old Intel Logo' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2193/2390454511_bb74aa0ac1.jpg" alt="Old Intel Logo" border="0" width="326" height="500" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;small&gt;It recognizes some non-standard letters like Intel's old logo on this mouse pad.&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2391286636" title="View 'Vertical Intel Logo' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2024/2391286636_4d263f864b.jpg" alt="Vertical Intel Logo" border="0" width="327" height="500" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;small&gt;It does not recognize vertical text well.&lt;/small&gt;
&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2390454529" title="View 'Is there an 'i' there?' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2295/2390454529_4e39d2b55a.jpg" alt="Is there an 'i' there?" border="0" width="327" height="500" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;small&gt;In fact, for vertical text, its recognition seems to be pretty off; recognizing things that are not there.&lt;/small&gt;
&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2391297940" title="View 'DTrace Event Poster in Evernote' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2161/2391297940_505fd63d69.jpg" alt="DTrace Event Poster in Evernote" border="0" width="326" height="500" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;small&gt;It probably only recognizes words in the English dictionary since it can't recognize "DTrace".&lt;/small&gt;
&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2390465813" title="View 'DTrace Event Poster in Evernote' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2275/2390465813_9b1ac67ce5.jpg" alt="DTrace Event Poster in Evernote" border="0" width="327" height="500" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;small&gt;It recognizes most words but might have some trouble pinpointing their exact location.&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2391298048" title="View 'Symbol recognition in Evernote' on Flickr.com"&gt;&lt;img src="http://farm4.static.flickr.com/3030/2391298048_c9ff6146d9.jpg" alt="Symbol recognition in Evernote" border="0" width="500" height="428" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;small&gt;I don't think it recognizes symbols well; it's probably optimized for numbers and letters.&lt;/small&gt;
&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2391297974" title="View 'Multicolored Word in Evernote' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2181/2391297974_9060587545.jpg" alt="Multicolored Word in Evernote" border="0" width="500" height="426" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;small&gt;It seems to have trouble with multi-colored words like the Google logo.&lt;/small&gt;
&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
So for better results, the text should be horizontally written, unicolored and contain only alphabets and numbers. But it works pretty well for most cases. It certainly beats having to enter information by hand.
&lt;/p&gt;

&lt;p&gt;
So, will I continue using Evernote after its beta period? I am expecting that it will require a paid subscription for the ability to sync and recognize text within images but if the price is reasonable, I might continue using it. Moreover, if they decide to create a native iPhone app (an offer it for free for paid subscribers), the likelihood of using it is even higher for me. After all, there isn't a convenient way to sync notes between my iPhone and my computer. I'll definitely keep &lt;a href="http://www.barebones.com/products/yojimbo/"&gt;Yojimbo&lt;/a&gt; around though since it handles PDF and has some nice predefined containers for storing image, serial numbers, etc.
&lt;/p&gt;

</description>
      <pubDate>Sat, 05 Apr 2008 17:56:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:dd4ba09f-5e91-4de9-8064-5d2dbd6c5f6e</guid>
      <comments>http://blog.vazexqi.com/2008/04/05/finally-some-good-use-for-the-camera-phone#comments</comments>
      <category>software</category>
      <category>recognition</category>
      <category>text</category>
      <category>iphone</category>
      <category>mac</category>
      <category>evernote</category>
      <link>http://blog.vazexqi.com/2008/04/05/finally-some-good-use-for-the-camera-phone</link>
    </item>
    <item>
      <title>External Monitor Setup</title>
      <description>&lt;p&gt;
After spending about a year with two huge and bulky CRT's in my office, I decided to spend about $700 to get a new 24 inch widescreen display from DELL. It wasn't only the physical size of the CRT but also its blurriness that annoyed me. Here's a picture to show what my desk looked like before:
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2349752093" title="View 'Old Setup' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2358/2349752093_965e1cf647.jpg" alt="Old Setup" border="0" width="500" height="375" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;small&gt;Both CRTs are &lt;a href="http://support.dell.com/support/edocs/monitors/M993s/en/index.htm"&gt;Dell M993s&lt;/a&gt;. Surprisingly those monitors could display 1600x1200 pixels! However, that comes at the expense of blurriness and eye-ache after a couple of hours.&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
Here's a picture to show what my desk looks like with the new monitor:
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2349752139" title="View 'New Setup' on Flickr.com"&gt;&lt;img src="http://farm4.static.flickr.com/3170/2349752139_cf74b09b44.jpg" alt="New Setup" border="0" width="500" height="375" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;small&gt;The Dell 2408WFP monitor connects to my MacBook Pro. The other smaller monitor connects to my Windows machine. I share the mouse and keyboard using &lt;a href="http://synergy2.sourceforge.net/"&gt;Synergy&lt;/a&gt;.
&lt;br /&gt;
The smaller monitor is &lt;i&gt;borrowed&lt;/i&gt; from my colleague's table since he won't be around until Fall 2008.
&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
Using a large monitor is not without its challenges and problems. The main problem on the Mac (and possibly Windows and Linux) is that it becomes rather troublesome to resize the windows. Here's why: all windows manager that I know have three buttons on each window: close, maximize(expand) and minimize. On a small monitor, clicking the maximize button expands the window to fill your small screen -- usually a desired behavior so you can see more of the contents in the window. On a large monitor, clicking the maximize button, expands the window to fill your &lt;em&gt;large&lt;/em&gt; screen -- usually an undesired behavior since you are wasting screen space.
&lt;/p&gt;

&lt;p&gt;
Unfortunately, I have not found a nice way to resize the windows yet. I do have a trick though. Since my external display is powered  by a MacBook Pro, I can always move the window over to the MacBook Pro's smaller screen, maximize it and then move it back to the external display! It's cumbersome but it works. And I get uniformly sized windows -- I am rather particular about having my windows be about the same size.
&lt;/p&gt;

&lt;p&gt;
Fortunately things are better with my browser since I can just rely on javascript bookmarklets:
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://pimpmysafari.com/bookmarklets/"&gt;Pimp My Safari: bookmarklets&lt;/a&gt;:
&lt;/p&gt;

&lt;blockquote cite="http://pimpmysafari.com/bookmarklets/" title="Pimp My Safari: bookmarklets"&gt; "Resize to 1024x768"
&lt;br /&gt;
&lt;code&gt;
javascript:void(window.resizeTo(1024,768))
&lt;/code&gt;
&lt;/blockquote&gt;

</description>
      <pubDate>Fri, 21 Mar 2008 13:42:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:dc2537e9-d2ab-4abb-84b4-d6ad40306867</guid>
      <comments>http://blog.vazexqi.com/2008/03/21/external-monitor-setup#comments</comments>
      <category>monitor</category>
      <category>dell</category>
      <category>2408wfp</category>
      <link>http://blog.vazexqi.com/2008/03/21/external-monitor-setup</link>
    </item>
    <item>
      <title>Updated to Typo5</title>
      <description>&lt;p&gt;
So I &lt;em&gt;discovered&lt;/em&gt; that my web host just upgraded to Rails 2. How did I make the discovery? Well, both my blogs were &lt;strong&gt;malfunctioning&lt;/strong&gt;. And when a rails web application malfunctions, it is usually a good idea to check if they had upgraded it. Previous experience with Typo should have taught me that but sometimes I forget such things.
&lt;/p&gt;

&lt;p&gt;
I should definitely &lt;a href="http://support.tigertech.net/freeze-rails"&gt;freeze&lt;/a&gt; the rails version right now so that I don't encounter such problems in the future.
&lt;/p&gt;

&lt;p&gt;
Anyway, I grabbed the latest version of &lt;a href="http://typosphere.org/"&gt;Typo&lt;/a&gt; and installed it. I must say the latest version really looks &lt;a href="http://typosphere.org/articles/2007/08/26/screenshots"&gt;slick&lt;/a&gt;. I chose to use the same Scribbish theme for this blog but there are two new themes that are pretty nice too. 
&lt;/p&gt;

&lt;p&gt;
One caveat is that some of the plug-ins have been removed from the base Typo installation. This caused me some problems as I migrated my blog over. I could have just installed the old plug-ins following the instructions from &lt;a href="http://typosphere.org/articles/2007/08/26/typo-plugins-directory"&gt;here&lt;/a&gt; but I decided to stay fresh. I am not sure whether there is an easier way to do this, but I basically went into the database and remove the sidebars table:
&lt;br /&gt;
&lt;code&gt;DELETE from sidebars;&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
I am going to upgrade the &lt;a href="http://softwareengineering.vazexqi.com"&gt;softwareengineering.vazexqi.com&lt;/a&gt; blog in the next few hours so it should be back up by tonight.
&lt;/p&gt;

</description>
      <pubDate>Thu, 20 Mar 2008 17:37:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:5decd8c9-3ac7-4019-8971-ee5916e133c1</guid>
      <comments>http://blog.vazexqi.com/2008/03/20/updated-to-typo5#comments</comments>
      <category>site updates</category>
      <link>http://blog.vazexqi.com/2008/03/20/updated-to-typo5</link>
    </item>
    <item>
      <title>vazexqi.com updated</title>
      <description>&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/37092324@N00/2339083089" title="View 'vazexqi.com updated!' on Flickr.com"&gt;&lt;img src="http://farm4.static.flickr.com/3287/2339083089_4b0a0b84d8.jpg" alt="vazexqi.com updated!" border="0" width="500" height="375" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;
After delaying for a &lt;em&gt;very long&lt;/em&gt; time, I have finally updated the root &lt;a href="http://www.vazexqi.com/index.html"&gt;vazexqi.com&lt;/a&gt; site and turned it into something that reflects more of what I am doing as a Ph.D. student. I was only compelled to do it because the CS department demanded a curriculum vitae from each of its students. I wanted to put a web address on my CV so that people can keep up with what I am doing and find. However, I did not feel that it was appropriate to put my blog address directly on it; after all, a website that starts with the word "blog" might not sound professional enough to some academic peers (it should be fine for a developer's blog though).
&lt;/p&gt;

&lt;p&gt;
I was too lazy to actually write everything from scratch so I decided to give &lt;a href="http://www.realmacsoftware.com/rapidweaver/"&gt;RapidWeaver&lt;/a&gt; a try. I had used it before for various tasks but I am only needed to use the demo version since I would just borrow (and credit) their templates and then code everything up by hand. But this time, I decided that since vazexqi.com was going to be mostly static content, I needed a convenient way to easily update it using some application. Also, I am not really a web designer so I would like to be able to quickly change the template without having to do too much work on my part.
&lt;/p&gt;

&lt;p&gt;
Overall, I think the new look is pretty decent. There are things that still need updating but overall it's a good start. There are two things now that I &lt;strong&gt;must&lt;/strong&gt; remember to do: constantly update the static pages and upload a picture of myself to the front page....
&lt;/p&gt;

&lt;p&gt;
I don't really subscribe to the idea of putting yourself out there on the web for everyone (like this &lt;a href="http://www.slideshare.net/slgavin/meet-charlie-what-is-enterprise20"&gt;guy&lt;/a&gt;) but I do think that it is important to have a clean web page where your peers can easily find you.
&lt;/p&gt;

</description>
      <pubDate>Sun, 16 Mar 2008 21:36:35 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:bb39016f-fcb7-4f63-9437-b409e4d54e9d</guid>
      <comments>http://blog.vazexqi.com/2008/03/16/vazexqi-com-updated#comments</comments>
      <category>site updates</category>
      <link>http://blog.vazexqi.com/2008/03/16/vazexqi-com-updated</link>
    </item>
    <item>
      <title>Thoughts on the iPhone SDK</title>
      <description>&lt;small&gt;
As I am writing this, I am also partly listening to the &lt;a href="http://www.apple.com/quicktime/qtv/iphoneroadmap/"&gt;&lt;em&gt;Apple March 6 Event&lt;/em&gt;&lt;/a&gt; where the iPhone SDK was first introduced. And halfway through, I cannot help but notice that Scott Forstall was practically &lt;strong&gt;emulating&lt;/strong&gt; Steve Jobs. He even used phrases like "... a &lt;em&gt;screamer&lt;/em&gt;...", "... we made it &lt;em&gt;even&lt;/em&gt; better...", "... the iPhone is &lt;em&gt;the most advanced&lt;/em&gt;... ", "... years ahead of any other...". He is definitely a smart guy but I think he is emulating Steve too much. It would have been nice to see his own personality. On the other hand, this also means that I probably have watched too much of Steve Jobs to know how he talks....
&lt;/small&gt;
&lt;br /&gt;
&lt;p&gt;
So, I downloaded the free version of the &lt;a href="http://developer.apple.com/iphone/program/"&gt;iPhone SDK&lt;/a&gt;. It comes in at a whopping 2.1 GB so it took about 20 minutes to download.
&lt;/p&gt;

&lt;p&gt;
After extracting it, the README has this to say:
&lt;ol&gt;
&lt;li&gt; It requires about 5.3 GB for installation.&lt;/li&gt;
&lt;li&gt; It requires OS X 10.5.2 on &lt;strong&gt;intel&lt;/strong&gt; machines (some &lt;a href="http://www.iphoneatlas.com/2008/03/10/surprise-iphone-sdk-also-works-on-powerpc-macs/"&gt;claim&lt;/a&gt; that it can work on powerpc as well).&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;

&lt;p&gt;
There is the option to keep Xcode 3.0 and Xcode 3.1 Beta that comes with the iPhone SDK on the same machine. I did not choose this option so it replaced my original developers tools (meaning that I did not need to sacrifice extra disk space at the expense of a possibly buggy beta version Xcode 3.1).
&lt;/p&gt;

&lt;p&gt;
I tried some of the sample apps from the iPhone developer site (it uses a generic URL of http://developer.apple.com/iphone/samples/index.action which checks to see if you are authenticated).
&lt;/p&gt;

&lt;p&gt;
Here are the ones that I tried:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kalimba&lt;/strong&gt; - Supposed to be a replica of an African thumb piano. We should be able to strike each bar and have a musical note sound. It failed miserably on the iPhone simulator -- sound will not play and the piano refused to rotate to landscape mode. See this &lt;a href="http://discussions.apple.com/thread.jspa?threadID=1433035&amp;tstart=15"&gt;thread&lt;/a&gt;.  Here's a picture to show what I mean:
&lt;/li&gt;
&lt;br /&gt;
&lt;a href="http://www.flickr.com/photos/vazexqi/2325087451/" title="Kalimba on the iPhone Simulator by vazexqi, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3176/2325087451_cd1f2de533.jpg" width="500" height="404" alt="Kalimba on the iPhone Simulator" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;small&gt; This is one of the examples for the iPhone SDK. Unfortunately, it does not seem to work properly on the simulator &#8211; sound doesn't work and it refuses to rotate into landscape mode. &lt;/small&gt;
&lt;br /&gt;
&lt;li&gt;
&lt;strong&gt;Jigsaw&lt;/strong&gt; - Just a simple jigsaw puzzle. Works fine.
&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;
&lt;strong&gt;TheElements&lt;/strong&gt; - Shows the periodic table with the possibility to view each element's page on wikipedia. When I clicked on the link to wikipedia, the simulator crashed gloriously -- no warnings, no output to console. It just crashed. &lt;em&gt;After some playing around, I discovered that it crashes when you run it immediately after it opens up in the emulator. Instead, if you go to the home screen and then activate TheElements application, then opening a link would work!&lt;/em&gt;
&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;
&lt;strong&gt;GLGravity&lt;/strong&gt; - Draws the canonical OpenGL teapot and allows you to rotate it by rotating and tilting your iPhone. This refused to run on the simulator -- claiming that it needs to run on an iPhone.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
I have to agree that the iPhone SDK has a lot to offer. If you don't believe me, just watch the &lt;a href="http://www.apple.com/quicktime/qtv/iphoneroadmap"&gt;video&lt;/a&gt;. The demo comes on at about 30 minutes through. It's akin to writing for a mini version of OS X with the addition of an impressive user interface, multi-touch control and internal accelerometers. Games will definitely benefit from this. So it should be easy for most developers to get started once they familiarize themselves with the new human interface guidelines.
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/vazexqi/2325987514/" title="Spore on the iPhone by vazexqi, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3023/2325987514_8fcf01ea82.jpg" width="500" height="380" alt="Spore on the iPhone" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;small&gt;Spore on the iPhone. It uses the accelerometer on the iPhone for controls. &lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
However, as impressive as the SDK is, it also has some shortcomings which can't be ignored. Here's why (some of these might change when iPhone 2.0 debuts but I doubt it):
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;No garbage collection.&lt;/strong&gt;
&lt;br /&gt;
&lt;a href="http://developer.apple.com/iphone/gettingstarted/docs/creatingiphoneapps.action"&gt;Creating an iPhone Application&lt;/a&gt;:
&lt;blockquote&gt;
Note: iPhone OS does not support memory management using the garbage collection feature that is in Mac OS X v10.5 and later.
&lt;/blockquote&gt;
Maybe most Objective-C developers love doing manual reference counting but this seems like something that should be addressed. After all, &lt;a href="http://code.google.com/android/"&gt;Google's Android&lt;/a&gt; platform supports this. Moreover, Objective-C 2.0 already supports it so garbage collection could have been enabled from the beginning.
&lt;br /&gt;
&lt;br /&gt;
Some might argue that garbage collection adds extra performance overhead. But consider what happens when your app starts leaking memory all over the place. And with all the &lt;a href="http://www.cs.utexas.edu/users/oops/papers.html"&gt;rich history&lt;/a&gt; that garbage collection has, it's really amazing that companies don't really start to take it seriously.
&lt;br /&gt;
&lt;br /&gt;
In fact, during the video, they showcased several different developers creating fantastic prototypes for the iPhone in two weeks. I suspect that development and debugging time could have been reduced &lt;em&gt;more&lt;/em&gt; if only garbage collection was enabled. =)
&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;
&lt;strong&gt;Crippled simulator&lt;/strong&gt;
&lt;br /&gt;
Not sure if this will change in the future but the current simulator is rather dumb and featureless. You cannot even trigger the hard buttons (like the volume UP/DOWN, silencer, top button). The only button you can activate is the home button -- the one at the bottom of the screen. And no, you can't simulate the features of the accelerometer.
&lt;br/&gt;
&lt;br /&gt;
It does however support the two-finger gesture if you hold on the OPTION key on your keyboard.
&lt;br /&gt;
&lt;br /&gt;
I suspect that this is a ploy by Apple to get people to i) buy iPhones to test on b) subscribe to the $99/year developer deal to get your app on to the iPhone. After all, how are you going to test your next greatest app that relies on the accelerometer if the simulator cannot even handle it.  However, of my three criticisms, this might be the easiest one to fix.
&lt;br /&gt;
&lt;br /&gt;
Google's Android emulator is currently better but that could be because there &lt;em&gt;isn't an actual phone&lt;/em&gt; to run it on yet!
&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;
&lt;strong&gt;$99/year (yes, it's PER YEAR!)&lt;/strong&gt;
&lt;br /&gt;
&lt;a href="http://www.apple.com/pr/library/2008/03/06iphone.html?sr=hotnews"&gt;Apple Announces iPhone 2.0 Software Beta&lt;/a&gt;
&lt;blockquote&gt;
During the beta iPhone SDK program, a limited number of developers will be accepted into Apple&#8217;s new iPhone Developer Program and offered the ability to get code onto iPhones for testing. The Standard Program costs $99 (US) per year and gives members an iPhone SDK and development tools; access to pre-release iPhone software; technical support; the ability to get code onto iPhones for testing; and distribution of applications via the new App Store. The Enterprise Program costs $299 (US) per year.
&lt;/blockquote&gt;
&lt;br/&gt;
To even get your app &lt;em&gt;for testing&lt;/em&gt; onto the iPhone you need the special version of the SDK or a special license. This is weird since that means that I cannot even write an app for &lt;strong&gt;MYSELF&lt;/strong&gt; and install it on my phone just for my own &lt;strong&gt;PERSONAL&lt;/strong&gt; use.
&lt;br /&gt;
&lt;br /&gt;
Plus, right now no one can install your app unless you list it on iTunes (which minimally also requires the $99/year contract).
&lt;br /&gt;
&lt;br /&gt;
You can argue that this annual fee is not really a problem with the SDK but I think it is. After all, without paying the fee, your SDK basically allows you only to experiment and not actually get anything onto your iPhone.
&lt;br /&gt;
&lt;br /&gt;
I think the $99/year (or $299 for Enterprise) fee is somehow used to do code signing which I think is a weird way to guarantee that your program is non-malicious. I could be wrong.
&lt;br /&gt;
&lt;br /&gt;
Also, after having to pay $99 would anyone release your app for free??!! I look forward to seeing how many free apps there will be. My prediction is that apps that are somehow tied to a desktop app that costs money (for instance, Transmit, NetNewswire, etc) might be free since the cost is absorbed by the desktop app.
&lt;br /&gt;
&lt;br /&gt;
It would be interesting to see how it would compete with Android in terms of interested developers. I am not sure if it is a good idea to actually get developers to pay to actually use the development tools.
&lt;br /&gt;
&lt;br /&gt;
I do like the idea of paying the yearly fee to have Apple list your product for you on iTunes but it would be good to offer developers the choice of distributing their own applications if they want. In fact, just being able to install your &lt;strong&gt;own&lt;/strong&gt; app on your &lt;strong&gt;own&lt;/strong&gt; phone would be fantastic!
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
So while the SDK definitely has a lot to offer, it also has some serious shortcomings that might discourage some developers. But with all things Apple, they certainly won't mind ostracizing some developers in favor of others....
&lt;/p&gt;

</description>
      <pubDate>Mon, 10 Mar 2008 20:07:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:6c6669b3-ff33-4e8e-af0f-b7a24e7152b4</guid>
      <comments>http://blog.vazexqi.com/2008/03/10/thoughts-on-the-iphone-sdk#comments</comments>
      <category>college stuff</category>
      <category>software</category>
      <category>xcode</category>
      <category>iphone sdk</category>
      <category>iphone</category>
      <link>http://blog.vazexqi.com/2008/03/10/thoughts-on-the-iphone-sdk</link>
    </item>
    <item>
      <title>Alan Kay's Talk at TED</title>
      <description>&lt;small&gt;
There are certain events that are just so exciting that I feel compelled to blog about them immediately after I experience it. This is one such event.
&lt;/small&gt;

&lt;p&gt;
&lt;a href="http://en.wikipedia.org/wiki/Alan_Kay"&gt;Alan Kay&lt;/a&gt; recently gave at talk at &lt;a href="http://www.ted.com/"&gt;TED&lt;/a&gt;. You can view his video from &lt;a href="http://www.ted.com/index.php/talks/view/id/228"&gt;here&lt;/a&gt;. Like all TED talks, it's about 20 minutes long so it's short and straight to the point. The rest of my post will make references to the video, so reading it without watching the video might not make much sense.
&lt;/p&gt;

&lt;p&gt;
Unsurprisingly, in the video, Kay demonstrated the canonical moving car example for &lt;a href="http://wiki.laptop.org/go/Etoys"&gt;Etoys&lt;/a&gt;. The moving car demo is something that most people familiar with Squeak would have seen. It's really simple but it lets kids experience programming in a fun interactive way. Unfortunately, this is something that most modern languages have failed to enable. After all, which is more fun: printing text to the screen or watching your creation actually move on screen?
&lt;/p&gt;

&lt;p&gt;
However, the second part of Kay's demo was even more interesting. He shows what you can do to help illustrate some simple math and physics properties in an insightful manner. It uses all the features of Etoys (or maybe the full Squeak implementation) to let students experiment by themselves. 
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/vazexqi/2324602402/" title="Virtual Tape Meter by vazexqi, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2187/2324602402_efbcd473c6.jpg" width="500" height="366" alt="Virtual Tape Meter" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;small&gt;Experimenting with this would have been so much cleaner than using a tape meter. It's actually even cooler when you watch the animation or code it up yourself in Etoys.&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
For instance (and this was something that impressed me), you could design a simple car that drop dots along as it moved. So, a car that is accelerating will be dropping dots further and further apart from one another. This is basically the same idea as using a tape meter. However, the animation of the car moving and dropping dots seem so much cleaner to me. You can easily illustrate the concept of velocity and acceleration without having to talk about friction, etc. Something that is unavoidable with a real experiment. This helps especially when you are teaching a younger audience about the basic principles of motion.
&lt;/p&gt;

&lt;p&gt;
Toward the end of the talk Kay showed an example running on the &lt;a href="http://laptop.org/"&gt;OLPC&lt;/a&gt;. So I was curious whether all courseware on the OLPC will be interactive or whether they will be like normal textbooks only in digital format. Either way, it's already hard enough to actually get good content onto the OLPC. As far as I know, there is no group dedicated to creating content for the OLPC yet.
&lt;/p&gt;

&lt;p&gt;
However, I was able to find a couple of interactive learning environments at &lt;a href="http://wiki.laptop.org/go/OLPC_Courseware_Review"&gt;OLPC Courseware Review&lt;/a&gt; but, from the list, it seems that &lt;a href="http://wiki.laptop.org/go/DrGeo"&gt;Dr. Geo II&lt;/a&gt; is the only one that has been ported to run on the OLPC. It would be interesting to see if there is a Google Summer of Code project for creating/porting an existing interactive learning environment to the OLPC.
&lt;/p&gt;

&lt;p&gt;
Incidentally I was reading "A Mathematician's Lament" by Paul Lockhart which also talks about how to revamp the current K-12 mathematics education. The paper is available from &lt;a href="http://www.maa.org/devlin/LockhartsLament.pdf"&gt;here&lt;/a&gt;. Basically, Lockhart says that there is not enough experimentation with math going on in the class rooms. And that most of math is rote memorization with little appreciation for the &lt;em&gt;beauty&lt;/em&gt; of math.
&lt;/p&gt;

&lt;p&gt;
The math education back in Malaysia is not much better either. In school, the teachers are more interested in finishing the syllabus. So students either &lt;em&gt;get-it&lt;/em&gt; in school or have to rely on paid tutors to teach it to them. There's very little appreciation on the derivation of the proofs of math. Either the derivation is skipped entirely while teaching or it follows the route of the boring derivation on the board that doesn't engage students.
&lt;/p&gt;

</description>
      <pubDate>Mon, 10 Mar 2008 09:14:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:836199ed-7c0f-4b8c-bf0a-dbf5ca408214</guid>
      <comments>http://blog.vazexqi.com/2008/03/10/alan-kays-talk-at-ted#comments</comments>
      <category>college stuff</category>
      <category>readings</category>
      <category>software</category>
      <category>etoys</category>
      <category>squeak</category>
      <category>ted</category>
      <category>kay</category>
      <category>teaching</category>
      <category>math</category>
      <category>olpc</category>
      <link>http://blog.vazexqi.com/2008/03/10/alan-kays-talk-at-ted</link>
    </item>
    <item>
      <title>PhD Qualifying Exam</title>
      <description>&lt;p&gt;
So every student doing a PhD at UIUC (and I think any US university) is expected to pass a qualifying exam. The &lt;a href="https://agora.cs.uiuc.edu/display/cs428sp08/2008/02/29/Reading+for+the+Midterm"&gt;qualifying exam&lt;/a&gt; gauges whether a student is competent enough to continue in the PhD program. However, it's much more than that. I think it's more of a test to see how well you can do a presentation and answer tough questions during the presentation; as well as trying to not sound stupid in front of a very smart audience.
&lt;/p&gt;

&lt;p&gt;
Anyway, I took my exam two weeks ago. It was an oral presentation where I was assigned two papers:
&lt;a href="http://portal.acm.org/citation.cfm?id=1297105.1297029"&gt;The jastadd Extensible Java Compiler&lt;/a&gt; and &lt;a href="http://groups.csail.mit.edu/pag/pubs/test-factoring-ase2005-abstract.html"&gt;Automatic Test Factoring&lt;/a&gt;. Both papers were about tools (something that I interested in as I mentioned in my research statement to the exam committee).
&lt;/p&gt;

&lt;p&gt;
It's interesting to note how the two papers are somehow connected with me. I first saw the JastAdd system while I was at OOPSLA '07. I had even talked to the authors of the paper, attended their poster session and even their demo session. Fortunately (or unfortunately) I did not attend their presentation session so my presentation was not influenced by theirs. I was already interested in studying this paper in-depth because of the system. And having it chosen as my qualifying exam paper gave me even more motivation.
&lt;/p&gt;

&lt;p&gt;
The second paper was interesting because, Danny, one of my colleagues from the same research group is now working under &lt;a href="http://people.csail.mit.edu/mernst/research/students.html"&gt;Prof. Michael Ernst&lt;/a&gt;. Danny had referenced some of Ernst's work before. So I was familiar with some of the terminology in the paper and was able to use that to my advantage.
&lt;/p&gt;

&lt;p&gt;It's just interesting to see what a small world it is....&lt;/p&gt;

&lt;p&gt;
My slides for the presentations are available here: &lt;a href="/files/JastAdd.pdf"&gt;JastAdd.pdf&lt;/a&gt; and &lt;a href="/files/AutoFactoring.pdf"&gt;AutoFactoring.pdf&lt;/a&gt;. I am not sure how interesting they would be on their own but they are &lt;em&gt;pretty&lt;/em&gt; to look at.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;And I just found out that I passed!&lt;/strong&gt; The committee had this to say:
&lt;/p&gt;

&lt;blockquote&gt;
"The committee were impressed with his performance and background knowledge".
&lt;/blockquote&gt;

&lt;p&gt;
So that's one crucial step toward completing my Ph.D! :)
&lt;/p&gt;

</description>
      <pubDate>Fri, 07 Mar 2008 13:08:12 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:d8ebd237-3cae-4e36-8ac9-be33d1c4d0a8</guid>
      <comments>http://blog.vazexqi.com/2008/03/07/ph-d-qualifying-exam#comments</comments>
      <category>college stuff</category>
      <link>http://blog.vazexqi.com/2008/03/07/ph-d-qualifying-exam</link>
    </item>
    <item>
      <title>Rubber Bands</title>
      <description>&lt;p&gt;
&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/moBRQ2E5QE0"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/moBRQ2E5QE0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;

&lt;p&gt;
My girlfriend and I decided to join the &lt;a href="http://eweek.stanford.edu/2008/"&gt;Innovation Tournament Video Contest&lt;/a&gt;. The video above is our submission. It could definitely be improved. However, considering the fact that we are only a two-person team and that the weather here is less than conducive, I think we did OK. Overall, it was an interesting experience -- something that I normally would not have done.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Update&lt;/strong&gt;: Well, turns out that we won! We get to have breakfast with &lt;a href="http://en.wikipedia.org/wiki/Henry_Petroski"&gt;Henry Petroski&lt;/a&gt;, an author whose books I enjoy &lt;strong&gt;and&lt;/strong&gt; a visit to &lt;a href="http://www.ideo.com/ideo.asp"&gt;IDEO&lt;/a&gt;. I wasn't aware of this before but turns out that Henry Petroski did his Ph.D from UIUC! My advisor, Ralph Johnson and my colleague, Maurice are both fans of his writing. It is great to be able to meet Mr. Petroski in-person!
&lt;/p&gt;

&lt;p&gt;
The prizes were sort of interesting because there were slightly more prizes than participants. So this means that a) everyone who participated was really a prize-winner and b) each team got to choose more than one prize. Some prizes, like the opportunity to attend breakfast with Mr. Petroski, were not limited or exclusive so multiple teams could choose the same prize.
&lt;/p&gt;

</description>
      <pubDate>Fri, 29 Feb 2008 18:40:31 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:bd22475d-5869-4172-8d61-a6df67f2fc12</guid>
      <comments>http://blog.vazexqi.com/2008/02/29/rubber-bands#comments</comments>
      <category>college stuff</category>
      <link>http://blog.vazexqi.com/2008/02/29/rubber-bands</link>
    </item>
    <item>
      <title>Session restore (sort of) in Eclipse with Mylyn</title>
      <description>&lt;p&gt;
&lt;small&gt;This was something that I really wanted to blog about for a long time...&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
Last year I wanted to know a way to save &lt;em&gt;sessions&lt;/em&gt; in Eclipse like I could for Firefox. For instance, Firefox allows you to save the open tabs and windows into a new session and restore that session in the future. That way if you ever need to recall a set of tabs for reference, they can be easily activated by restoring the saved session.  
&lt;/p&gt;

&lt;p&gt;
In fact, any decent, editor or IDE should the option to save sessions. Heck, &lt;a href="http://www.vim.org/tips/tip.php?tip_id=1037"&gt;Vim&lt;/a&gt; and &lt;a href="http://www.phys.ufl.edu/docs/emacs/emacs_423.html"&gt;Emacs&lt;/a&gt; have this feature out-of-the-box. Sessions are really useful when you have to work on groups of related files at the same time but don't want to have to remember which they are.
&lt;/p&gt;

&lt;p&gt;
So why was there apparently no way to do this in Eclipse? Initially, I thought that &lt;a href="http://wbeaton.blogspot.com/2005/11/leanin-on-working-sets.html"&gt;Working Sets&lt;/a&gt; might be the solution. However, they only allowed you to &lt;strong&gt;group&lt;/strong&gt; files into sets. They don't actually remember the editors that are opened and what state you were in. So Working Sets were not even a poor man's implementation of sessions.
&lt;/p&gt;

&lt;p&gt;
Then epiphany struck! We could use the &lt;a href="http://www.eclipse.org/mylyn/"&gt;Mylyn&lt;/a&gt; plug-in to accomplish this. In fact, as you shall see, Mylyn can do even better than just saving sessions - it infers them automatically based on what you are doing! Mylyn comes installed standard now on Eclipse 3.3 and higher. In fact, the Mylyn view is even shown by default; it's not activated though. 
&lt;/p&gt;

&lt;p&gt;
Anyone who does not use sessions has a) an incredible memory, b) an inhumane ability to do context switching between tasks AND c) the luxury of not having to close his IDE ever. &lt;strong&gt;Or&lt;/strong&gt; the developer just doesn't know that such an excellent tool exists out there...
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2237337520" title="View 'The Mylyn View' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2200/2237337520_8904796f46.jpg" alt="The Mylyn View" border="0" width="500" height="377" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;strong&gt;This is Mylyn&lt;/strong&gt;
&lt;br /&gt;
&lt;small&gt;I have readjusted my perspective a bit so that everything can fit nicely in a 800x600 window. The picture above shows the Mylyn view with some sample local tasks.&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2236546165" title="View 'Activate a previous context' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2001/2236546165_8f5ef58a29.jpg" alt="Activate a previous context" border="0" width="500" height="377" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;strong&gt;Activating a previous session&lt;/strong&gt;
&lt;br /&gt;
&lt;small&gt;I am activating a previous session. By default, Mylyn automatically remembers the last context that you were in before closing the editor and will restore that.&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2237337558" title="View 'The editors from a previous context are restored' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2395/2237337558_23cfccea58.jpg" alt="The editors from a previous context are restored" border="0" width="500" height="377" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;strong&gt;Previous session restored&lt;/strong&gt;
&lt;br /&gt;
&lt;small&gt;You can see that Mylyn remembers the files that were opened in that session and has restored them in the editors. *The current active task (see the Task List view) has a blue bullet next to it. In the Package Explorer view, you can even see the other files that I might have referred to in a previous session but did not open in any editor.&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2236546213" title="View 'Creating a new local task' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2259/2236546213_7e8d634ab3.jpg" alt="Creating a new local task" border="0" width="500" height="377" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;strong&gt;Creating a new local task (context)&lt;/strong&gt;
&lt;br /&gt;
&lt;small&gt;Mylyn allows you to create local task for your own use. With the proper server, you can also create sharable tasks in a Bugzilla or JIRA repository. That way, you can share the same session with yourself when you are &lt;strong&gt;working on a different machine&lt;/strong&gt; or &lt;strong&gt;with your other teammates&lt;/strong&gt; so that they can take a look at the same things that you are looking at.&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2237337616" title="View 'Editing a local task' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2278/2237337616_bbd0aa050d.jpg" alt="Editing a local task" border="0" width="500" height="377" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;strong&gt;Editing a local task (context)&lt;/strong&gt;
&lt;br /&gt;
&lt;small&gt;You can easily associate other metadata with each task. In fact, Mylyn was originally created to be a task-oriented system. It allows you to split your work into little tasks to help you focus.&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2236546269" title="View 'Reveal all files or focus on active task' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2264/2236546269_f67d511b41.jpg" alt="Reveal all files or focus on active task" border="0" width="500" height="377" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;strong&gt;Deciding to show everything or just the active task&lt;/strong&gt;
&lt;br /&gt;
&lt;small&gt;You can easily switch between showing &lt;em&gt;all&lt;/em&gt; the files in the Package Explorer or focusing on the active task by clicking on the Mylyn button.&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
Mylyn has a &lt;strong&gt;whole&lt;/strong&gt; bunch of other features. Some of the interesting ones include:
&lt;ul&gt;
&lt;li&gt;
The ability to share a context with different tasks. You can clone the current context and &lt;em&gt;paste&lt;/em&gt; it into a different task.
&lt;/li&gt;
&lt;li&gt;
It cleverly &lt;em&gt;remembers&lt;/em&gt; what editors and files that you have accessed and stores those into its session.
&lt;/li&gt;
&lt;li&gt;
It intelligently &lt;em&gt;forgets&lt;/em&gt; editors and files that you have not looked at for extended periods.
&lt;/li&gt;
&lt;li&gt;
You are always in control - you can override the behavior easily and promote/demote certain files from sessions.
&lt;/li&gt;
&lt;li&gt;
It records how long you spent on each task so that you can actually report that figure with certainty.
&lt;/li&gt;
&lt;li&gt;
It's well integrated with different perspective and views in Eclipse. And it is constantly being improved upon.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
Mylyn is great for helping you focus on your programming tasks. It stays out of your way for the most part but is easily accessible when you need it. Once you start using it, you really wished that every IDE out there (including the venerable IntelliJ) supported it.
&lt;/p&gt;

</description>
      <pubDate>Sat, 02 Feb 2008 14:59:00 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:3c465763-b2bd-4166-904a-1e6142a2661a</guid>
      <comments>http://blog.vazexqi.com/2008/02/02/session-restore-sort-of-in-eclipse-with-mylyn#comments</comments>
      <category>development</category>
      <category>eclipse</category>
      <category>sessions</category>
      <category>mylyn</category>
      <category>eclipse</category>
      <link>http://blog.vazexqi.com/2008/02/02/session-restore-sort-of-in-eclipse-with-mylyn</link>
    </item>
    <item>
      <title>Why tools can make it a pleasure to learn a new framework</title>
      <description>&lt;p&gt;
I was reading the book &lt;a href="http://www.manning.com/walls3/"&gt;&lt;em&gt;Spring In Action&lt;/em&gt;&lt;/a&gt; in my attempt to learn about Spring. More importantly, I needed to know enough to be able to incorporate refactoring support for it as part of my project.
&lt;/p&gt;

&lt;p&gt;
Unfortunately, the book had some typos which were actually technical errors. And this was just in Chapter 1! If you are trying to learn something for the first time and there are typos, you might not be able to detect it. And this can lead to hours of frustration....
&lt;/p&gt;

&lt;p&gt;
Fortunately, IntelliJ has support Spring. And it detects the errors for you! So even if the technical reviewers did not detect the error, at least your IDE (a good one) can do it for you and save you time.
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2194909419" title="View 'Error detection' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2123/2194909419_8460951860.jpg" alt="Error detection" border="0" width="500" height="139" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;small&gt;IntelliJ 7 has support for Spring. In this case, it detected that something was wrong with the xml configuration file.&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/37092324@N00/2194909447" title="View 'Error correction' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2322/2194909447_ff7f3207c4.jpg" alt="Error correction" border="0" width="412" height="179" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;small&gt;It even offers the ability to correct the error!&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
I wonder if the error in the book could have been detected had the reviewers use a better tool. Or at least attempt to run it using some automated tool.
&lt;/p&gt;

</description>
      <pubDate>Tue, 15 Jan 2008 11:23:08 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:12163c69-0d05-47cb-96a4-577157a8af5f</guid>
      <comments>http://blog.vazexqi.com/2008/01/15/why-tools-can-make-it-a-pleasure-to-learn-a-new-framework#comments</comments>
      <category>software</category>
      <category>development</category>
      <link>http://blog.vazexqi.com/2008/01/15/why-tools-can-make-it-a-pleasure-to-learn-a-new-framework</link>
    </item>
    <item>
      <title>Leave No Stone Unturned</title>
      <description>&lt;p&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/41w37VxTFXL._SS500_.jpg" width="200" height="200" /&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/410UkKG0LcL._SS500_.jpg" width="200" height="200" /&gt;
&lt;/p&gt;

&lt;p&gt;
I spent the previous week reading two very interesting - and some might say controversial - books. The titles of the books speak for themselves. However, that is not the main reason for this post. Instead, this post is about what I think is an important point of both books; something that might be hidden underneath both the hype and criticism surrounding the books.
&lt;/p&gt;

&lt;p&gt;
Both books advocate the need to question &lt;em&gt;everything&lt;/em&gt; -- even religion. Religion has always been considered a taboo subject and its veracity has always been taken for granted. More often than not, religions rely on a divine book that has been perpetuated by a deity as the source of truth. And this source of truth, according to its followers, shall not be questioned. This is &lt;strong&gt;faith&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
And that is where a potential &lt;em&gt;problem&lt;/em&gt; lies. While I am certain that both authors have tried their best to verify what they have written, they are not ashamed or adamant about making corrections to their books when the evidence shows otherwise. With sufficient evidence, both authors might even be converted toward religion. I doubt the same could be said about religious texts. Religious texts might have been perpetuated by a divine deity, but they are still transcribed by human beings.
&lt;/p&gt;

&lt;p&gt;
Now, it might very well be that religious texts are indeed infallible. However, without testing, without questioning, we can never be sure. At least, we cannot be sure without just relying on blind faith alone. To put this into perspective, most people are not going to sit in a plane after being told that it is powered through &lt;em&gt;sheer faith-power alone&lt;/em&gt;.
&lt;/p&gt;

&lt;p&gt;
If anyone doubts the need to question, just look around us. All modern inventions come about through some form of questioning. If we just accepted everything as being &lt;em&gt;magical&lt;/em&gt; then we would never have many of the inventions that we take for granted today. The scientific theories that we have today might not be complete but they sure do a fine job of making our lives better. And those theories are continuously being subjected to testing and questioning to refine them: obsolete ones are &lt;em&gt;rejected&lt;/em&gt;, &lt;em&gt;replaced&lt;/em&gt; or even &lt;em&gt;removed&lt;/em&gt;.
&lt;/p&gt;

&lt;p&gt;
Religion might be true; it might be false. Religion might be necessary; it might be unnecessary. But like everything else, it should be investigated and questioned. And every individual should be free to draw his or her own conclusion based on the evidence and &lt;strong&gt;not&lt;/strong&gt; just on the words of &lt;em&gt;influential&lt;/em&gt; figures. It goes the other way around too. Just because the authors of both books claim something, it does not mean that it is true. Again, the facts and evidence must be evaluated.
&lt;/p&gt;

&lt;p&gt;
For many religious devotees the veracity of religion is not necessarily an issue. And that is fine. However, for some other people, the quest for verifying the truth is important. They should be granted the freedom to question such things and make their own decision without any backlash from members of religious communities. Both books present examples of reactions from religious communities on this issue of &lt;em&gt;seeking&lt;/em&gt; the truth. Some reactions being more harmful than others.
&lt;/p&gt;

&lt;p&gt;
And what happens when the truth is discovered? Probably nothing much. People are still free to choose whether or not to believe in religion. Neither author strongly suggest the need for getting rid of religion. What they do is merely present their ideas and the evidence to support it. But they never force anyone to abandon their beliefs.
&lt;/p&gt;

</description>
      <pubDate>Mon, 07 Jan 2008 15:55:00 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:f20a77bf-8e3b-4a36-8e5e-949e9c08f715</guid>
      <comments>http://blog.vazexqi.com/2008/01/07/leave-no-stone-unturned#comments</comments>
      <category>readings</category>
      <category>religion</category>
      <category>dawkins</category>
      <category>hitchens</category>
      <link>http://blog.vazexqi.com/2008/01/07/leave-no-stone-unturned</link>
    </item>
    <item>
      <title>Zen and the Art of (Pair) Programming</title>
      <description>&lt;p&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/4179B1HMKFL._SS500_.jpg" width="250" height="250"/&gt;
&lt;br /&gt;
&lt;small&gt;Since this book is so &lt;em&gt;general&lt;/em&gt;, it can be interpreted in many different ways. I choose to interpret some of the advice it offers in terms of programming.&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
Programming is an intellectual activity. It takes &lt;em&gt;sufficient&lt;/em&gt; intellect, &lt;em&gt;great&lt;/em&gt; concentration and &lt;em&gt;lots of&lt;/em&gt; patience. And there are some things that can easily sap a programmer's concentration and patience. Robert Pirsig, author of &lt;a href="http://en.wikipedia.org/wiki/Zen_and_the_Art_of_Motorcycle_Maintenance"&gt;&lt;em&gt;Zen and the Art of Motorcycle Maintenance&lt;/em&gt;&lt;/a&gt; uses the term &lt;em&gt;gumption&lt;/em&gt; as a reference to the gasoline that motivates a person to continue working on what he needs to get done. And he calls the little things that retard the progress of work &lt;em&gt;gumption traps&lt;/em&gt;.
&lt;/p&gt;

&lt;p&gt;
Anyone who has done programming before is certainly	aware of some gumption traps. When your IDE that has been working fine for the whole day suddenly starts throwing peculiar errors and exceptions, you feel infuriated. Or when you try to chase down a bug that prevents your program from working only to discover that you had somehow used a stale version of the source file and that the bug had already been fixed. It is not the &lt;strong&gt;encounter&lt;/strong&gt; with these incidents that causes you to lose your zen as you are programming; rather it is your &lt;strong&gt;reaction&lt;/strong&gt; to these incidents that cause the state of zen to be broken.
&lt;/p&gt;

&lt;p&gt;
An anecdote would illustrate this better. Pirsig uses the &lt;a href="http://www.utexas.edu/student/cmhc/booklets/perfection/perfect.html#anchor20454942" title="Perfectionism"&gt;&lt;em&gt;South Indian Monkey Trap&lt;/em&gt;&lt;/a&gt; parable to illustrate this:
&lt;/p&gt;

&lt;blockquote&gt;
	The "South Indian Monkey Trap" was developed by villagers to catch the ever-present and numerous small monkeys in that part of the world. It involves a hollowed-out coconut chained to a stake. The coconut has some rice inside which can be seen through a small hole. The hole is just big enough so that the monkey can put his hand in, but too small for his fist to come out after he has grabbed the rice.
&lt;br /&gt;
&lt;br /&gt;
	Tempted by the rice, the monkey reaches in and is suddenly trapped. He is not able to see that it is his own fist that traps him, his own desire for the rice. He rigidly holds on to the rice, because he values it. He cannot let go and by doing so retain his freedom. So the trap works and the villagers capture him.
&lt;/blockquote&gt;

&lt;p&gt;
The normal reaction a programmer has for a gumption trap is to lash out and probably try to find the solution fast. However, like the case of the monkey trap, sometimes even when the solution is apparently within your grasp, you tend to forget that there could be a different solution. It takes a great amount of brain power (to use the cliche term) to perform a &lt;a href="http://en.wikipedia.org/wiki/Paradigm_shift" title="Paradigm shift - Wikipedia, the free encyclopedia"&gt;paradigm shift&lt;/a&gt; and try a different route even if the end goal is within your grasp.
&lt;/p&gt;

&lt;p&gt;
As a concrete example, think of how many times you had fixed a bug only to realize that it was but a tiny manifestation of a bigger bug? Or that the bug that you are seeing could be a transient one that exhibits itself every 500 hours and that it would be better to provide some &lt;em&gt;tolerance&lt;/em&gt; for it rather than trying to fix it?
&lt;/p&gt;

&lt;p&gt;
&lt;img src="http://upload.wikimedia.org/wikipedia/commons/4/45/Duck-Rabbit_illusion.jpg" width="260" height="175" /&gt;
&lt;br /&gt;
&lt;small&gt;Look one way and you see a duck. Look another way and you see a rabbit. Different ways of looking at the same thing requires a paradigm shift. And programmers need to be able to do this numerous times each day.&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
This idea of taking a step back from what you are doing to actually think about your actions is also highlighted in Edward De Bono's &lt;a href="http://en.wikipedia.org/wiki/Six_Thinking_Hats" title="De Bono Hats - Wikipedia, the free encyclopedia"&gt;Six Thinking Hats&lt;/a&gt;. De Bono proposes six different colored hats: white, red, black, yellow, green and blue. The blue hat captures this notion that you need to be cognizant of the bigger picture and how to react accordingly.
&lt;/p&gt;

&lt;p&gt;Which brings me to my point: pair programming might help alleviate some of the gumption traps. After all, it is rather unlikely that two programmers with completely different mind sets would fall into the same trap at the same time. Having someone watch over your shoulders does prevent some rather embarrassing episodes of barking up the wrong tree since you now need to convince your partner to do the same.&lt;/p&gt;

&lt;p&gt;
Even if you do not have the luxury of having someone to pair program with, you can easily just keep a log of all the tiny mistakes or observations that you have encountered during your programming sprint. It's those moments of "a-ha" that seasoned programmers reflect upon to give them the edge over the newbies.
&lt;/p&gt;

&lt;p&gt;You can find more information about gumption from Chapter 26 of the book. It's a book that has continuation from chapter to chapter but you can easily grasp the advice that Pirsig dispenses by reading each chapter independently. Like I mentioned in the beginning, the book is general enough that you can interpret it differently and mould it to fit various situations.&lt;/p&gt;




</description>
      <pubDate>Sun, 23 Dec 2007 18:50:43 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:cd8994a7-415c-403c-b738-4d13437c0e53</guid>
      <comments>http://blog.vazexqi.com/2007/12/23/zen-and-the-art-of-pair-programming#comments</comments>
      <category>readings</category>
      <category>paradigm</category>
      <link>http://blog.vazexqi.com/2007/12/23/zen-and-the-art-of-pair-programming</link>
    </item>
  </channel>
</rss>
