<?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: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;DkMAQnkzfyp7ImA9WhVTFE0.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757</id><updated>2012-02-27T20:47:23.787-08:00</updated><category term="emacs" /><category term="ubuntu" /><category term="General" /><category term="dns" /><category term="autoresponder" /><category term="books" /><category term="xorg.conf" /><category term="Programming" /><title>Dani Berg</title><subtitle type="html">Angels like Kittens</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.daniberg.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.daniberg.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>49</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/daniberg/ViPD" /><feedburner:info uri="daniberg/vipd" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CEUDRX4zcSp7ImA9WhdVFE0.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-268620646731481384</id><published>2011-09-18T20:17:00.000-07:00</published><updated>2011-09-18T20:17:54.089-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-18T20:17:54.089-07:00</app:edited><title>Compilers Compilers</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-yMUaQtd-sjw/Tnamt9YKRyI/AAAAAAAAATY/ln5xJf19GIY/s1600/IMG_20110918_191915.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-yMUaQtd-sjw/Tnamt9YKRyI/AAAAAAAAATY/ln5xJf19GIY/s320/IMG_20110918_191915.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;
Back in &lt;a href="http://www.daniberg.com/2011/04/writing-time-friday-night-and-so-quiet.html"&gt;April&lt;/a&gt; I mentioned that I've been interested in &lt;a href="http://llvm.org/"&gt;LLVM&lt;/a&gt; and &lt;a href="http://clang.llvm.org/"&gt;Clang&lt;/a&gt;. I've been reading Clang's source code and it has been an interesting experience. Back to the future. Yep, getting back to a few C++ classic books that were gathering dust on the bookshelf. At the same time that I'm revising C++ I'm also trying to catch up with C++0x. If this is not enough there's also the &lt;a href="http://www.boost.org/"&gt;Boost&lt;/a&gt; library which is a world in itself. Damn it Beavis.&lt;br /&gt;
&lt;br /&gt;
At some point while reading Clang's source code at night my head starts to hurt. I then switch on productive procrastination mode. Enter Compiler theory. In this case I've been reading not only books but some old papers as well. They are so old that they were written with typewriters.&lt;br /&gt;
&lt;br /&gt;
I ordered a few compiler titles from Amazon and even though I didn't have time to read most of them (chances are I will never will) I should mention &lt;a href="http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ref=sr_1_1?ie=UTF8&amp;amp;qid=1316401321&amp;amp;sr=8-1"&gt;Programming Language Pragmatics&lt;/a&gt; by Michael L. Scott since it's a great introduction to compilers. Highly recommended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-268620646731481384?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DuCJ9qlcpVORIbJUpJ4HNlt0pMs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DuCJ9qlcpVORIbJUpJ4HNlt0pMs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DuCJ9qlcpVORIbJUpJ4HNlt0pMs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DuCJ9qlcpVORIbJUpJ4HNlt0pMs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/07N8IJ11Gl4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/268620646731481384/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2011/09/compilers-compilers.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/268620646731481384?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/268620646731481384?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/07N8IJ11Gl4/compilers-compilers.html" title="Compilers Compilers" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-yMUaQtd-sjw/Tnamt9YKRyI/AAAAAAAAATY/ln5xJf19GIY/s72-c/IMG_20110918_191915.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2011/09/compilers-compilers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEINQX47fCp7ImA9WhdTE04.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-6861763857681889155</id><published>2011-07-10T14:16:00.000-07:00</published><updated>2011-07-10T14:16:30.004-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-10T14:16:30.004-07:00</app:edited><title>Mobile Development</title><content type="html">A few months ago I decided to check how mobile development works. iPhone was my first attempt and for two weeks I read a substantial amount of objective-c, tried xcode and &lt;i&gt;waddled&lt;/i&gt; through the online documentation. The experience was enough for me to conclude that Apple development is not for me. &lt;a href="http://www.daniberg.com/2009/10/windows-day-experience.html"&gt;Same for Microsoft&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Android was the obvious platform to try next. The Android ecosystem is more appealing to me. Documentation is better, skipping eclipse and using emacs is a no-brainer and java wins big over objective-c. There's also the NDK that I have yet to try.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=d024-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1617290505&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;br /&gt;
Besides the online documentation I've been reading the second edition of Android in Action by W. Frank Ableson, Robi Sen and Chris King. Even though I still didn't finish reading the whole thing I can recommend the book. The authors first expose a concept in a clear and light manner and then expand the explanation developing a real application. It's easy to digest.&lt;br /&gt;
&lt;br /&gt;
I've been using &lt;a href="http://www.speeddate.com/"&gt;Speeddate&lt;/a&gt;'s api to develop an Android application. It's an experiment, it's fun and there's no ETA. This experiment gave me the opportunity to dive into two different subjects. The first one was &lt;a href="http://oauth.net/"&gt;oauth&lt;/a&gt;. It was time to develop a deeper understanding of the &lt;a href="http://tools.ietf.org/html/rfc5849"&gt;protocol&lt;/a&gt;. I highly recommend reading the entire document and I wish I had developed the habit of reading RFCs earlier in my career.&lt;br /&gt;
&lt;br /&gt;
Right now I'm trying to implement a chat system, so I'm reading everything I can about XMPP. I'm on my way through XMPP - The definitive guide(6) by Peter Saint-Andre. It has been a great source of information and a valuable introduction to XMPP.&lt;br /&gt;
&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=d024-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=059652126X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
My sandbox is a laptop running Ubuntu and &lt;a href="http://www.ejabberd.im/"&gt;ejabberd&lt;/a&gt;. I'm also using two libraries to interact with ejabberd. &lt;a href="https://github.com/fritzy/SleekXMPP/wiki"&gt;Sleekxmpp&lt;/a&gt; and &lt;a href="http://www.igniterealtime.org/projects/smack/"&gt;Smack&lt;/a&gt;. Sleekxmpp being python is the library of choice to experiment new things. Smack is the library of choice for the final implementation in the Adroid application.&lt;br /&gt;
&lt;br /&gt;
Well, so far I've been having a great time playing with Android and I'll let you know if my experiment ever comes to fruition.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-6861763857681889155?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eRh_ramnH8JZ6ykfCBFYVALwA9M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eRh_ramnH8JZ6ykfCBFYVALwA9M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eRh_ramnH8JZ6ykfCBFYVALwA9M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eRh_ramnH8JZ6ykfCBFYVALwA9M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/gAejhFYDlXo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/6861763857681889155/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2011/07/mobile-development.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/6861763857681889155?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/6861763857681889155?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/gAejhFYDlXo/mobile-development.html" title="Mobile Development" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2011/07/mobile-development.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUACQH8_fCp7ImA9WhZVEkQ.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-7406212303942479897</id><published>2011-05-24T21:29:00.000-07:00</published><updated>2011-05-24T21:29:21.144-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-24T21:29:21.144-07:00</app:edited><title>Algorithms in C++</title><content type="html">&lt;a href="http://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X?ie=UTF8&amp;amp;tag=d024-20&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img alt="Bundle of Algorithms in C++, Parts 1-5: Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms (3rd Edition) (Pts. 1-5)" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=020172684X&amp;amp;tag=d024-20" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=d024-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=020172684X" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=d024-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=B001FWIJFA" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;This is just like most of the posts around here. It's about a book I've been reading after hours. Technically two books since the title comes in two volumes. &lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=d024-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0201314525" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;a href="http://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X?ie=UTF8&amp;amp;tag=d024-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Algorithms in C++&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=d024-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=020172684X" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt; by Robert Sedgewick is one great resource I purchased months ago because of &lt;a href="http://www.daniberg.com/2010/11/algorithm-design-manual.html"&gt;Skienna's book&lt;/a&gt;. C and Java versions are also available but the reason I opted for the C++ version over the C version is because I've been reading a lot of C++ code in the past months. Most likely it doesn't matter which version you pick and contrary to human nature I'm not the kind of person that gives advice but "if I were you" I would go for the C version.&lt;br /&gt;
&lt;br /&gt;
If you have a CS background this post is not for you and chances are that you master the subjects presented in Algorithms in C++ and already made your way through titles like &lt;a href="http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844?ie=UTF8&amp;amp;tag=d024-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Introduction to Algorithms&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=d024-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0262033844" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;. So, if you're like me and don't have a CS degree, Algorithms in C++ is higly recommended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-7406212303942479897?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ff-mHD1psFoHulnJCIQf1hqsbAE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ff-mHD1psFoHulnJCIQf1hqsbAE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ff-mHD1psFoHulnJCIQf1hqsbAE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ff-mHD1psFoHulnJCIQf1hqsbAE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/yn7ejPbQLX4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/7406212303942479897/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2011/05/algorithms-in-c.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/7406212303942479897?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/7406212303942479897?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/yn7ejPbQLX4/algorithms-in-c.html" title="Algorithms in C++" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2011/05/algorithms-in-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UEQnY6eSp7ImA9WhZWFE4.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-5846201612069041920</id><published>2011-05-14T20:46:00.000-07:00</published><updated>2011-05-14T20:46:43.811-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-14T20:46:43.811-07:00</app:edited><title>New toy from Cupertino</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-tSgBQ9h56ic/Tc9LXYcT-lI/AAAAAAAAAOE/ze5OUFaWtsU/s1600/Bull+Shit.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="270" src="http://4.bp.blogspot.com/-tSgBQ9h56ic/Tc9LXYcT-lI/AAAAAAAAAOE/ze5OUFaWtsU/s320/Bull+Shit.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;I got a MacBook Pro about 2 months ago. In my first few days working with OSX I jotted down several notes for a future blog post, but &lt;a href="http://teddziuba.com/2011/03/osx-unsuitable-web-development.html"&gt;Ted Dziuba's entry&lt;/a&gt;, although harsh, explained my first impressions of OSX better. Of course, gnu/linux, mac or even windows (&lt;a href="http://www.cygwin.com/"&gt;cygwin&lt;/a&gt; saves the day) can help you get things done. Emacs, terminal, a browser and I'm good. Still, any major linux distro is by far a better development environment.&lt;br /&gt;
&lt;br /&gt;
That being said, I've been using the macbook whenever I'm home and there are things I like about it. I like its design, battery life and then there's Garage Band, which is a lot of fun. I remember back in the day when &lt;a href="http://escapemetal.com/"&gt;my band mates and I &lt;/a&gt; recorded our first demo tape. Can you believe that? Tape! Analog! God forbid.&lt;br /&gt;
&lt;br /&gt;
OSX has also expanded the amount of code I read. When reading clang's source code I no longer skim through code that is specific to Apple. Now I learn things like&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;#if defined(__APPLE__)
 // On OS X the executable path is saved to the stack by dyld. Reading it
 // from there is much faster than calling dladdr, especially for large
 // binaries with symbols.
