<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0YFQXc8fip7ImA9WhBWFk4.&quot;"><id>tag:blogger.com,1999:blog-6757823</id><updated>2013-04-10T14:58:30.976-07:00</updated><category term="ethics" /><category term="mobile" /><category term="office2.0" /><category term="xml" /><category term="gtd" /><category term="java" /><category term="tool" /><category term="html5" /><category term="exist" /><category term="offline" /><category term="mypedia" /><category term="free will" /><category term="skype" /><category term="language" /><category term="tomcat" /><category term="intellij" /><category term="oracle" /><category term="realestate" /><category term="firefox" /><category term="orbeon" /><category term="travel" /><category term="iphone" /><category term="css" /><category term="hiking" /><category term="web2.0" /><category term="ie6" /><category term="unix" /><category term="html" /><category term="mac" /><category term="xpath" /><category term="health" /><category term="prediction" /><category term="hardware" /><category term="safari" /><category term="google" /><title>Alessandro Vernet's Blog</title><subtitle type="html">&lt;a href="http://twitter.com/avernet"&gt;@avernet&lt;/a&gt;</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://avernet.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>140</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/avernet" /><feedburner:info uri="avernet" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><feedburner:emailServiceId>avernet</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><entry gd:etag="W/&quot;C0YFQXczeyp7ImA9WhBWFk4.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-8265297373232249959</id><published>2013-04-10T14:58:00.000-07:00</published><updated>2013-04-10T14:58:30.983-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-10T14:58:30.983-07:00</app:edited><title>Requirements for a GTD system</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.flickr.com/photos/victoriabernal/6294851265/" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-8D0zmGTrwHM/UWXdZOURPGI/AAAAAAAAE2I/E4HePczcG2g/s320/6294851265_55973d1b00_z.jpg" width="272" /&gt;&lt;/a&gt;&lt;/div&gt;
For a while, I've been occasionally updating a list of requirements for a software I would be able to&amp;nbsp;comfortably&amp;nbsp;use to manage my GTD system. So without further ado:&lt;br /&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;actions&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;actions are always in a context, and some actions are also tied to a project (my primary way to look at lists of actions is by context)&lt;/li&gt;
&lt;li&gt;dates&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;start date (i.e. schedule a task to become current at a future date)&lt;/li&gt;
&lt;li&gt;recurring tasks (e.g. every weekday, every Monday, every first Tuesday of the month…)&lt;/li&gt;
&lt;li&gt;due date not important; making the task red once it passed the due date is useless to me; maybe another implementation could make this information useful&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;email&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;quick way to create an action from an email (otherwise I am more likely to leave emails in my inbox rather than create tasks)&lt;/li&gt;
&lt;li&gt;quickly find email related to an action&lt;/li&gt;
&lt;li&gt;special but important case of a start date: create action from an email that become current at a future date (i.e. "if no answer in 7 days, do this")&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;projects&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;lists of current projects&lt;/li&gt;
&lt;li&gt;in each project&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;next actions for that project&lt;/li&gt;
&lt;li&gt;reference material: notes (typically indented lists), files (PDF, screenshots)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;ability to archive projects&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;access&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;desktop&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;web based or OS X app&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;mobile&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Android&amp;nbsp;support (bonus for also working on iOS)&lt;/li&gt;
&lt;li&gt;fast read access to specific "list" (e.g. context, project)&lt;/li&gt;
&lt;li&gt;editing lists from a mobile is not a priority (just having read-only access, while not ideal, would suffice)&lt;/li&gt;
&lt;li&gt;offline on mobile (ideally with background sync so the offline version is used even when online for speed)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;proven stability of the system's cloud-based component&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/BhEfrTFDR9w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/8265297373232249959/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=8265297373232249959" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/8265297373232249959?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/8265297373232249959?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/BhEfrTFDR9w/requirements-for-gtd-system.html" title="Requirements for a GTD system" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-8D0zmGTrwHM/UWXdZOURPGI/AAAAAAAAE2I/E4HePczcG2g/s72-c/6294851265_55973d1b00_z.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://avernet.blogspot.com/2013/04/requirements-for-gtd-system.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8ER3o5eyp7ImA9WhNXF0g.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-5125744073522506413</id><published>2012-12-05T17:36:00.001-08:00</published><updated>2012-12-05T17:36:46.423-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-05T17:36:46.423-08:00</app:edited><title>Improve your web app design</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://3.bp.blogspot.com/-LdCrROkFjlg/UL_2f06858I/AAAAAAAAEes/Oc2U2EWZLQA/s1600/icons.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-LdCrROkFjlg/UL_2f06858I/AAAAAAAAEes/Oc2U2EWZLQA/s1600/icons.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
There is out there a wealth of resources you can use, often for free, to improve your web app design:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Icons&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Free&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://somerandomdude.com/work/iconic/"&gt;Iconic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fortawesome.github.com/Font-Awesome/"&gt;Font Awesome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://thenounproject.com/"&gt;The Noun Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://adamwhitcroft.com/batch/"&gt;Batch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Commercial&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://dutchicon.com/"&gt;Dutch Icon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://glyphicons.com/"&gt;GLYPHICONS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fico.lensco.be/"&gt;Fico&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;Backgrounds:&amp;nbsp;&lt;a href="http://subtlepatterns.com/"&gt;Subtle patterns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fonts:&amp;nbsp;&lt;a href="http://theleagueofmoveabletype.com/"&gt;The League of Movable Type&lt;/a&gt; (open source fonts)&lt;/li&gt;
&lt;li&gt;Design techniques:&amp;nbsp;&lt;a href="http://ianstormtaylor.com/design-tip-never-use-black/"&gt;Never use black&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/NjX41TufStk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/5125744073522506413/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=5125744073522506413" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/5125744073522506413?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/5125744073522506413?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/NjX41TufStk/improve-your-web-app-design.html" title="Improve your web app design" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-LdCrROkFjlg/UL_2f06858I/AAAAAAAAEes/Oc2U2EWZLQA/s72-c/icons.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://avernet.blogspot.com/2012/12/improve-your-web-app-design.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMMRXc_fip7ImA9WhNXEUk.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-5596323598583317872</id><published>2012-11-28T12:23:00.000-08:00</published><updated>2012-11-28T14:08:04.946-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-28T14:08:04.946-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title>Importing the scott schema in Oracle on Amazon RDS</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-4lf4C8iQxpE/ULaLDaARV7I/AAAAAAAAEc8/2lQ6rHLoFwg/s1600/clouds.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-4lf4C8iQxpE/ULaLDaARV7I/AAAAAAAAEc8/2lQ6rHLoFwg/s200/clouds.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
Oracle Amazon RDS &lt;a href="https://forums.aws.amazon.com/thread.jspa?messageID=333466&amp;amp;#333466"&gt;doesn't allow&lt;/a&gt; you to connect as &lt;code&gt;sysdba&lt;/code&gt;, and you don't have access to the local file system, so you can't run the &lt;code&gt;rdbms/admin/scott.sql&lt;/code&gt; script, as you &lt;a href="https://forums.oracle.com/forums/thread.jspa?messageID=10653227"&gt;would otherwise do&lt;/a&gt;. Instead:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Download the &lt;a href="https://code.google.com/p/adf-samples-demos/downloads/detail?name=demoscripts.zip&amp;amp;can=2&amp;amp;q="&gt;demo scripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;As master user:&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;Change password of the &lt;code&gt;scott&lt;/code&gt; user&lt;sup&gt;1&lt;/sup&gt;: &lt;code&gt;alter user scott identified by password ;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Grant some rights to &lt;code&gt;scott&lt;/code&gt;:&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;grant connect to scott;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;grant create table to scott;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;grant execute any type to scott;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;grant unlimited tablespace to scott;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;grant create any trigger to scott;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;li&gt;Connect as &lt;code&gt;scott/password&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Run SQL in &lt;code&gt;scott.sql&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: x-small;"&gt;&lt;sup&gt;1&lt;/sup&gt; The &lt;code&gt;scott&lt;/code&gt; user exists by default in Oracle RDS instances, but I am not sure what the password is out of the box. (It isn't &lt;code&gt;tiger&lt;/code&gt;.)&lt;/span&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/pvSqfk3LPzI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/5596323598583317872/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=5596323598583317872" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/5596323598583317872?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/5596323598583317872?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/pvSqfk3LPzI/importing-scott-schema-in-oracle-on.html" title="Importing the scott schema in Oracle on Amazon RDS" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-4lf4C8iQxpE/ULaLDaARV7I/AAAAAAAAEc8/2lQ6rHLoFwg/s72-c/clouds.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://avernet.blogspot.com/2012/11/importing-scott-schema-in-oracle-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEHQnozfCp7ImA9WhNQEE0.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-7194555008370702630</id><published>2012-11-09T16:44:00.003-08:00</published><updated>2012-11-15T11:43:53.484-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-15T11:43:53.484-08:00</app:edited><title>Glassfish 3.1</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-lkoJK3oJBME/UJ2ge4w_ejI/AAAAAAAAEbU/yzFShOHgSz8/s1600/glassfish.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="161" src="http://1.bp.blogspot.com/-lkoJK3oJBME/UJ2ge4w_ejI/AAAAAAAAEbU/yzFShOHgSz8/s320/glassfish.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Starting the server&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;cd glassfish&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;./bin/asadmin start-domain --verbose&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Changing JVM options&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Edit&amp;nbsp;&lt;code&gt;domains/domain1/config/domain.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;For instance, add&amp;nbsp;&lt;code&gt;&amp;lt;jvm-options&amp;gt;-verbose:class&amp;lt;/jvm-options&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;(Just adding an command line parameters to the &lt;code&gt;java&lt;/code&gt; started in&amp;nbsp;&lt;code&gt;bin/startserv&lt;/code&gt; doesn't to the trick; I suspect this is just a loader, which then starts the real VM that will host the server)&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Glassfish key store password&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;By default, Glassfish sets the&amp;nbsp;&lt;code&gt;javax.net.ssl.keyStore&lt;/code&gt; property (in &lt;code&gt;domain.xml&lt;/code&gt;) to point to its own key store, in&amp;nbsp;&lt;code&gt;config/keystore.jks&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;That key store has a password set on it, which is the same as the &lt;a href="https://wikis.oracle.com/display/GlassFish/3.1+Master+Password"&gt;Glassfish master password&lt;/a&gt;, by default &lt;code&gt;changeit&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;However, the default &lt;code&gt;domain.xml&lt;/code&gt; doesn't set the&amp;nbsp;&lt;code&gt;javax.net.ssl.keyStorePassword&lt;/code&gt; property&lt;/li&gt;
&lt;li&gt;As a result, when establishing an SSL connection, Java fails to key store, &lt;a href="http://stackoverflow.com/q/13046698/5295"&gt;resulting&lt;/a&gt; in a&amp;nbsp;&lt;code&gt;java.security.UnrecoverableKeyException&lt;/code&gt; with the message&amp;nbsp;&lt;i&gt;Password must not be null&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;One way to solve this is to add a&amp;nbsp;&lt;code&gt;&amp;lt;jvm-options&amp;gt;-Djavax.net.ssl.keyStorePassword=changeit&amp;lt;/jvm-options&amp;gt;&lt;/code&gt; in &lt;code&gt;domain.xml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/Mmo7babMzXM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/7194555008370702630/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=7194555008370702630" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/7194555008370702630?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/7194555008370702630?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/Mmo7babMzXM/glassfish-31.html" title="Glassfish 3.1" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-lkoJK3oJBME/UJ2ge4w_ejI/AAAAAAAAEbU/yzFShOHgSz8/s72-c/glassfish.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://avernet.blogspot.com/2012/11/glassfish-31.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQAQnY-fSp7ImA9WhNQE0o.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-2487165666744571218</id><published>2012-11-08T22:20:00.000-08:00</published><updated>2012-11-19T18:25:43.855-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-19T18:25:43.855-08:00</app:edited><title>Propos sur le bonheur, Alain (1928)</title><content type="html">&lt;div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-vSs-duE33D8/UJ72D_xrsQI/AAAAAAAAEbk/CYcBVv-XJ9w/s1600/dancer-the-dog-the-dog-on-the-ball-study-for-the-grande-parade-1952.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="313" src="http://1.bp.blogspot.com/-vSs-duE33D8/UJ72D_xrsQI/AAAAAAAAEbk/CYcBVv-XJ9w/s400/dancer-the-dog-the-dog-on-the-ball-study-for-the-grande-parade-1952.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
A few selected quotes:&lt;/div&gt;
&lt;ul class="ul1"&gt;
&lt;li class="li1"&gt;Je voudrais dire de la mauvaise humeur, qu’elle n’est pas moins cause qu’effet.&lt;/li&gt;
&lt;li class="li1"&gt;La colère est à proprement parler une sorte de maladie, tout à fait comme est la toux.&lt;/li&gt;
&lt;li class="li1"&gt;Le chapelet est une invention admirable qui occupe la pensée et le doigts ensemble à compter.&lt;/li&gt;
&lt;li class="li1"&gt;Réagir contre l’humeur, ce n’est point l’affaire du jugement; il n’y peut rien; mais il faut changer l’attitude et se donner le mouvement convenable; car nos muscles moteurs sont la seule partie de nous même sur laquelle nous ayons prise.&lt;/li&gt;
&lt;li class="li1"&gt;Tout religion renferme une prodigieuse sagesse pratique.&lt;/li&gt;
&lt;li class="li1"&gt;[…] il faudrait toujours se dire: «ce n’est pas parce que j’ai réussi que je suis content, mais parce que je suis content que j’ai réussi»&lt;/li&gt;
&lt;li class="li1"&gt;Il y a deux espèces d’hommes, ceux qui s’habituent au bruit, et ceux qui essaient de faire taire les autres.&lt;/li&gt;
&lt;li class="li1"&gt;L’art de vivre consiste d’abord, il me semble, à ne point quereller soi-même sur la parti qu’on a pris ni sur le métier qu’on fait. Non pas, mais le faire bien.&lt;/li&gt;
&lt;li class="li1"&gt;La pensée est une espèce de jeu qui n’est pas toujours très sain. Communément, on tourne sans avancer. [...] Percevoir et agir, voilà les vrais remèdes.&lt;/li&gt;
&lt;li class="li2"&gt;La vrai richesse des spectacles est dans le détail. Voir, c'est parcourir les détails, s'arrêter un peu à chacun, et, de nouveau saisir l'ensemble d'un coup d'œil.&lt;/li&gt;
&lt;li class="li2"&gt;[...] l'intelligence à des pointes aussi pour nous piquer.&lt;/li&gt;
&lt;li class="li2"&gt;Ce qui nous&amp;nbsp;blesse&amp;nbsp; dans des pensées inextricables, ce ne sont pas les pensées inextricables, c'est plutôt une espèce lutte et résistance contre cela même, ou, si vous voulez, un désir que les choses ne soient pas comme elles sont.&amp;nbsp;&lt;/li&gt;
&lt;li class="li2"&gt;La tristesse n'est jamais ni noble, ni belle, ni utile.&lt;/li&gt;
&lt;li class="li2"&gt;Un auteur ancien à dit que tout événement à deux anses, et qu'il n'est pas sage de choisir pour le porter celle qui blesse la main.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
On doing:&lt;/div&gt;
&lt;div&gt;
&lt;ul class="ul1"&gt;
&lt;li class="li2"&gt;On veut agir, on ne veut pas subir. Aussitôt que je me donne librement de la peine, me voilà content.&lt;/li&gt;
&lt;li class="li2"&gt;L'enfant se moque de nos jardins, il se fait un beau jardin, avec des tas de sable, et des brins de paille.&lt;/li&gt;
&lt;li class="li2"&gt;Tous les métiers plaisent autant que l'on gouverne, et déplaisent autant que l'on y obéit.&lt;/li&gt;
&lt;li class="li2"&gt;Ne demandez pas à celui qui ne sait point jouer s'il aime le jeu. La politique n'ennuie point dès que l'on sait le jeu; mais il faut apprendre; il faut apprendre à être heureux.&lt;/li&gt;
&lt;li class="li3"&gt;Le travail est la meilleure et la pire des choses; la meilleure, s'il est libre,&amp;nbsp;lapide, s'il est serf.&lt;/li&gt;
&lt;li class="li3"&gt;Celui qui met toute son attention sur un acte difficile, celui-là est parfaitement heureux.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;Dans la grande prairie&lt;/i&gt;&amp;nbsp;must be read in full. Alin recounts part of Palto’s&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Myth_of_Er"&gt;&lt;span class="s1"&gt;myth of Er&lt;/span&gt;&lt;/a&gt;, where after death people arrive in a large meadow, where they can choose what they want (and will get) in their next life, and so often pick exactly the oposite of what they need. Alain doesn't believe in an afterlife, and sees us making those bad choices every day.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;a href="http://classiques.uqac.ca/classiques/Alain/propos_sur_le_bonheur/alain_propos_bonheur.pdf"&gt;Propos sur le bonheur&lt;/a&gt; (PDF)&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/6-FC1O8ZvHQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/2487165666744571218/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=2487165666744571218" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/2487165666744571218?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/2487165666744571218?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/6-FC1O8ZvHQ/propos-sur-le-bonheur-alain-1928.html" title="Propos sur le bonheur, Alain (1928)" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-vSs-duE33D8/UJ72D_xrsQI/AAAAAAAAEbk/CYcBVv-XJ9w/s72-c/dancer-the-dog-the-dog-on-the-ball-study-for-the-grande-parade-1952.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://avernet.blogspot.com/2012/11/propos-sur-le-bonheur-alain-1928.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUNRHc7fip7ImA9WhNRF0k.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-4644323269576405134</id><published>2012-11-07T19:13:00.001-08:00</published><updated>2012-11-12T10:18:15.906-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-12T10:18:15.906-08:00</app:edited><title>iPhone 5 vs. Nexus 4: The Specs</title><content type="html">&lt;style&gt;
.post table { border-collapse: collapse }
.post td, th { padding: 5px; border: 1px solid #ccc }
.post .benefit { background-color: Honeydew }
.post .drawback { background-color: OldLace }
&lt;/style&gt;&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;th&gt;&lt;/th&gt; &lt;th align="center"&gt;iPhone5&lt;/th&gt; &lt;th align="center"&gt;Nexus 4&lt;/th&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Price for 16 GB&lt;/td&gt; &lt;td align="center" class="drawback"&gt;$700&lt;/td&gt; &lt;td align="center" class="benefit"&gt;$350&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;RAM&lt;/td&gt; &lt;td align="center" class="drawback"&gt;1 GB&lt;/td&gt; &lt;td align="center" class="benefit"&gt;2 GB&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;CPU&lt;/td&gt; &lt;td align="center" class="drawback"&gt;1.3 GHz dual core&lt;/td&gt; &lt;td align="center" class="benefit"&gt;1.5GHz quad-core&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Display size&lt;/td&gt; &lt;td align="center"&gt;4in&lt;/td&gt; &lt;td align="center"&gt;4.7in&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Display resolution&lt;/td&gt; &lt;td align="center" class="drawback"&gt;1136x640&lt;/td&gt; &lt;td align="center" class="benefit"&gt;1280x768&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Display PPI&lt;/td&gt; &lt;td align="center" class="benefit"&gt;326&lt;/td&gt; &lt;td align="center" class="drawback"&gt;320&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Front camera&lt;/td&gt; &lt;td align="center" class="drawback"&gt;1.2 MP&lt;/td&gt; &lt;td align="center" class="benefit"&gt;1.3 MP&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Back camera&lt;/td&gt; &lt;td align="center"&gt;8 MP&lt;/td&gt; &lt;td align="center"&gt;8 MP&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Data&lt;/td&gt; &lt;td align="center" class="benefit"&gt;LTE&lt;/td&gt; &lt;td align="center" class="drawback"&gt;HSPA+&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Battery&lt;/td&gt; &lt;td align="center" class="drawback"&gt;1400 mAh&lt;/td&gt; &lt;td align="center" class="benefit"&gt;2100 mAh&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Weight&lt;/td&gt; &lt;td align="center" class="benefit"&gt;112 g&lt;/td&gt; &lt;td align="center" class="drawback"&gt;139 g&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/1zb0MEtr9eo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/4644323269576405134/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=4644323269576405134" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/4644323269576405134?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/4644323269576405134?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/1zb0MEtr9eo/iphone-5-vs-nexus-4-specs.html" title="iPhone 5 vs. Nexus 4: The Specs" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://avernet.blogspot.com/2012/11/iphone-5-vs-nexus-4-specs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QAR388fip7ImA9WhNREkk.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-2438330067119918898</id><published>2012-11-06T10:07:00.001-08:00</published><updated>2012-11-06T15:42:26.176-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-06T15:42:26.176-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mypedia" /><title>MySQL</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="145" src="http://3.bp.blogspot.com/-b2JvlESB2c4/UJlSWuRk_OI/AAAAAAAAEao/goO5fxuSFJQ/s200/mysql-logo.jpg" width="200" /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Administration&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Startup on OS X: &lt;span style="font-family: Courier New, Courier, monospace;"&gt;sudo /Library/StartupItems/MySQLCOM/MySQLCOM start&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Shutdown: &lt;span style="font-family: Courier New, Courier, monospace;"&gt;sudo mysqladmin shutdown&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Listing the content of the database in XML: &lt;span style="font-family: Courier New, Courier, monospace;"&gt;mysqldump -X --user=orbeon --password=orbeon orbeon orbeon_form_data | less&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Connecting to the database from the command line as user &lt;i&gt;orbeon&lt;/i&gt;: &lt;span style="font-family: Courier New, Courier, monospace;"&gt;mysql --user=orbeon --password=orbeon orbeon&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;DDL and testing&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html"&gt;Text column lengths&lt;/a&gt; (&lt;span style="font-family: Courier New, Courier, monospace;"&gt;text&lt;/span&gt;, &lt;span style="font-family: Courier New, Courier, monospace;"&gt;mediumtext&lt;/span&gt;, &lt;span style="font-family: Courier New, Courier, monospace;"&gt;longtext&lt;/span&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://dev.mysql.com/doc/employee/en/employee.html"&gt;Employees test database&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Removed from the beginning of employees.sql the lines that create the employees database&lt;/li&gt;
&lt;li&gt;Import with &lt;span style="font-family: Courier New, Courier, monospace;"&gt;mysql --user=orbeon --password=orbeon orbeon &amp;lt; employees.sql&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;XML functions&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.6/en/xml-functions.html#function_extractvalue"&gt;ExtractValue&lt;/a&gt;(xml, '/path/to/value')&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.6/en/xml-functions.html#function_updatexml"&gt;UpdateXML&lt;/a&gt;(xml, '/path/to/node', '&amp;lt;new-node/&amp;gt;')&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Replaces &lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;lt;node&amp;gt;&lt;/span&gt; by &lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;lt;new-node&amp;gt;&lt;/span&gt; (not the content of &lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;lt;node&amp;gt;&lt;/span&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_load-file"&gt;load_file&lt;/a&gt;('/path/to/file')&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Need to grant file permission&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;mysql --user=root mysql&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;grant file on *.* to 'orbeon'@'localhost';&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;File needs to be in a place where MySQL can read&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;sudo -u _mysql cat /tmp/BidForm.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Issues&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;"To deep XML"&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://bugs.mysql.com/bug.php?id=26870"&gt;Bug&lt;/a&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Verified with 5.1.15&lt;/li&gt;
&lt;li&gt;On the bug thread, someone had this with 5.5.9&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/ROJ6lIIXAbQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/2438330067119918898/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=2438330067119918898" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/2438330067119918898?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/2438330067119918898?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/ROJ6lIIXAbQ/mysql.html" title="MySQL" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-b2JvlESB2c4/UJlSWuRk_OI/AAAAAAAAEao/goO5fxuSFJQ/s72-c/mysql-logo.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://avernet.blogspot.com/2012/11/mysql.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MAQHg_eip7ImA9WhRTGUg.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-8437808745195944542</id><published>2011-11-10T10:47:00.001-08:00</published><updated>2011-11-10T10:57:21.642-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-10T10:57:21.642-08:00</app:edited><title>The Ideal Programming Language</title><content type="html">&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-FjL4roWOAW8/TrweII3P2tI/AAAAAAAADcw/lLrqeh8g63A/s1600/Escher_Waterfall.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-FjL4roWOAW8/TrweII3P2tI/AAAAAAAADcw/lLrqeh8g63A/s320/Escher_Waterfall.jpg" width="250" /&gt;&lt;/a&gt;&lt;/div&gt;
My requirements for the &lt;i&gt;ideal programming language&lt;/i&gt;,&amp;nbsp;roughly&amp;nbsp;sorted by order of importance:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Can be used &lt;b&gt;equally well&lt;/b&gt; for code that will run on the &lt;b&gt;server-side&lt;/b&gt; (most likely targeting the JVM) and on the &lt;b&gt;client-side&lt;/b&gt; (for now, this means compiling to JavaScript). This is key for people to be able to use the language. Nowadays, a language that also comes with its own environment is unlikely to be adopted. [Unlike Haskell; like Dart]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Strongly typed&lt;/b&gt;, with &lt;b&gt;type inference across compilation units&lt;/b&gt;, i.e. not to force type declarations on "public APIs" (even if having them, most of the time, might be a good idea). [Unlike Scala; like Haskell]&lt;/li&gt;
&lt;li&gt;Provide &lt;b&gt;rich constructs&lt;/b&gt;, like case classes, traits, partial functions, continuations… The world is complex, and our programs try to model it, and the right constructs make the programmer's job easier, and the code simpler. (See the &lt;a href="http://www.infoq.com/presentations/Simple-Made-Easy"&gt;simple vs. easy&lt;/a&gt; distinction made by Rich Hickey.) [Like Scala]&lt;/li&gt;
&lt;li&gt;Adhere to the &lt;b&gt;off-side rule&lt;/b&gt;. Because syntax matters. [Like Python, Haskell, CoffeeScript, F#; unlike Scala, Dart…]&lt;/li&gt;
&lt;li&gt;Provide a &lt;b&gt;rich data type library&lt;/b&gt;. [Like Scala; unlike JavaScript]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Compilation&lt;/b&gt; should be &lt;b&gt;fast&lt;/b&gt; enough that developers don't feel compiling/building as an additional, lengthy step that needs to happen before they can run code. I.e. when writing code running in the browser, programmers should be able to make a change in their editor, cmd-tab to the browser, reload the page, and see the change. [Unlike Scala]&lt;/li&gt;
&lt;li&gt;Don't force "object oriented" paradigms on programmers. E.g. the standard way to write a program shouldn't necessarily be to start defining a class. [Unlike Java, Scala]&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/sbbqbNc75LQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/8437808745195944542/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=8437808745195944542" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/8437808745195944542?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/8437808745195944542?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/sbbqbNc75LQ/ideal-programming-language.html" title="The Ideal Programming Language" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-FjL4roWOAW8/TrweII3P2tI/AAAAAAAADcw/lLrqeh8g63A/s72-c/Escher_Waterfall.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://avernet.blogspot.com/2011/11/ideal-programming-language.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIGQn08cSp7ImA9WhdQFk0.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-6166675706352095777</id><published>2011-08-17T12:11:00.000-07:00</published><updated>2011-08-17T12:15:23.379-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-17T12:15:23.379-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="free will" /><title>Is "free will" a fallacy? (Hint: the fallacy is in its definition)</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-GFa4kLQo_Wo/TkwQPB_3P6I/AAAAAAAADYg/yC2TaGhsjcQ/s1600/2971210465_6f81c903d6.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-GFa4kLQo_Wo/TkwQPB_3P6I/AAAAAAAADYg/yC2TaGhsjcQ/s320/2971210465_6f81c903d6.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
It is irrelevant how brilliant your demonstration is: if you start with an incorrect hypothesis, your conclusion has no value.&lt;br /&gt;
&lt;br /&gt;
Take Daniel Miessler article concluding &lt;a href="http://danielmiessler.com/blog/the-two-lever-argument-against-free-will"&gt;free will is an illusion&lt;/a&gt;, also &lt;a href="http://draft.blogger.com/goog_1765397162"&gt;mentioned&lt;/a&gt;&lt;a href="http://twitter.com/#%21/SamHarrisOrg/status/103130595357499393"&gt; by Sam Harris&lt;/a&gt;. His hypothesis is that "true (free) influence on the world"—whatever that "true (free)" designation means—requires the ability to &lt;i&gt;change the previous state of the world&lt;/i&gt; or to &lt;i&gt;change the laws that govern the universe&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
This is very much at odd with the common understanding of the word &lt;i&gt;influence&lt;/i&gt;. Say you fail to see a banana peel on the curb, slip on it, and fail. Wouldn't you say that the banana peel influenced your fall? You would, as without it, most likely, you wouldn't have fallen. And I assure you that the banana peel neither &lt;i&gt;changed the previous state of the world&lt;/i&gt; nor &lt;i&gt;changed the laws that govern the universe&lt;/i&gt;. &lt;br /&gt;
&lt;br /&gt;
Unfortunately, bending the meaning of words, or even worse, completely omitting definitions, too often plagues discussions on free will.&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/VxUZilEQs34" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/6166675706352095777/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=6166675706352095777" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/6166675706352095777?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/6166675706352095777?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/VxUZilEQs34/is-free-will-fallacy-hint-no-fallacy-is.html" title="Is &quot;free will&quot; a fallacy? (Hint: the fallacy is in its definition)" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-GFa4kLQo_Wo/TkwQPB_3P6I/AAAAAAAADYg/yC2TaGhsjcQ/s72-c/2971210465_6f81c903d6.jpg" height="72" width="72" /><thr:total>7</thr:total><feedburner:origLink>http://avernet.blogspot.com/2011/08/is-free-will-fallacy-hint-no-fallacy-is.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAHRHo-fyp7ImA9Wx9TF0s.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-7428206724417771602</id><published>2010-11-26T01:24:00.001-08:00</published><updated>2010-11-26T01:28:55.457-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-26T01:28:55.457-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><title>Autocomplete and JavaScript Change Event</title><content type="html">&lt;p&gt;&lt;strong&gt;Different Sorts of Autocomplete&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When it comes to autocomplete in browsers, you need to make distinction between autocomplete for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Username/password&lt;/strong&gt; — Once you have a username and password saved for a certain login form, the browser will pre-fill the username and password fields with the saved values.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;General form fields&lt;/strong&gt; — Most browsers, including &lt;a href="http://support.mozilla.com/en-US/kb/Form+autocomplete"&gt;Firefox&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ms533032%28VS.85%29.aspx"&gt;IE&lt;/a&gt;, and &lt;a href="http://www.google.com/support/chrome/bin/answer.py?answer=142893&amp;amp;hl=en-US"&gt;Chrome&lt;/a&gt;, provides a similar autocomplete interface for form fields: as you start typing in a field, the browser will provide a list of suggestions. If you select one, the value you select will be used to populate the field. (Chrome might, based on the choice you made, also populate other related fields.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="http://dl.dropbox.com/u/6900/resources/20101125-autocomplete.png" alt="Typical autocomplete UI" title=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The HTML Specification&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When it comes to DOM event, and in particular the &lt;code&gt;change&lt;/code&gt; event, there is a significant difference between those two cases: username/password fields are auto-filled immediately when the page is shown; for other fields, you explicitly select a value from a list and tab to another field. This is important in the context of the HTML specification. The HTML 4.01 specification &lt;a href="http://www.w3.org/TR/html401/interact/scripts.html#adef-onchange"&gt;says&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The &lt;code&gt;onchange&lt;/code&gt; event occurs when a control loses the input focus and its value has been modified since gaining focus.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My interpretation is that browsers should dispatch the &lt;code&gt;change&lt;/code&gt; event when users select a value from a list of suggestions, but not when browsers pre-fill the username and password fields, as in that case the username and password fields don't gain and loose the focus. &lt;a href="http://www.w3.org/TR/html5/common-input-element-attributes.html#event-input-change"&gt;HTML 5&lt;/a&gt; is more abstract (emphasis mine):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;When the &lt;code&gt;change&lt;/code&gt; event applies, if the element does not have an activation behavior defined but uses a user interface that involves an explicit commit action, then any time &lt;em&gt;the user commits a change&lt;/em&gt; to the element's value or list of selected files, the user agent must queue a task to fire a simple event that bubbles named change at the input element, then broadcast &lt;code&gt;formchange&lt;/code&gt; events at the input element's form owner.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;HTML 4.01 talks about dispatching the &lt;code&gt;change&lt;/code&gt; event when the form field looses the focus, which makes sense for text fields, but doesn't for file selection fields (&lt;code&gt;&amp;lt;input type="file"&amp;gt;&lt;/code&gt;): in that case it make more sense to dispatch the &lt;code&gt;change&lt;/code&gt; event when the file has been selected, rather than wait for users to change the focus to another field. This is most likely why HTML5 talks about "users commiting the change" rather than "the control loosing the focus".&lt;/p&gt;

&lt;p&gt;Even with this HTML5 definition of the &lt;code&gt;change&lt;/code&gt; event, for the case of the username/password fields pre-filled by browsers as the page is loaded, I find it hard to argue that users "committed a change" by just loading the page. So based on my interpretation of the HTML 4.01 and HTML 5 specifications, I would expect browsers to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dispatch the &lt;code&gt;change&lt;/code&gt; event when users select a suggested value and tab to another field.&lt;/li&gt;
&lt;li&gt;Not dispatch the &lt;code&gt;change&lt;/code&gt; event to fields they pre-filled without users tabbing through the fields, such as the username/password fields.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Real World&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Expectations are rarely in line with reality, especially when it comes to browser behavior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For username/password fields:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Firefox 4, IE 7, and IE 8 don't dispatch the &lt;code&gt;change&lt;/code&gt; event.&lt;/li&gt;
&lt;li&gt;Safari 5 and Chrome 9 do dispatch the &lt;code&gt;change&lt;/code&gt; event.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For other form fields:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;IE 7 and IE 8 don't dispatch the &lt;code&gt;change&lt;/code&gt; event.&lt;/li&gt;
&lt;li&gt;Firefox 4 does dispatch the change &lt;code&gt;change&lt;/code&gt; event when users select a value from a list of suggestions and tab out of the field.&lt;/li&gt;
&lt;li&gt;Chrome 9 does not dispatch the &lt;code&gt;change&lt;/code&gt; event.&lt;/li&gt;
&lt;li&gt;Safari 5 does dispatch the &lt;code&gt;change&lt;/code&gt; event.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can test this by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For username/password fields, load the &lt;a href="http://dl.dropbox.com/u/6900/resources/20101125-autocomplete-login.html"&gt;login test case&lt;/a&gt;. Enter a username/password, submit the form, tell the browser to remember the login, reload the form. On Firefox, Chrome, and Safari the password field comes pre-filled, but the change event is dispatched only by Chrome and Safari. On IE, the password will be pre-filled only after you enter the username, but even as you tab through the password field, no &lt;code&gt;change&lt;/code&gt; event is dispatched.&lt;/li&gt;
&lt;li&gt;For other form fields, use this &lt;a href="http://dl.dropbox.com/u/6900/resources/20101125-autocomplete-name.html"&gt;test case&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Workarounds&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The bottom line is that your JavaScript code can't rely on the &lt;code&gt;change&lt;/code&gt; event. If your code needs to know when the value of a field changes, you have two choices:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Have some JavaScript code that runs at a regular interval, checks the value of all the fields, and calls your change handler when it notices that a value has changed.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en/how_to_turn_off_form_autocompletion"&gt;Disable autocomplete&lt;/a&gt; by adding &lt;code&gt;autocomplete="off"&lt;/code&gt; on the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; element. This technique has been supported by browsers since IE 5 (March 1999) and Netscape 6.2 (October 2001), and now &lt;a href="http://www.w3.org/TR/html5/forms.html#attr-form-autocomplete"&gt;made its way&lt;/a&gt; into HTML5.&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/YszUkHRCSFQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/7428206724417771602/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=7428206724417771602" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/7428206724417771602?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/7428206724417771602?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/YszUkHRCSFQ/autocomplete-and-javascript-change.html" title="Autocomplete and JavaScript Change Event" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><thr:total>6</thr:total><feedburner:origLink>http://avernet.blogspot.com/2010/11/autocomplete-and-javascript-change.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYASHs-eyp7ImA9Wx9TEU0.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-4275317309923487274</id><published>2010-11-18T11:03:00.001-08:00</published><updated>2010-11-18T11:05:49.553-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-18T11:05:49.553-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>Making readonly form fields easier to identify</title><content type="html">&lt;p&gt;Readonly form controls, or "&lt;a href="http://www.w3.org/TR/html5/association-of-controls-and-forms.html#enabling-and-disabling-form-controls"&gt;disabled&lt;/a&gt;" in the HTML parlance, can be hard to distinguish from fields users can type into. Firefox and IE are doing an equally bad job, and making the distinction would be close to impossible if the field was empty to start with:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://dl.dropbox.com/u/6900/resources/20101118-readonly-default.png" alt="How default readonly input and text area are rendered by IE 7 and Firefox 4" title=""&gt;&lt;/p&gt;

&lt;p&gt;Adding a grey background to disabled fields is a good way to help users distinguish between readonly (disabled) and read-write (non-disabled) form controls:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://dl.dropbox.com/u/6900/resources/20101118-readonly-background.png" alt="How readonly input and text area are rendered by IE 7 and Firefox 4 using a background color" title=""&gt;&lt;/p&gt;

&lt;p&gt;IE 7 onwards supports CSS &lt;a href="http://www.w3.org/TR/CSS21/selector.html#attribute-selectors"&gt;attribute selectors&lt;/a&gt;, so if you don't need to support IE 6, the following CSS will do the trick:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;textarea[disabled], input[disabled] { background-color: #eee }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;However, if you need to support IE 6, you'll need to decorate your readonly form controls with a class. Some frameworks, such as some &lt;a href="http://www.orbeon.com/"&gt;XForms implementations&lt;/a&gt;, do this automatically for you. For instance, if all your readonly form controls are automatically inside an element with the class &lt;code&gt;xforms-readonly&lt;/code&gt;, you can write:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.xforms-readonly textarea, .xforms-readonly input { background-color: #eee }
&lt;/code&gt;&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/qaipIKqfn3w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/4275317309923487274/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=4275317309923487274" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/4275317309923487274?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/4275317309923487274?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/qaipIKqfn3w/making-readonly-form-fields-easier-to.html" title="Making readonly form fields easier to identify" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://avernet.blogspot.com/2010/11/making-readonly-form-fields-easier-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8CRnc_fyp7ImA9Wx5aGEs.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-9219006223359025774</id><published>2010-11-15T14:41:00.000-08:00</published><updated>2010-11-15T14:41:07.947-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-15T14:41:07.947-08:00</app:edited><title>Indemnification</title><content type="html">&lt;p&gt;&lt;em&gt;(First, two words of disclaimer: &lt;a href="http://en.wikipedia.org/wiki/IANAL"&gt;IANAL&lt;/a&gt;—TINLA. Seriously.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you are selling software, your customers might occasionally ask you if you provide indemnification. In a nutshell, your customers are looking to be protected in case your software infringes on a third-party intellectual property, such as a patent or copyrighted code, and as a consequence your customers gets sued by this third party. By agreeing to provide indemnification coverage to your customers, you are telling them that if this were to happen, you would:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Defend them in court, and pay for &lt;strong&gt;legal fees&lt;/strong&gt; — hiring the legal team or covering legal cost.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repair or replace&lt;/strong&gt; your product — changing your software as necessary, so it doesn't infringe anymore on any third-party intellectual property. Depending on how your indemnification clause is written, this may mean removing, instead of replacing, the infringing functionality.&lt;/li&gt;
&lt;li&gt;Pay for &lt;strong&gt;damages and settlement fees&lt;/strong&gt; — those being damages you occasioned to your customers and settlement fees your customers might have to pay to a third-party as a result of you infringing on that third-party intellectual property.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Indemnification clauses often include limitations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;In scope&lt;/strong&gt; —&amp;nbsp;Each one of the above points (especially number 2 and 3) may or may not be included; if it is included, coverage is often limited.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;In dollar amount&lt;/strong&gt; — A cap is often set to the value of the contract. For instance, for non volume licensing contracts, &lt;a href="http://www.microsoft.com/mscorp/execmail/2004/10-27platformvalue.mspx"&gt;Microsoft used to have a cap on damages and settlement fees&lt;/a&gt;. Microsoft later changed this policy to remove the cap for legal defense (point 1 above), but they are still &lt;a href="http://download.microsoft.com/download/9/D/0/9D0A6265-A509-416C-80AE-BB6C0A9D1B99/IP%20Indemnification%20Policy.docx"&gt;keeping a cap for damages and settlement fees&lt;/a&gt; (point 3 above). Similarly, &lt;a href="http://www.redhat.com/legal/open_source_assurance_agreement.html"&gt;Red Hat's indemnification caps&lt;/a&gt; their liability to the total fees paid by their client during the previous year.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;In time&lt;/strong&gt; — For instance, as mentioned earlier, Microsoft still has a cap a on how much they will pay for damages and settlement fees. That cap is set to the amount paid to them by their customer during the prior one or two years, depending on the cases. Similarly, and as mentioned earlier, Red Hat's total cumulative liability is capped to the total amount in payments made by their customer during the previous year.&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/wsoMfRazvAQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/9219006223359025774/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=9219006223359025774" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/9219006223359025774?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/9219006223359025774?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/wsoMfRazvAQ/indemnification.html" title="Indemnification" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://avernet.blogspot.com/2010/11/indemnification.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cARXw8fip7ImA9Wx5aFU0.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-5570981674836098616</id><published>2010-08-12T20:09:00.000-07:00</published><updated>2010-11-11T10:44:04.276-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-11T10:44:04.276-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>iOS Mail for multiple email accounts with Gmail</title><content type="html">&lt;h3&gt;The setup&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You use two email addresses: you@a.com and you@b.com.&lt;/li&gt;
&lt;li&gt;All incoming email to both addresses is forwarded to your Gmail account: you@gmail.com.&lt;/li&gt;
&lt;li&gt;You setup Gmail to be able to send messages as either you@a.com or you@b.com.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="http://dl.dropbox.com/u/6900/resources/20100908-ios-two-emails.png" alt="Two incoming SMTP, one IMAP" title=""&gt;&lt;/p&gt;

&lt;p&gt;With this setup, all your email arrives in a unique Gmail account, which can also access through IMAP. When creating a new message in the Gmail web app, you can choose which email should be used as the &lt;em&gt;from&lt;/em&gt; address (either you@a.com or you@b.com). When responding to a message, Gmail automatically preselects the address the message you are responding to was sent to, and allows you to override that choice. So far so good.&lt;/p&gt;

&lt;h3&gt;The problem&lt;/h3&gt;

&lt;p&gt;The only trouble with this setup is when using Gmail's mobile interface, in particular on the iPhone/iOS. The mobile interface behaves as the desktop interface, except it doesn't allow you to change the from address. When sending a new message, it is always sent from your default email (say you@a.com), which means you can't send a new message from you@b.com. Also, you can't override the email chosen by Gmail when responding to messages.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;iOS Mail only supports one email per account (unlike the OS X Mail.app) – If you want two email addresses, you'll need two incoming IMAP or POP servers. You can work around this by setting up a Dummy IMAP server as follows:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Account 1: you@a.com, Unique (real) IMAP, SMTP A.&lt;/li&gt;
&lt;li&gt;Account 2: you@b.com, Dummy IMAP, SMTP B.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When sending an email, you want a copy saved in your Sent folder on your (Unique) IMAP server. You can set this up for you@a.com. But what about you@b.com? Storing outgoing email on Dummy IMAP isn't what you want. You can use the BCC functionality of Mail, and have Mail BCC you@b.com every time you send an email with that address. Unfortunately, at least for those of us using Gmail to handle their email you@b.com, Gmail doesn't seem to be able to forward incoming mail from and to you@b.com, maybe because it doesn't consider it as incoming mail but as sent mail. So you can't forward those BCC to you@gmail.com, to have them end up in the Sent folder of your unique IMAP server.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;When using Mail, with the best possible setup, you can't get the emails sent from one of your emails to end up on your unique IMAP server. Unless controlling what email is used when sending message is paramount to you, and you are fine with, on a regular basis, using a desktop mail client to move the Sent messages from Dummy IMAP to Unique IMAP, you are better off using the Gmail mobile web app.&lt;/p&gt;

&lt;p&gt;Hopefully, one day, Google will add the ability for you to select the from email address in their mobile web app, as they already do in their desktop web app: we'll look back, and laugh at how complex it used to be, int the old days, to setup that old iOS Mail.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/WT1aWJRmuyY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/5570981674836098616/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=5570981674836098616" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/5570981674836098616?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/5570981674836098616?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/WT1aWJRmuyY/ios-mail-for-multiple-email-accounts.html" title="iOS Mail for multiple email accounts with Gmail" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://avernet.blogspot.com/2010/08/ios-mail-for-multiple-email-accounts.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QASXs_eCp7ImA9Wx9TFE0.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-6091394494488638546</id><published>2010-07-27T14:00:00.000-07:00</published><updated>2010-11-21T21:55:48.540-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-21T21:55:48.540-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tool" /><title>Spell It</title><content type="html">&lt;script type="text/javascript" charset="utf-8" src="http://yui.yahooapis.com/3.1.1/build/yui/yui-min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
    var ALPHABET = {
        "a": "Alpha",
        "b": "Bravo",
        "c": "Charlie",
        "d": "Delta",
        "e": "Echo",
        "f": "Fox",
        "g": "Golf",
        "h": "Hotel",
        "i": "India",
        "j": "Juliet",
        "k": "Kilo",
        "l": "Lima",
        "m": "Mike",
        "n": "November",
        "o": "Oscar",
        "p": "Papa",
        "q": "Quebec",
        "r": "Romeo",
        "s": "Sierra",
        "t": "Tango",
        "u": "Uniform",
        "v": "Victor",
        "w": "Whiskey",
        "x": "X-Ray",
        "y": "Yankee",
        "z": "Zulu"
    };
    YUI().use("node", "event", function(Y) {

        var inputControl = Y.one("#input");

        function updateSpelling() {
            var inputValue = inputControl.get("value");
            var outputValue = "";
            for (var charIndex = 0; charIndex &lt; inputValue.length; charIndex++) {
                var character = inputValue[charIndex].toLowerCase();
                if (character != " ") {
                    outputValue += character;
                    var word = ALPHABET[character];
                    if (! Y.Lang.isUndefined(word)) outputValue += " - " + word
                }
                outputValue += "&lt;br/&gt;";
            }
            var outputDiv = Y.one("#output");
            outputDiv.set("innerHTML", outputValue);
        }

        Y.on("keyup", updateSpelling, inputControl);
        updateSpelling();
        if (window.location.href == "http://avernet.blogspot.com/2010/07/spell-it.html") {
            inputControl.focus();
            inputControl.select();
        }
    });
&lt;/script&gt;
&lt;style type="text/css"&gt;
    #output { font-family: monospace; margin-top: 1em }
&lt;/style&gt;
&lt;div&gt;
    &lt;label for="input"&gt;Word to spell:&lt;/label&gt; &lt;input id="input" name="text" value="inconspicuous"&gt;
&lt;/div&gt;
&lt;div id="output"&gt;

&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/fRig2kVpmow" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/6091394494488638546/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=6091394494488638546" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/6091394494488638546?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/6091394494488638546?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/fRig2kVpmow/spell-it.html" title="Spell It" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://avernet.blogspot.com/2010/07/spell-it.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUNQ3cycCp7ImA9WxNbFkU.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-2974440959686108591</id><published>2009-11-19T17:23:00.000-08:00</published><updated>2009-11-19T17:58:12.998-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-19T17:58:12.998-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mac" /><title>Running VirtualBox in Headless Mode</title><content type="html">&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 150px; height: 150px;" src="http://2.bp.blogspot.com/_mtKW2NpD7Rk/SwXwT6D7VMI/AAAAAAAADI4/9cnUBaS3ndc/s400/virtualbox.png" alt="" id="BLOGGER_PHOTO_ID_5405991152522056898" border="0" /&gt;I first started using Parallels on Mac OS X, later switched to VMware, and now use VirtualBox, which I love. But I have to say that I don't particularly fancy its UI. I find it inconvenient that you need to first hit special key (by default &lt;i&gt;command&lt;/i&gt;) to escape the VirtualBox environment. Frankly, I'd rather use Remote Desktop to connect to VirtualBox. And now I do.&lt;br /&gt;&lt;br /&gt;The process is rather simple. I'll start assuming that you already have a working VM setup in VirtualBox:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You can have multiple VMs setup in VirtualBox. In my case, I have only one, named "Windows 7". To know the name of your VM, from the command line run:&lt;blockquote&gt;&lt;code&gt;VBoxManage list vms&lt;/code&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Once you know the name of your VM (which I'll assume to be "Windows 7"), start the VM with:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;VBoxHeadless -s "Windows 7" &amp;amp;&lt;/code&gt;&lt;/blockquote&gt;I like to start VirtualBox in the background, hence the &lt;code&gt;&amp;amp;&lt;/code&gt; at the end of the command line. This is because &lt;code&gt;VBoxHeadless&lt;/code&gt; doesn't output anything to the standard output after it has started, and you don't want to stop it by mistake by hitting ctrl-c, as you would loose the state of you VM. Instead you'll want to save the VM state (more on this below).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Start Remote Desktop. If you are on a Mac, Microsoft has a free &lt;a href="http://www.microsoft.com/mac/products/remote-desktop/default.mspx"&gt;Remote Desktop for OS X&lt;/a&gt;. Connect to the VM using Remote Desktop using the host name or IP of the machine running VirtualBox. For instance, if you are running VirtualBox and Remote Desktop on the same machine, that would be &lt;code&gt;localhost&lt;/code&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;To stop VirtualBox while saving the state of the VM, run: &lt;blockquote&gt;&lt;code&gt;VBoxManage controlvm "Windows 7" savestate&lt;/code&gt;&lt;/blockquote&gt; Next time you start VirtualBox (as in step 2 above), it will used that saved state.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/eQBpWotQG3s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/2974440959686108591/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=2974440959686108591" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/2974440959686108591?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/2974440959686108591?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/eQBpWotQG3s/running-virtualbox-in-headless-mode.html" title="Running VirtualBox in Headless Mode" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_mtKW2NpD7Rk/SwXwT6D7VMI/AAAAAAAADI4/9cnUBaS3ndc/s72-c/virtualbox.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://avernet.blogspot.com/2009/11/running-virtualbox-in-headless-mode.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8CRHY5eSp7ImA9WxNXFU4.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-5252280630313159058</id><published>2009-10-02T18:37:00.000-07:00</published><updated>2009-10-02T20:01:05.821-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-02T20:01:05.821-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="offline" /><category scheme="http://www.blogger.com/atom/ns#" term="safari" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><title>Offline Storage with Safari (Offline iPhone Webapps)</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/timmargh/54538216/"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 150px; height: 225px;" src="http://4.bp.blogspot.com/_mtKW2NpD7Rk/Ssa-CPFD5AI/AAAAAAAADIQ/ddkpbpsSKwc/s400/54538216_25689b9d5d.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5388202949812151298" /&gt;&lt;/a&gt;&lt;dl&gt;&lt;dt&gt;Resources can have 3 states&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;You can think of every resource as being assigned one of the following 3 states by Safari based on your manifest: missing, cached, online. Cached resources are stored in the Safari store; Safari can display cached resources when offline. Online resources will be retrieved from the server when offline (sometimes also called white listed). Finally missing means that the resource is not in the cache and that Safari won't try to get it from the cache when offline, so loading that resource will fail.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;How states are assigned&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;If the HTML links to a manifest, by default the HTML is cached and all the other resources are missing. So you need to include every resource used by your page in the manifest to either tell Safari that it can be cached (images, CSS...), or that it should need to establish a connection to a server (end-points for Ajax requests).&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Checking the state of resources&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;To see what state Safari assigned to your resources, open the Web Inspector, go to the Resources tab, and switch to the view by Time. Resources that are missing will show in gray. It is harder to see the difference between resources that are cached and online. Most likely you'll notice that online resources take a longer time, and of course you can check your server log to see if a resource is loaded as you reload the page. For missing resources, you can also open the Activity window (from the Window menu); Safari will show a message in red "The URL can't be shown" next to missing resources.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Checking if caching is happening&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;You can check if any caching at all is happening by looking at the value of &lt;code&gt;window.applicationCache.status&lt;/code&gt;. In general the value will be 0 (&lt;code&gt;UNCACHED&lt;/code&gt;) if the page isn't cached and 1 (&lt;code&gt;IDLE&lt;/code&gt;) if it is.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;The &lt;code&gt;text/cache-manifest&lt;/code&gt; content type&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;What they the spec says about the &lt;code&gt;text/cache-manifest&lt;/code&gt; content type isn't a joke ;). Make sure that your manifest is served with the appropriate content type, or it will be ignored.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Same site policy for the manifest&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;You need to serve the manifest from the same site from which the page is served. If you link to a manifest on another server, Safari will just ignore it. In the manifest itself, you can however list resources loaded from other sites that you would like to be cached, for instance libraries you load from the &lt;a href="http://code.google.com/apis/ajaxlibs/"&gt;Google CDN&lt;/a&gt;.&lt;br /&gt;&lt;/dl&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/5xPVUUfK8fo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/5252280630313159058/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=5252280630313159058" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/5252280630313159058?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/5252280630313159058?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/5xPVUUfK8fo/offline-storage-with-safari-offline.html" title="Offline Storage with Safari (Offline iPhone Webapps)" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_mtKW2NpD7Rk/Ssa-CPFD5AI/AAAAAAAADIQ/ddkpbpsSKwc/s72-c/54538216_25689b9d5d.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://avernet.blogspot.com/2009/10/offline-storage-with-safari-offline.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUCQX05cSp7ImA9WxNQGU8.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-9045249187312001027</id><published>2009-09-25T17:26:00.000-07:00</published><updated>2009-09-25T17:51:00.329-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-25T17:51:00.329-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ie6" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>IE6 Bug: Relative Box After Float Doesn't Show</title><content type="html">Consider the following code where you have a floated element (in this case a &lt;code&gt;label&lt;/code&gt;), followed by a &lt;code&gt;div&lt;/code&gt; with &lt;code&gt;position: relative&lt;/code&gt;, containing an input field with a &lt;code&gt;width: 100%&lt;/code&gt;.&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"&lt;br /&gt;        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;&lt;br /&gt;    &amp;lt;head&gt;&lt;br /&gt;        &amp;lt;style type="text/css"&gt;&lt;br /&gt;            .label { float: left; }&lt;br /&gt;            .div   { position: relative; }&lt;br /&gt;            .input { width: 100%; }&lt;br /&gt;        &amp;lt;/style&gt;&lt;br /&gt;    &amp;lt;/head&gt;&lt;br /&gt;    &amp;lt;body&gt;&lt;br /&gt;        &amp;lt;label class="label"&gt;Label&amp;lt;/label&gt;&lt;br /&gt;        &amp;lt;div class="div"&gt;&lt;br /&gt;            &amp;lt;input class="input" type="text"/&gt;&lt;br /&gt;        &amp;lt;/div&gt;&lt;br /&gt;    &amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/html&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;The issue is that on IE6, the input field doesn't show:&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 154px;" src="http://1.bp.blogspot.com/_mtKW2NpD7Rk/Sr1kUN6henI/AAAAAAAADHA/nu1ftZM_TXE/s400/fails-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5385571027900267122" /&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;This bug has been resolved in IE7, and you can easily work around it in IE6 by forcing the box to "have layout" (in IE, elements with &lt;code&gt;position: absolute&lt;/code&gt; have layout, but elements with &lt;code&gt;position: relative&lt;/code&gt; don't necessarily have layout). My favorite way for doing so it to add a &lt;code&gt;*zoom: 1&lt;/code&gt; on the box, which will give you the expected result:&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 164px;" src="http://1.bp.blogspot.com/_mtKW2NpD7Rk/Sr1jkv8nUrI/AAAAAAAADG4/SXCLt1ilpI8/s400/works.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5385570212402123442" /&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/M_jHNmCARr4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/9045249187312001027/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=9045249187312001027" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/9045249187312001027?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/9045249187312001027?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/M_jHNmCARr4/ie6-bug-relative-box-after-float-doesnt.html" title="IE6 Bug: Relative Box After Float Doesn't Show" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_mtKW2NpD7Rk/Sr1kUN6henI/AAAAAAAADHA/nu1ftZM_TXE/s72-c/fails-1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://avernet.blogspot.com/2009/09/ie6-bug-relative-box-after-float-doesnt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkECQ3wyfSp7ImA9WxNQGU8.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-501809966499066006</id><published>2009-09-24T16:25:00.000-07:00</published><updated>2009-09-25T17:24:22.295-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-25T17:24:22.295-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>CSS: Why Use Relative Positioning?</title><content type="html">The CSS &lt;code&gt;position&lt;/code&gt; can have 4 values: &lt;code&gt;static&lt;/code&gt; (the default), &lt;code&gt;relative&lt;/code&gt;, &lt;code&gt;absolute&lt;/code&gt;, or &lt;code&gt;fixed&lt;/code&gt;. &lt;a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#trident_position"&gt;IE6 doesn't support fixed positioning&lt;/a&gt;, so that leaves you with 3 values. Static positioning leaves elements in the normal flow, so you are left with 2 really interesting values:&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;relative&lt;/code&gt; – Leaves the element in the normal flow, but allows you to move it relative to that position using &lt;code&gt;top&lt;/code&gt; and &lt;code&gt;left&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;absolute&lt;/code&gt; – Takes the element out of the normal flow, and positions it relative to the top left corner of its closes positioned ancestor, i.e. the closest ancestor with a position set to &lt;code&gt;relative&lt;/code&gt; or &lt;code&gt;absolute&lt;/code&gt; (or &lt;code&gt;fixed&lt;/code&gt;).&lt;br /&gt;&lt;/ul&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;With this in mind, there are 2 main reasons to use a &lt;code&gt;relative&lt;/code&gt; positioning:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Obviously, you might want to move an element relative its positioning in the normal flow. So you would use &lt;code&gt;position: relative&lt;/code&gt; in conjunction with a &lt;code&gt;top&lt;/code&gt; and &lt;code&gt;left&lt;/code&gt; on an element. But in my experience, this is rarely needed.&lt;/li&gt;&lt;li&gt;More often, you want to position an inner box relative to an outer box. You do so by using &lt;code&gt;position: relative&lt;/code&gt; on the outer box and &lt;code&gt;position: absolute&lt;/code&gt; on the inner one, for instance to produce the result shown below, with the corresponding HTML immediately following:&lt;/ul&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 138px; height: 66px;" src="http://3.bp.blogspot.com/_mtKW2NpD7Rk/Sr1cxWpe6MI/AAAAAAAADGg/Ni1ag7MdF50/s400/outer-relative-1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5385562732367898818" /&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"&lt;br /&gt;        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;&lt;br /&gt;    &amp;lt;head&gt;&lt;br /&gt;        &amp;lt;style type="text/css"&gt;&lt;br /&gt;            .outer { position: relative;&lt;br /&gt;                     border: 2px solid #999; }&lt;br /&gt;            .inner { position: absolute; top: 1em; left: 1em; &lt;br /&gt;                     border: 2px solid #666;  }&lt;br /&gt;        &amp;lt;/style&gt;&lt;br /&gt;    &amp;lt;/head&gt;&lt;br /&gt;    &amp;lt;body&gt;&lt;br /&gt;        Outside outer&lt;br /&gt;        &amp;lt;div class="outer"&gt;&lt;br /&gt;            Outer&lt;br /&gt;            &amp;lt;div class="inner"&gt;Inner&amp;lt;/div&gt;&lt;br /&gt;        &amp;lt;/div&gt;&lt;br /&gt;    &amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/html&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;If you were to ignore the &lt;code&gt;position: relative&lt;/code&gt; on the outer element, you would get:&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 138px; height: 49px;" src="http://3.bp.blogspot.com/_mtKW2NpD7Rk/Sr1dIVRGk2I/AAAAAAAADGo/8mqxqNTEK3U/s400/outer-not-relative.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5385563127134196578" /&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/bbnmKSPHZH8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/501809966499066006/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=501809966499066006" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/501809966499066006?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/501809966499066006?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/bbnmKSPHZH8/css-why-use-relative-positioning.html" title="CSS: Why Use Relative Positioning?" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_mtKW2NpD7Rk/Sr1cxWpe6MI/AAAAAAAADGg/Ni1ag7MdF50/s72-c/outer-relative-1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://avernet.blogspot.com/2009/09/css-why-use-relative-positioning.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEACRXc9cSp7ImA9WxNRFUg.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-2012436102581671654</id><published>2009-09-09T20:15:00.000-07:00</published><updated>2009-09-09T20:19:24.969-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-09T20:19:24.969-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="web2.0" /><title>Pushing My Twits to Facebook Considered Harmful</title><content type="html">&lt;a href="http://www.flickr.com/photos/gesamtbild/3170926064/"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 150px; height: 152px;" src="http://4.bp.blogspot.com/_mtKW2NpD7Rk/SqhvhkS3TtI/AAAAAAAADGQ/D4eUqNKpEKY/s400/3170926064_e797553360_o.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5379672377363222226" /&gt;&lt;/a&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;Like many Twitter users, I always had a &lt;a href="apps.facebook.com/twitter/"&gt;Facebook application&lt;/a&gt; setup to pull &lt;a href="http://twitter.com/avernet"&gt;my twits&lt;/a&gt; and post them on Facebook as status updates. Thanks to this application, all my twits where making their way to Facebook, showing up in my friends' news feed. A couple of weeks ago, it became clear to me that there was a problem with pushing twits to my Facebook friends. So I stopped.&lt;br /&gt;&lt;br /&gt;Why? Simply, because the little pieces of information I publish on Twitter are interesting to me, but let's be realistic: what is interesting to me is just that; interesting to me; most likely it isn't interesting to most people in general, and to my Facebook friends in particular. There is nothing wrong with that, but there is something pretentious of me forcing this information on my Facebook friends. Yes, I know, you can opt-out and "hide" some of your friends on Facebook, so their updates don't pollute your news feed. But many don't know about this feature or are reluctant to take this measure. I would rather see people opt-in, as they do on Twitter by voluntarily "following" someone, than force people to opt-out.&lt;br /&gt;&lt;br /&gt;(Note that the title of this post is Pushing &lt;i&gt;My&lt;/i&gt; Twits to Facebook Considered Harmful. Even if you are pushing your twits to Facebook, what I say here may not apply to &lt;i&gt;you&lt;/i&gt;. But if this is something you are doing, you might want to ask yourself: "are my friends going to be interested in my twits?".)&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/2qzcSWMp2Dw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/2012436102581671654/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=2012436102581671654" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/2012436102581671654?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/2012436102581671654?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/2qzcSWMp2Dw/pushing-my-twits-to-facebook-considered.html" title="Pushing My Twits to Facebook Considered Harmful" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_mtKW2NpD7Rk/SqhvhkS3TtI/AAAAAAAADGQ/D4eUqNKpEKY/s72-c/3170926064_e797553360_o.png" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://avernet.blogspot.com/2009/09/pushing-my-twits-to-facebook-considered.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQBSXgyfSp7ImA9WxNXE0g.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-7121355335624478733</id><published>2009-08-25T14:59:00.000-07:00</published><updated>2009-09-30T16:45:58.695-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-30T16:45:58.695-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="unix" /><title>ack: powerful command line search</title><content type="html">&lt;a href="http://betterthangrep.com/"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 156px; height: 164px;" src="http://1.bp.blogspot.com/_mtKW2NpD7Rk/SpRf4LR-zNI/AAAAAAAADGI/2-wPRf7drGQ/s400/ack.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5374025674065366226" /&gt;&lt;/a&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;&lt;a href="http://betterthangrep.com/"&gt;ack&lt;/a&gt; is a fantastic tool to do recursive searches in text files, such as in your source code. It is &lt;b&gt;simple&lt;/b&gt; to use and amazingly &lt;b&gt;fast&lt;/b&gt;. See the ack home page for installation instructions. I am on OS X without Macport and installed ack with:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;sudo perl -MCPAN -e 'install App::Ack'&lt;/code&gt;&lt;/blockquote&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;&lt;dl&gt;&lt;dt&gt;&lt;a name="ignore"&gt;&lt;/a&gt;Ignoring certain files&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;Out of the box, ack will ignore "most of the crap you don't want to search" (quoting from their documentation!), but you might want to set it up to ignore more files. For instance, for every JavaScript file (&lt;code&gt;gaga.js&lt;/code&gt;) I have a minimized version of that file (&lt;code&gt;gaga-min.js&lt;/code&gt;) automatically generated for me. I am never interested in searching in those files. ack doesn't have an option for you to say which files you want to &lt;i&gt;ignore&lt;/i&gt;, but you can specify what files you want it to &lt;i&gt;include&lt;/i&gt;: &lt;code&gt;-G&lt;/code&gt;. This option takes a Perl regular expression. How to write a regular expression that matches any file except those ending with &lt;code&gt;-min.js&lt;/code&gt;? With a &lt;a href="http://www.regular-expressions.info/lookaround.html"&gt;negative look-behind regexp&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;(?&amp;lt;!-min\.js)$&lt;/code&gt;&lt;/blockquote&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;To have this used by default, add the following two lines to your &lt;code&gt;~/.ackrc&lt;/code&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;-G&lt;br /&gt;(?&amp;lt;!-min\.js)$ &lt;/code&gt;&lt;/blockquote&gt;&lt;/dd&gt;&lt;dt&gt;&lt;a name="type"&gt;&lt;/a&gt;Adding file types&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;ack only search in files that are of a "type" it knows about. In general, files are mapped to types by extension, but in some cases they can be mapped by their content. I ran into a case where ack would find what I look for in certain &lt;code&gt;.xpl&lt;/code&gt; files&lt;sup&gt;1&lt;/sup&gt;, but not others. The reason was that ack didn't know about the &lt;code&gt;.xpl&lt;/code&gt; extension, so it would ignore those files, except those that started with an XML declaration. For those files, even if it didn't recognize the extension, it would recognize the content and know it is dealing with an XML file.&lt;br /&gt;&lt;br /&gt;If you run into a similar situation and suspect this is your problem, run the following command which will list the files ack will search in, starting from the current directory:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;ack -f .&lt;/code&gt;&lt;/blockquote&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;After you find which file are ignored, add those to your &lt;code&gt;.ackrc&lt;/code&gt; so ack recognizes those files. For instance, the following parameters added to your &lt;code&gt;.ackrc&lt;/code&gt; will get ack to recognize &lt;code&gt;.xpl&lt;/code&gt; and &lt;code&gt;.xsl&lt;/code&gt; files as XML files:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;--type-add&lt;br /&gt;xml=.xpl,.xsl&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;&lt;sup&gt;1&lt;/sup&gt; &lt;code&gt;.xpl&lt;/code&gt; are the &lt;a href="http://www.orbeon.com/ops/doc/reference-xpl-pipelines"&gt;pipeline files&lt;/a&gt; we use in Orbeon Forms.&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/HxlSRX9vzwg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/7121355335624478733/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=7121355335624478733" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/7121355335624478733?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/7121355335624478733?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/HxlSRX9vzwg/ack-powerful-command-line-search.html" title="ack: powerful command line search" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_mtKW2NpD7Rk/SpRf4LR-zNI/AAAAAAAADGI/2-wPRf7drGQ/s72-c/ack.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://avernet.blogspot.com/2009/08/ack-powerful-command-line-search.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4ARns6eip7ImA9WxFRGU8.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-6136894727848559052</id><published>2009-08-24T12:25:00.000-07:00</published><updated>2010-05-03T16:05:47.512-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-03T16:05:47.512-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="unix" /><title>Git Tips</title><content type="html">&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 150px; height: 150px;" src="http://1.bp.blogspot.com/_mtKW2NpD7Rk/So2sbWHgglI/AAAAAAAADGA/AvyG6j_tkHM/s400/got-git.jpg" alt="" id="BLOGGER_PHOTO_ID_5372139516316385874" border="0" /&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;Last updated: March 15, 2010&lt;br /&gt;&lt;br /&gt;A flurry of excellent documentation and great blog posts has been published about Git. But who doesn't need some additional tips on how to better use your source code management tool of choice? So here are a few that I found useful:&lt;br /&gt;&lt;br /&gt;&lt;dl&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;&lt;dt&gt;Table of contents&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;a href="#ignoring-files"&gt;Ignoring files&lt;/a&gt;&lt;br /&gt;&lt;a href="#push-warning"&gt;Getting rid of the warnings when pushing&lt;/a&gt;&lt;br /&gt;&lt;a href="#blame"&gt;Finding when and why that code was changed&lt;/a&gt;&lt;br /&gt;&lt;a href="#color"&gt;Mac OS X: colors for your terminal&lt;/a&gt;&lt;br /&gt;&lt;a href="#pull-requests"&gt;Handling pull requests&lt;/a&gt;&lt;br /&gt;&lt;a href="#rebase"&gt;Avoid "Merge Branch..." in the commit history&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/dd&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;--&gt;&lt;dt&gt;&lt;a name="ignoring-files"&gt;&lt;/a&gt;Ignoring files&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;I always have a number of files in my projects that I have no intention of checking in, such as a TextMate project file (&lt;code&gt;orbeon-forms.tmproj&lt;/code&gt;) or scratch files I use for testing (&lt;code&gt;gaga.xhtml&lt;/code&gt;). Those files pollute the output of your &lt;code&gt;git status&lt;/code&gt;. Sure, you are smart enough to ignore them, but why not let Git do the ignoring for you? Do so by listing the files you want Git to ignore for this current repository in &lt;code&gt;.git/info/exclude&lt;/code&gt;.&lt;/dd&gt;&lt;br /&gt;&lt;!--&lt;br /&gt;--&gt;&lt;dt&gt;&lt;a name="push-warning"&gt;&lt;/a&gt;Getting rid of the warnings when pushing&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;When running a &lt;code&gt;git push&lt;/code&gt; without specifying what branch to push, you'll get the warning message &lt;i&gt;You did not specify any refspecs to push&lt;/i&gt;. By default git pushes all the local branches for which there is a remote branch with the same name. It does so, but still tells you that this may not be what you want. To have git push only the current branch (and also  get rid of the error message every time you do a push), run:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;git config --global push.default tracking&lt;/code&gt;&lt;/blockquote&gt;You could use &lt;code&gt;current&lt;/code&gt; instead of &lt;code&gt;tracking&lt;/code&gt;, but it won't have the desired effect when the name of your local branch doesn't match the name of the remote branch you want to push to. Really, this should &lt;a href="http://twitter.com/ebruchez/status/11486535760"&gt;be the default&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/dd&gt;&lt;br /&gt;&lt;!--&lt;br /&gt;--&gt;&lt;dt&gt;&lt;a name="blame"&gt;&lt;/a&gt;Finding when and why that code was changed&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;Run the following command and locate the piece of code you are interested in:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;git blame your-file.ext&lt;/code&gt;&lt;/blockquote&gt;Copy the revision number (&lt;i&gt;rev&lt;/i&gt;) showing at the beginning of the line and run:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;git log -1 -p &lt;i&gt;rev&lt;/i&gt;&lt;/code&gt;&lt;/blockquote&gt;The &lt;code&gt;-1&lt;/code&gt; tells Git you're only interested in that particular commit, and none of the previous commits. The &lt;code&gt;-p&lt;/code&gt; as in &lt;i&gt;patch&lt;/i&gt; gives you the changes to the code done in that commit.&lt;/dd&gt;&lt;br /&gt;&lt;!--&lt;br /&gt;--&gt;&lt;dt&gt;&lt;a name="color"&gt;&lt;/a&gt;Mac OS X: colors for your terminal&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;First, for you terminal to support colors, add the following two lines to your &lt;code&gt;.bash_profile&lt;/code&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;export CLICOLOR=1&lt;br /&gt;export LSCOLORS=ExFxCxDxBxegedabagacad&lt;/code&gt;&lt;/blockquote&gt;Then enable colors in diff and status with:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;git config --global color.diff true&lt;br /&gt;git config --global color.status true&lt;/code&gt;&lt;/blockquote&gt;&lt;/dd&gt;&lt;br /&gt;&lt;!--&lt;br /&gt;--&gt;&lt;a name="pull-requests"&gt;&lt;/a&gt;&lt;dt&gt;Handling pull requests&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;(This is based on the &lt;a href="http://github.com/guides/pull-requests"&gt;GitHub documentation and example&lt;/a&gt;.) Start by adding the remote repository. The first &lt;code&gt;defunkt&lt;/code&gt; is the local name you give to the repository at the URL that directly follows. The &lt;code&gt;-f&lt;/code&gt; is to immediately fetch that repository (fetching retrieves the data from the remote repository to your local repository):&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;git remote add -f defunkt git://github.com/defunkt/grit.git&lt;/code&gt;&lt;/blockquote&gt;Checkout the code from your local repository to your working directory and at the same time create a branch named &lt;code&gt;defunkt&lt;/code&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;git checkout -b defunkt&lt;/code&gt;&lt;/blockquote&gt;Now that your working directory is in the branch &lt;code&gt;defunkt&lt;/code&gt;, pull the latest code from the &lt;code&gt;master&lt;/code&gt; branch of the repository &lt;code&gt;defunkt&lt;/code&gt; to the working directory (if you just did the &lt;code&gt;git remote add -f&lt;/code&gt;, most likely there will be nothing new to pull):&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;git pull defunkt master&lt;/code&gt;&lt;/blockquote&gt;To avoid having to specify &lt;code&gt;defunkt master&lt;/code&gt; on the command line every time you do a &lt;code&gt;pull&lt;/code&gt; (of course you want to pull from the same repository and branch you originally got the data from!), run the two following commands. The first one defines &lt;code&gt;defunkt&lt;/code&gt; as the default repository for the your branch &lt;code&gt;defunkt&lt;/code&gt;. The second one defines the remote &lt;code&gt;master&lt;/code&gt; branch as the one you want to merge with the current branch. (It is a config for &lt;code&gt;merge&lt;/code&gt; because &lt;code&gt;pull&lt;/code&gt; runs a &lt;code&gt;fetch&lt;/code&gt; and a &lt;code&gt;merge&lt;/code&gt;.)&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;git config branch.defunkt.remote defunkt&lt;br /&gt;git config branch.defunkt.merge refs/heads/master&lt;/code&gt;&lt;/blockquote&gt;Switch to your &lt;code&gt;master&lt;/code&gt; branch:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;git checkout master&lt;/code&gt;&lt;/blockquote&gt;Merge the branch &lt;code&gt;defunkt&lt;/code&gt; into your current branch (&lt;code&gt;master&lt;/code&gt;). The merged commits from &lt;code&gt;defunkt&lt;/code&gt; will go to your local repository.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;git merge defunkt&lt;/code&gt;&lt;/blockquote&gt;Before you push the changes, you'll want to review and test them. You can see what you would send to the remote repository if you were to do a push now with:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;git diff origin/master..master&lt;/code&gt;&lt;/blockquote&gt;If you make changes to the files in your working directory (say, to amend the changes made by the developer who sent you the pull request), you can see a diff between your working directory and the remote repository (which will include the changes your pulled plus your changes) with:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;git diff origin/master&lt;/code&gt;&lt;/blockquote&gt;To only view a summary of what was changed (the &lt;i&gt;diffstat&lt;/i&gt; showing files names and how much was removed/added), add the &lt;code&gt;--stat&lt;/code&gt; parameter:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;git diff --stat origin/master&lt;/code&gt;&lt;/blockquote&gt;&lt;/dd&gt;&lt;br /&gt;&lt;!--&lt;br /&gt;--&gt;&lt;dt&gt;&lt;a name="rebase"&gt;&lt;/a&gt;Avoid &lt;i&gt;Merge Branch...&lt;/i&gt; in the commit history&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;You do this by rewriting your local commits to be applied to the new state of your local branch as it will be after the changes you pulled from a remote source have been applied. You can do this in a single command:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;git pull --rebase&lt;/code&gt;&lt;/blockquote&gt;You always want the rebase to be done when pulling changes, and would like to avoid having to put that &lt;code&gt;--rebase&lt;/code&gt; every time you do a pull? No problem, run the following just once (assuming you want to enable this for the &lt;code&gt;master&lt;/code&gt; branch):&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;git config branch.master.rebase true&lt;/code&gt;&lt;/blockquote&gt;Also see &lt;a href="http://adamblog.heroku.com/past/2008/6/30/rebasing_is_editing_commits/"&gt;Rebasing is Editing Commits&lt;/a&gt;, which provides background information on the subject.&lt;br /&gt;&lt;/dd&gt;&lt;br /&gt;&lt;/dl&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/gjk4GC1X1W4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/6136894727848559052/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=6136894727848559052" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/6136894727848559052?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/6136894727848559052?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/gjk4GC1X1W4/git-tips.html" title="Git Tips" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_mtKW2NpD7Rk/So2sbWHgglI/AAAAAAAADGA/AvyG6j_tkHM/s72-c/got-git.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://avernet.blogspot.com/2009/08/git-tips.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IDQng_cCp7ImA9WxJVE0U.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-3629735894245483965</id><published>2009-02-20T23:46:00.000-08:00</published><updated>2009-06-30T12:19:33.648-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-30T12:19:33.648-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="web2.0" /><title>Creating a Blog, The Easy Way</title><content type="html">Tonight, I've been taking a few steps towards building a new web site. Blogs are passé; it's now all about Facebook and Twitter. But the easiest way to create a web presence is still to start a blog. So I've been looking at 3 contenders: Blogger, WordPress, and TypePad. I've been attracted to WordPress, and TypePad because I know Blogger. This very blog is on Blogger, which means that I am well aware of its shortcomings. So let's start with WordPress and TypePad.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;WordPress&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_mtKW2NpD7Rk/SZ-yKrCxeoI/AAAAAAAADDM/PiMJT8TgXs4/s1600-h/wordpress-1.png"&gt;&lt;img style="display:block; margin: auto; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 259px;" src="http://1.bp.blogspot.com/_mtKW2NpD7Rk/SZ-yKrCxeoI/AAAAAAAADDM/PiMJT8TgXs4/s400/wordpress-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5305154782488525442" /&gt;&lt;/a&gt;&lt;br /&gt;WordPress feels like a more modern, more powerful version of Blogger. They can host your blog for free, and you pay $15/year to have your own domain, and another $15/year if you want to fully control the CSS on your blog. All this is very reasonable, but their interface confused the heck out of me. The look and feel is polished, but I just couldn't find how to do some basic things like adding and removing sidebars. I felt like the WordPress interface was the headlight, and I was the &lt;a href="http://www.urbandictionary.com/define.php?term=Deer+in+Headlights"&gt;deer&lt;/a&gt;. Not good.  Some will tell me I should have been more patient. Maybe; but the evening was short, and I said: next!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;TypePad&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mtKW2NpD7Rk/SZ-67GqA1PI/AAAAAAAADDU/PlLNWPbhIpw/s1600-h/typepad.png"&gt;&lt;img style="display:block; margin:auto; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 260px;" src="http://2.bp.blogspot.com/_mtKW2NpD7Rk/SZ-67GqA1PI/AAAAAAAADDU/PlLNWPbhIpw/s400/typepad.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5305164410627609842" /&gt;&lt;/a&gt;&lt;br /&gt;I heard a lot of good things about TypePad, and so thought it would be an easy choice. As I started exploring TypePad, their &lt;a href="http://www.typepad.com/pricing/"&gt;pricing page&lt;/a&gt; stopped me in my endeavor. The most affordable plan that allows you to use your own domain costs $9/month, but it doesn't allow you to setup multiple authors, and you can't fully control the page layout. The next level which has those features is at $15/month, or $180/year. That is 6 times more expensive than WordPress, and 18 times more expensive than Blogger (more on Blogger below). All in all we're still talking about just &lt;span style="font-style:italic;"&gt;$180/year&lt;/span&gt;. If you're building a professional web site, this most likely won't stop you. If you're not, then you might be wondering if it is really worth paying 6 to 18 times more for TypePad. I didn't wonder for too long, and got back to Blogger.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Blogger&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Blogger has many shortfall, but it is huge. It feels like everyone, their mother, and their dog is using TypePad. This means that some shortcomings have been solved by that large community. Consider templates: the standard Blogger templates are either ugly, or tired, or both. But you can find hundreds of free templates out there. Blogger asks $10 to use your own domain, which is as reasonable as it gets. And this is all they ask. Once more, it looks like I'll be using Blogger.&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/3Kx-m8QJRrc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/3629735894245483965/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=3629735894245483965" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/3629735894245483965?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/3629735894245483965?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/3Kx-m8QJRrc/creating-blog-easy-way.html" title="Creating a Blog, The Easy Way" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_mtKW2NpD7Rk/SZ-yKrCxeoI/AAAAAAAADDM/PiMJT8TgXs4/s72-c/wordpress-1.png" height="72" width="72" /><thr:total>6</thr:total><feedburner:origLink>http://avernet.blogspot.com/2009/02/creating-blog-easy-way.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcBQX4_eCp7ImA9WxVRFE4.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-5657232305718395371</id><published>2009-01-19T23:32:00.001-08:00</published><updated>2009-01-19T23:54:10.040-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-19T23:54:10.040-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="xml" /><category scheme="http://www.blogger.com/atom/ns#" term="html" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>HTML/CSS: Table inside table getting out containing cell with IE</title><content type="html">Consider this table with a &lt;code&gt;width: 100%&lt;/code&gt; displayed inside a table cell:&lt;br /&gt;&lt;pre&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br /&gt;   &amp;lt;body&gt;&lt;br /&gt;       &amp;lt;table style="width:100%; border: 1px solid red"&gt;&lt;br /&gt;           &amp;lt;tr&gt;&lt;br /&gt;               &amp;lt;td&gt;&lt;br /&gt;                   &amp;lt;div style="padding-left: 3em;&lt;br /&gt;                           padding-right: 3em"&gt;&lt;br /&gt;                       &amp;lt;table style="width: 100%;&lt;br /&gt;                               border: 1px solid blue"&gt;&lt;br /&gt;                           &amp;lt;tr&gt;&lt;br /&gt;                               &amp;lt;td&gt;Gaga&amp;lt;/td&gt;&lt;br /&gt;                           &amp;lt;/tr&gt;&lt;br /&gt;                       &amp;lt;/table&gt;&lt;br /&gt;                   &amp;lt;/div&gt;&lt;br /&gt;               &amp;lt;/td&gt;&lt;br /&gt;           &amp;lt;/tr&gt;&lt;br /&gt;       &amp;lt;/table&gt;&lt;br /&gt;  &lt;br /&gt;   &amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/html&gt;&lt;/pre&gt;&lt;br /&gt;With IE, the table "gets out" of its containing cell. Notice that it is as if the width of the inner table was calculated without taking the padding into account, but its position inside the cell was taking the padding into account:&lt;br /&gt;&lt;img src="http://lh4.ggpht.com/_mtKW2NpD7Rk/SXU-FhpU_EI/AAAAAAAADCc/1M43n1tYNAg/HTML_CSS_%20Table%20inside%20table%20getting%20out%20containing%20cell%20with%20IE%20-%20Google%20Docs.png?imgmax=800" alt="HTML_CSS_ Table inside table getting out containing cell with IE - Google Docs.png" border="0" width="318" height="45" /&gt;&lt;br /&gt;The expected result is rather:&lt;br /&gt;&lt;img src="http://lh4.ggpht.com/_mtKW2NpD7Rk/SXU99mCI_eI/AAAAAAAADCY/DrRz09rufA8/ff-ok-1.png?imgmax=800" alt="ff-ok-1.png" border="0" width="309" height="45" /&gt;&lt;br /&gt;There are two ways to fix this:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The clean way&lt;/b&gt; – Switch the rendering from &lt;i&gt;quirks&lt;/i&gt; mode to &lt;i&gt;strict&lt;/i&gt; mode by changing the doctype. If you can, I'd recommend you do this. This means that in the above code, you would just replace the doctype declaration with:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"&lt;br /&gt;     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;The workaround way&lt;/b&gt; – Instead of defining the padding on a div, you put it directly on the outer cell, and remove the div, which gives you the following code.&lt;br /&gt;&lt;pre&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br /&gt; &amp;lt;body&gt;&lt;br /&gt;     &amp;lt;table style="width:100%; border: 1px solid red"&gt;&lt;br /&gt;         &amp;lt;tr&gt;&lt;br /&gt;             &amp;lt;td style="padding-left: 3em; padding-right: 3em"&gt;&lt;br /&gt;                 &amp;lt;table style="width: 100%;&lt;br /&gt;                         border: 1px solid blue"&gt;&lt;br /&gt;                     &amp;lt;tr&gt;&lt;br /&gt;                         &amp;lt;td&gt;Gaga&amp;lt;/td&gt;&lt;br /&gt;                     &amp;lt;/tr&gt;&lt;br /&gt;                 &amp;lt;/table&gt;&lt;br /&gt;             &amp;lt;/td&gt;&lt;br /&gt;         &amp;lt;/tr&gt;&lt;br /&gt;     &amp;lt;/table&gt;&lt;br /&gt; &amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/html&gt;&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/Q5nN2bGPQaI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/5657232305718395371/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=5657232305718395371" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/5657232305718395371?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/5657232305718395371?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/Q5nN2bGPQaI/htmlcss-table-inside-table-getting-out_19.html" title="HTML/CSS: Table inside table getting out containing cell with IE" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_mtKW2NpD7Rk/SXU-FhpU_EI/AAAAAAAADCc/1M43n1tYNAg/s72-c/HTML_CSS_%20Table%20inside%20table%20getting%20out%20containing%20cell%20with%20IE%20-%20Google%20Docs.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://avernet.blogspot.com/2009/01/htmlcss-table-inside-table-getting-out_19.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8FRng-fSp7ImA9WxdUFEQ.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-5903425907481427717</id><published>2008-07-31T00:50:00.000-07:00</published><updated>2008-07-31T00:53:37.655-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-31T00:53:37.655-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="realestate" /><title>Comparing Bubbles to Bubbles</title><content type="html">Do you remember that &lt;a href="http://avernet.blogspot.com/2008/07/and-yet-we-are-still-investing-in-real.html"&gt;New York Times chart&lt;/a&gt;? (Yea! I found a way to mention it another time!) On the chart, you can clearly see the boom of the 70s and the boom of the 80s. Each one is followed by a period of price correction which &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;brought back prices to the level before the boom&lt;/span&gt;.&lt;div&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://farm4.static.flickr.com/3076/2718505251_fca29fc28b_o.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5229071490122472994" /&gt;I have cut the part showing the boom of the 80s (on the left), and put it next to a much more detailed view (on the right, source: &lt;a href="http://en.wikipedia.org/wiki/Image:Cshpi-peak.svg"&gt;Wikipedia&lt;/a&gt;) that shows:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;In blue&lt;/span&gt;: how prices evolved in the first half of the 90s, when the bubble of the 80s deflated.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;In red&lt;/span&gt;: how prices evolved since mid-2006, when the current bubble started deflating.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;It is stunning to see how &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;much more brutal&lt;/span&gt; the current correction is. I hear some people saying: "well, during the boom of the 80s prices &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;inflated by 20%&lt;/span&gt; and a &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;correction of 15%&lt;/span&gt; followed; during this boom prices &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;inflated by 100%&lt;/span&gt; so you have to expect a &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;much, much more aggressive correction&lt;/span&gt;!"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I hope those people are wrong. But I wouldn't advise you to base your investment choices on my hopes ;).&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/ntSsF5C84tc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/5903425907481427717/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=5903425907481427717" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/5903425907481427717?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/5903425907481427717?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/ntSsF5C84tc/comparing-bubbles-to-bubbles.html" title="Comparing Bubbles to Bubbles" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://avernet.blogspot.com/2008/07/comparing-bubbles-to-bubbles.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QFSH4_eyp7ImA9WxRVEE8.&quot;"><id>tag:blogger.com,1999:blog-6757823.post-5820355429978128731</id><published>2008-07-30T00:20:00.000-07:00</published><updated>2008-11-06T18:35:19.043-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-06T18:35:19.043-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="realestate" /><title>And Yet, We Are Still Investing in Real Estate</title><content type="html">I have shown this New York Times chart to people over and over during the last few years. Yet, as time goes, I still fill compelled to share this with more people. A lot has been written about the real estate market, trying to "explain" why it was doing so well (a few years ago) and why it is doing so badly (now). But the simplicity of this chart is refreshing: it just shows how &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;home value adjusted for inflation&lt;/span&gt; has varied over the last &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;116 years&lt;/span&gt;, from 1890 to 2006, when this chart was published. (For a larger view, click on the chart. This will take you to original chart on the New York Times site.)&lt;div&gt;&lt;br /&gt;&lt;a href="http://www.nytimes.com/imagepages/2006/08/26/weekinreview/27leon_graph2.html"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_mtKW2NpD7Rk/SI7LPGUMkCI/AAAAAAAACRM/IxL70Q9RqfI/s400/nytimes-home.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5228339677677522978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Did you notice the hickey stick towards the end of the chart? I thought you did. When this chart was published, the market had reached its peak. Since then, home prices have gone done by about 15% on a national level. This real estate crisis is the big story, but compared to the doubling we had in the previous decade (a 100% increase), a 15% decline isn't a tragedy. Yet. Because since 2007 prices have been going down every month at a fairly constant pace, everyone is now wondering when it is going to stop.&lt;br /&gt;&lt;br /&gt;Let's look at it this way: forget for a second that we are talking about real estate. Imagine instead that you are are in your investment advisor office, and she is telling you about this fund you didn't know about. Let's call it the &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;RE fund&lt;/span&gt;:&lt;ul&gt;&lt;li&gt;She shows you above chart with the price of the RE fund over time.&lt;/li&gt;&lt;li&gt;She tells you that this fund has a long of history; that for sure it is not going to completely go away, but that (as history has proved) it might bring you fairly large gains or losses.&lt;/li&gt;&lt;li&gt;She warns you that the fund has gone up so much in the 10 years leading to 2006, not because any fundamentals have changed, but because people have been investing more and more in this fund, driving the value up.&lt;/li&gt;&lt;li&gt;She also mentions that a lot of those people buying the fund didn't have the money to do so in the first place. They have been borrowing money heavily for that purpose. Some have borrowed so much that they now can't even pay the interest on the amount they borrowed, and now have to sell.&lt;/li&gt;&lt;/ul&gt;At this point you might be running away from her office, wondering why both you and your investment advisor had to loose so much time talking about this crazy RE fund. But if you are still there, you thoughts about this fund could be summarized in 3 points:&lt;ol&gt;&lt;li&gt;Investing in the RE fund is now &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;highly risky&lt;/span&gt;. Since the mid-40s, the fund have seen two other booms: in the 70s and 80s. After each one of those booms, the value came down to the previous support level. In the last 10 years we have seen an incredible boom, which was not justified by any fundamental change; it was &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;bubble&lt;/span&gt;. Since 2006 the bubble has &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;started to deflate&lt;/span&gt;. Since the beginning of this year, this has been going at a rate of about 1% every month. And despite the fall, the fund has so far "only" lost 15% of it value since its peak, compared to a gain of 100% during the boom of the previous 10 years. Talk about a risky investment.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This has proved, historically, to be a &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;lousy investment&lt;/span&gt;. Setting aside what happened during the last 10 years, the fund stayed surprisingly in line with inflation. Since the mid-40s, it stayed in a band of 20%. Let's say you invested in the RE fund in 1950; after 50 years you would stand a gain (adjusted for inflation) of only 20%. &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;If you had invested $1.00, 50 years later you would have $1.20&lt;/span&gt;. Compare this to investing in the S&amp;amp;P 500: with $1 invested in 1950, 50 years later you would have $70. Very lousy investment indeed.&lt;/li&gt;&lt;li&gt;This is a fund that has a very high barrier to entry. A lot of first-time investors in the RE fund have to put almost all of their savings in it. In addition, they borrow about 5 times that amount and put all that borrowed money in the fund. Talk about &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;lack of diversification&lt;/span&gt;.&lt;/li&gt;&lt;/ol&gt;Now, tell me, would you invest in the RE fund? If you had money invested in the RE fund, would you keep it there?&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/avernet/~4/QydaFkTXwtY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://avernet.blogspot.com/feeds/5820355429978128731/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6757823&amp;postID=5820355429978128731" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/5820355429978128731?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6757823/posts/default/5820355429978128731?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/avernet/~3/QydaFkTXwtY/and-yet-we-are-still-investing-in-real.html" title="And Yet, We Are Still Investing in Real Estate" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_mtKW2NpD7Rk/SI7LPGUMkCI/AAAAAAAACRM/IxL70Q9RqfI/s72-c/nytimes-home.gif" height="72" width="72" /><thr:total>6</thr:total><feedburner:origLink>http://avernet.blogspot.com/2008/07/and-yet-we-are-still-investing-in-real.html</feedburner:origLink></entry></feed>
