<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DEINRHY7eyp7ImA9WhNbEE8.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158</id><updated>2013-01-12T23:36:35.803+02:00</updated><category term="C++" /><category term="Python" /><category term="Unix" /><category term="Environment" /><category term="Origami" /><category term="Learning" /><category term="Marketing" /><category term="Tools" /><category term="Perl" /><category term="Tips" /><category term="Miscellaneous" /><category term="productivity" /><category term="Blogger" /><category term="Health" /><category term="Japanese" /><category term="Programming" /><category term="Open Source" /><category term="Books" /><category term="Politics" /><title>Gilad Naor: Blog</title><subtitle type="html">My little corner. Views on programming, design, Japanese, productivity and other errata.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.giladnaor.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>53</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/GiladNaorsBlog" /><feedburner:info uri="giladnaorsblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CEUEQ3Y_eCp7ImA9WhRWEkk.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-2886100505598171418</id><published>2011-12-30T12:50:00.000+02:00</published><updated>2011-12-30T12:50:02.840+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-30T12:50:02.840+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>C++ and Automatic Garbage Collection</title><content type="html">&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;Programmers know about the mental state commonly referred to as “flow”. In this state, we are most productive, by a significant margin. This state is, of course, not limited to software development, and is well known in most creative pursuits.&amp;nbsp;&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;For example, I’m currently writing this article in a program called &lt;a href="http://www.literatureandlatte.com/scrivener.php"&gt;Scrivener&lt;/a&gt;, an excellent writing application targeted at professional writers - the kind that write novels, screen plays, etc. It has a special mode, called “full screen composition mode”, which I’m using at the moment.&amp;nbsp; In this mode, there is nothing on the screen except a blank white page. There are no formatting buttons, no word counts, no tasks bars, and certainly no &lt;a href="http://en.wikipedia.org/wiki/Office_Assistant"&gt;talking paper clips&lt;/a&gt;. It is completely optimized for doing one thing, and one thing only - writing. Everything else is hidden away.&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;This Scrivener feature is there to help writers get into “flow” mode.&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;To enter this mode, you focus, completely, on the task in hand. And such a complete focus is not easy to establish. An incoming phone call, even if ignored, is more than enough to destroy it.&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;&lt;b&gt;Focus is about saying no to the things which aren’t important right now.&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;This is not a new concept, nor was it discovered by &lt;a href="http://www.presentationzen.com/presentationzen/2011/10/steve-jobs-simplicity-the-art-of-focus.html"&gt;Steve Jobs&lt;/a&gt;. Learning to focus has been a very important step in Buddhist meditation techniques for thousands of years.&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;Of course, Scrivener is not the only tool that helps people focus. Another excellent tool more familiar to programmers is &lt;a href="http://www.vim.org/"&gt;vi&lt;/a&gt;. This editor is not famous for ease of use, but once the learning curve is overcome, the editor is excellent at getting out of your way and becoming invisible. &lt;a href="http://jamescrisp.org/2011/02/08/vim-is-rails-devs-favourite-editor/"&gt;People report&lt;/a&gt; that vi helps them enter this productive zone, and I can attest to this myself.&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;Some programming languages also help you enter the zone more easily. Remember, getting into flow is completely focusing on a task. This is why for different tasks, some languages are better suited than others, with regard to flow. It is all about &lt;b&gt;what the language chooses to hide from you&lt;/b&gt;. For a high level task, Python is probably a better choice than C, because it will be easier to enter a productive mental mode in Python without worrying about remembering to call free().&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;A great many people claim that the single greatest benefit for programming productivity in recent decades is automatic garbage collection, as seen in managed languages, such as Java and C#. Let’s ignore the fact that &lt;a href="http://en.wikipedia.org/wiki/John_McCarthy_(computer_scientist)"&gt;McCarthy&lt;/a&gt;&amp;nbsp;invented it for LISP way back in &lt;a href="http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)"&gt;1959&lt;/a&gt;. This is an enormous benefit because today programmers focus on writing the code they want, and they don’t have to think about managing memory. The language hides it away.&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;A great many people, myself included, claim that C++ is a bloated language. They also claim, myself excluded, that C++ is terrible because of the manual memory management. It certainly is a great burden to manage memory manually - it is generally difficult to do correctly and it also makes it harder to enter the precious mental state we all covet, because it’s one more thing to worry about. But it is simply not true for C++.&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;It is true that in C you have to manually manage memory. It is true that 10 years ago, most people managed memory manually in C++. However, today this is no longer true.&amp;nbsp; Unfortunately, most Java/C# lovers, C++ haters, miss this fact.&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;More importantly, they miss out that the Java/C# promise is horrendously broken. Consider the following code snippet, taken from the book &lt;a href="http://pragprog.com/book/mnee/release-it"&gt;Release It&lt;/a&gt;&amp;nbsp; by&amp;nbsp;&lt;a href="http://www.michaelnygard.com/"&gt;Michael T. Nygard&lt;/a&gt;, page 33:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-jxBFq39L8t4/Tv2TGvVtf9I/AAAAAAAAA0E/59lhAADAGuA/s1600/code_from_release_it_book.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="358" src="http://3.bp.blogspot.com/-jxBFq39L8t4/Tv2TGvVtf9I/AAAAAAAAA0E/59lhAADAGuA/s400/code_from_release_it_book.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;This Java code has&amp;nbsp; a bug in it. In this particular case, this bug caused thousands of people to wait for hours and hours for their flight and caused major financial damages to an airliner.&amp;nbsp;&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;The bug is that java.sql.Statement.close() can throw an exception. If it does, then the close method of the connection is never called, and a resource is leaked.&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;In Java/C#, code in the “finally” block has to be managed C-style. But C doesn’t have exceptions, and exceptions complicate resource management by an order of magnitude. Exceptions are critical. Exceptions change everything.&amp;nbsp;There are&lt;span class="Apple-style-span" style="font-family: Cochin; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Cochin; font-size: 14px;"&gt;&lt;a href="http://programmers.stackexchange.com/questions/118295/did-the-developers-of-java-conciously-abandon-raii"&gt;work arounds&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Cochin; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Cochin; font-size: 14px;"&gt;in Java and C#, but they are just that - work arounds. They aren’t pretty!&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Cochin; font-size: 14px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; font-family: Times; font-size: medium; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-MCmwSs7PIcw/Tv2UOpH2exI/AAAAAAAAA0Q/wMx_6hCKH9M/s1600/4681092063_a6dc01f0f8_z.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="208" src="http://3.bp.blogspot.com/-MCmwSs7PIcw/Tv2UOpH2exI/AAAAAAAAA0Q/wMx_6hCKH9M/s320/4681092063_a6dc01f0f8_z.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/91256982@N00/4681092063/"&gt;http://www.flickr.com/photos/91256982@N00/4681092063/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;The real problem here is that the garbage collector isn’t like a person walking around with a giant garbage can, cleaning up. A garbage collector, in Java/C#&amp;nbsp; at least, is like a person walking around with a giant plastic recycle bin, cleaning up after scattered bottles. &lt;b&gt;He ignores all those copies of yesterday’s newspapers and the empty tuna cans.&lt;/b&gt;&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;A Garbage Collector should collect all garbage, and garbage is defined as any no longer needed resource. And a resource is not just a piece of memory (with the book-keeping that comes with it). A resource is also a file handle, a DB connection, a no longer needed synchronization lock, etc.&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;C++ shines here, because C++ has a built in garbage collector that manages all such resources. Yes, you heard that right. C++ has a built in garbage collector. In modern C++, most programmers never, ever, have to write “delete”. The “delete” keyword went the way of the dodo. It went the way of the goto.&amp;nbsp;&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;The same mechanism used for managing memory can be used for managing any kind of resource.&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 17.0px; text-indent: 18.0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;Focus is about saying no to the things which &lt;b&gt;aren’t important&lt;/b&gt; right now&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 17.0px; text-indent: 18.0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font: 14.0px Cochin; margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 18.0px;"&gt;In Java, resource management is rarely not an important thing to think about.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/wKK7Yvq0X_s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/2886100505598171418/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2011/12/c-and-automatic-garbage-collection.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/2886100505598171418?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/2886100505598171418?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/wKK7Yvq0X_s/c-and-automatic-garbage-collection.html" title="C++ and Automatic Garbage Collection" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-jxBFq39L8t4/Tv2TGvVtf9I/AAAAAAAAA0E/59lhAADAGuA/s72-c/code_from_release_it_book.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2011/12/c-and-automatic-garbage-collection.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEMQXk_eSp7ImA9WxFWFUk.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-3757555438446844304</id><published>2010-06-03T08:41:00.002+03:00</published><updated>2010-06-03T08:41:20.741+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-03T08:41:20.741+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Politics" /><title>Gaza Flotilla</title><content type="html">&lt;a href="http://www.gaza-flotilla.com/"&gt;http://www.gaza-flotilla.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Enough said...&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/XNpQuotYN9s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/3757555438446844304/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2010/06/gaza-flotilla.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/3757555438446844304?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/3757555438446844304?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/XNpQuotYN9s/gaza-flotilla.html" title="Gaza Flotilla" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2010/06/gaza-flotilla.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4DR3Y4fSp7ImA9WxFTF04.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-5250291787071034042</id><published>2010-03-27T10:16:00.001+03:00</published><updated>2010-04-08T16:56:16.835+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-08T16:56:16.835+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Environment" /><title>Four Year. Go.</title><content type="html">&lt;object width="480" height="289"&gt;&lt;param name="movie" value="http://www.youtube.com/v/B_6iTCo5Ci8&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/B_6iTCo5Ci8&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="289"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
A bit naive, as always, but not a bad idea.&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/xoM-axin8VE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/5250291787071034042/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2010/03/four-year-go.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/5250291787071034042?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/5250291787071034042?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/xoM-axin8VE/four-year-go.html" title="Four Year. Go." /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2010/03/four-year-go.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8HRH09fyp7ImA9WxNWEU8.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-5674559058460015035</id><published>2009-10-09T23:13:00.000+02:00</published><updated>2009-10-09T23:13:55.367+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-09T23:13:55.367+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Learning" /><title>What You Have You Keep</title><content type="html">The&lt;a href="http://en.wikipedia.org/wiki/Second_law_of_thermodynamics"&gt; second law&lt;/a&gt; of thermodynamics states that in an isolated system, entropy is an increasing function. In his book, &lt;a href="http://www.amazon.com/gp/product/1598530097?ie=UTF8&amp;amp;tag=gilstecblo-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1598530097"&gt;Do Androids Dream of Electric Sheep&lt;/a&gt;&lt;img alt="" border="0" class=" kmvgiowqmgfkhzwnruvm kmvgiowqmgfkhzwnruvm" height="1" src="http://www.assoc-amazon.com/e/ir?t=gilstecblo-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1598530097" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt;, Philip K. Dick talks about fighting entropy, or &lt;a href="http://www.technovelgy.com/ct/content.asp?Bnum=128"&gt;Kipple&lt;/a&gt;, as he calls it:&lt;br /&gt;
&lt;blockquote&gt;&lt;span style="font-family: Verdana,Arial,Helvetica,sans-serif; font-size: x-small;"&gt;Kipple is useless objects, like junk mail or match folders after you use the last match or gum wrappers or yesterday's homeopape. When nobody's around, kipple reproduces itself. For instance, if you to go bed leaving any kipple around your apartment, when you wake up there is twice as much of it. It always gets more and more.&lt;/span&gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;span style="font-family: Verdana,Arial,Helvetica,sans-serif; font-size: x-small;"&gt;No one can win against kipple, except temporarily and maybe in one spot.&lt;/span&gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
I've found that there is much truth in the Kipple Theorem. Just think of your house, which contiguously gets more cluttered over time. The same also happens to source code, if left to its own devices. It is also true of memory, which gets disordered over time. What was once clear and orderly, becomes obscure and messy.&lt;br /&gt;
&lt;br /&gt;
Over the past couple of weeks, I've tried to always put something back in its place whenever I go from one room to another. When I do this with disciple, my house starts to look much better. A couple of days of slacking off, and the house looks once more like a total mess. And I don't ever remember &lt;i&gt;making&lt;/i&gt; it a mess. It's just that kipple &lt;i&gt;does&lt;/i&gt; multiple while you're asleep. Unless we take active, continuous action to combat it, kipple will always win.&lt;br /&gt;
&lt;br /&gt;
Source code is no different. It grows smelly over time. No matter what your source control's log tells you, changes are constantly taking place. They make the code more unreadable, make methods more incomprehensible, and occasionally even introduced some bugs in unimportant locations. &lt;br /&gt;
&lt;br /&gt;
The same is true when learning things, such as Japanese. I've studies nearly 400 kanji characters over the last couple of weeks. Unless I take active steps to maintain what I've learned, my neurons start getting all bogged down with kipple. That's why I am very fanatical about reviewing the items in my SRS software &lt;i&gt;every&lt;/i&gt; day. Left alone, for even a little bit, the kipple raises its ugly head and starts to take over.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Kipple Fighting 101&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
When you learn chess, you basically have to study three different stages - opening, middle game and end game. For the opening stage, you basically memorize the known openings, which have already been studied thoroughly. During the middle game you need to understand basic principles and how to implement them. The end game part is usually kind of a mixture of the previous stages: memorize principles for different scenarios.&lt;br /&gt;
&lt;br /&gt;
One of the most basic scenarios in the end-game is the one where you have  a king and a rook and the opponent has only a king. It is very easy for you to win now. But, to make things explicit, the guiding principle is to always prevent the enemy from returning to territories from which he retreated. When the enemy king moves, you make sure he cannot move back to where he once was. You corner him into closer and closer areas.&lt;br /&gt;
&lt;br /&gt;
In the endless chess game against kipple, the opposite is true:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt; What I have, I keep!&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
This means an endless game of maintenance. You've learned a new word - make sure you review it periodically. You finished cleaning the kitchen - make sure it stays clean. Constant vigilance is the key to winning this battle.&lt;br /&gt;
&lt;br /&gt;
Whenever you go over source code, you will encounter kipple. It is your responsibility to engage it immediately. No matter what your current objective is, you must spend &lt;i&gt;some&lt;/i&gt; of your time chasing and destroying the kipple. Otherwise, the kipple will take over the code base, and before you know it, no one on your team has a clue what does what.&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/QHUojQ5xKC0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/5674559058460015035/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/10/what-you-have-you-keep.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/5674559058460015035?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/5674559058460015035?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/QHUojQ5xKC0/what-you-have-you-keep.html" title="What You Have You Keep" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/10/what-you-have-you-keep.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8ARHo7cCp7ImA9WxNXF0s.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-6917623005175670805</id><published>2009-10-05T20:54:00.000+02:00</published><updated>2009-10-05T20:54:05.408+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-05T20:54:05.408+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tools" /><category scheme="http://www.blogger.com/atom/ns#" term="Tips" /><category scheme="http://www.blogger.com/atom/ns#" term="Unix" /><title>Kill the CAPS LOCK!</title><content type="html">The Caps Lock key can do wonders to wreak havoc in VI. You're in command mode, minding your own business, when all of a sudden all hell breaks loose. All because you pressed the caps lock key instead of the shift key.&lt;br /&gt;
&lt;br /&gt;
For a long while I was reluctant to follow the plethora of tutorials on how to kill the caps lock key. The reason is that there are several cases where I thought it was very beneficial to actually use it to, well, lock the caps. For example, by tradition, definitions in C/C++ are written in all capital letters. I finally figured out how to get along without the evil key, as I will explain below:&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;pre&gt;g~w - capitalize one word
g~~ - capitalize the entire sentence
gU{motion} - capitalize motion&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
I still have some open issues. For example, to capitalize the word I just wrote, I have to go backwards ('&lt;i&gt;b&lt;/i&gt;') and then capitalize it ('&lt;i&gt;g~w&lt;/i&gt;') and then go back to insert mode ('&lt;i&gt;A&lt;/i&gt;'). I'll be happy to learn of better options, options that take into account that I despite having to &lt;a href="http://blog.giladnaor.com/2009/07/configurability.html"&gt;configure&lt;/a&gt; my setup. Nonetheless, I'm now much better off than I was with the occasional caps lock accident.&lt;br /&gt;
&lt;br /&gt;
You can now make the caps lock key do something else, such as behave as a shift key or an esc key.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;In OS-X - see this &lt;a href="http://superuser.com/"&gt;serverfault &lt;/a&gt;(&lt;a href="http://stackoverflow.com/"&gt;stackoverflow &lt;/a&gt;sibling) &lt;a href="http://superuser.com/questions/34223/how-can-i-remap-my-caps-lock-key-to-escape-for-vim-in-snow-leopard"&gt;page&lt;/a&gt;.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;In Linux -&amp;nbsp;&lt;a href="http://vim.wikia.com/wiki/VimTip166"&gt;Vim Tip 166&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;In Windows - &lt;a href="http://vim.wikia.com/wiki/Map_caps_lock_to_escape_in_Windows"&gt;Map_caps_lock_to_escape_in_Windows&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Further Reading:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2009/02/programming-with-vi.html"&gt;Programming with Vi&lt;/a&gt; - Tips for using VI as a programming editor.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2009/02/programming-editors.html"&gt;Programming Editors&lt;/a&gt; - Why I started learning VI. &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2009/07/configurability.html"&gt;Configurability &lt;/a&gt;- Why I hate to have to configure software.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2009/02/source-code-highlighting-in-blogger.html"&gt;Source Code Highlighting&lt;/a&gt; - How to use VI to highlight source code in Blogger.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/BlvtrZ-Ij6M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/6917623005175670805/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/10/kill-caps-lock.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/6917623005175670805?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/6917623005175670805?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/BlvtrZ-Ij6M/kill-caps-lock.html" title="Kill the CAPS LOCK!" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/10/kill-caps-lock.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8AQnkyfCp7ImA9WxNXE04.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-6835823754385069696</id><published>2009-09-30T21:10:00.000+02:00</published><updated>2009-09-30T21:10:43.794+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-30T21:10:43.794+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Health" /><title>Exercise</title><content type="html">I've written &lt;a href="http://blog.giladnaor.com/2008/10/active-learning.html"&gt;before &lt;/a&gt;that I have the great privilege of working with people who are much smarter than myself. After more than a year of working with some ridiculously smart people, I've come to the following conclusiong:&lt;br /&gt;
&lt;blockquote&gt;Smart people exercise more than average people.&lt;br /&gt;
&lt;/blockquote&gt;This doesn't mean that every smart person I know exercises regularly. I know quite a few ridiculously intelligent people who don't. But, from what I can see, the average amount of smart people who exercise is much higher than in the average population.&lt;br /&gt;
&lt;br /&gt;
I've been exercising more regularly lately, and my coworkers contribute much to it. As a matter of fact, I just went for an 8km run with half of my group. It turns out that some guys with a PhD in Computer Science can be pretty competitive and this forced me to push myself.&lt;br /&gt;
&lt;br /&gt;
It does feels great after wards, tough.&lt;br /&gt;
&lt;br /&gt;
Promise!&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/FF6yQA2AiGY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/6835823754385069696/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/09/exercise.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/6835823754385069696?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/6835823754385069696?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/FF6yQA2AiGY/exercise.html" title="Exercise" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/09/exercise.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIFQn49fCp7ImA9WxNXEkk.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-2898373976036641290</id><published>2009-09-29T19:48:00.000+02:00</published><updated>2009-09-29T19:48:33.064+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-29T19:48:33.064+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Learning" /><category scheme="http://www.blogger.com/atom/ns#" term="Japanese" /><title>Learning Japanese - Spaced Repetition Software</title><content type="html">&lt;pre&gt;Note: this article is part of a series on how to memorize
material. You can start at:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2009/09/learning-japanese-memorization.html"&gt;Learning Japanese - Memorization&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;/pre&gt;The classical method for reviewing items you have already memorized is using &lt;a href="http://en.wikipedia.org/wiki/Flashcard"&gt;flashcards&lt;/a&gt;. The basic technique is to create a flashcard with a question on one side of the card and the answer on the other side. Each day, you'd review several cards. For each card, you'd read the question side, try to recall the answer, and then compare your answer with the one written on the backside of the flashcard. However, this method has a major limitation:&lt;br /&gt;
&lt;blockquote&gt;After some time, you'll have a large "database" of several hundred and even thousand cards. It is not practical to review all of them at once. How do you know which cards to review?&lt;br /&gt;
&lt;/blockquote&gt;&amp;nbsp;Several better techniques have been developed over time. For example, in the 1970s, &lt;a href="http://en.wikipedia.org/wiki/Sebastian_Leitner"&gt;Sebastien Leitner&lt;/a&gt; developed the system now named after him. Using this method, you'd have several numbered decks. Each time you succeed in recalling a flashcard, that card will travel to a deck with a lower priority. On the other hand, if you fail to successfully recall the card, then that card would move to a higher priority deck.&lt;br /&gt;
&lt;br /&gt;
You would now schedule your reviews according to the priorities of the decks. For example. each day you would review cards from the highest priority deck, every other day you'd review cards from the second highest priority deck and so forth. This better optimizes your time - you would spend less time reviewing cards you can easily recall, and more time reviewing cards that are hard for you.&lt;br /&gt;
&lt;br /&gt;
This was no doubt a major improvement. In the computer age, however, we can optimize this method much further. Computer programs which do this are called Spaced Repetition Software (SRS). The first program, of which I'm aware, that pursued this task is &lt;a href="http://www.antimoon.com/how/sm.htm"&gt;SuperMemo&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The basic idea of all the SRS programs are to schedule cards for review at a time in which the review will have an optimal benefit in entrenching the fact in long term memory. When you first learn a card, it is scheduled for review quite often. After each review, the program asks you to &lt;b&gt;rate &lt;/b&gt;how easy it was for you to recall the fact. Using this data, the program can optimize the time for the next review.&lt;br /&gt;
&lt;br /&gt;
The theory is that the best time to review a card is just when you're starting to forget it. If you have to sweat a little to recall the card, &lt;i&gt;but you do manage to remember it&lt;/i&gt;, then you'll remember the card for a long time. The idea is to always live on the edge. Never have a feeling that life is easy. As in most things, this gives you great benefits - namely, long term recollection.&lt;br /&gt;
&lt;br /&gt;
I've used a couple of SRS programs over the past few months. At first, I used &lt;a href="http://www.mnemosyne-proj.org/"&gt;mnemosyne&lt;/a&gt;, which is a cross platform, open source program. Overall the program is pretty easy to use and very streamlined. You aren't presented with too many options, and you can begin using it immediately. It also has many plugins and existing decks which you can download. The downside is that it is not very configurable, which I for one &lt;a href="http://blog.giladnaor.com/2009/07/configurability.html"&gt;actually like&lt;/a&gt;. It was also a pain to install on an old PowerPC mac, but for Intel machines the installation is very easy. Finally, adding audio and graphics to the flash cards is pretty annoying.&lt;br /&gt;
&lt;br /&gt;
After spending around a month away from computers, I found it was very difficult to return to using mnemosyne. This is actually a problem with all SRS programs. The algorithm requires you to use it at constant time intervals for best performance. After using it daily, a month of absence will take many weeks for the algorithm to overcome. That's why I decide to start fresh and switch to a competitor - &lt;a href="http://ichi2.net/anki/"&gt;Anki&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Anki has very similar features to mnemosyne. It also has many plugins and existing decks. However, it looks much better visually, everything about it can be configured, sound and graphics are a snap to insert and it has mobile and online versions. It can even let you synchronize your decks across multiple computers. As a final bonus, it is updated much more frequently than mnemosyne.&lt;br /&gt;
&lt;br /&gt;
I've now been using Anki for a couple of weeks. This is definitely not long enough to get a feel of its scheduling algorithm. It takes many weeks of daily usage before you can start to experience the benefits of any SRS algorithm. From what I &lt;i&gt;can&lt;/i&gt; tell, it looks like a really solid program so far, and I'm happy with it.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Further Reading&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2009/09/learning-japanese-memorization.html"&gt;Learning Japanese - Memorization&lt;/a&gt;: the openning article in this series.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.blogger.com/goog_1254244194235"&gt;Learning Japanese&lt;/a&gt;&lt;a href="http://blog.giladnaor.com/2009/09/japanese-vocabulary.html"&gt; - Vocabulary&lt;/a&gt;: shows a nifty plugin for Anki that can really help you learn your vocabulary.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2009/07/configurability.html"&gt;Configurability&lt;/a&gt;: what I think of configurability.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/UYWvp0cP37s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/2898373976036641290/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/09/learning-japanese-spaced-repetition.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/2898373976036641290?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/2898373976036641290?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/UYWvp0cP37s/learning-japanese-spaced-repetition.html" title="Learning Japanese - Spaced Repetition Software" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/09/learning-japanese-spaced-repetition.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUADRHY8cSp7ImA9WxNXEUs.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-4651633872623401627</id><published>2009-09-28T21:56:00.000+02:00</published><updated>2009-09-28T21:56:15.879+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-28T21:56:15.879+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Miscellaneous" /><title>iPod Touch</title><content type="html">I ordered myself an &lt;a href="http://www.apple.com/ipodtouch/what-is/ipod.html"&gt;ipod touch&lt;/a&gt; the other day.&lt;br /&gt;
&lt;br /&gt;
I already have an old ipod shuffle, which I take with me on runs. I also use it to listen to &lt;a href="http://blog.stackoverflow.com/category/podcasts/"&gt;pod casts&lt;/a&gt; on long car drives. I can say I'm very pleased with it.&lt;br /&gt;
&lt;br /&gt;
The question is now:&lt;br /&gt;
&lt;br /&gt;
Why?&lt;br /&gt;
&lt;br /&gt;
Why did I order the ipod touch. The answer is that not so much for the music. It is certainly a big step up from the shuffle (which will continue to serve me when excercising), especially having my entire music library and all the podcasts available at whim. Nonetheless, I didn't order it for the music.&lt;br /&gt;
&lt;br /&gt;
I ordered it because it looks like a good portable computing device. No, I don't intend to program on it. I intend to read ebooks on it like I did with my ancient Palm &lt;a href="http://en.wikipedia.org/wiki/Tungsten_%28handheld%29#Tungsten_E"&gt;Tungsten E&lt;/a&gt; until it passed away. I intend to finally organize my life in some sort of calendar (maybe I'll finally know what happens with me in the weekends). I'll definitely look into some &lt;a href="http://en.wikipedia.org/wiki/Getting_Things_Done"&gt;GTD &lt;/a&gt;organizer. Some Japanese learning app will definitely find its way in there. I'll probably think of some other useful uses.&lt;br /&gt;
&lt;br /&gt;
And that's the reason I'm buying the touch - because it is extensible. I'm sure a year from now I'll find a dozen more good uses for it.&lt;br /&gt;
&lt;br /&gt;
Too bad it doesn't have a camera...&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/YhpRau_dhkI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/4651633872623401627/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/09/ipod-touch.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/4651633872623401627?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/4651633872623401627?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/YhpRau_dhkI/ipod-touch.html" title="iPod Touch" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/09/ipod-touch.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cFQn44fyp7ImA9WxNXEEk.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-2467354089872098404</id><published>2009-09-27T11:49:00.002+02:00</published><updated>2009-09-27T11:50:13.037+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-27T11:50:13.037+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Japanese" /><title>Japanese - Vocabulary</title><content type="html">I'm currently studying Japanese words with the "&lt;a href="http://smart.fm/series/3318"&gt;Core 2000&lt;/a&gt;" list of words on &lt;a href="http://smart.fm/"&gt;smart.fm&lt;/a&gt; (free registration).&lt;br /&gt;
&lt;br /&gt;
Each new word is introduced on smart.fm's iKnow system, which provides some nice features. Each word includes:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;The meaning, in english. &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;The writing in kanji with stroke order.&lt;/li&gt;
&lt;li&gt;An example sentence showing the word used in context.&lt;/li&gt;
&lt;li&gt;An audio recording of a native speaker reading the sentence.&lt;/li&gt;
&lt;/ol&gt;After showing you some words, the website goes on to drill you about it. So far, I've found that it is best to spend some time alone with each word, trying to memorize it, and only then proceed to the drill stage. Another problem with the drilling is that it appears geared mostly towards short term memory. This is where a nifty tool comes in.&lt;br /&gt;
&lt;br /&gt;
In order to remember the words long-term, I study these new words using an &lt;a href="http://en.wikipedia.org/wiki/Spaced_repetition_software#Computer_software_using_spaced_repetition"&gt;SRS &lt;/a&gt;program, namely, &lt;a href="http://ichi2.net/anki/"&gt;Anki&lt;/a&gt;. The really great thing is that Anki has a plugin which can automatically import data from smart.fm. This means that in a matter of minutes I can have all the words, example sentences and recordings integrated into Anki.&lt;br /&gt;
&lt;br /&gt;
Here's how it's done:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Install &lt;a href="http://ichi2.net/anki/"&gt;Anki&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Install &lt;a href="http://wiki.github.com/ridisculous/anki-iknow-importer"&gt;anki-iknow-importer&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;In Anki, choose Tools/Smart.fm Importer.&lt;/li&gt;
&lt;li&gt;Fill the two dialog boxes. The most important is the address of the Smart.FM list.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_vkKCeOxYE6U/Sr8hkHiRu6I/AAAAAAAAAaU/YFLrZ0BRdGI/s1600-h/anki_import_smartfm.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/Sr8hkHiRu6I/AAAAAAAAAaU/YFLrZ0BRdGI/s320/anki_import_smartfm.PNG" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_vkKCeOxYE6U/Sr8zCpMQBDI/AAAAAAAAAac/PC6KZzebdhE/s1600-h/anki_import_smartfm2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_vkKCeOxYE6U/Sr8zCpMQBDI/AAAAAAAAAac/PC6KZzebdhE/s320/anki_import_smartfm2.PNG" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
That's pretty much about it. I can now review the words and sentences over time, and Anki will make sure my learning process is optimized. &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Further Reading&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2009/09/learning-japanese-resources.html"&gt;Learning Japanese - Resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2009/09/learning-japanese-memorization.html"&gt;Learning Japanese - Memorization&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/rupd8DbPfec" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/2467354089872098404/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/09/japanese-vocabulary.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/2467354089872098404?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/2467354089872098404?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/rupd8DbPfec/japanese-vocabulary.html" title="Japanese - Vocabulary" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_vkKCeOxYE6U/Sr8hkHiRu6I/AAAAAAAAAaU/YFLrZ0BRdGI/s72-c/anki_import_smartfm.PNG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/09/japanese-vocabulary.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8DQ3Y-fSp7ImA9WxNXE04.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-4153733059058790962</id><published>2009-09-26T17:15:00.002+03:00</published><updated>2009-09-30T20:54:32.855+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-30T20:54:32.855+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tips" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Python, Subprocess and Multiple Arguments</title><content type="html">Calling external programs from within a python script is a pretty common task. However, most of the times when I want to pass some arguments to the external program, I usually get stuck. The official Python documentation for the &lt;a href="http://docs.python.org/library/subprocess.html"&gt;subprocess &lt;/a&gt;module is a bit lacking, in my humble opinion, in its treatment of argument passing.&lt;br /&gt;
&lt;br /&gt;
This is not to say that all the information isn't available in the official documentation. In fact, it is. It's just not where I always look for it. The first thing I look for are examples. I simply do not have time to read the entire documentation page for something which should not be too difficult.&lt;br /&gt;
&lt;br /&gt;
The basic idea is this:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Either provide a string of the entire command and argument, but use &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Shell=True&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Provide a string for only the command&lt;/li&gt;
&lt;li&gt;Provide a list of strings, where the first item is the command and the other items are the arguments&lt;/li&gt;
&lt;/ol&gt;It's the third option that keeps on giving me trouble, so here is a simple working example for reference:&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: yellow;"&gt;&amp;nbsp;1 &lt;/span&gt;&lt;span style="color: #8080ff;"&gt;&lt;b&gt;#!/bin/env python&lt;/b&gt;&lt;/span&gt;
&lt;span style="color: yellow;"&gt;&amp;nbsp;2 &lt;/span&gt;&lt;span style="color: #ff40ff;"&gt;import&lt;/span&gt;&amp;nbsp;subprocess
&lt;span style="color: yellow;"&gt;&amp;nbsp;3 &lt;/span&gt;
&lt;span style="color: yellow;"&gt;&amp;nbsp;4 &lt;/span&gt;program_name = "&lt;span style="color: #ff6060;"&gt;ls&lt;/span&gt;"
&lt;span style="color: yellow;"&gt;&amp;nbsp;5 &lt;/span&gt;arguments = ["&lt;span style="color: #ff6060;"&gt;-l&lt;/span&gt;", "&lt;span style="color: #ff6060;"&gt;-a&lt;/span&gt;"]
&lt;span style="color: yellow;"&gt;&amp;nbsp;6 &lt;/span&gt;
&lt;span style="color: yellow;"&gt;&amp;nbsp;7 &lt;/span&gt;command = [program_name]
&lt;span style="color: yellow;"&gt;&amp;nbsp;8 &lt;/span&gt;command.extend(arguments)
&lt;span style="color: yellow;"&gt;&amp;nbsp;9 &lt;/span&gt;
&lt;span style="color: yellow;"&gt;10 &lt;/span&gt;output = subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0]
&lt;span style="color: yellow;"&gt;11 &lt;/span&gt;&lt;span style="color: yellow;"&gt;print&lt;/span&gt;&amp;nbsp;output
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Passing Arguments with Quotes&lt;/b&gt;&lt;br /&gt;
If you want to pass arguments that are passed with quotes in the shell, then just pass them as a single list item, without the quotes.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Links&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://jimmyg.org/blog/"&gt;James Gardner&lt;/a&gt; wrote the most &lt;a href="http://jimmyg.org/blog/2009/working-with-python-subprocess.html"&gt;comprehensive introduction&lt;/a&gt; to the python subprocess module I've encountered.&lt;/li&gt;
&lt;li&gt;The official &lt;a href="http://docs.python.org/library/subprocess.html"&gt;documentation&lt;/a&gt;.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Further Reading&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2008/11/bash-passing-arguments-with-quotes.html"&gt;Bash: Passing Arguments with Quotes&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2009/02/why-not-to-write-shell-scripts.html"&gt;Why Not to Write Shell Scripts&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/a9Tt2Ot1hhk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/4153733059058790962/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/09/python-subprocess-and-multiple.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/4153733059058790962?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/4153733059058790962?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/a9Tt2Ot1hhk/python-subprocess-and-multiple.html" title="Python, Subprocess and Multiple Arguments" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/09/python-subprocess-and-multiple.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAFSH0-eCp7ImA9WxNXEkk.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-281475784808022122</id><published>2009-09-25T14:17:00.004+03:00</published><updated>2009-09-29T19:51:59.350+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-29T19:51:59.350+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Japanese" /><title>Learning Japanese - Resources</title><content type="html">&lt;span style="font-size: 130%; font-weight: bold;"&gt;Selected Articles&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2009/09/learning-japanese-memorization.html"&gt;Memorization &lt;/a&gt;- how to memorize kanji, words and grammar.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;Guides &amp;amp; Blogs&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.alljapaneseallthetime.com/blog/all-japanese-all-the-time-ajatt-how-to-learn-japanese-on-your-own-having-fun-and-to-fluency"&gt;All Japanese All the Time&lt;/a&gt; - this website has tons of articles about how to learn Japanese by having fun and immersing yourself in the language 24/7. The author claims to have learned Japanese in 18 months while studying for a computer science degree in an American college.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nihongoperapera.com/"&gt;Nihongo Pera Pera&lt;/a&gt; - includes many articles on how to study Japanese by yourself. Includes many tips, especially on how to use the computer to its fullest potential.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Grammer&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.guidetojapanese.org/"&gt;Tae Kim&lt;/a&gt;'s guide to Japanese grammar contains an excellent guide with plenty of examples.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;Computer Software&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://smart.fm/"&gt;Smart.FM&lt;/a&gt; - for a free registration, you get access to tons of free online material. I'm currently studying a list of 2000 core Japanese sentences. The online learning system, called iKnow, has example sentences and recordings by native speakers. See my &lt;a href="http://blog.giladnaor.com/2009/09/japanese-vocabulary.html"&gt;article &lt;/a&gt;on how to use it to learn vocabulary.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://kanji.koohii.com/"&gt;Reviewing the Kanji&lt;/a&gt; - this website is a great companion to &lt;a href="http://www.amazon.com/gp/product/0824831659?ie=UTF8&amp;amp;tag=gilstecblo-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0824831659"&gt;Remembering the Kanji&lt;/a&gt;&lt;img alt="" border="0" class=" zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx ysbqqqkgzkcqoobzqynz ysbqqqkgzkcqoobzqynz ysbqqqkgzkcqoobzqynz ysbqqqkgzkcqoobzqynz ysbqqqkgzkcqoobzqynz ysbqqqkgzkcqoobzqynz ysbqqqkgzkcqoobzqynz rrmbstspsdddvebunehm rrmbstspsdddvebunehm rrmbstspsdddvebunehm rqwrfkndtnaxkxytovar rqwrfkndtnaxkxytovar rqwrfkndtnaxkxytovar rqwrfkndtnaxkxytovar" height="1" src="http://www.assoc-amazon.com/e/ir?t=gilstecblo-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0824831659" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt;. You can select how many lessons you've already learned, and then quiz yourself. The real bonus is that for each character, you have access to user created stories. These stories can be voted on, and this means that you can easily find some really great stories!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ichi2.net/anki/"&gt;Anki &lt;/a&gt;or &lt;a href="http://www.mnemosyne-proj.org/"&gt;Mnemosyne&lt;/a&gt; - both of these are completely free space repetition software (SRS). Anki is very polished and overflowing with options, whereas Mnemosyne is much simpler. Both offer a wide collection of preexisting cards. Anki also has version for some portable devices and a free online account which can synchronize between several computers.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.polarcloud.com/rikaichan/"&gt;Rikaichan&lt;/a&gt; - an excellent firefox plugin that gives you information on kanji and words whenever you hover your mouse over them.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;Stories in Japanese&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Free stories can be found at this &lt;a href="http://hukumusume.com/douwa/pc/world/index.html"&gt;website&lt;/a&gt;. The stories are short and simple, and there are plenty of them to choose from.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.whiterabbitpress.com/search.php?mode=search&amp;amp;by_title=Y&amp;amp;by_shortdescr=Y&amp;amp;by_fulldescr=Y&amp;amp;including=all&amp;amp;substring=japanese+graded+readers"&gt;White Rabbit Press&lt;/a&gt; offers a series of booklets graded according to the JLPT vocabulary. The kanji characters have furigana, and there's a bundled CD with a native speaker reading each story. Each set includes 5 booklets.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/4mjWqpq3JbE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/281475784808022122/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/09/learning-japanese-resources.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/281475784808022122?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/281475784808022122?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/4mjWqpq3JbE/learning-japanese-resources.html" title="Learning Japanese - Resources" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/09/learning-japanese-resources.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEICRnw8eCp7ImA9WxNXEkk.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-2238626270652208835</id><published>2009-09-24T21:47:00.007+03:00</published><updated>2009-09-29T19:49:27.270+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-29T19:49:27.270+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Learning" /><category scheme="http://www.blogger.com/atom/ns#" term="Japanese" /><title>Learning Japanese - Memorization</title><content type="html">I've been studying the Japanese language for nearly a year now. I didn't learn as much Japanese as I'd liked to have, but I did learn a great deal about &lt;span style="font-style: italic;"&gt;learning&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
In a &lt;a href="http://blog.giladnaor.com/2009/02/learning-japanese.html"&gt;previous article&lt;/a&gt;, I listed my early attempt at learning how to memorize. I've learned a lot since then, and I'd like to share it with you. It boils down to three main tips:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Use associative memory&lt;/li&gt;
&lt;li&gt;Learn in context&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2009/09/learning-japanese-spaced-repetition.html"&gt;Use SRS software&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div style="font-weight: bold; text-align: center;"&gt;&lt;span style="font-size: 130%;"&gt;Associative Memory&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
The Japanese writing system consists of several "alphabets" used simultaneously. The most famous is the &lt;span style="font-style: italic;"&gt;kanji&lt;/span&gt; writing system, which is made up of thousands of characters. In order to read a newspaper, you need to be familiar with about 2000 different characters. That's quite a lot of letters to remember.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/_vkKCeOxYE6U/SrvIkilVGxI/AAAAAAAAAaM/Ns55GftHa0s/s1600-h/view.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5385118309535783698" src="http://1.bp.blogspot.com/_vkKCeOxYE6U/SrvIkilVGxI/AAAAAAAAAaM/Ns55GftHa0s/s320/view.jpg" style="cursor: pointer; float: right; height: 240px; margin: 0pt 0pt 10px 10px; width: 320px;" /&gt;&lt;/a&gt;My initial approach was to learn by repetition. I'd write each character dozens of times and then quiz myself. This method not only takes a lot of work, but it's very easy to forget characters after some time without review. I can say that after about 200 characters, it was getting too time intensive to continue.&lt;br /&gt;
&lt;br /&gt;
I recently started using &lt;a href="http://www.amazon.com/gp/product/0824831659?ie=UTF8&amp;amp;tag=gilstecblo-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0824831659"&gt;Remembering the Kanji&lt;/a&gt;&lt;img alt="" border="0" class=" zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx rqwrfkndtnaxkxytovar rqwrfkndtnaxkxytovar rqwrfkndtnaxkxytovar rqwrfkndtnaxkxytovar" height="1" src="http://www.assoc-amazon.com/e/ir?t=gilstecblo-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0824831659" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt; by James Heisig. The book promotes using our imagination to better memorize.&lt;br /&gt;
&lt;br /&gt;
Each character has a keyword attached to it, and the complex characters are made up of combinations of simpler characters. Therefore, in order to remember the complex "letters", you make up some story that connects the keywords of the simpler letters and the keyword of the complex letter.&lt;br /&gt;
&lt;br /&gt;
The keyword of the simpler characters are remembered using the keywords of even simpler characters. This all goes down until the axioms, sorry, the primitive elements.&lt;br /&gt;
&lt;br /&gt;
It is now very easy to remember how to write a new character. For example, to remember how to write "bull's eye" I just image myself throwing a  &lt;span style="font-style: italic;"&gt;white ladle&lt;/span&gt; at a target and hitting the bull's eye. To commit this to memory, I spend several minutes picturing myself standing all tense, with a large audience watching, the fate of the free world resting on my ability to hit the bull's eye with a shining, white ladle. Now, I know that to the letter with the keyword "bull's eye" is made up of the letters for white and lade.&lt;br /&gt;
&lt;br /&gt;
The serious beginning in the story is in direct contrast to the silly image of throwing a ladle, which only helps burn the story into memory. I try to spend a couple of minutes &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; imagining the story. I also attempt to make the story as interesting and bizarre as possible, preferably involving as many senses as possible.&lt;br /&gt;
&lt;br /&gt;
So far this technique has been working miracles for me. I intend to finish learning all of the basic 2000 characters in half a year, and I really believe its possible!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Free Resources:&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;The first few lessons of &lt;a href="http://www.amazon.com/gp/product/0824831659?ie=UTF8&amp;amp;tag=gilstecblo-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0824831659"&gt;Remembering the Kanji&lt;/a&gt;&lt;img alt="" border="0" class=" zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx zvabdqrmpvzkkeervtcx rqwrfkndtnaxkxytovar rqwrfkndtnaxkxytovar rqwrfkndtnaxkxytovar rqwrfkndtnaxkxytovar" height="1" src="http://www.assoc-amazon.com/e/ir?t=gilstecblo-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0824831659" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt; are available for &lt;a href="http://www.nanzan-u.ac.jp/SHUBUNKEN/publications/miscPublications/pdf/RK4/RK4-00.pdf"&gt;free.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;There is a &lt;a href="http://kanji.koohii.com/"&gt;website &lt;/a&gt;where you can read the top rated stories people invented.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Further Reading:&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Learning in context - to be written&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2009/09/learning-japanese-spaced-repetition.html"&gt;Using SRS software&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/QfstJhb1lV0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/2238626270652208835/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/09/learning-japanese-memorization.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/2238626270652208835?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/2238626270652208835?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/QfstJhb1lV0/learning-japanese-memorization.html" title="Learning Japanese - Memorization" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_vkKCeOxYE6U/SrvIkilVGxI/AAAAAAAAAaM/Ns55GftHa0s/s72-c/view.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/09/learning-japanese-memorization.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4FSHkzeCp7ImA9WxJbEU0.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-4393305734692879848</id><published>2009-07-20T18:43:00.006+03:00</published><updated>2009-07-20T19:55:19.780+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-20T19:55:19.780+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tools" /><category scheme="http://www.blogger.com/atom/ns#" term="productivity" /><category scheme="http://www.blogger.com/atom/ns#" term="Miscellaneous" /><title>Configurability</title><content type="html">A while back I stumbled upon the following &lt;a href="http://vim.wikia.com/wiki/File_explorer"&gt;vim command&lt;/a&gt;, which opens a file explorer view. Now, this is truly scary stuff. I was as shocked and disappointed as you probably are. Assuming you're me, that is, and you're most likely not me. You just might be that other person who reads this blog, in which case you probably have no idea what I'm whining about. Alas, to explain, we have to go a little bit back in history.&lt;br /&gt;&lt;br /&gt;The best way to travel back in time is the "&lt;a href="http://www.youtube.com/watch?v=b8_pM_JdgkE"&gt;Once Upon A Time - Man&lt;/a&gt;" way. We'll use Peter, which &lt;a href="http://en.wikipedia.org/wiki/Once_Upon_a_Time..._Man#Characters"&gt;Wikipedia &lt;/a&gt;tells us is the very embodiment of the Good Man, as our guide.&lt;br /&gt;&lt;br /&gt;In ancient times Peter lived with his entire extended family in the same house. Maestro was the leader of this establishment, and everyone, from Jumbo to Pierrette, went to sleep at night under the same roof. It was one big happy family.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vkKCeOxYE6U/SmSbzMAR_1I/AAAAAAAAAZ8/hgTSttVCDMM/s1600-h/onceuponatime.bmp"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 194px; height: 300px;" src="http://4.bp.blogspot.com/_vkKCeOxYE6U/SmSbzMAR_1I/AAAAAAAAAZ8/hgTSttVCDMM/s320/onceuponatime.bmp" alt="" id="BLOGGER_PHOTO_ID_5360580760175771474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;As time went on, and social orders changed, the atomic unit shrank to include only the immediate family. Peter had to leave his parent's house and make his own way in life. After finding a lovely life (people who are Good have &lt;a href="http://en.wikipedia.org/wiki/Bar_Refaeli"&gt;beautiful &lt;/a&gt;wives), he would get his own place and raise his children there. Until they got kicked out because they were lousy bums who had to get a job.&lt;br /&gt;&lt;br /&gt;Nowadays, Peter and his present day wife would probably get divorced, so the family unit is now as small as it gets, unless the universe gets very creative.&lt;br /&gt;&lt;br /&gt;Okay, we finished our time travel, and you probably have no idea why a little file explorer freaked me out. I guess we'll just have to make the same journey again until you get it.&lt;br /&gt;&lt;br /&gt;A couple of thousand years ago, after the petty city states finished their squabbling, it was pretty nifty to be a king. As a king you were a member of a very small club. There just weren't many kings back then. Every once in a while &lt;a href="http://en.wikipedia.org/wiki/Genghis_Khan"&gt;someone &lt;/a&gt;would go around conquering half the world, limiting the number of nations and thus the number of kings.&lt;br /&gt;&lt;br /&gt;This continued until just after the world wars and the rise of &lt;a href="http://en.wikipedia.org/wiki/Nationalism"&gt;nationalism&lt;/a&gt;, which resulted in everyone wanting their own state.  &lt;a href="http://www21.wolframalpha.com/input/?i=number+of+countries"&gt;Wolfram Alpha&lt;/a&gt; says there are 203 sovereign states right now. Unfortunately, Wolfram Alpha can't answer the simple query: "Number of countries as function of time", but neither can google. You can imagine that over the past centuries this number is an increasing function.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vkKCeOxYE6U/SmSb-y9AghI/AAAAAAAAAaE/_gj-UTiv85g/s1600-h/terrorist.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 252px; height: 320px;" src="http://2.bp.blogspot.com/_vkKCeOxYE6U/SmSb-y9AghI/AAAAAAAAAaE/_gj-UTiv85g/s320/terrorist.jpg" alt="" id="BLOGGER_PHOTO_ID_5360580959609586194" border="0" /&gt;&lt;/a&gt;Now, not only does the number of states increase, their power decreases as well. When once a totalitarian state was a pretty simple matter, the internet has made it much more difficult. Not only because Iranians protesters can twit, but also because Hezbollah backed Palestinian terrorists can coordinate attacks and learn how to make bombs. The state is no longer omnipotent.&lt;br /&gt;&lt;br /&gt;One more diversion before I get to the point, which should be quite anticlimactic. When Henry Ford made the &lt;a href="http://en.wikipedia.org/wiki/Henry_Ford#Model_T"&gt;Model T&lt;/a&gt;, all the cars were black. Now they come in a wide range of colors. In addition, everyone wants his very own &lt;a href="http://www.t-shirts.com/products/i_do_my_own_stunts_t-shirt"&gt;custom T shirt&lt;/a&gt;. I'll leave &lt;a href="http://www.apple.com/ipodclassic/"&gt;Apple &lt;/a&gt;out of it for the moment, because I'm going to get back to them soon. Everyone besides Apple wants you to have a unique user experience, complete with a customizable theme.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Point&lt;/span&gt;. When I saw that Vim has a file explorer, I was terrified that it would go the way of the emacs. I hate it when a software not only allows, but actually expects you to customize everything in it. This is why I was afraid that Vim was starting down the road that would make it a good OS (albeit lacking a good editor). Emacs tries to do everything, and it tries to let &lt;span style="font-weight: bold;"&gt;you &lt;/span&gt;do everything. That just sucks, no matter what estimmed blogger&lt;a href="http://steve-yegge.blogspot.com/2008/01/emergency-elisp.html"&gt; Steve Yegge&lt;/a&gt; says.&lt;br /&gt;&lt;br /&gt;For example, I mapped my Win key to the escape key, so that I can quickly switch between normal and insert mode. The annoying thing is that this only works on my machines. When I use a different machine, things suck. This is why I hate Configurability. I prefer uniformity. And I much prefer stuff That Just Works. This is the Apple part I promised two paragraphs back.&lt;br /&gt;&lt;br /&gt;I could go on for much longer on this issue, and I probably should. Alas, I've written too much stuff already, without even explaining how everything relates, and the wife deserved some attention. More later.&lt;br /&gt;&lt;br /&gt;p.s.&lt;br /&gt;The file explorer in Vim is &lt;span style="font-style: italic;"&gt;ok&lt;/span&gt;. It's just a file open dialog box. So Vim is still &lt;span style="font-style: italic;"&gt;good&lt;/span&gt;.&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/R-bi5h0IVzc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/4393305734692879848/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/07/configurability.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/4393305734692879848?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/4393305734692879848?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/R-bi5h0IVzc/configurability.html" title="Configurability" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_vkKCeOxYE6U/SmSbzMAR_1I/AAAAAAAAAZ8/hgTSttVCDMM/s72-c/onceuponatime.bmp" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/07/configurability.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4NRXc8eip7ImA9WxJUEUg.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-2354228927310488721</id><published>2009-07-09T19:19:00.003+03:00</published><updated>2009-07-09T19:29:54.972+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-09T19:29:54.972+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Miscellaneous" /><title>One Year Summary</title><content type="html">A bit over a year ago I started this blog. I didn't know much about blogs and twitter and such at the time. After a year of blogging, I'm afraid I still don't. I think my main pain is that I still write these posts in the damn web UI. I'd much rather write in vim, but I haven't found the time yet to figure out the best way to do it.&lt;br /&gt;&lt;br /&gt;During the past year I made many public promises to myself, on this blog and the others. I haven't really lived up to all of them. I have a consistent problem of trying to do too many things. Working full time and studying Japanese have taken up nearly all of my time.&lt;br /&gt;&lt;br /&gt;While I didn't get down to writing a game in Python like I wanted to, I did manage to learn the language. Luckily, it was a perfect fit for many of the tasks I had to do at work, and it was a joy to learn it. I have my gripes with the language, but since I work in C++ most of the time, its a very welcome change. Needless to say, Python code is much more readable. C++0x has the &lt;span style="font-style: italic;"&gt;auto&lt;/span&gt; keyword which will help, but a static language will never be able to match a dynamic one in this criteria.&lt;br /&gt;&lt;br /&gt;I intend to continue studying Japanese, though maybe not in a university framework. I have to figure out if I want to start studying for a Master's in Physics or not. None of the courses I can take will be easy in conjunction with a full time job. I may end up preferring not to take any official obligation and spend time studying the things I like by myself.&lt;br /&gt;&lt;br /&gt;We'll see how the next year will come along...&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/_LoFOJuFJ-4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/2354228927310488721/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/07/one-year-summary.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/2354228927310488721?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/2354228927310488721?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/_LoFOJuFJ-4/one-year-summary.html" title="One Year Summary" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/07/one-year-summary.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4BQn0_cCp7ImA9WxJXFUo.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-8581222489547211915</id><published>2009-06-09T21:06:00.003+03:00</published><updated>2009-06-09T21:09:13.348+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-09T21:09:13.348+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Environment" /><category scheme="http://www.blogger.com/atom/ns#" term="Miscellaneous" /><title>New Computer</title><content type="html">I'm writing this on a new computer I got yesterday. It's called &lt;a href="http://fit-pc2.com/wiki/index.php?title=Main_Page"&gt;Fit PC2&lt;/a&gt;, and it's really really small, and pretty green as well.&lt;br /&gt;&lt;br /&gt;Not as cool as a new mac, but nice none-the-less. It's ridiculous how small these things have gotten.&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/gPCWj4hHjrI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/8581222489547211915/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/06/new-computer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/8581222489547211915?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/8581222489547211915?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/gPCWj4hHjrI/new-computer.html" title="New Computer" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/06/new-computer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUACRHo9fip7ImA9WxJXE0k.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-3109842341947950616</id><published>2009-06-07T06:58:00.003+03:00</published><updated>2009-06-07T07:09:25.466+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-07T07:09:25.466+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Environment" /><category scheme="http://www.blogger.com/atom/ns#" term="Books" /><title>Better World Books</title><content type="html">For the last couple of months I've been ordering my books from &lt;a href="http://www.betterworldbooks.com/"&gt;BetterWorldBooks.com&lt;/a&gt;. It's an online book store with a soul. All the books I order are shiped in carbon free packages (if you exclude the air plane that delivers the package). In addition, the company diverts funds to help fund literacy around the world.&lt;br /&gt;&lt;br /&gt;The nice part is that it isn't expensive either. Their prices usually compete with Amazon, especially considering that shipping is $3.97 around the world (free for the US). That alone would probably make it worthwhile for people outside of the states (yes, there &lt;span style="font-style: italic;"&gt;are&lt;/span&gt; a couple of us out here).&lt;br /&gt;&lt;br /&gt;They're also really nice. I occasionally get free treats, such a chocolate bars or tea. It's just fun. Alas, they give me nothing for writing this post :-).&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/-JJnENkJMiQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/3109842341947950616/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/06/better-world-books.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/3109842341947950616?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/3109842341947950616?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/-JJnENkJMiQ/better-world-books.html" title="Better World Books" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/06/better-world-books.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IDRno8cCp7ImA9WxJSF00.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-4570352394297693089</id><published>2009-05-07T18:17:00.002+03:00</published><updated>2009-05-07T18:19:37.478+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-07T18:19:37.478+03:00</app:edited><title>Book updates</title><content type="html">I've updates my&lt;a href="http://blog.giladnaor.com/2009/02/current-reading-list.html"&gt; current reading list&lt;/a&gt; page, and even added short reviews for books  I finished reading. Right now this includes everything I read, including novels and history books. Most are computer related in some way, though.&lt;br /&gt;&lt;br /&gt;The reading list is accessible from the menu to right, at the top.&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/QFBN4qi6jOU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/4570352394297693089/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/05/book-updates.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/4570352394297693089?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/4570352394297693089?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/QFBN4qi6jOU/book-updates.html" title="Book updates" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/05/book-updates.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcFR3g8fyp7ImA9WxJSF00.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-1495309840836850609</id><published>2009-05-07T17:48:00.004+03:00</published><updated>2009-05-07T17:53:36.677+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-07T17:53:36.677+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Open Source" /><title>First Donation</title><content type="html">Today I donated money to an open-source project for the first time. And it felt &lt;span style="font-weight: bold;"&gt;good&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I've decided that paying for free open-source projects you use and find helpful is a good way to go. Money was more of a problem during my university days, and I think it's a nice model to use good software when you need it, and pay for it when you can.&lt;br /&gt;&lt;br /&gt;If you're wondering, the project is &lt;a href="http://www.review-board.org/"&gt;Review Board&lt;/a&gt;, a code-review web 2.0 application. I've been playing with it at work for a couple of days, and it's really nice. A few glitches during the installation, but it's at the RC stage, which means that it's stable, but glitches are still expected. It also means it's a nice time to give the developers a kindly push in the right direction.&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/Hy0ViZ6yvyU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/1495309840836850609/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/05/first-donation.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/1495309840836850609?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/1495309840836850609?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/Hy0ViZ6yvyU/first-donation.html" title="First Donation" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/05/first-donation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEGSXY5fyp7ImA9WxJSEE8.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-644386614936499478</id><published>2009-04-29T19:03:00.003+03:00</published><updated>2009-04-29T20:03:48.827+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-29T20:03:48.827+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="productivity" /><title>Maintenance Mode</title><content type="html">After a &lt;a href="http://active-cuba.giladnaor.com/"&gt;vacation&lt;/a&gt;, you really need some time off.&lt;br /&gt;&lt;br /&gt;So I'm not going to talk about computer programming today.&lt;br /&gt;&lt;br /&gt;In computer programming, we have two modes of operation - maintenance of what we have so far and creating new features. Maintenance is about fixing bugs in the code, updating the documentation and every other task that we programmer love to hate. Creating new stuff is cool. That's why we started programming - to create stuff. We like to create stuff, we hate to support it. Kind of like parenthood, I would guess.&lt;br /&gt;&lt;br /&gt;Too bad for us. We can't avoid maintenance mode (unless you happen to be a consultant or something). You really shouldn't &lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;add new features until you get rid of the major existing bugs&lt;/a&gt;. And the same thing is true in life - the caveman, sorry, cave-person, didn't have time to invent the wheel until he had food in his belly. Hungry men don't create things - they look for food.&lt;br /&gt;&lt;br /&gt;Just as in programming you need to constantly fix bugs to maintain the quality of an evolving product, so too must you constantly maintain your body and mind before you start to improve yourself. There are the usual things:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Brush your teeth at least twice a day&lt;/li&gt;&lt;li&gt;Eat &amp;amp; Drink&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Sleep&lt;/li&gt;&lt;/ol&gt;We all do the above to maintain our body at the most basic level. After that, we have to maintain our house:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Wash the dishes&lt;/li&gt;&lt;li&gt;Do the laundry&lt;/li&gt;&lt;li&gt;Clean the house&lt;/li&gt;&lt;li&gt;...&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;At a higher level still, there are more maintenance jobs:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Exercise at least three times a week&lt;/li&gt;&lt;li&gt;Spend time with our loved ones&lt;/li&gt;&lt;li&gt;Do something unrelated to anything - see movies, read novels, go hiking in nature, ...&lt;/li&gt;&lt;/ol&gt;These maintenance jobs are the most important so far, but they can't be done very well unless we finished our other tasks. In particular, everyone acknowledges that exercising regularly is very important, but too many people don't actually do it. And spending time with our significant other is so important that I'm actually willing to use the stupid term "significant other".&lt;br /&gt;&lt;br /&gt;I think I covered most of the maintenance tasks so far. Now, before I finish, I'd like to point out that I'm not a native English speaker, and I remember hearing that it's bad to use the same word over and over again. While I didn't bother looking for a substitute for "maintenance", mainly because I didn't get the spelling correct on my first try, I did intentionally avoid a synonym for "job" - the word "chore". This isn't because my wife would be offended if I said spending time with her is a chore, but because I really don't think of these tasks as chores. They are a minimal set of things we need to do to keep what we have so far. The higher up we go, the more fun these tasks are.&lt;br /&gt;&lt;br /&gt;Finally, the last form of maintenance is:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create something new. Challenge yourself each day.&lt;/li&gt;&lt;/ol&gt;This fights stagnation. We have to move forward. And it isn't really about maintenance, but it's good to force yourself.&lt;br /&gt;&lt;br /&gt;Note also that I didn't put &lt;span style="font-style: italic;"&gt;work&lt;/span&gt; anywhere up there. If your job goes up somewhere on your maintenance list, find another job.&lt;br /&gt;&lt;br /&gt;Now, where did I leave those extra 10 hours a day...&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/q11b713XOaE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/644386614936499478/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/04/maintenance-mode.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/644386614936499478?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/644386614936499478?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/q11b713XOaE/maintenance-mode.html" title="Maintenance Mode" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/04/maintenance-mode.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EBSX4-fCp7ImA9WxVUGU8.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-927957094743703070</id><published>2009-03-24T21:05:00.001+02:00</published><updated>2009-03-24T21:07:38.054+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-24T21:07:38.054+02:00</app:edited><title>Vacation</title><content type="html">I'll be on vacation with little or no internet access until April the 18'th.&lt;br /&gt;&lt;br /&gt;No internet and no cellphone is really the only way to have a real vacation these days...&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/T6CuEIpDyoA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/927957094743703070/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/03/vacation.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/927957094743703070?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/927957094743703070?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/T6CuEIpDyoA/vacation.html" title="Vacation" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/03/vacation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQNRXg5eyp7ImA9WxVUEk4.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-5534473947909972986</id><published>2009-03-16T21:01:00.004+02:00</published><updated>2009-03-16T21:06:34.623+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-16T21:06:34.623+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Unix" /><title>Running a program on a server after logging off</title><content type="html">At work we have a pretty powerful server on which we run computationally intensive programs. Many times, I want the programs I execute to continue running after I log off. This is how to do it:&lt;br /&gt;&lt;pre&gt;screen -S blah&lt;br /&gt;run_my_command&lt;br /&gt;Ctrl+a d&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I can now log off and go home. The program will continue executing safely.&lt;br /&gt;&lt;br /&gt;The following day, I log back to the server and type:&lt;br /&gt;&lt;pre&gt;screen -r blah&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I'm now back where I was.&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/V6B_3l8zM6c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/5534473947909972986/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/03/running-program-on-server-after-logging.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/5534473947909972986?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/5534473947909972986?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/V6B_3l8zM6c/running-program-on-server-after-logging.html" title="Running a program on a server after logging off" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/03/running-program-on-server-after-logging.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MBSHw_fyp7ImA9WxVUEEQ.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-6788641746259702618</id><published>2009-03-15T07:06:00.004+02:00</published><updated>2009-03-15T07:37:39.247+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-15T07:37:39.247+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="Learning" /><category scheme="http://www.blogger.com/atom/ns#" term="Miscellaneous" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Language Verbosity</title><content type="html">I recently took a look at the upcoming &lt;a href="http://en.wikipedia.org/wiki/C%2B%2B0x"&gt;C++0x specification&lt;/a&gt;, and I was annoyed that yet more keywords were introduced into the language. C++ is already a very complicated language, and it takes months and years to truly master. I just didn't think that introducing more keyword would advance the language. In some sense, the size of a language's vocabulary is a measure of the language's complexity.&lt;br /&gt;&lt;br /&gt;My concern is that as the technology advances, it will become increasingly difficult to be proficient even in one single language. The learning curve just becomes steeper and steeper with time, which is fine if you're there when they make the curve steeper, but not if you're at point zero. And I know that specialization happens for all sciences as they advance, but programming isn't a science and a programming language is a tool, not a science (from the user's point of view).&lt;br /&gt;&lt;br /&gt;Natural languages (such as the one you talk to your mom with, I hope) are not like that, however. Their vocabulary size increases with time, regardless of the language. Unless your language of choice is &lt;a href="http://en.wikipedia.org/wiki/Newspeak"&gt;Newspeak&lt;/a&gt;, of course. Another curious fact about human languages is that they allow one to learn the language, &lt;span style="font-weight: bold;"&gt;using&lt;/span&gt; the language. This might not be too clear, so I'll illustrate:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;John Robert Jr IV is 6 years old. His parents speak English (not American, mind you). Little Robert can't understand everything his intellectual parents say, but, by the time he starts his studies in a snooty British college, he'll have already mastered the language. How did this happen? Little Robert doesn't know any other languages but English!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The answer is that one can use English to learn English. This happens because you can understand snippets of code, er, words, and understand the rest from the context and the non-verbal information (intonation, body language, ...). In addition, there are always several ways of saying anything, at different levels of complexity. There are synonyms for nearly all words, some down-to-earth, others only for people with a PhD. in Literature. This is how Robbert will slowly learn new words which better articulate what he wants to say.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sorry, but we really need to get back to programming languages.&lt;br /&gt;&lt;br /&gt;Programming languages are like that as well. C++0x may introduce many new constructs, but you don't really need to use them. When I started programming in C++, I simply changed the file extension to .cpp and continued programming in C. I eventually started using the object-oriented facilities, and after that started learning what the STL really has to offer. So I think there's room for hope. Having different ways of saying the same thing, some concise, some verbose, is actually a good thing.&lt;br /&gt;&lt;br /&gt;This is one of the clashing points of two of my favorite languages - Perl and Python. The Perl philosophy is that there should be many ways to perform the same task. Python believes there should be one (see &lt;a href="http://www.python.org/dev/peps/pep-0020/"&gt;The Zen of Python&lt;/a&gt;). And the thing is that &lt;a href="http://en.wikipedia.org/wiki/Larry_Wall"&gt;Larry Wall&lt;/a&gt; studied linguistics. The language he devised may be a write only language, but the basic idea of having many different ways of expressing yourself doesn't just give you the opportunity to make yourself clearer, it also makes learning the language easier. You can learn new tricks as you go along, but it doesn't block you from getting what you want done.&lt;br /&gt;&lt;br /&gt;Of course, the above isn't really true for Perl, unless you can remember what $x is for any x, but the potential is there.&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/2NVLH2MdNtE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/6788641746259702618/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/03/language-verbosity.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/6788641746259702618?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/6788641746259702618?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/2NVLH2MdNtE/language-verbosity.html" title="Language Verbosity" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/03/language-verbosity.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4AR3Y4eyp7ImA9WxVWGEU.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-217467048561797924</id><published>2009-03-01T07:03:00.002+02:00</published><updated>2009-03-01T07:05:46.833+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-01T07:05:46.833+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="Miscellaneous" /><title>And Then There Were Two</title><content type="html">I have decided to split this blog in two. All the programming related posts will remain here. The Origami posts will move to their new home at: &lt;a href="http://origamitips.giladnaor.com"&gt;http://origamitips.giladnaor.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I hope this will allow me to better concentrate on each subject. Good week!&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/covxq9z6QBk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/217467048561797924/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/03/and-then-there-were-two.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/217467048561797924?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/217467048561797924?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/covxq9z6QBk/and-then-there-were-two.html" title="And Then There Were Two" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/03/and-then-there-were-two.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8BQXY7fyp7ImA9WxVWFko.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-365049338272185776</id><published>2009-02-26T20:11:00.006+02:00</published><updated>2009-02-26T20:44:10.807+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-26T20:44:10.807+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="productivity" /><title>Productivity Tip #2</title><content type="html">I recently realized that I'm actually two very different people. I'm one person at night, and another when the alarm clock goes off. My night-self, let us call him Mr. Gogo,  is tired, but his brain is functioning pretty well. My night self makes all kinds of plans for the next day. And then, my morning-self, Mr. Gozen,  screws everything up. So, my second productivity tip is:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Tip #2 - Kill Mr. Gozen&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;I don't mean to promote violence or anything, it's just that Gozen is an asshole. He has only one thing on his mind - going back to sleep. That just plain sucks. I want to &lt;span style="font-weight: bold;"&gt;do&lt;/span&gt; things, and he ruins everything. So I've decided to terminate him.&lt;br /&gt;&lt;br /&gt;For the past week, my alarm clock has been going &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_vkKCeOxYE6U/SabiDhjCq5I/AAAAAAAAAHo/-zjJ2ynDsus/s1600-h/sleepy_cat.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_vkKCeOxYE6U/SabiDhjCq5I/AAAAAAAAAHo/-zjJ2ynDsus/s320/sleepy_cat.JPG" alt="" id="BLOGGER_PHOTO_ID_5307177761075538834" border="0" /&gt;&lt;/a&gt;off at the ungodly hour of 5:58 am. I get up and start looking for the damn clock, usually thinking of nothing else but going back to sleep. By the time I find it, I'm pretty much awake, and Gozen is dying. You see, much like the Wicked Witch of the West (WWW) melts in water, my morning self melts in wakefulness. And I must say that life is much better without him.&lt;br /&gt;&lt;br /&gt;Every morning, I do the dishes while I finish waking up, ignoring the last feeble screams of Gozen, then stretch and exercise, drink something warm, and head off to the computer to work for an hour on one of my hobby projects (I promise to reveal what they are soon). Then I wake the wife with a kiss, and on I go to work. It's great.&lt;br /&gt;&lt;br /&gt;Now, most of you are probably worried that getting up in the morning will be bad because you'll lose sleep. Well, nothing can be further from the truth. While I do sleep less, I don't lose any sleep. If the left hand side of the equation is waking up early, than the right hand side must be to go to sleep early. Well, &lt;span style="color: rgb(255, 204, 204);"&gt;no&lt;/span&gt;, &lt;span style="color: rgb(255, 102, 102);"&gt;No&lt;/span&gt;, &lt;span style="color: rgb(204, 0, 0);"&gt;NO&lt;/span&gt;! That's were the beauty of this whole habit is - my evening self has some ability for cognitive action. And when he gets tired, he says - off to sleep, because being tired after a long day means that that's what you need to do. On the other hand,  being tired after 6-8 hours of sleep means you are not thinking properly, Gozen has taken control.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vkKCeOxYE6U/SabiLxcopGI/AAAAAAAAAHw/QHlESemRbnw/s1600-h/road.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_vkKCeOxYE6U/SabiLxcopGI/AAAAAAAAAHw/QHlESemRbnw/s200/road.JPG" alt="Picture of a road" id="BLOGGER_PHOTO_ID_5307177902782588002" border="0" /&gt;&lt;/a&gt;The beauty of the system is that everything balances up. If you don't get enough sleep, you'll go to sleep earlier. But you will never oversleep anymore - you'll get exactly the amount of sleep that your body needs.&lt;br /&gt;&lt;br /&gt;I find I'm more productive in the morning, even though I work pretty well at 2-3 am as well. It's just that I have plenty of peace and quite to do what I want.&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/01QonCvYhPY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/365049338272185776/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/02/productivity-tip-2.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/365049338272185776?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/365049338272185776?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/01QonCvYhPY/productivity-tip-2.html" title="Productivity Tip #2" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_vkKCeOxYE6U/SabiDhjCq5I/AAAAAAAAAHo/-zjJ2ynDsus/s72-c/sleepy_cat.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/02/productivity-tip-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYNQH07eSp7ImA9WxNXF0s.&quot;"><id>tag:blogger.com,1999:blog-5381173452812129158.post-987396283403728552</id><published>2009-02-25T07:20:00.004+02:00</published><updated>2009-10-05T20:43:11.301+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-05T20:43:11.301+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Unix" /><title>Why Not to Write Shell Scripts</title><content type="html">Don't write shell script. Not in bash, and not in any other shell. There are two very simple reasons for this:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;They are not portable.&lt;/li&gt;
&lt;li&gt;They are hard to read.&lt;/li&gt;
&lt;/ol&gt;Nowadays, we have a much better option - write those same shell-scripts in a cross-platform scripting language, such as Python or Perl. These languages are much easier to read than some devilish combination of awk, sed and a cryptic syntax. Well, Python is. But Perl can be readable too, contrary to common wisdom, if a bit of care is taken when writing the script. Sure, most shell scripts use some really neat tricks &amp;amp; hacks, but let me quote &lt;a href="http://www.cs.princeton.edu/%7Ebwk/"&gt;Brian Kernighan&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-style: italic; text-align: center;"&gt;&lt;span style="font-size: 100%;"&gt;"Everyone knows that debugging is   twice as hard as writing a program in   the first place. So if you're as   clever as you can be when you write   it, how will you ever debug it?"&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: 100%;"&gt;Brian Kernighan&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;span style="font-size: 85%;"&gt;(If you follow the link, you'd see Mr. Kernighan has a hand or two in the scripting pot himself. Oh well...)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In my experience, even the most temporary script ends up expanding beyond its original intention, and thus needs to be modified and maintained. Shell scripts are just not the right tools anymore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Further Reading&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2009/09/python-subprocess-and-multiple.html"&gt;Python, Subprocess and Multiple Arguments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.giladnaor.com/2009/02/programming-with-vi.html"&gt;Programming with VI&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/GiladNaorsBlog/~4/jCcMW1k1j54" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.giladnaor.com/feeds/987396283403728552/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.giladnaor.com/2009/02/why-not-to-write-shell-scripts.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/987396283403728552?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5381173452812129158/posts/default/987396283403728552?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GiladNaorsBlog/~3/jCcMW1k1j54/why-not-to-write-shell-scripts.html" title="Why Not to Write Shell Scripts" /><author><name>Gilad Naor</name><uri>http://www.blogger.com/profile/09869766960588616423</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://3.bp.blogspot.com/_vkKCeOxYE6U/SaWgLKybHAI/AAAAAAAAAG8/qcVKntAyySw/S220/avatar.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.giladnaor.com/2009/02/why-not-to-write-shell-scripts.html</feedburner:origLink></entry></feed>