&lt;/pre&gt;&lt;br /&gt;
Good stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-5846201612069041920?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SHnDblCz-9W2ySmgUuc88BSsJeY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SHnDblCz-9W2ySmgUuc88BSsJeY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SHnDblCz-9W2ySmgUuc88BSsJeY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SHnDblCz-9W2ySmgUuc88BSsJeY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/0suctZOQC6Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/5846201612069041920/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2011/05/new-toy-from-cupertino.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/5846201612069041920?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/5846201612069041920?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/0suctZOQC6Y/new-toy-from-cupertino.html" title="New toy from Cupertino" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-tSgBQ9h56ic/Tc9LXYcT-lI/AAAAAAAAAOE/ze5OUFaWtsU/s72-c/Bull+Shit.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2011/05/new-toy-from-cupertino.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYDQH89eCp7ImA9WhZXEkQ.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-3154746701646692426</id><published>2011-05-01T16:39:00.000-07:00</published><updated>2011-05-01T16:39:31.160-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-01T16:39:31.160-07:00</app:edited><title>Ubuntu 11.04</title><content type="html">&lt;div style="text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/-tQQIt3rLKGM/Tb3utmAmncI/AAAAAAAAAN8/arZbHHstEWs/s1600/downsize.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-tQQIt3rLKGM/Tb3utmAmncI/AAAAAAAAAN8/arZbHHstEWs/s320/downsize.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Ubuntu 11.04 was released a few days ago and I decided it was time to upgrade my current installation. I skipped version 10.10 and was still running version 10.04 on my laptop because the kernel versions bundled with Ubuntu 10.04 and 10.10 don't play nice with Sony's soft EDID. Annoying.&lt;br /&gt;
&lt;br /&gt;
From time to time I switch from Gnome to KDE just for the sake of change. The last time I tried KDE was unfortunate - KDE 4.0 should have been labeled as beta version. This time I tried KDE 4.4 for 6 months and my impression is that it looks good but not great. You know what I mean? There's a feeling of "it's almost there"? KDE is missing the final touches.&lt;br /&gt;
&lt;br /&gt;
That plasma thing? Sorry, I still don't get it.&lt;br /&gt;
&lt;br /&gt;
In the end, the major point for me to switch back to Gnome was not its look and feel, but the keyboard shortcuts. I had a hard time setting keyboard shortcuts in KDE. I want to use the keyboard to minimize, maximize, move and resize windows. It's that simple but have you ever tried setting these shortcuts in KDE? Clumsy to say the least. Everything mouse oriented tends to turn me off anyways.&lt;br /&gt;
&lt;br /&gt;
Enter Natty Narwhal. Installation was almost flawless this time. The process hung up in the end due to some nvidia driver errors but after rebooting everything was fine. Nvidia proprietary drivers installed,&lt;br /&gt;
another boot and done. What's new? Unity. Boy, that bar and icons share the same KDE syndrom. It's almost there. To be honest I'm not passionate about it. Don't care. Meh.&lt;br /&gt;
&lt;br /&gt;
I'm sounding a little bit negative by now so let's revert that vibe. Ubuntu 11.04 installed, looks good, I can run emacs, compile and run chromium, llvm, clang and the terminal is rock solid running tmux.&lt;br /&gt;
&lt;br /&gt;
Kudos to Canonical.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-3154746701646692426?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dvR3ZlaulJ3qnp4Sa5bmj5Yfj2I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dvR3ZlaulJ3qnp4Sa5bmj5Yfj2I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dvR3ZlaulJ3qnp4Sa5bmj5Yfj2I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dvR3ZlaulJ3qnp4Sa5bmj5Yfj2I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/ZZo979gr76M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/3154746701646692426/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2011/05/ubuntu-1104.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/3154746701646692426?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/3154746701646692426?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/ZZo979gr76M/ubuntu-1104.html" title="Ubuntu 11.04" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-tQQIt3rLKGM/Tb3utmAmncI/AAAAAAAAAN8/arZbHHstEWs/s72-c/downsize.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2011/05/ubuntu-1104.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8HQX87eip7ImA9WhZQFU4.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-1146671176430724692</id><published>2011-04-22T21:00:00.000-07:00</published><updated>2011-04-22T21:43:50.102-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-22T21:43:50.102-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="books" /><title>Análise sintática</title><content type="html">Writing time! Friday night and so quiet out there. Sehr gut.&lt;br /&gt;
&lt;br /&gt;
First and foremost, let me check the date of my last post... more than 2 months ago. Fair enough, I've been busy and time just flies. Nothing new here. Did you notice that I've moved this blog to blogger? It's a lot faster than hosting wordpress myself and really easy to add listings from Amazon. Most of the time I'm talking about books that I read anyways. I'm also keeping adsense in the top right. The adds are not intrusive, may provide relevant content and generate a few bucks every year.&lt;br /&gt;
&lt;br /&gt;
I've been reading a lot of different stuff and I'll eventually add a few words about each book in here but today this post is about a different subject. My interest in Chromium has shifted to another awesome project.&lt;iframe src="http://rcm.amazon.com/e/cm?t=d024-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=1441919015&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
Back in &lt;a href="http://www.daniberg.com/2009/06/chromium-compiled-in-ubuntu.html"&gt;2009&lt;/a&gt; I wanted to run Chrome on Ubuntu so I checked out the code and since then I've been reading it. Learning material. I even posted about a &lt;a href="http://www.daniberg.com/2009/08/learning-python.html"&gt;thing&lt;/a&gt; &lt;a href="http://www.daniberg.com/2010/06/gnu-make.html"&gt;or&lt;/a&gt; &lt;a href="http://www.daniberg.com/2010/10/version-control-with-git.html"&gt;two&lt;/a&gt; that I invested time to learn only because of Chromium, specially its build system.&lt;br /&gt;
&lt;br /&gt;
So what's the new toy? &lt;a href="http://llvm.org"&gt;LLVM&lt;/a&gt;. After running into clang, the damage was done. I didn't try to understand the building system this time - autotools -- and went straight to the main entry function. C++ it is. I'm cleaning the dust from old C++ books but I'll save this subject for a later date.&lt;br /&gt;
&lt;br /&gt;
Before I finish I'll mention just one book acquired in this new journey of mine. Parsing Techniques: A Practical Guide by Dick Grune and Ceriel J.H. Jacobs. Go Holland. I've been reading the book and every week or so I find a lame excuse to write small parsers for the sake of writing code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-1146671176430724692?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/C9mFDoaeeGBvnTQdI_pZLvdhsgU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C9mFDoaeeGBvnTQdI_pZLvdhsgU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/C9mFDoaeeGBvnTQdI_pZLvdhsgU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C9mFDoaeeGBvnTQdI_pZLvdhsgU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/sasFQTYfsPA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/1146671176430724692/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2011/04/writing-time-friday-night-and-so-quiet.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/1146671176430724692?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/1146671176430724692?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/sasFQTYfsPA/writing-time-friday-night-and-so-quiet.html" title="Análise sintática" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2011/04/writing-time-friday-night-and-so-quiet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ANQngzfip7ImA9Wx9UEEk.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-4292835135147520956</id><published>2011-02-06T17:23:00.000-08:00</published><updated>2011-02-06T17:23:13.686-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-06T17:23:13.686-08:00</app:edited><title>Delivering Happiness</title><content type="html">&lt;iframe src="http://rcm.amazon.com/e/cm?t=d024-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0446563048&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
I got a copy of &lt;a target="_blank"  href="http://www.amazon.com/Delivering-Happiness-Profits-Passion-Purpose/dp/0446563048?ie=UTF8&amp;tag=d024-20&amp;link_code=btl&amp;camp=213689&amp;creative=392969"&gt;Delivering Happiness&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=d024-20&amp;l=btl&amp;camp=213689&amp;creative=392969&amp;o=1&amp;a=0446563048" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important; padding: 0px !important" /&gt; at work. Through a light and sometimes funny narrative Tony Hsieh describes his trajectory as an entrepreneur and how he became the CEO of Zappos.com. The author describes his early attempts as a kid to make money, building LinkExchange after college and finally turning Zappos into a successful company.&lt;br /&gt;
&lt;br /&gt;
I admire people that, like Tony Hsieh, build their own company. Entrepreneurs share a common trait with my heroes: &lt;i&gt;persistence&lt;/i&gt;. There's something more about Zappos that I like even more. Behind their philosophy of a great experience for both customers and their employees there's a more profound pillar which is to do &lt;i&gt;Good&lt;/i&gt;. &lt;a href="http://en.wikipedia.org/wiki/Don't_be_evil"&gt;Don't be evil if you prefer&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I know where to buy my next pair of shoes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-4292835135147520956?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XGFHXc54Ddlu4krQqii33qpayRY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XGFHXc54Ddlu4krQqii33qpayRY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XGFHXc54Ddlu4krQqii33qpayRY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XGFHXc54Ddlu4krQqii33qpayRY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/morARodeEBs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/4292835135147520956/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2011/02/delivering-happiness.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/4292835135147520956?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/4292835135147520956?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/morARodeEBs/delivering-happiness.html" title="Delivering Happiness" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2011/02/delivering-happiness.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YHQXo5cCp7ImA9Wx9XFkw.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-1005408161190256066</id><published>2010-12-12T05:50:00.001-08:00</published><updated>2011-01-09T16:25:30.428-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T16:25:30.428-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>Shining new toy full of pixels</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpR4bbDnHI/AAAAAAAAAJE/89oqUGxt-Vc/s1600/home-office.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="180" width="320" src="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpR4bbDnHI/AAAAAAAAAJE/89oqUGxt-Vc/s320/home-office.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
It was hard but I endured. I behaved myself day after day for 12 months but in the end Santa fulfilled our agreement and a few weeks ago he prompted me with a shiny new toy full of pixels. A Samsung SyncMaster P2770HD. Until now, while at home I've been plugging my laptop into an old 19 inch monitor completely oblivious that out there were wider screens, backlight and HDMI cables that even xorg.conf is aware of.&lt;br /&gt;
&lt;br /&gt;
As I'm writing this post - and emacs is not maximized -- I'm realizing that my new toy was the missing key for my home office. It's cozy, quiet and I can see autumn leaves from the window. It would be good to work from home a day or two during the week and avoid Caltrain or 101 traffic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-1005408161190256066?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/X74caLNeBpFxp3enL-Vrz_-74vI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X74caLNeBpFxp3enL-Vrz_-74vI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/X74caLNeBpFxp3enL-Vrz_-74vI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X74caLNeBpFxp3enL-Vrz_-74vI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/is8va_RT4EI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/1005408161190256066/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2010/12/shining-new-toy-full-of-pixels.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/1005408161190256066?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/1005408161190256066?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/is8va_RT4EI/shining-new-toy-full-of-pixels.html" title="Shining new toy full of pixels" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpR4bbDnHI/AAAAAAAAAJE/89oqUGxt-Vc/s72-c/home-office.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2010/12/shining-new-toy-full-of-pixels.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QGQ3kzcSp7ImA9Wx9XFkw.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-37851606462363860</id><published>2010-11-28T14:03:00.002-08:00</published><updated>2011-01-09T16:28:42.789-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T16:28:42.789-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="books" /><title>The algorithm design manual</title><content type="html">&lt;iframe src="http://rcm.amazon.com/e/cm?t=d024-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=1849967202&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
In the past few months I've developed the habit of posting about books that I've read. The main rule is that I must only write about books that I read from cover to cover. There must be a good reason why I would skip a chapter or two. This was a conscious decision to encourage myself not to read several books at the same time since I have lots of titles on my shelf looking down on me and waiting to be fully digested.&lt;br /&gt;
&lt;br /&gt;
There's a category of books that made me re-think that strategy. Books that contain a vast amount of information and references and there's no way I could finish reading them in a week during my Caltrain commute. The example today is &lt;a target="_blank"  href="http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202?ie=UTF8&amp;tag=d024-20&amp;link_code=btl&amp;camp=213689&amp;creative=392969"&gt;The Algorithm Design Manual&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=d024-20&amp;l=btl&amp;camp=213689&amp;creative=392969&amp;o=1&amp;a=1849967202" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important; padding: 0px !important" /&gt;by Skiena.&lt;br /&gt;
&lt;br /&gt;
Amazon's receipt shows me that I bought the 2nd edition of Skiena's book back in 2008. Hmmmm. Just by glancing at the cheap Ikea shelf on my left I can see that I also bought at least 10 other titles suggested by the author in the meantime. Content for future posts is assured. Relax, my 3 loyal readers.&lt;br /&gt;
&lt;br /&gt;
The Algorithm Design Manual is a great source for research. The first part is introductory material and was/is really important for me since I didn't study computer science in college. The math introduced is really basic which is good. If I wanted to dive deeper into math I would still be into physics. Although, I feel that some day I'll eventually get back into that. Pointless academic assignments substantially killed my motivation to work in return for good grades. Ouch. Maybe that's why my inner balance between theory and practice has been favoring the latter for several years now and I've been excited about startups where you can get things done.&lt;br /&gt;
&lt;br /&gt;
The second part of the book is called the Hitchhiker's Guide to Algorithms which is a catalog of algorithmic problems. Here's the source of my ever growing wish list of books at Amazon. There are so many references for interest topics that it's a lifetime learning investment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-37851606462363860?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bRVbnDPfBEMoaOqPZYABwdZ4ofA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bRVbnDPfBEMoaOqPZYABwdZ4ofA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bRVbnDPfBEMoaOqPZYABwdZ4ofA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bRVbnDPfBEMoaOqPZYABwdZ4ofA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/k5WqtF1fUnk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/37851606462363860/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2010/11/algorithm-design-manual.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/37851606462363860?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/37851606462363860?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/k5WqtF1fUnk/algorithm-design-manual.html" title="The algorithm design manual" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.daniberg.com/2010/11/algorithm-design-manual.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AARnw9fCp7ImA9Wx9XFkw.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-6849473666541742204</id><published>2010-11-22T13:04:00.001-08:00</published><updated>2011-01-09T16:35:47.264-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T16:35:47.264-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>A shiny and brand new typing toy</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g2WBI0UvgLU/TSpTCi9cxTI/AAAAAAAAAJM/yZtvA7Yxr6c/s1600/tmx-2030_gallery-1.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="144" width="320" src="http://3.bp.blogspot.com/_g2WBI0UvgLU/TSpTCi9cxTI/AAAAAAAAAJM/yZtvA7Yxr6c/s320/tmx-2030_gallery-1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I decided to code for a living later in life. I remember that one of my first commitments was to learn how to properly use the keyboard. As usual I started by opening a &lt;a title="Touch Typing" href="http://en.wikipedia.org/wiki/Touch_typing" target="_blank"&gt;wikipedia page&lt;/a&gt; and after reading some interesting facts about typing techniques and personalities I focused on the image pointing the typing zones for each finger.&lt;br /&gt;
&lt;br /&gt;
When I was a kid I read a &lt;a title="Joe Satriani" href="http://satriani.com" target="_blank"&gt;Joe Satriani&lt;/a&gt; interview saying that one of his best teachers told him that no matter how long you take to hit a note, you hit the right one. I never forgot this and neither Satriani. God, he knows where the right notes are. It makes sense right? If you don't have method you're just practicing imperfection.&lt;br /&gt;
&lt;br /&gt;
As a good pupil I followed the lesson and for an entire day. I painfully typed pressing every key using its assigned finger. My boss back then would send me an IM message and 10 minutes later he would have a response. Of course, it took so long that he would leave his office and come to talk to me. But I persisted and even told him that my training was an investment in the company.&lt;br /&gt;
&lt;br /&gt;
Really, it's easy as it sounds. Muscle memory. If you type all day it's all that it costs. One day of work from your life to be free. Next morning after a good night of sleep I could type and at the same time stare at the infinite concrete jungle that is Sao Paulo through the windows of the office's 6th floor.&lt;br /&gt;
&lt;br /&gt;
An interesting cultural note. I have the impression that all my friends here in the US know how to type. In Brazil I know that typing is not a skill you acquire while attending school. Maybe things have changed since I graduated light years ago but damn it, if it's still the case do me a favor and replace a week of useless biology classes for a crash course to teach students how to type.&lt;br /&gt;
&lt;br /&gt;
It's not a secret that it's painful to see someone typing moving their fingers in all random directions. And it's not about speed. &lt;strong&gt;It's about reading&lt;/strong&gt;. With muscle memory built-in you don't have to keep switching sight between the keyboard and your monitor for every new word inserted into your text editor. You'll hit the delete key less often as well. Accuracy. Again, speed is not the main concern, it is a good side effect that you'll build while you train yourself in the typing wizardry.&lt;br /&gt;
&lt;br /&gt;
You probably don't notice it but without proper training most of your hands and fingers movements are wasted and that gives you the false feeling of being fast. It's like watching &lt;a href="http://www.yngwiemalmsteen.com/" target="_blank"&gt;Yngwie&lt;/a&gt;. The stunning amount of notes you can hear don't seem to be in balance with his hands movements.&lt;br /&gt;
&lt;br /&gt;
Maybe it's because I played guitar for so many years that I have an interest in the &lt;a href="http://http://danibberg.blogspot.com/2009/05/stupid-brazilian-keyboard.html"&gt;mechanical&lt;/a&gt; process of &lt;a href="http://http://danibberg.blogspot.com/2009/06/emacs-key-bindings-everywhere.html"&gt;typing&lt;/a&gt; but I completely digressed. The raison d'être of this post is one my new toys. The &lt;a title="TypeMatrix" href="http://typematrix.com" target="_blank"&gt;TypeMatrix&lt;/a&gt; keyboard 2030.&lt;br /&gt;
&lt;br /&gt;
I was eager to finally buy a good keyboard and while doing some research someone pointed out the TypeMatrix keyboard in the emacs irc channel. The grid layout and it's flat surface are quite surprising in comparison to all ergonomic keyboards. If Leonardo says that simplicity is the ultimate form of sophistication it must be true. So I ordered a 2030 model and after a weekend of heavy typing I agreed with TypeMatrix's philosophy. They also offer skins with different layouts. I'll give the dvorak layout a try.&lt;br /&gt;
&lt;br /&gt;
Another point worth mentioning is TypeMatrix's great support and warranty. They replaced one of my keyboards that stopped working in no time. Highly recommended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-6849473666541742204?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jnQ9YbSMuG_Q7--sY1dGOnzGvqw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jnQ9YbSMuG_Q7--sY1dGOnzGvqw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jnQ9YbSMuG_Q7--sY1dGOnzGvqw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jnQ9YbSMuG_Q7--sY1dGOnzGvqw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/IiD90tSYZoQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/6849473666541742204/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2010/11/shiny-and-brand-new-typing-toy.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/6849473666541742204?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/6849473666541742204?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/IiD90tSYZoQ/shiny-and-brand-new-typing-toy.html" title="A shiny and brand new typing toy" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_g2WBI0UvgLU/TSpTCi9cxTI/AAAAAAAAAJM/yZtvA7Yxr6c/s72-c/tmx-2030_gallery-1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2010/11/shiny-and-brand-new-typing-toy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEDRn8zeip7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-8628025876438894558</id><published>2010-10-21T16:35:00.002-07:00</published><updated>2011-01-09T18:47:57.182-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T18:47:57.182-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="books" /><title>Version Control with Git</title><content type="html">&lt;iframe src="http://rcm.amazon.com/e/cm?t=d024-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0596520123&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
I was talking to friend via Skype the other day and he reminded me of one of our inside jokes from back in the day when I was still living in Brazil. &lt;em&gt;I know how to write a 30 line text composition&lt;/em&gt;. It's funny that some of your vents end up being part of the mob jargon. It's politically incorrect given the circumstances of public schools and a good joke when pointing out your friend's vacation-mode in life.&lt;br /&gt;
&lt;br /&gt;
As I always say, writing is hard. Being concise and clear via paper or html textboxes is a skill that I admire, so I feel like I'm on the other side of the joke when the language is not Portuguese. And that sucks. &lt;em&gt;Writing a 30 line composition is not a joke&lt;/em&gt;. Truth must be told though. All is not lost since I'm getting better at it. When I look back at the first entries in this blog I feel good about myself. My wife has played a role in that since she has to put up with me asking her to proofread all this nonsense. Maybe if I had been born in Finland or spent less time playing games I would be a polyglot by now.&lt;br /&gt;
&lt;br /&gt;
Anyhow. I finished reading another book a few weeks ago. The reason it took me so long to write about this achievement is because I didn't feel like writing and I've been really excited reading and writing emacs lisp code.&lt;br /&gt;
&lt;br /&gt;
&lt;a target="_blank"  href="http://www.amazon.com/Version-Control-Git-Collaborative-Development/dp/0596520123?ie=UTF8&amp;tag=d024-20&amp;link_code=btl&amp;camp=213689&amp;creative=392969"&gt;Version Control with Git&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=d024-20&amp;l=btl&amp;camp=213689&amp;creative=392969&amp;o=1&amp;a=0596520123" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important; padding: 0px !important" /&gt; is a really good book. I read the first chapters last year when I was mainly using Git but only finished reading the book now. Informative and easy to digest.&lt;br /&gt;
&lt;br /&gt;
We use Subversion at work which is kind of painful after you use Git. Svn is not bad. It's just that... hmmm. How to put it mildly? Git is better.&lt;br /&gt;
&lt;br /&gt;
The book has a chapter dedicated to git-svn. I'm giving it a try. I first tried the dcommit approach but constantly rebasing is not ideal. The second approach, using a gatekeeper is better but I still need to write a few scripts to make my life easier. We'll see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-8628025876438894558?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iRZ1SkiTNd3r6I2Jl5b42MBxFEg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iRZ1SkiTNd3r6I2Jl5b42MBxFEg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iRZ1SkiTNd3r6I2Jl5b42MBxFEg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iRZ1SkiTNd3r6I2Jl5b42MBxFEg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/lE5kzNMUtqM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/8628025876438894558/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2010/10/version-control-with-git.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/8628025876438894558?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/8628025876438894558?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/lE5kzNMUtqM/version-control-with-git.html" title="Version Control with Git" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2010/10/version-control-with-git.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYBQH05eSp7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-3571561873475095311</id><published>2010-08-29T15:10:00.001-07:00</published><updated>2011-01-09T16:42:31.321-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T16:42:31.321-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>Great old Emacs Manual in Info mode</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpVzy1JJ5I/AAAAAAAAAJU/OPdShDkkOxM/s1600/dino.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="240" width="320" src="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpVzy1JJ5I/AAAAAAAAAJU/OPdShDkkOxM/s320/dino.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I realized this morning that I read all of the emacs manual in Info mode. I read a small section every morning for a few weeks. Info mode is a really neat format and it solves the problems I have reading digital books. In fact, I gave up reading digital books a long time ago.&lt;br /&gt;
&lt;br /&gt;
The main problem with reading a PDF book is navigation. It's just plain hard to read a paragraph mentioning a table in Appendix A which is located in the end of the book. Now, in Info mode it's not only easy but you have all emacsy ways to help you 'walk' around the text.&lt;br /&gt;
&lt;br /&gt;
A PDF is also inconvenient helping my brain to map subjects to a particular physical area in a book. I know that what I'm looking for is in the middle of the red hard cover book in my shelf. The author mentions what a register RAX is right below the figure showing a leprechaun in the right top of the page.&lt;br /&gt;
&lt;br /&gt;
I wish I could read more books in Info mode like the emacs manual and now the Elisp reference, CC-Mode, Org-Mode and alike. Ipads and Kindles just don't work for me. They are a good fit for novels though. I'll keep buying dead trees.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-3571561873475095311?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gveH324VTtu4CC60lyhAYot6su0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gveH324VTtu4CC60lyhAYot6su0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gveH324VTtu4CC60lyhAYot6su0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gveH324VTtu4CC60lyhAYot6su0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/rDDzF7Mf9qY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/3571561873475095311/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2010/08/great-old-emacs-manual-in-info-mode.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/3571561873475095311?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/3571561873475095311?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/rDDzF7Mf9qY/great-old-emacs-manual-in-info-mode.html" title="Great old Emacs Manual in Info mode" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpVzy1JJ5I/AAAAAAAAAJU/OPdShDkkOxM/s72-c/dino.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.daniberg.com/2010/08/great-old-emacs-manual-in-info-mode.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIBR3c7fyp7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-27038289375856556</id><published>2010-08-03T14:53:00.002-07:00</published><updated>2011-01-09T16:49:16.907-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T16:49:16.907-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>Ubuntu 10.04</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g2WBI0UvgLU/TSpWTg_0chI/AAAAAAAAAJc/TIR123mJRgk/s1600/penny.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="180" src="http://3.bp.blogspot.com/_g2WBI0UvgLU/TSpWTg_0chI/AAAAAAAAAJc/TIR123mJRgk/s320/penny.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I've been running Ubuntu 10.04 on my laptop (VAIO VPCCW) since its release. &lt;a href="http://danibberg.blogspot.com/2009/04/ubuntu-wireless-nightmare-is-gone.html"&gt;I had some problems before with a release&lt;/a&gt; but this time things were a little more difficult.&lt;br /&gt;
&lt;br /&gt;
I don't know what I was thinking but I tried to use the Update Manager and give it another chance since it never worked before for me. After the download was complete the system rebooted but nothing happened. Black screen of death?! Bummer, didn't work. Fresh new install and the problem persisted.&lt;br /&gt;
&lt;br /&gt;
Turns out Nvidia graphics and the resolution of 1366x768 don't work out the box. The solution was the alternate installer. After the installation I manually included the edid file from the laptop's monitor into xorg.conf before I could see any graphics. I mentioned something related to that &lt;a href="http://danibberg.blogspot.com/2009/12/ubuntu-910.html"&gt;here&lt;/a&gt; and &lt;a href="http://danibberg.blogspot.com/2010/02/2-monitors-on-karmic-koala-64.html"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Another annoying video related problem is the brightness control. It's broken since 9.10. Well, truth must be told, now at least the animation works when you increase or decrease the brightness using the keyboard. Still, no effect. I have to use nvidia x server settings to avoid burning my retinas.&lt;br /&gt;
&lt;br /&gt;
Other than that I just had to tweak xorg.conf to decrease the sensibility of the mouse tracking pad. You could double click by just raising your voice next to the keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
Section "InputDevice"&lt;br /&gt;
...&lt;br /&gt;
Option "MaxTapTime" "230"&lt;br /&gt;
Option "MaxTapMove" "230"&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
I want my money back :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-27038289375856556?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7OheUfGMassxGLwtI4Hw1j2L5d4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7OheUfGMassxGLwtI4Hw1j2L5d4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7OheUfGMassxGLwtI4Hw1j2L5d4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7OheUfGMassxGLwtI4Hw1j2L5d4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/AqXj8YNNiKg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/27038289375856556/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2010/08/ubuntu-1004.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/27038289375856556?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/27038289375856556?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/AqXj8YNNiKg/ubuntu-1004.html" title="Ubuntu 10.04" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_g2WBI0UvgLU/TSpWTg_0chI/AAAAAAAAAJc/TIR123mJRgk/s72-c/penny.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.daniberg.com/2010/08/ubuntu-1004.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEBRXY6eip7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-8615323133941648383</id><published>2010-06-24T14:32:00.001-07:00</published><updated>2011-01-09T16:50:54.812-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T16:50:54.812-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="books" /><title>gnu make</title><content type="html">&lt;iframe src="http://rcm.amazon.com/e/cm?t=d024-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0596006101&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
Whenever I can I try to read &lt;a href="http://code.google.com/chromium/" target="_blank"&gt;Chromium&lt;/a&gt;'s source code. Even if all I have are 40 minutes between Sunnyvale and Millbrae. Poking Chromium's source code is an educational hobby of mine so I am in no rush and I take a lot of detours diving into subjects related to the project.&lt;br /&gt;
&lt;br /&gt;
The most recent example was &lt;a href="http://www.gnu.org/software/make/" target="_blank"&gt;GNU Make&lt;/a&gt;. When I first started reading the Makefile generated by &lt;a href="http://www.chromium.org/developers/how-tos/depottools/gclient"&gt;gclient&lt;/a&gt; I got stuck. The Makefile dumps almost 30MB of instructions to compile the project and some lines of code were a complete mystery to me.&lt;br /&gt;
&lt;br /&gt;
The usual approach. Order a used (if possible) book from Amazon. &lt;a target="_blank"  href="http://www.amazon.com/Managing-Projects-Make-Nutshell-Handbooks/dp/0596006101?ie=UTF8&amp;tag=d024-20&amp;link_code=btl&amp;camp=213689&amp;creative=392969"&gt;Managing Projects with GNU Make (Nutshell Handbooks)&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=d024-20&amp;l=btl&amp;camp=213689&amp;creative=392969&amp;o=1&amp;a=0596006101" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important; padding: 0px !important" /&gt; by Robert Mecklenburg is a really good book. I just skipped the Java chapter.&lt;br /&gt;
&lt;br /&gt;
I kept switching between reading the book and Chromium's Makefile. Being confronted by a real (and big) working example of a Makefile pushed me harder to go through the entire book.&lt;br /&gt;
&lt;br /&gt;
I've been writing quite a few Makefiles since then. Even for situations were GNU Make is not appropriate. After all, when you are a hammer everything looks like a nail.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-8615323133941648383?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/C91B0aYB-3ztvP3GNy0c0vNeJlU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C91B0aYB-3ztvP3GNy0c0vNeJlU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/C91B0aYB-3ztvP3GNy0c0vNeJlU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C91B0aYB-3ztvP3GNy0c0vNeJlU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/HlA_7zifIHU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/8615323133941648383/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2010/06/gnu-make.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/8615323133941648383?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/8615323133941648383?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/HlA_7zifIHU/gnu-make.html" title="gnu make" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2010/06/gnu-make.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAFQH49cSp7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-6103753785352679984</id><published>2010-06-13T08:14:00.001-07:00</published><updated>2011-01-09T16:51:51.069-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T16:51:51.069-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>Coders at Work</title><content type="html">&lt;iframe src="http://rcm.amazon.com/e/cm?t=d024-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=1430219483&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes I need to re-charge the batteries and let my brain rest. I guess. I was receiving messages from my body (brain, soul and who knows what else) to take some rest. By rest I mean taking a break after regular work time. No side projects or books/manuals that need focus and extra attention.&lt;br /&gt;
&lt;br /&gt;
Signing up for the 24 hour gym was the first step. The old stuff, get back to gym and deal with muscular pain for a week. It's interesting that you can exercise in the gym without an instructor here in the US. You see a lot of folks that will most likely hurt themselves. I'm not into sports at all but you have to know at least the basics to lift weight.&lt;br /&gt;
&lt;br /&gt;
I digress. I was looking for a tech novel to entertain myself during the approximately 40 minutes between Sunnyvale and Millbrae and found Coders At Work by Peter Seibel. The book advertises itself as "&lt;em&gt;interviews with some of the top programmers of our times&lt;/em&gt;".&lt;br /&gt;
&lt;br /&gt;
Informative, entertaining and inspiring! Highly recommended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-6103753785352679984?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/d0kgY0E32j8esW-nCUPZkrK3xPs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/d0kgY0E32j8esW-nCUPZkrK3xPs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/d0kgY0E32j8esW-nCUPZkrK3xPs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/d0kgY0E32j8esW-nCUPZkrK3xPs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/5_jqlD77vRY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/6103753785352679984/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2010/06/coders-at-work.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/6103753785352679984?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/6103753785352679984?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/5_jqlD77vRY/coders-at-work.html" title="Coders at Work" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2010/06/coders-at-work.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkABSHs5cCp7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-3907369103377718830</id><published>2010-06-10T00:49:00.001-07:00</published><updated>2011-01-09T16:52:39.528-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T16:52:39.528-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="books" /><title>Restful web services</title><content type="html">&lt;iframe src="http://rcm.amazon.com/e/cm?t=d024-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0596529260&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
This one has been laying on my desk for quite too long. Time to make a post about it and get it back to the shelf.&lt;br /&gt;
&lt;br /&gt;
I first started reading Restful Web Services by Leonard Richardson &amp;amp; Sam Ruby one year ago. April 2009. I know that because of the Amazon receipt.&lt;br /&gt;
&lt;br /&gt;
I read the first chapters and wondered why I didn't learn about Restful Web Services before. Simplicity is the key. Suddenly all XML-RPC code that I wrote in the past started to smell really bad.&lt;br /&gt;
&lt;br /&gt;
The problem is that after the first chapters I probably got bored or the book could have been shorter. In any case, I just finished reading it this past April. A year later! It is a good book though, even if you just read the first few chapters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-3907369103377718830?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kwj8cZz9Z4flo02p5X_UeT5MWX8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kwj8cZz9Z4flo02p5X_UeT5MWX8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kwj8cZz9Z4flo02p5X_UeT5MWX8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kwj8cZz9Z4flo02p5X_UeT5MWX8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/RtvX6u8muYI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/3907369103377718830/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2010/06/restful-web-services.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/3907369103377718830?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/3907369103377718830?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/RtvX6u8muYI/restful-web-services.html" title="Restful web services" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2010/06/restful-web-services.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8AQX4zfSp7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-1310687063453618645</id><published>2010-05-02T09:03:00.001-07:00</published><updated>2011-01-09T16:54:00.085-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T16:54:00.085-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>Working for cupid</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpYjVE36eI/AAAAAAAAAJk/hPJXEKK5O7I/s1600/P1060358.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="240" src="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpYjVE36eI/AAAAAAAAAJk/hPJXEKK5O7I/s320/P1060358.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
These past months have been crazy and brought lots of changes to my life. Proof of this is that I let more than a month go by without a single post. Let me try to fix this with this short entry.&lt;br /&gt;
&lt;br /&gt;
I left my day job in Brazil and joined a talented team in Millbrae.&lt;br /&gt;
&lt;br /&gt;
I thought this job transition was going to be smoother since I've been planning this for a while. Heck, I just needed to finish a few side projects. Turns out 2 members of the team in Brazil quit with a short notice and we even had a hard disk failure in one of the servers. A few thousand clients went nuts while we restored the services. The universe has sense of humor.&lt;br /&gt;
&lt;br /&gt;
Well, routine is now settling in and I noticed that I actually missed commuting. I should have counted how many books I read in the bus/subway when I was living in São Paulo. Ha! Now I have this odd habit of adding a post whenever I finish reading a book. Anyways, I'm taking the train to Millbrae and I can calmly read not only technical books but my zen stuff too. Rhythm is important.&lt;br /&gt;
&lt;br /&gt;
I'm having a blast. The team is friendly and culturally diverse and I'm switching between implementing new features and reading the code base. I should also mention that I'm ingesting a significant amount of caffeine because I just can't resist the fridge.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-1310687063453618645?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RRMqgTh2Njud16s24F8m6cHmZkY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RRMqgTh2Njud16s24F8m6cHmZkY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RRMqgTh2Njud16s24F8m6cHmZkY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RRMqgTh2Njud16s24F8m6cHmZkY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/UXmGzUA8abc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/1310687063453618645/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2010/05/working-for-cupid.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/1310687063453618645?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/1310687063453618645?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/UXmGzUA8abc/working-for-cupid.html" title="Working for cupid" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpYjVE36eI/AAAAAAAAAJk/hPJXEKK5O7I/s72-c/P1060358.jpg" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://www.daniberg.com/2010/05/working-for-cupid.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cNRXk5fyp7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-369413411182912014</id><published>2010-02-25T14:16:00.001-08:00</published><updated>2011-01-09T16:58:14.727-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T16:58:14.727-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="books" /><title>Mailserver and Postfix</title><content type="html">&lt;iframe src="http://rcm.amazon.com/e/cm?t=d024-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0596002122&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
In order to keep this &lt;del datetime="2010-02-23T01:29:38+00:00"&gt;diary&lt;/del&gt; blog updated I should add a small note about mail servers. I'm still doing some sys admin work for about 2 hours a day.&lt;br /&gt;
&lt;br /&gt;
After a lot of experimentation I finally have one mail server up and running with &lt;a href="http://www.postfix.org/"&gt;Postfix&lt;/a&gt; and &lt;a href="http://www.dovecot.org/"&gt;Dovecot&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Besides the &lt;a href="http://www.postfix.org/documentation.html"&gt;official documentation&lt;/a&gt; I usually try to read at least one book about the tools I'm working with. &lt;a href="http://my.safaribooksonline.com/"&gt;Safari&lt;/a&gt; led me to &lt;strong&gt;Postfix: The Definitive Guide&lt;/strong&gt; by &lt;em&gt;Kyle D. Dent&lt;/em&gt;. The book gives a good overview on how Postfix works and goes through several different configurations that you may be interested in implementing. The only problem is that the book is outdated (December 2003) - that's last decade!&lt;br /&gt;
&lt;br /&gt;
Everything seems to be running ok but running and maintaining a mail server is a lot of work. There are just so many details and configurations that can go wrong. Performance, Security, Authentication, Disk space, Spam, Anti-viruses... The list is huge. I'm looking forward to meeting the next sys admin to join our team.&lt;br /&gt;
&lt;br /&gt;
I'm working on a project that offers domains and email accounts to the final client so it's been a good experience to understand how mail and &lt;a href="http://danibberg.blogspot.com/2010/02/wearing-sysadmin-hat.html"&gt;dns&lt;/a&gt; servers work. We have a lot work ahead!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-369413411182912014?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/die-dOKBsxYf4IwVhOHEh3ut8wY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/die-dOKBsxYf4IwVhOHEh3ut8wY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/die-dOKBsxYf4IwVhOHEh3ut8wY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/die-dOKBsxYf4IwVhOHEh3ut8wY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/VAQy8hX0GHo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/369413411182912014/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2010/02/mailserver-and-postfix.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/369413411182912014?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/369413411182912014?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/VAQy8hX0GHo/mailserver-and-postfix.html" title="Mailserver and Postfix" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2010/02/mailserver-and-postfix.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YMQnw_fyp7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-3255292239301878325</id><published>2010-02-14T13:39:00.002-08:00</published><updated>2011-01-09T16:59:43.247-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T16:59:43.247-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="dns" /><category scheme="http://www.blogger.com/atom/ns#" term="books" /><title>Wearing a sysadmin hat</title><content type="html">&lt;iframe src="http://rcm.amazon.com/e/cm?t=d024-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=1590594940&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
In the past weeks I've been doing some temporary sysadmin work for my day job and this new role extended to my night-time job. Yeah, I joined a startup but I'll talk more about that some other day.&lt;br /&gt;
&lt;br /&gt;
I had to move one of the web services we offer in my regular job to its own server. It was a good change, we moved the entire app from a CentOS/cPanel box hosted on the Planet to an instance running Ubuntu on AWS.&lt;br /&gt;
&lt;br /&gt;
CPanel is a really good product and saves you a lot of time but it is a pain in the butt if you are serving more than shared hosting accounts. If you have ever tried to automate tasks that handle virtual domains, email accounts and DNS entries you know what I'm talking about.&lt;br /&gt;
&lt;br /&gt;
Anyway, I must admit that I'm having a blast wearing a sysadmin hat during part of my day.  I'm learning a lot. I have this great excuse to read some books that were on my TO READ list for a long time.&lt;br /&gt;
&lt;br /&gt;
One of these books is &lt;strong&gt;Pro DNS and Bind&lt;/strong&gt; by &lt;em&gt;Ron Aitchison&lt;/em&gt;. I have had this book on my desk for months but I finally finished reading it. The book gave me a nice introduction to DNS servers, resolvers, zone files, resource records and diagnostic tools. Highly recommended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-3255292239301878325?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7juYK5KzzVW2qIj737OFl1uCEDI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7juYK5KzzVW2qIj737OFl1uCEDI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7juYK5KzzVW2qIj737OFl1uCEDI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7juYK5KzzVW2qIj737OFl1uCEDI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/ir2jXIJxVm0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/3255292239301878325/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2010/02/wearing-sysadmin-hat.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/3255292239301878325?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/3255292239301878325?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/ir2jXIJxVm0/wearing-sysadmin-hat.html" title="Wearing a sysadmin hat" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2010/02/wearing-sysadmin-hat.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UNRX06eip7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-7147230614069572845</id><published>2010-02-04T09:08:00.001-08:00</published><updated>2011-01-09T17:01:34.312-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T17:01:34.312-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="xorg.conf" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>2 monitors on Karmic Koala 64</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpaJZArcJI/AAAAAAAAAJs/624L34ko7To/s1600/reception-pousada-lago-douro.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="213" width="320" src="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpaJZArcJI/AAAAAAAAAJs/624L34ko7To/s320/reception-pousada-lago-douro.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
In December I bought this brand new laptop and had the perfect excuse to upgrade to Ubuntu 9.10. Like I mentioned in &lt;a href="http://danibberg.blogspot.com/2009/12/ubuntu-910.html"&gt;this post&lt;/a&gt;, the video drivers were the only issue I had.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.nvidia.com/object/linux_display_amd64_190.53.html"&gt;Nvidia released new drivers for Linux 64 (v. 190.53)&lt;/a&gt; so I took the chance to update and plug an old 19'' monitor to my laptop. To enable TwinView I muddled through &lt;a href="http://http.download.nvidia.com/XFree86/Linux-x86/1.0-8178/README/appendix-g.html"&gt;some documentation&lt;/a&gt; but finally made it work.&lt;br /&gt;
&lt;br /&gt;
Here's the code from xorg.conf that enables TwinView:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
Section "Device"&lt;br /&gt;
Identifier     "Device0"&lt;br /&gt;
Driver         "nvidia"&lt;br /&gt;
VendorName     "NVIDIA Corporation"&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;br /&gt;
Section "Screen"&lt;br /&gt;
Identifier     "Screen0"&lt;br /&gt;
Device         "Device0"&lt;br /&gt;
Monitor        "Monitor0"&lt;br /&gt;
DefaultDepth    24&lt;br /&gt;
Option     "TwinView"&lt;br /&gt;
Option     "ConnectedMonitor" "DFP-0, CRT-0"&lt;br /&gt;
Option     "MetaModes" "DFP-0: nvidia-auto-select, CRT-0: nvidia-auto-select"&lt;br /&gt;
Option     "CustomEDID" "DFP-0:/path/edid/monitor1.bin; CRT-0:/path/edid/monitor2.bin"&lt;br /&gt;
Option     "TwinViewXineramaInfoOrder" "DFP-0,CRT-0"&lt;br /&gt;
Option     "TwinViewOrientation" "DFP-0 LeftOf CRT-0"&lt;br /&gt;
SubSection     "Display"&lt;br /&gt;
Depth       24&lt;br /&gt;
EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
I had to add the binary EDID files because the X server was unable to identify the correct resolution for my laptop: 1366x768. The second monitor is 1280x1024... now I'm really seduced by a 27'' monitor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-7147230614069572845?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IbSTheOj95Qq9jq8nU1CScxRRts/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IbSTheOj95Qq9jq8nU1CScxRRts/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IbSTheOj95Qq9jq8nU1CScxRRts/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IbSTheOj95Qq9jq8nU1CScxRRts/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/xpYDrbuKC4A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/7147230614069572845/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2010/02/2-monitors-on-karmic-koala-64.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/7147230614069572845?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/7147230614069572845?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/xpYDrbuKC4A/2-monitors-on-karmic-koala-64.html" title="2 monitors on Karmic Koala 64" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpaJZArcJI/AAAAAAAAAJs/624L34ko7To/s72-c/reception-pousada-lago-douro.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2010/02/2-monitors-on-karmic-koala-64.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QBQ3w9fCp7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-6179637656060798540</id><published>2010-01-28T07:25:00.001-08:00</published><updated>2011-01-09T17:02:32.264-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T17:02:32.264-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="books" /><title>Masters of Doom</title><content type="html">&lt;iframe src="http://rcm.amazon.com/e/cm?t=d024-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0812972155&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
I have just a few posts per month but also have a lot of drafts waiting to be completed. A few of these drafts are almost complete and most are just short notes about subjects I want to write about in the future. I wish I could post more often, but not only is my schedule too tight, also writing clearly is just plain hard for me. It takes me precious time. Not to mention that English is not my mother tongue.&lt;br /&gt;
&lt;br /&gt;
However, I have one more motivation to keep writing. Besides my beloved wife who has the burden of proof reading my posts I have &lt;em&gt;a&lt;/em&gt; reader. Yes, that is right. One reader. Hallo Rafa! Thanks for all the support buddy.&lt;br /&gt;
&lt;br /&gt;
Now, back to the topic of this post. I was checking the draft list and noticed that I didn't add Masters of Doom to the Books category on this blog. I read this book many years ago but ended up reading it again this past December. Great source of inspiration.&lt;br /&gt;
&lt;br /&gt;
In case you've been living under a rock, Masters of Doom is about &lt;a href="http://en.wikipedia.org/wiki/John_D._Carmack" target="_blank"&gt;John Carmack&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/John_Romero"&gt;John Romero&lt;/a&gt;, Id Software, Commander Keen, Wolfeinstein, Doom...&lt;br /&gt;
&lt;br /&gt;
If you didn't read it just do yourself a favor and order a copy of it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-6179637656060798540?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XZohiDugvZCCME-01mrmOZ6Z9oE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XZohiDugvZCCME-01mrmOZ6Z9oE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XZohiDugvZCCME-01mrmOZ6Z9oE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XZohiDugvZCCME-01mrmOZ6Z9oE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/bngRKQpN-8Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/6179637656060798540/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2010/01/masters-of-doom.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/6179637656060798540?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/6179637656060798540?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/bngRKQpN-8Q/masters-of-doom.html" title="Masters of Doom" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2010/01/masters-of-doom.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EHRHY5eSp7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-3224069920129631694</id><published>2009-12-09T13:08:00.002-08:00</published><updated>2011-01-09T17:07:15.821-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T17:07:15.821-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="books" /><title>A matter of guidance</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g2WBI0UvgLU/TSpa1SZ2DSI/AAAAAAAAAJ0/M6r6HBJF3Uk/s1600/LasVegas.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_g2WBI0UvgLU/TSpa1SZ2DSI/AAAAAAAAAJ0/M6r6HBJF3Uk/s320/LasVegas.JPG" width="180" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Cloudy days are perfect for productive leisure, so in March before moving to the US I spent a lazy-cloudy-Sunday afternoon packing. Moving is always exciting and a good chance to get rid of everything that is not necessary in your life anymore. You can even leave bad vibes behind if you are spiritual. We tend to gather too much junk. Keep it simple.&lt;br /&gt;
&lt;br /&gt;
The cleanup included my bookshelf. My mission was to dispose of as many books as possible. Boy, books are heavy to carry and physics does not apply when it is part of your luggage.&lt;br /&gt;
&lt;br /&gt;
While running through the titles I started to compare dates of purchase against subjects. I have had this habit since I was a teen, every time I buy a book I sign and date it.&lt;br /&gt;
&lt;br /&gt;
Anyway, my small library was another lead to an obvious issue: my quest to become a programmer is a mess.&lt;br /&gt;
&lt;br /&gt;
Here's one good example. I wanted to code games when I was a teen. After some research I concluded that C++ and DirectX were the right tools for the job. I decided to start with C++ and ordered "C++ How to Program" by Deitel. Back then, a small number of web pages would advise: "You have to learn C". My mind discarded that advice as fast as I could read it. Why would I learn C? Isn't C++ not only C but PLUS PLUS! It is the future. Yeah, I know you are laughing at me.&lt;br /&gt;
&lt;br /&gt;
I read and tried all the examples from "C++ How to Program" before reading or writing any line of pure C code and felt ready to dive into some DirectX books and code the best tic-tac-toe ever!&lt;br /&gt;
&lt;table&gt;&lt;tr&gt;
&lt;td&gt;&lt;br /&gt;
&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=d024-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0136152503&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td&gt;&lt;br /&gt;
&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=d024-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=157231995X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td&gt;&lt;br /&gt;
&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=d024-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0131103628&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;Turns out my ambitious plan needed a detour. You have to go through some Windows programming before you can dive into DirectX (I don't know how it works now a days). Gosh, 70 lines of C code just to print Hello World in the Win32 API world.&lt;br /&gt;
&lt;br /&gt;
I can't just copy and paste code so I ordered "Programming Windows" by Petzold to become familiar with Windows programming. BTW, Programming Windows is a great book -- and I found a minor mistake in the text! (&lt;a href="http://www.jasondoucette.com/books/pw5/pw5errata.html#chapter5"&gt;Erratum #5&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
I read the book, tried the examples and the fact is: Win32 API is C Code.&lt;br /&gt;
&lt;br /&gt;
Because of that I finally ordered the classic "The C programming language" book to fill this awful gap in my skill set. Comparing the dates of purchase I realized that I bought the C book 2 years after the C++ one. Sad.&lt;br /&gt;
&lt;br /&gt;
I now remember that after going back and forth I finally achieved my goal. The best tic-tac-toe game ever written did compile and run without crashing. The euphoria lasted for almost 5 seconds!&lt;br /&gt;
&lt;br /&gt;
Before writing my first line of code&amp;nbsp;I was already humble and comfortable with the idea that it takes a lifetime to be a great developer. BUT, it took me a long time to have a better overview of the skills set you need to build in order to be a software developer.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;It's a matter of proper guidance&lt;/em&gt;.&lt;br /&gt;
&lt;br /&gt;
It doesn't matter if it's a CS degree or guru souls willing to show you the way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-3224069920129631694?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rnx9UuHdjEec79QF1vUaOGu91B0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rnx9UuHdjEec79QF1vUaOGu91B0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rnx9UuHdjEec79QF1vUaOGu91B0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rnx9UuHdjEec79QF1vUaOGu91B0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/fKJs2yNrztw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/3224069920129631694/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2009/12/matter-of-guidance.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/3224069920129631694?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/3224069920129631694?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/fKJs2yNrztw/matter-of-guidance.html" title="A matter of guidance" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_g2WBI0UvgLU/TSpa1SZ2DSI/AAAAAAAAAJ0/M6r6HBJF3Uk/s72-c/LasVegas.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2009/12/matter-of-guidance.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08MSX0-cCp7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-1985003078130276798</id><published>2009-12-02T02:02:00.001-08:00</published><updated>2011-01-09T17:11:28.358-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T17:11:28.358-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>Ubuntu 9.10</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpccdT3sZI/AAAAAAAAAJ8/V8RhDC1xqvU/s1600/P1050600.JPG" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="180" width="320" src="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpccdT3sZI/AAAAAAAAAJ8/V8RhDC1xqvU/s320/P1050600.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I was planning to skip Karmic Koala. Jaunty was running just fine but since I replaced my notebook I had an opportunity to try it.&lt;br /&gt;
&lt;br /&gt;
I bought another Sony Vaio but this time without a &lt;a href="http://danibberg.blogspot.com/2009/05/stupid-brazilian-keyboard.html"&gt;stupid keyboard&lt;/a&gt;. I opted for the VPCCW model because it offered an NVIDIA (GEFORCE 230M) graphics card. I was interested in the SR series but because of my bad experience in the past I didn't want to deal with ATI.&lt;br /&gt;
&lt;br /&gt;
And that is the irony. Installed Karmic and even wireless worked out of the box. Surprise! After enabling NVIDIA proprietary drivers (190.42) and rebooting my screen was black. Frustration.&lt;br /&gt;
&lt;br /&gt;
After some time googling and reading NVIDIA documents I found out that I had to set xorg.conf to use a custom &lt;a href="http://en.wikipedia.org/wiki/Extended_display_identification_data"&gt;EDID&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
Option "ConnectedMonitor" "DFP-0"&lt;br /&gt;
Option "CustomEDID" "DFP-0:/path/to/bin/edid/SNY05FA.bin"&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Everything is running smoothly now but I can't stop thinking that this kind of problem is what makes linux desktop adoption harder. It's just a matter of time though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-1985003078130276798?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QfBnaAYYXbYTjBnd3vuke8A-dn4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QfBnaAYYXbYTjBnd3vuke8A-dn4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QfBnaAYYXbYTjBnd3vuke8A-dn4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QfBnaAYYXbYTjBnd3vuke8A-dn4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/jlpVp8tR8q8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/1985003078130276798/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2009/12/ubuntu-910.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/1985003078130276798?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/1985003078130276798?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/jlpVp8tR8q8/ubuntu-910.html" title="Ubuntu 9.10" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpccdT3sZI/AAAAAAAAAJ8/V8RhDC1xqvU/s72-c/P1050600.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2009/12/ubuntu-910.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04BR306cCp7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-816182864276803529</id><published>2009-11-22T03:34:00.001-08:00</published><updated>2011-01-09T17:12:36.318-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T17:12:36.318-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>Meanwhile, at the PHP world</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpc5ASUXKI/AAAAAAAAAKE/4JPri8ycqxE/s1600/fireplace.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="242" width="320" src="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpc5ASUXKI/AAAAAAAAAKE/4JPri8ycqxE/s320/fireplace.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
In order to accomplish my goal of keeping this blog updated and grant me some good memories in the future, let me write down about what is going on in my small PHP world:&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;CakePHP&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
In my daily job we deal with tons of code written in the pre-framework era but I had a chance to experiment with CakePHP in the past months. I had a good time being involved in three side projects using the framework.&lt;br /&gt;
&lt;br /&gt;
The documentation is good and written like a tutorial but some times you still need need to dive into the framework's source code to get specific details about classes and methods.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Emacs PHP mode improved&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
I replaced &lt;a href="http://http://php-mode.sourceforge.net/"&gt;php-mode&lt;/a&gt; for &lt;a href="http://www.emacswiki.org/emacs/php-mode-improved.el"&gt;php-mode-improved&lt;/a&gt;. The improved version has fixed some bugs in from the previous version but it is sad to read:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;;; This has been submitted to the php-mode maintainer, but I've not yet had a&lt;br /&gt;
;; response.&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
The (probably) most popular php-mode is abandoned.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Xdebug&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
I occasionally read Chromium's tools written in Python and &lt;em&gt;- as the newbie for life that I am  -&lt;/em&gt; I wasted a significant amount of time adding print and exit statements to the code.&lt;br /&gt;
&lt;br /&gt;
It was time to learn how to use a Python debugger and make life easier. Enters &lt;a href="http://docs.python.org/library/pdb.html"&gt;pdb&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
It didn't take long to look for a similar tool for PHP: &lt;a href="http://xdebug.org/"&gt;xdebug&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I just wonder why I didn't try to learn these tools earlier.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;PHPUnit&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
This was something I was excited to do. To move all the crude test scripts to a test framework as dictates industry's best practices.&lt;br /&gt;
&lt;br /&gt;
Some tests were written using &lt;a href="http://simpletest.org/"&gt;SimpleTest&lt;/a&gt; but after a few grep and sed commands they all work with &lt;a href="http://phpunit.de"&gt;PHPUnit&lt;/a&gt; now.&lt;br /&gt;
&lt;br /&gt;
PHPUnit's documentation is better and development is active. SimpleTest is stuck in version 1.0.1 since April 2008.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-816182864276803529?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/M5Q28DX0VAb4OFQvvNdZxnqW7KE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M5Q28DX0VAb4OFQvvNdZxnqW7KE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/M5Q28DX0VAb4OFQvvNdZxnqW7KE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M5Q28DX0VAb4OFQvvNdZxnqW7KE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/1eFR8mPg6xE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/816182864276803529/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2009/11/meanwhile-at-php-world.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/816182864276803529?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/816182864276803529?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/1eFR8mPg6xE/meanwhile-at-php-world.html" title="Meanwhile, at the PHP world" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_g2WBI0UvgLU/TSpc5ASUXKI/AAAAAAAAAKE/4JPri8ycqxE/s72-c/fireplace.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.daniberg.com/2009/11/meanwhile-at-php-world.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04NRXk9eyp7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-3712709889149030757.post-8192023797263757097</id><published>2009-11-04T03:02:00.001-08:00</published><updated>2011-01-09T17:13:14.763-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T17:13:14.763-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="books" /><title>Apprenticeship Patterns</title><content type="html">&lt;iframe src="http://rcm.amazon.com/e/cm?t=d024-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0596518382&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
I was randomly checking the titles available from &lt;a href="http://safari.oreilly.com" target="_blank"&gt;Safari's web site&lt;/a&gt; when I found Apprenticeship Patterns by Dave Hoover and Adewale Oshineye. The book presents several patterns to improve your learning experience as a software developer apprentice.&lt;br /&gt;
&lt;br /&gt;
Evaluating how you you learn is key to excel and achieve mastery in any form of art. Yes, I'm including software in the art category.&lt;br /&gt;
&lt;br /&gt;
A good example to follow are musicians as they have in their curriculum a solid base on the matter. They learn not only how to play but how to study and practice. They have method.&lt;br /&gt;
&lt;br /&gt;
Aprenticeship Patterns is a good book and the subject is fascinating. Probably most of the patterns are already part of your daily schedule, but reading the book is still a good opportunity to reflect on the process to hone in on your skills.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3712709889149030757-8192023797263757097?l=www.daniberg.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pY46N-zKhY2Wc2XbaakN1ZYDItE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pY46N-zKhY2Wc2XbaakN1ZYDItE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pY46N-zKhY2Wc2XbaakN1ZYDItE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pY46N-zKhY2Wc2XbaakN1ZYDItE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/daniberg/ViPD/~4/6Dgisg3x32A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.daniberg.com/feeds/8192023797263757097/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.daniberg.com/2009/11/apprenticeship-patterns.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/8192023797263757097?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3712709889149030757/posts/default/8192023797263757097?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/daniberg/ViPD/~3/6Dgisg3x32A/apprenticeship-patterns.html" title="Apprenticeship Patterns" /><author><name>Dani Berg</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-AWHsrUsIEAE/AAAAAAAAAAI/AAAAAAAAAPs/2bM5oEHuVPA/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://www.daniberg.com/2009/11/apprenticeship-patterns.html</feedburner:origLink></entry></feed>

