<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="http://feedproxy.google.com/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feedproxy.google.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-5768680</id><updated>2008-09-12T12:51:25.022+02:00</updated><title type="text">Pieter's Programming Blog</title><subtitle type="html">I'm a freelance Java developer based in Belgium (better known as Brussels outside Europe). Here I write about my experiences based on my daily struggle with man's most feared enemy: computers.</subtitle><link rel="alternate" type="text/html" href="http://www.onthoo.com/blog/programming/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default?start-index=26&amp;max-results=25" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>83</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feedproxy.google.com/onthoo-programming" type="application/atom+xml" /><entry><id>tag:blogger.com,1999:blog-5768680.post-4236307050610810884</id><published>2008-08-08T11:09:00.012+02:00</published><updated>2008-08-08T11:29:12.937+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title type="text">Google Apps E-mail Storage Reaches 7 GB</title><content type="html">My &lt;a href="http://www.google.com/a/"&gt;Google Apps&lt;/a&gt; &lt;a href="http://www.google.com/a/help/intl/en/admins/editions.html"&gt;Standard Edition&lt;/a&gt; e-mail account (like GMail, but I can use my own hostname instead of gmail.com) reached 7 GB.  I just noticed it today, but it may already be there for a few days since I don't watch the &lt;a href="http://mail.google.com"&gt;GMail counter&lt;/a&gt; continuously.&lt;br /&gt;&lt;br /&gt;The Thrash folder however still shows&lt;br /&gt;&lt;em&gt;No conversations in the Trash. Who needs to delete when you have over 2000 MB of storage?!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;7 GB that is, if you use the same metrics hard disk manufacturers use.  It's still not really &lt;a href="http://www.google.com/search?q=7GB+in+MB"&gt;7 GB&lt;/a&gt; though.&lt;br /&gt;&lt;br /&gt;Looks like I still have some space left after 4 years of e-mailing (I didn't import my old hotmail and student accounts I had before that):&lt;br /&gt;&lt;em&gt;You are currently using 472 MB (6%) of your 7007 MB.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;I used a little trick (don't tell Google!) to import my e-mail from my old server.  When you purchase a Premier Edition account, you have better tools to migrate your e-mail.  After 15 days (and a successful migration) I downgraded my Premier Edition to a Standard Edition for free (you have 30 days to try it).</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/ftI3nZ_1AzE/google-apps-e-mail-storage-reaches-7-gb.html" title="Google Apps E-mail Storage Reaches 7 GB" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=4236307050610810884" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/4236307050610810884" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/4236307050610810884" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2008/08/google-apps-e-mail-storage-reaches-7-gb.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-2370039695627940920</id><published>2008-05-09T16:42:00.010+02:00</published><updated>2008-05-09T16:54:05.898+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server" /><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><title type="text">How to lower the load average on a server with more than 50% in 10 seconds</title><content type="html">$&lt;span style="font-style:italic;"&gt;uptime&lt;/span&gt;&lt;br /&gt;... load average: 0.54, 0.40, 0.36&lt;br /&gt;&lt;br /&gt;$&lt;span style="font-style:italic;"&gt;sudo vim /etc/fstab&lt;/span&gt;&lt;br /&gt;(add the noatime option)&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# /dev/sda3&lt;br /&gt;UUID=8623d9e3... /               ext3    defaults,errors=remount-ro&lt;span style="font-weight:bold;"&gt;,noatime&lt;/span&gt; 0       1&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;$&lt;span style="font-style:italic;"&gt;sudo mount -a&lt;/span&gt;&lt;br /&gt;...&lt;br /&gt;$&lt;span style="font-style:italic;"&gt;uptime&lt;/span&gt;&lt;br /&gt;... load average: 0.24, 0.16, 0.17&lt;br /&gt;&lt;br /&gt;So far this completely unscientific proof.&lt;br /&gt;&lt;br /&gt;More info about the &lt;a href="http://ubuntuforums.org/showthread.php?t=107856"&gt;noatime&lt;/a&gt; option.</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/nUjfGC-G2w4/how-to-lower-load-average-on-server.html" title="How to lower the load average on a server with more than 50% in 10 seconds" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=2370039695627940920" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/2370039695627940920" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/2370039695627940920" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2008/05/how-to-lower-load-average-on-server.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-8486636895413503746</id><published>2008-04-10T21:05:00.008+02:00</published><updated>2008-04-11T15:48:49.095+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java" /><title type="text">Internal Refactoring</title><content type="html">For my 10-day visit to &lt;a href="http://en.wikipedia.org/wiki/Tokyo"&gt;Tokyo&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Kyoto"&gt;Kyoto&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Nara,_Nara"&gt;Nara&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Hakone"&gt;Hakone&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Chiba_Prefecture"&gt;Chiba&lt;/a&gt; (my brother-in-law's wedding), I needed to refactor my internal progamming a bit to avoid OutOfMemoryExceptions.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// This class is package protected to avoid &lt;br /&gt;// external programs messing up.&lt;br /&gt;class Brain {&lt;br /&gt;&lt;br /&gt;public void handleEvent(MeetNewPersonEvent event) {&lt;br /&gt;  ...&lt;br /&gt;  if (getLocation().equals(Locations.JAPAN)) {&lt;br /&gt;    fireEvent(new BowEvent(event));&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void handleEvent(BowEvent event) {&lt;br /&gt;    // Avoid infinite loop.  The problem is the &lt;br /&gt;    // 'esteemed higher' part, the person&lt;br /&gt;    // for whom you're bowing may think the same.&lt;br /&gt;    if (event.isPersonEsteemedHigher() &lt;br /&gt;        &amp;&amp; &lt;span style="font-weight:bold;"&gt;!event.hasBowedTooMuch()&lt;/span&gt;) {&lt;br /&gt;      bow();&lt;br /&gt;    } else {&lt;br /&gt;      nod();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected void bow() {&lt;br /&gt;  lookSincere();&lt;br /&gt;  smile();&lt;br /&gt;  bendForward();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I also needed to reprogram the eating subroutines.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public void handleEvent(FeelingHungryEvent event) {&lt;br /&gt;...&lt;br /&gt;  if (getLocation().equals(Locations.JAPAN)) {&lt;br /&gt;     // This was a tricky one to handle, &lt;br /&gt;     // the implementation is left &lt;br /&gt;     // as an exercise to the reader.&lt;br /&gt;     uploadChopsticksRoutine();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The RunForTrainEvent and especially the WaitForTrainEvent could be canceled out since public transportation is much better than the location I originally wrote it for (Belgium).&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public void handleEvent(RunForTrainEvent event) {&lt;br /&gt;  if (getLocation().equals(Locations.JAPAN)) {&lt;br /&gt;     stopRunning();&lt;br /&gt;     relax();&lt;br /&gt;     Thread.sleep(5*Timer.MINUTE);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Finally, I needed to handle the RunningNoseEvent (extends HasColdEvent) better.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public void handleEvent(RunningNoseEvent event) {&lt;br /&gt;...&lt;br /&gt;  if (getLocation().equals(Locations.JAPAN)) {&lt;br /&gt;    // Blowing your nose in public is NOT DONE &lt;br /&gt;    // in Japan.  This is considered &lt;br /&gt;    // a bit the same as burping.  &lt;br /&gt;    // Public humiliation is your part when&lt;br /&gt;    // this is not checked.&lt;br /&gt;    dipNose();&lt;br /&gt;  } else {&lt;br /&gt;    blowNose();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected Location getLocation() {&lt;br /&gt;  ...&lt;br /&gt;  if (isCurrentLocationUnknown()) {&lt;br /&gt;    if (bodyTallerThanMostOthers() &lt;br /&gt;            &amp;&amp; friendlyPeople() &amp;&amp; metroEvery2Minutes()&lt;br /&gt;            &amp;&amp; dressCode.equals(Dresscodes.COSTUME)&lt;br /&gt;            &amp;&amp; eatingCode.equals(EatingCodes.SHOPSTICKS)) {&lt;br /&gt;       return Locations.JAPAN;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;} // End class&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is released under an Apache license.  Please notify me if these changes are of any use to you.</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/IxRtfLZNzXY/internal-refactoring.html" title="Internal Refactoring" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=8486636895413503746" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/8486636895413503746" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/8486636895413503746" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2008/04/internal-refactoring.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-4283764600132291343</id><published>2008-04-09T21:42:00.006+02:00</published><updated>2008-04-10T10:28:39.837+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server" /><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><title type="text">Blocking bad bots</title><content type="html">Today I blocked some bad bots that were spidering some of my sites.  Most notably Custo, which downloads your entire site.&lt;br /&gt;&lt;br /&gt;An interesting solution is posted &lt;a href="http://www.besthostratings.com/articles/block-bad-bots.html"&gt;here&lt;/a&gt; (I used the mod_rewrite option).  You can test this by &lt;a href="http://johnbokma.com/mexit/2004/04/24/changinguseragent.html"&gt;changing your user agent in Firefox&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This &lt;a href="http://johannburkard.de/blog/www/spam/"&gt;guy&lt;/a&gt; seems to be following &lt;a href="http://johannburkard.de/blog/www/spam/The-top-10-spam-bot-user-agents-you-MUST-block-NOW.html"&gt;bad bots&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I added Java, Nutch, Jakarta, Vagabondo and an empty bot name to the list of bad bots.</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/9DA5ZVoZ6yc/blocking-bad-bots.html" title="Blocking bad bots" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=4283764600132291343" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/4283764600132291343" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/4283764600132291343" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2008/04/blocking-bad-bots.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-4109468830664667482</id><published>2008-02-26T22:19:00.003+01:00</published><updated>2008-02-27T11:09:53.297+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="webdevelopment" /><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="gwt" /><title type="text">GWT: follow-up</title><content type="html">&lt;span style="font-style:italic;"&gt;This is a follow-up post on &lt;a href="http://www.onthoo.com/blog/programming/2008/02/why-i-dumped-gwt.html"&gt;Why I dumped GWT&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First of all, I had a really long week + weekend and I was tired when I wrote the post. I apologize for the rather in-your-face title.  I should have chosen a more subtitle wording, especially since I really appreciate all the work that developers donate in their free time to open source projects.&lt;br /&gt;&lt;br /&gt;I did't expect my blog post would end up as the main article on &lt;a href="http://www.ongwt.com"&gt;ongwt.com&lt;/a&gt;. I use my blog mainly to communicate with colleagues about my work. It probably has something to do with my recent switch to &lt;a href="http://www.feedburner.com"&gt;feedburner&lt;/a&gt;. Hooray for feedburner!&lt;br /&gt;&lt;br /&gt;Like I wrote, I like GWT and its approach.  It's really nice to see how intelligent the development team approached and solved the problem at hand.  The image handling (sprites), js compression and http round-trip optimisations are really clever.&lt;br /&gt;&lt;br /&gt;I'll start by describing how my site came to what it is now.  The site started as a playground for me.  I wanted to try the latest new thing (ajax!) and so I first started with &lt;a href="http://script.aculo.us/"&gt;scriptaculous&lt;/a&gt;. I didn't succeed in getting the layout right with pure css (after all, I'm only a Java developer) and I stumbled upon GWT.  The mail app demo is really nice and this gave me the idea to start a site that searches on-line marketplaces and lets users treat the classifieds as e-mail: with the possibility to delete, mark items as read/unread and star them.  Much like Google Reader.&lt;br /&gt;&lt;br /&gt;For this, GWT was the perfect match.  Everything went as I expected it to do, sometimes with some cursing about why my onclick events were not fired and why a non-existing background image in css stopped the hosted mode to work, but all-in-all it was very good.&lt;br /&gt;&lt;br /&gt;After some (positive) discussion with my other half, I wanted the work I put in it to give me some return-on-investment (money!). It turned out after some basic user testing (she sitting at the keyboard and I shouting "why would you do that?" and "that's not meant to be used like that") that the whole idea was too complex for a standard user (no offense to my super-intelligent girlfriend) who stumbles upon my site. &lt;span style="font-weight:bold;"&gt;So week after week I removed some of the functionality to make the page less overwhelming.  Until I finally found myself using GWT only for the autocompleter, which clearly wasn't the intention of the GWT framework.&lt;/span&gt;  This, together with the remarks I gave in the previous post (adsense, analytics and seo) made me decide to temporarily stop developing with GWT.&lt;br /&gt;&lt;br /&gt;I expect to start again with GWT once the site "gains some momentum", and then I will re-enable those more complex features which should be easier than with mootools. I'll probably ask some advice from a usability expert about how to design the page with all this functionality without overwhelming first-time users. And I will check out MyGWT and GWT-Ext more thoroughly.</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/DnX-winVtVs/gwt-follow-up.html" title="GWT: follow-up" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=4109468830664667482" title="4 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/4109468830664667482" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/4109468830664667482" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2008/02/gwt-follow-up.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-4587955331120344681</id><published>2008-02-24T21:55:00.005+01:00</published><updated>2008-02-27T11:25:49.630+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="webdevelopment" /><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="gwt" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title type="text">Why I dumped GWT</title><content type="html">I've used &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt; for over half a year now on &lt;a href="http://www.koopjeszoeker.be"&gt;koopjeszoeker.be&lt;/a&gt;.  Two weeks ago I decided to stop development with GWT and go with plain HTML and &lt;a href="http://mootools.net/"&gt;mootools&lt;/a&gt; for the &lt;a href="http://digitarald.de/project/autocompleter/"&gt;autocompleter&lt;/a&gt;.  I've used mootools already a lot and I'm really getting the hang of it.&lt;br /&gt;&lt;br /&gt;Why?  Why did I spend all this time developing in GWT and why did I decided to stop?&lt;br /&gt;&lt;br /&gt;First of all, GWT is a fantastic framework for doing web development. I think it's the best tool at the moment if you want to build the next GMail or an intranet application.  For all those slow and lousy web interfaces (for timesheets, CMS, ...), GWT could come to the rescue.  But my site is completely different.&lt;br /&gt;&lt;br /&gt;Some of the reasons below are not really related to GWT, but more to using ajax in general.  It is my opinion however, that these problems are easier to solve with 'standard' javascript libraries like mootools, &lt;a href="http://www.prototypejs.org/"&gt;prototype&lt;/a&gt;, &lt;a href="http://getahead.org/dwr"&gt;dwr&lt;/a&gt; or &lt;a href="http://script.aculo.us/"&gt;scriptaculous&lt;/a&gt; since these have a nice way to add some ajax to certain DOM elements.  For example, in GWT I had to subclass the autocompleter textbox so I could attach it to an input field that already existed in the HTML.  Maybe all of this could by solved if GWT had constructors that accept a DOM id too.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;SEO&lt;/h4&gt;&lt;br /&gt;I'm entering in a highly competitive segment where &lt;a href="http://www.seomoz.org/article/search-ranking-factors"&gt;SEO&lt;/a&gt; is really important.  Since most of the html is build with GWT, you end up with a pretty empty page for Google.  I added some noscript tags, but this was not really helpful.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Adsense&lt;/h4&gt;&lt;br /&gt;Another problem were my &lt;a href="http://www.google.com/adsense/"&gt;adsense&lt;/a&gt; banners.  Since I didn't have a lot of content on the page, the banners were sometimes off topic.  An even bigger problem was that the banners stayed the same when people searched for different keywords (since the ajax refresh didn't trigger an adsense refresh).  I solved this by doing the search with a page refresh instead of an ajax call.  The ajax part of the site was limited to sorting, faceting, i18n and displaying tips.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Google Analytics&lt;/h4&gt;&lt;br /&gt;I'm also using &lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt;. Although &lt;a href="http://www.webmasterworld.com/google/3248965.htm"&gt;no real evidence exists&lt;/a&gt;, it would be naive to think that Google isn't using this data.  But because of the ajax calls, I don't get as many pageviews as a static version of competing sites.  Every visitor is seen as doing 1 page visit, while he may have browsed several pages.  This makes my &lt;a href="http://www.google.com/support/analytics/bin/answer.py?hl=en&amp;answer=81986"&gt;bounce rate&lt;/a&gt; in Google Analytics really high.  This can't be good for my Google rankings.&lt;br /&gt;In Belgium we have &lt;a href="http://www.cim.be/mtwb/nl/a/index.html"&gt;CIM Metriweb&lt;/a&gt;, a kind of archaic tracking system that is used when marketeers look for sites that have many hits.  I'm not currently using this, but this thing depends on pageviews if you want the big guys to donate to your site.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;What now?&lt;/h4&gt;&lt;br /&gt;I wanted a fully functional HTML version, where GWT was injected in some places to replace the full page loads with ajax calls.  However, I couldn't find an easy way to do this.  And once I succeeded, I found that I had almost no code left in GWT that was worth using it instead of mootools.  So now, after a lot of research and experimenting, I decided that I'll go for the plain-old html way and spiced up some parts with ajax (like the "so 2007" textbox autocompleter).&lt;br /&gt;&lt;br /&gt;I discovered the &lt;a href="http://code.google.com/p/blueprintcss/"&gt;Blueprint CSS framework&lt;/a&gt; (version 0.7 now has semantic classes) and &lt;a href="http://spritegen.website-performance.org/"&gt;CSS sprites&lt;/a&gt;. I've used &lt;a href="http://kuler.adobe.com/"&gt;Kuler&lt;/a&gt; and read a &lt;a href="http://www.evolt.org/article/Ten_CSS_tricks_you_may_not_know/17/60369/"&gt;lot&lt;/a&gt; &lt;a href="http://www.webcredible.co.uk/user-friendly-resources/css/more-css-tricks.shtml"&gt;about&lt;/a&gt; &lt;a href="http://www.petefreitag.com/item/475.cfm"&gt;CSS&lt;/a&gt; &lt;a href="http://www.smashingmagazine.com/2007/01/19/53-css-techniques-you-couldnt-live-without/"&gt;tips&lt;/a&gt; &lt;a href="http://www.alistapart.com/articles/taminglists/"&gt;and&lt;/a&gt; &lt;a href="http://css.maxdesign.com.au/selectutorial/selectors_pseudo_class.htm"&gt;tricks&lt;/a&gt;. I even read a bit about &lt;a href="http://www.useit.com/alertbox/application-mistakes.html"&gt;usability&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;And since I spend 3 hours a day on the train, I have time to redesign the site. Using blueprint, it really was easy and the result is a much better looking, stable, fast site.  Check the &lt;a href="http://www.koopjeszoeker.be/"&gt;homepage&lt;/a&gt;: it only has 1 css, 1 javascript, 1 gif and 1 jpeg, but there are 25 images! Ah, the magic of blueprint, sprites and jawr...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Update: please see &lt;a href="http://www.onthoo.com/blog/programming/2008/02/gwt-follow-up.html"&gt;GWT follow-up&lt;/a&gt;&lt;/span&gt;</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/0pVdfdxFhd0/why-i-dumped-gwt.html" title="Why I dumped GWT" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=4587955331120344681" title="5 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/4587955331120344681" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/4587955331120344681" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2008/02/why-i-dumped-gwt.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-7381158556373959554</id><published>2008-02-18T14:39:00.007+01:00</published><updated>2008-02-18T14:45:57.718+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="webdevelopment" /><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title type="text">Compress Javascript and CSS with Jawr</title><content type="html">Today I used the nice &lt;a href="https://jawr.dev.java.net/"&gt;Jawr&lt;/a&gt; taglib which compresses javascript and css files.  There's enough information on the Jawr website about how to configure everything, so I won't write about this.&lt;br /&gt;&lt;br /&gt;Things to remember are:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Better structuring / versioning of your development javascript and css versions while still publishing them as 1 file&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Gzip support for compliant browsers&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Give the css and js files cache headers 'until the sun explodes'&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When you deploy a new version of your site, a new css and js version will be downloaded by the browser&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;Net result: our &lt;a href="http://developer.yahoo.com/yslow/"&gt;YSlow&lt;/a&gt; score went from 49 to 69!</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/9q9qZMmCVMg/compress-javascript-and-css-with-jawr.html" title="Compress Javascript and CSS with Jawr" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=7381158556373959554" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/7381158556373959554" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/7381158556373959554" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2008/02/compress-javascript-and-css-with-jawr.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-3827587473502579835</id><published>2008-02-17T21:46:00.000+01:00</published><updated>2008-02-18T10:16:07.835+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="webdevelopment" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title type="text">2 Things I want in CSS 3</title><content type="html">I've done some html/css restyling lately and there are some things I would like to see added to &lt;a href="http://www.w3.org/Style/CSS/current-work"&gt;CSS 3&lt;/a&gt;.  The process to request some changes to be incorporated into CSS 3 is a bit overwhelming to me, so I just post them here and hope they will be picked up by someone.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;CSS variables&lt;/h2&gt;&lt;br /&gt;CSS variables would be nice.  I want a way so I can easily change all colors in my CSS with one adjustment, not by searching for the color in the file and replacing it with the new value.  I also think this would increase readability of the file.&lt;br /&gt;This would allow to define recurring parts of the layout in the CSS file like this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var backgroundcolor : #FFFFFF;&lt;br /&gt;var border: 1px solid #CCCCCC;&lt;br /&gt;&lt;br /&gt;.container {&lt;br /&gt; background-color: $backgroundcolor;&lt;br /&gt; border: $border;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.navbar{&lt;br /&gt; border: $border;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Path variables&lt;/h2&gt;&lt;br /&gt;If I could rename a path selector to a variable, I could remove a lot of classes from the html and still be able to easily change the css.&lt;br /&gt;Take this example:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;.navbar ul li a {&lt;br /&gt;  text-decoration: none;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.navbar ul li a:hover {&lt;br /&gt;  text-decoration: underline;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;This would become:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var listItem: .navbar ul li;&lt;br /&gt;&lt;br /&gt;$listItem a {&lt;br /&gt;  text-decoration: none;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$listItem a:hover {&lt;br /&gt;  text-decoration: underline;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;These examples look simple, but my experience is that a lot of the same values can be found in many CSS files.  Wouldn't it be nice if we have a block of variable definitions at the top so we only have to specify once that the color of all borders should be changed?&lt;br /&gt;&lt;br /&gt;This would also make it easier to let users (on a blog for example) override the colors with their own stylesheet, which overrides the variables with their settings.&lt;br /&gt;&lt;br /&gt;The only way I know off to achieve this at the moment is by generating the CSS with a templating framework like JSP or Velocity (or why not PHP), but this seems like overkill to me.&lt;br /&gt;&lt;br /&gt;So, anyone with the power to move the W3C board, go on (and let me know of the results)!</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/6QNFSqQvIoA/2-things-i-want-in-css-3.html" title="2 Things I want in CSS 3" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=3827587473502579835" title="5 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/3827587473502579835" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/3827587473502579835" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2008/02/2-things-i-want-in-css-3.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-4734324162623989304</id><published>2008-02-14T21:24:00.001+01:00</published><updated>2008-02-15T09:48:36.649+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><title type="text">Website Performance tuning with Firebug and YSlow</title><content type="html">Today I discovered a cool plugin for Firefox: &lt;a href="http://developer.yahoo.com/yslow/"&gt;YSlow&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In combination with &lt;a href="http://www.getfirebug.com/"&gt;Firebug&lt;/a&gt;, it allows you to quickly get a report about performance issues with your site, like too many css or javascript files, missing cache headers and &lt;a href="http://developer.yahoo.com/performance/rules.html"&gt;much more&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I got a score of 66 for &lt;a href="http://www.koopjeszoeker.be"&gt;koopjeszoeker.be&lt;/a&gt;!  Not much to improve there, besides switching to a &lt;a href="http://developer.yahoo.com/performance/rules.html#cdn"&gt;CDN&lt;/a&gt;, but I don't think this is something that will happen very soon (maybe with &lt;a href="http://www.amazon.com/gp/browse.html?node=16427261"&gt;Amazon S3&lt;/a&gt;?).</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/fa3Xzr5oBVs/website-performance-tuning-with-firebug.html" title="Website Performance tuning with Firebug and YSlow" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=4734324162623989304" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/4734324162623989304" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/4734324162623989304" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2008/02/website-performance-tuning-with-firebug.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-5513789678043489889</id><published>2007-12-20T21:30:00.000+01:00</published><updated>2007-12-21T10:56:02.968+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server" /><title type="text">Ubuntu install²</title><content type="html">Below a write-down of the steps I performed to install 2 ubuntu 7.10 servers (webserver + mysql database server) with IPMI.&lt;br /&gt;&lt;br /&gt;Reminders:&lt;br /&gt;start services with&lt;br /&gt;- /etc/init.d/mysql start (or stop)&lt;br /&gt;- /etc/init.d/apache2 start (or stop or reload or force-reload)&lt;br /&gt;- Connect to database server: mysql -u root -p --host &lt;database host name&gt;&lt;br /&gt;&lt;br /&gt;Not done:&lt;br /&gt;- SSL on Apache&lt;br /&gt;- DenyHosts (prevent ssh dictionary attacks): see http://packages.ubuntu.com/edgy/net/denyhosts and http://denyhosts.sourceforge.net/&lt;br /&gt;&lt;br /&gt;Steps&lt;br /&gt;=====&lt;br /&gt;&lt;br /&gt;OS installation&lt;br /&gt;- Change router so desktop gets ip address in 192.168.111.x range&lt;br /&gt;- Connect to ipmi (192.168.111.111) and change ip to 192.168.1.200.  Mount ubuntu iso by opening console in browser (http://192.168.1.200) and click on the diskette icon in the right top and choose "mount iso".&lt;br /&gt;- Go to console and reboot.&lt;br /&gt;- Follow instruction steps for Ubuntu (check keyboard: Belgian keyboard gives problems with IPMI, but virtual keyboard and ssh work ok.).&lt;br /&gt;- Remove virtual drive (iso) and reboot.&lt;br /&gt;&lt;br /&gt;apt-get&lt;br /&gt;- Remove (comment) line in /etc/apt/sources.list with a dependency on the cd-rom&lt;br /&gt;&lt;br /&gt;ntpd&lt;br /&gt;- sudo apt-get install ntp&lt;br /&gt;- sudo vi /etc/ntp.conf; add&lt;br /&gt;               server be.pool.ntp.org&lt;br /&gt;               server pool.ntp.org&lt;br /&gt;&lt;br /&gt;Apache 2&lt;br /&gt;- /etc/init.d/apache2 start (or stop or reload or force-reload)&lt;br /&gt;- sudo a2enmod deflate&lt;br /&gt;- sudo a2enmod headers&lt;br /&gt;- sudo a2enmod expires&lt;br /&gt;- set up name-based virtual hosting following http://httpd.apache.org/docs/2.0/vhosts/name-based.html&lt;br /&gt;&lt;br /&gt;PHP&lt;br /&gt;- Copy contents from http://cvs.php.net/viewvc.cgi/php-src/php.ini-recommended?revision=1.179.2.11.2.23.2.1 to php.ini and set variables as needed&lt;br /&gt;- sudo apt-get install php5-gd&lt;br /&gt;&lt;br /&gt;eAccelerator&lt;br /&gt;- sudo apt-get update&lt;br /&gt;- sudo apt-get install php5-dev (needed for phpize5)&lt;br /&gt;- Install eaccelerator following the guide from http://eaccelerator.net/wiki/InstallFromSource and http://2bits.com/articles/installing-eaccelerator-0-9-5-1-on-ubuntu-feisty-7-04.html&lt;br /&gt;- Don't forget:&lt;br /&gt;               - mkdir /var/cache/eaccelerator&lt;br /&gt;               - chmod 644 /var/cache/eaccelerator&lt;br /&gt;               - the login credentials for control.php are in the file itself (admin/eAccelerator): change them!&lt;br /&gt;&lt;br /&gt;Varnish&lt;br /&gt;- sudo apt-get install varnish --&gt; error in dpkg (see http://ubuntuforums.org/archive/index.php/t-438794.html)&lt;br /&gt;- sudo apt-get install libc6-dev&lt;br /&gt;- sudo apt-get remove varnish&lt;br /&gt;- sudo apt-get install varnish&lt;br /&gt;- Management: telnet 127.0.0.1 6082 (see http://varnish.projects.linpro.no/wiki/ManagementPort) (exit with ctrl+] and quit)&lt;br /&gt;- varnishstat shows statistics&lt;br /&gt;- Varnish by default listens on http://127.0.0.1:6081/&lt;br /&gt;- sudo vi /etc/default/varnish: change 6081 to 80&lt;br /&gt;- sudo vi /etc/apache2/ports.conf: change 80 to 81&lt;br /&gt;- sudo vi /etc/varnish/vcl.conf&lt;br /&gt;- varnish vcl docs: "man vcl"&lt;br /&gt;- Test response headers with GET -ed http://www.example.com&lt;br /&gt;- Show varnish logs in apache format: sudo varnishncsa&lt;br /&gt;&lt;br /&gt;MySQL&lt;br /&gt;- /etc/init.d/mysql start (or stop)&lt;br /&gt;- Connect to database server: mysql -u root -p --host onthoo2&lt;br /&gt;- MySQL data is located under /var/lib/mysql/&lt;br /&gt;- Change mysql root password:&lt;br /&gt;      mysql&gt; USE mysql;&lt;br /&gt;      mysql&gt; UPDATE user SET Password=PASSWORD('new-password') WHERE user='root';&lt;br /&gt;      mysql&gt; FLUSH PRIVILEGES;&lt;br /&gt;&lt;br /&gt;CVS&lt;br /&gt;- sudo apt-get install cvs&lt;br /&gt;&lt;br /&gt;SVN&lt;br /&gt;- sudo apt-get install subversion&lt;br /&gt;- pipe through varnish&lt;br /&gt;&lt;br /&gt;Java&lt;br /&gt;- sudo apt-get install sun-java6-jdk&lt;br /&gt;- See https://help.ubuntu.com/community/Java&lt;br /&gt;&lt;br /&gt;Tomcat&lt;br /&gt;- Disable port 8080, enable AJP on port 8009&lt;br /&gt;- Change proxy allow in apache2:&lt;br /&gt;   &amp;lt;Proxy *&amp;gt;&lt;br /&gt;       AddDefaultCharset off&lt;br /&gt;       Order deny,allow&lt;br /&gt;       #Deny from all&lt;br /&gt;       Allow from webserver&lt;br /&gt;   &amp;lt;/Proxy&amp;gt;&lt;br /&gt;&lt;br /&gt;ImageMagick (compile from source for newer version 6.3.7)&lt;br /&gt;- Download sources from ImageMagick website&lt;br /&gt;- sudo apt-get install libjpeg62&lt;br /&gt;- sudo apt-get install libjpeg62-dev&lt;br /&gt;- sudo ldconfig&lt;br /&gt;- cd ImageMagick-6.3.7&lt;br /&gt;- sudo ./configure --prefix=/usr&lt;br /&gt;- sudo make&lt;br /&gt;- sudo make install&lt;br /&gt;&lt;br /&gt;Google sitemap generator&lt;br /&gt;- See https://www.google.com/webmasters/tools/docs/en/sitemap-generator.html&lt;br /&gt;- Modified log path from /var/log/httpd/ to /var/log/apache2/&lt;br /&gt;- Added crontabs to /etc/cron.daily&lt;br /&gt;- Changed python2.4 to python2.5 in crontabs&lt;br /&gt;&lt;br /&gt;AWStats&lt;br /&gt;- sudo apt-get install awstats&lt;br /&gt;- sudo apt-get install libgeo-ipfree-perl&lt;br /&gt;- vi awstats.conf.local:&lt;br /&gt;                       LogFormat=1&lt;br /&gt;                       AllowToUpdateStatsFromBrowser=1&lt;br /&gt;                       AllowFullYearView=3&lt;br /&gt;- vi awstats.www.pets.be.conf:&lt;br /&gt;                       LogFile="/var/log/apache2/www.pets.be/access.log"&lt;br /&gt;                       SiteDomain="www.pets.be"&lt;br /&gt;                       HostAliases="localhost 127.0.0.1 dierenasielen.be dierenasiel.be refugespouranimaux.be pups.be asiel.org"&lt;br /&gt;- sudo /usr/lib/cgi-bin/awstats.pl -config=www.pets.be -update&lt;br /&gt;&lt;br /&gt;Exim (mail sender)&lt;br /&gt;- See https://help.ubuntu.com/7.10/server/C/exim4.html&lt;br /&gt;- Don't forget to run 'sudo update-exim4.conf' when the wizard has finished&lt;br /&gt;&lt;br /&gt;Logwatch&lt;br /&gt;- sudo apt-get install logwatch&lt;br /&gt;- default conf is in /usr/share/logwatch/&lt;br /&gt;- add /etc/logwatch/conf/logwatch.conf:&lt;br /&gt;               # Default person to mail reports to.  Can be a local account or a&lt;br /&gt;               # complete email address.&lt;br /&gt;               MailTo = logwatch@example.com&lt;br /&gt;               # Default person to mail reports from.  Can be a local account or a&lt;br /&gt;               # complete email address.&lt;br /&gt;               MailFrom = root@example.com&lt;br /&gt;&lt;br /&gt;Firehol (firewall) on both servers&lt;br /&gt;- sudo apt-get install firehol&lt;br /&gt;- sudo vi /etc/firehol/firehol.conf:&lt;br /&gt;webserver:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;         version 5&lt;br /&gt;         interface eth0 internet&lt;br /&gt;         client all accept&lt;br /&gt;         server http accept&lt;br /&gt;         server ssh accept&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; database server:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;          version 5&lt;br /&gt;          clients="webserver"&lt;br /&gt;          interface eth+ internet&lt;br /&gt;                client all accept&lt;br /&gt;                server mysql accept src "$clients"&lt;br /&gt;                server ssh accept&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;- Patch for iptables warnings (see https://bugs.launchpad.net/ubuntu/+source/firehol/+bug/78017):&lt;br /&gt;       - sudo sed 's/%q/%b/g' /lib/firehol/firehol &gt; TMPFILE &amp;&amp; sudo mv TMPFILE /lib/firehol/firehol&lt;br /&gt;       - sudo chmod 744 /lib/firehol/firehol&lt;br /&gt;-  sudo firehol start&lt;br /&gt;- Check with "sudo iptables -L"&lt;br /&gt;&lt;br /&gt;IPMI&lt;br /&gt;- change admin username and password&lt;br /&gt;- require https&lt;br /&gt;- use Java Sun plugin&lt;br /&gt;- set invalid login retries and retry timout&lt;br /&gt;- setup ipmitool if you need to change the ip address on which ipmi listens (see https://help.ubuntu.com/community/IPMI):&lt;br /&gt;      - sudo apt-get install ipmitool&lt;br /&gt;      - cd /usr/share/ipmitool&lt;br /&gt;      - sudo cp ipmi.init.basic ipmi.init.ubuntu&lt;br /&gt;      - sudo vi ipmi.init.ubuntu (and remove the if loop around the 'modprobe ipmi_si # try new module name' line) - see https://bugs.launchpad.net/ubuntu/+source/ipmitool/+bug/110992&lt;br /&gt;      - change ip address: sudo ipmitool -I open lan set 1 ipaddr 85.158.x.x&lt;br /&gt;      - change default gateway: sudo ipmitool -I open lan set 1 defgw ipaddr 85.158.x.x&lt;br /&gt;      - change netmask sudo ipmitool -I open lan set 1 netmask 255.255.255.x&lt;br /&gt;      - browse to http(s)://85.158.x.x&lt;br /&gt;&lt;br /&gt;Backup&lt;br /&gt;- See http://ubuntuforums.org/showthread.php?t=35087&lt;br /&gt;- Complete backup of the system:&lt;br /&gt;vi /var/backups/fullimage:&lt;br /&gt;     tar cvpzf /backup/fullimage.tgz --exclude=/proc --exclude=/lost+found   &lt;br /&gt;          --exclude=/backup/ --exclude=/mnt --exclude=/sys /&lt;br /&gt;- Restore backup with "tar xvpfz /backup/fullimage.tgz -C /"&lt;br /&gt;- Special backup scripts in /var/backups&lt;br /&gt;- crontab -e:&lt;br /&gt;         0 3 * * * /var/backups/backup-all</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/DuKf3KLZd1o/ubuntu-install.html" title="Ubuntu install²" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=5513789678043489889" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/5513789678043489889" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/5513789678043489889" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/12/ubuntu-install.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-2736193507290330554</id><published>2007-12-03T16:03:00.001+01:00</published><updated>2007-12-03T16:56:19.322+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server" /><title type="text">New server almost complete</title><content type="html">I bought (together with my brother) a new server.  The old one is definitely ready for retirement: 120.000 visits, 1.600.000 pages and 50.000.000 hits (not counting frequent Google crawls, integration with SMS services and &lt;a href="http://www.nieuwsblad.be/Life/Dier/"&gt;Nieuwsblad.be&lt;/a&gt;) for &lt;a href="http://www.pets.be"&gt;pets.be&lt;/a&gt; in a month was a bit too much for 1Gb RAM on a hyperthreaded processor which also runs some other websites and now my &lt;a href="http://www.koopjeszoeker.be"&gt;koopjeszoeker.be&lt;/a&gt; site which definitely needs more memory and faster disks.&lt;br /&gt;&lt;br /&gt;The investment wasn't small, but should be worth it: 2 servers, each with 2 quad-core cpu's and 4GB RAM, all in one unit.  I &lt;a href="http://www.ahead-it.be/"&gt;ordered the server&lt;/a&gt; on a tuesday morning and could pick it up the same evening. 3 weeks without free time later, the server is ready to be shipped from under my bed (the noise!) to the data center.  Ubuntu, Varnish, Apache 2, Tomcat, MySQL, Subversion, CVS, Firehol, ... all is installed and (a little bit) tested.&lt;br /&gt;&lt;br /&gt;Those dreaded "server busy" messages should be gone soon and koopjeszoeker.be will be ready to go out of beta! (Jay!)</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/rUbRdJW1szI/new-server-almost-complete.html" title="New server almost complete" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=2736193507290330554" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/2736193507290330554" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/2736193507290330554" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/12/new-server-almost-complete.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-1643977633921395578</id><published>2007-10-25T16:16:00.000+02:00</published><updated>2007-10-25T16:23:07.911+02:00</updated><title type="text">Varnish</title><content type="html">My &lt;a type="amzn" search="Squid Definitive"&gt;Squid book&lt;/a&gt; has arrived, but is it bit disappointing: only one chapter about &lt;a href="http://en.wikipedia.org/wiki/Reverse_proxy"&gt;reverse proxies&lt;/a&gt;!  Frank told me to have a look at &lt;a href="http://varnish.projects.linpro.no/"&gt;Varnish&lt;/a&gt;, so that's what I'll do!&lt;br /&gt;&lt;br /&gt;Apparently, Varnish isn't written with &lt;a href="http://varnish.projects.linpro.no/wiki/ArchitectNotes"&gt;1975 programming&lt;/a&gt; and should be &lt;a href="http://varnish.projects.linpro.no/wiki/FAQ#WhybotherwithVarnish-whynotuseSquid"&gt;much faster&lt;/a&gt;...</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/EXd6FBNUlWw/varnish.html" title="Varnish" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=1643977633921395578" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/1643977633921395578" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/1643977633921395578" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/10/varnish.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-6262380417077380346</id><published>2007-10-25T15:55:00.000+02:00</published><updated>2007-10-25T16:06:16.963+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server" /><title type="text">Ubuntu or CentOS or ...</title><content type="html">So, if one day I have my new dual quad-core server, what do I install on it?  Fedora made maintenance on my current server a bit hard because I had to go through &lt;a href="http://www.brandonhutchinson.com/Upgrading_Red_Hat_Linux_with_yum.html"&gt;long steps&lt;/a&gt; to go from one core to the next every 6 months (and sometimes a trip to Brussels to press the reset button when I messed up).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; seems easy to install and has &lt;a href="http://www.ubuntu.com/getubuntu/download"&gt;long support&lt;/a&gt; for the 6.06 version (till 2011).&lt;br /&gt;&lt;br /&gt;On the other hand, &lt;a href="http://www.centos.org/"&gt;CentOS&lt;/a&gt; seems reasonable too, since I know of some bigger companies who use it in production.  I personally don't know any companies running Ubuntu (I'm sure there are).&lt;br /&gt;&lt;br /&gt;Has anybody any experience with the Ubuntu server version?  I already installed it on an old computer at home, which worked ok, but what with multi-core processors?</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/3shfbH4XeZM/ubuntu-or-centos-or.html" title="Ubuntu or CentOS or ..." /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=6262380417077380346" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/6262380417077380346" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/6262380417077380346" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/10/ubuntu-or-centos-or.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-9189645515245221053</id><published>2007-10-23T10:20:00.001+02:00</published><updated>2007-10-23T10:30:06.077+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="webdevelopment" /><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><title type="text">Firefox add-ons</title><content type="html">In the series "which &lt;a href="http://www.mozilla.com/firefox/"&gt;Firefox&lt;/a&gt; &lt;a href="https://addons.mozilla.org/en-US/firefox/"&gt;add-ons&lt;/a&gt; do you need as a web developer", here's my list:&lt;br /&gt;- &lt;a href="http://www.getfirebug.com/"&gt;Firebug&lt;/a&gt;&lt;br /&gt;- &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/60"&gt;Web developer toolbar&lt;/a&gt;&lt;br /&gt;- &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/26"&gt;Download statusbar&lt;/a&gt;</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/zzlqD1oxy9M/firefox-add-ons.html" title="Firefox add-ons" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=9189645515245221053" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/9189645515245221053" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/9189645515245221053" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/10/firefox-add-ons.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-511488582749546552</id><published>2007-10-18T13:07:00.000+02:00</published><updated>2007-10-25T16:04:06.018+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server" /><title type="text">What type of new server should I choose?</title><content type="html">I'm seriously considering to buy a new server.  My current server (Pentium 4, 3 Ghz with 1 Gb RAM) is currently a bit too busy to be healthy.&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://www.ahead-it.be/shop.asp?cat=servers&amp;NR=6015T-T"&gt;double dual quad core&lt;/a&gt; (2 servers in 1 unit with each 2 quad-core cpu's, in total 32 Ghz processing power) may be a little bit overkill (4000 €).&lt;br /&gt;&lt;br /&gt;I'm however seriously considering a &lt;a href="http://www.ahead-it.be/shop.asp?cat=servers&amp;NR=SXS410"&gt;dual quad core setup&lt;/a&gt; with 8 Gb RAM which should be enough to handle the load for the next year(s). I looked up some information to find comparisons between a faster single core cpu and a slower dual or quad core cpu.  The conclusion was that for desktops a single faster cpu is sometimes better (because most desktop application are not multi-threaded), but for servers that are mostly multi-process systems you get slower response times but also higher throughput.  Since the response times are not really the problem, I think the multiple core setup will be the best choice.&lt;br /&gt;&lt;br /&gt;I'm still not sure if I should install &lt;a href="http://www.xensource.com/Pages/default.aspx"&gt;Xen&lt;/a&gt; for virtualization or not.  A benefit would be that I can install MySQL on one virtual server and assign it 4 processors for example.  Squid, Apache, Tomcat, Postfix, CVS, ... can all get their own virtual instance.  But wouldn't such a virtual-server-per-process setup be a bit hard to maintain?&lt;br /&gt;&lt;br /&gt;I'm not sure if virtualization would really give me any benefit, besides the fact that I can isolate some processes (like Postfix and CVS) that shouldn't be affected when the websites are under heavy load.  On the other hand, it seems a bit of a waste to reserve one cpu for these processes that really don't require so much cpu time.</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/ZxAeitNpNO8/what-type-of-new-server-should-i-choose.html" title="What type of new server should I choose?" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=511488582749546552" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/511488582749546552" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/511488582749546552" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/10/what-type-of-new-server-should-i-choose.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-4321480631377906629</id><published>2007-10-12T15:35:00.000+02:00</published><updated>2007-10-25T16:04:26.275+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="webdevelopment" /><title type="text">Book list</title><content type="html">I just ordered 2 new books at Amazon:&lt;br /&gt;&lt;br /&gt;&lt;a type="amzn" search="Squid Definitive"&gt;Squid, Definitive Guide&lt;/a&gt;&lt;br /&gt;&lt;a type="amzn" search="Release It"&gt;Release It!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm curious when they'll arrive!&lt;br /&gt;&lt;br /&gt;For the interested: my current library (ahum):&lt;br /&gt;&lt;a type="amzn" search="scalable websites"&gt;Building Scalable Websites&lt;/a&gt;&lt;br /&gt;&lt;a type="amzn" search="java development spring framework"&gt;Professional Java Development with the Spring Framework&lt;/a&gt;&lt;br /&gt;&lt;a type="amzn" search="j2ee without ejb"&gt;Expert One-on-One J2EE Development without EJB&lt;/a&gt;&lt;br /&gt;&lt;a type="amzn" search="hibernate action"&gt;Hibernate in Action&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I created these links to Amazon with the Amazon Affiliate program, so if you a book through this links, you're helping a poor Java developer...</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/mjxJ6oKbpBk/book-list.html" title="Book list" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=4321480631377906629" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/4321480631377906629" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/4321480631377906629" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/10/book-list.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-1673617285238661901</id><published>2007-10-08T16:14:00.001+02:00</published><updated>2007-10-08T16:21:25.756+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title type="text">Google Date Search</title><content type="html">Hundreds of other bloggers have probably already written about this new Google feature, but apparently I missed it.  So here it goes...&lt;br /&gt;&lt;br /&gt;You can go to the "advanced settings" page in Google and search for pages that Google found in a certain timeframe (the last 24 hours, the last week, ...).  What makes it really interesting is that you can limit the results to a site, so you can use &lt;br /&gt;&lt;a href="http://www.google.com/search?q=site%3Apets.be&amp;as_qdr=d"&gt;http://www.google.com/search?q=site%3Apets.be&amp;as_qdr=d&lt;/a&gt;&lt;br /&gt;to get all pages from &lt;a href="http://www.pets.be"&gt;pets.be&lt;/a&gt; that were updated in the last day.&lt;br /&gt;&lt;br /&gt;You can change the &lt;em&gt;as_qdr&lt;/em&gt; parameter to:&lt;br /&gt;d[number] - past number of days (e.g.: d10)&lt;br /&gt;w[number] - past number of weeks&lt;br /&gt;y[number] - past number of years &lt;br /&gt;&lt;br /&gt;(from &lt;a href="http://www.mattcutts.com/blog/"&gt;Matt Cutts' Blog&lt;/a&gt;)</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/L0379lgtPUs/google-date-search.html" title="Google Date Search" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=1673617285238661901" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/1673617285238661901" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/1673617285238661901" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/10/google-date-search.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-2175122600805612012</id><published>2007-09-28T23:51:00.000+02:00</published><updated>2007-10-08T16:23:15.584+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="webdevelopment" /><category scheme="http://www.blogger.com/atom/ns#" term="gwt" /><title type="text">GWT and IE: The Story Continues</title><content type="html">This is the second time I loose more than a day searching why Internet Explorer choked on my GWT application.&lt;br /&gt;&lt;br /&gt;Finally, I replaced my whole GWT code with the latest working version, but still without result.  The only difference between the working version and the broken one was the CSS file.  After a boring process of commenting and uncommenting CSS lines, I found that the guilty part was this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#content{&lt;br /&gt;  border: 1px solid #3F8FB6;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I still don't get it...</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/3d6GnoFHTkg/gwt-and-ie-story-continues.html" title="GWT and IE: The Story Continues" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=2175122600805612012" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/2175122600805612012" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/2175122600805612012" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/09/gwt-and-ie-story-continues.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-3914310976393550930</id><published>2007-09-19T10:45:00.000+02:00</published><updated>2007-10-25T16:04:42.789+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="webdevelopment" /><category scheme="http://www.blogger.com/atom/ns#" term="gwt" /><title type="text">GWT and IE: operation aborted</title><content type="html">I got an "operation aborted" error in Internet Explorer 7, which rendered half of the page and then showed an empty page.  Needless to say that everything worked perfectly in Firefox.&lt;br /&gt;&lt;br /&gt;Even stranger was that I finally managed to fix it, but when I added Google Adsense banners, I got the error again!&lt;br /&gt;&lt;br /&gt;After some googling and frustrating (un)commenting of blocks of code, I finally moved all javascript imports (&lt;a href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt; and &lt;a href="http://www.google.be/analytics/nl-NL/"&gt;Google Analytics&lt;/a&gt;) to the end of the page (just before the closing body tag).  And - woohoo!- everything works!&lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://clientside.cnet.com/code-snippets/manipulating-the-dom/ie-and-operation-aborted/"&gt;this overview&lt;/a&gt; of the problem!</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/r2MOhSXpvJs/gwt-and-ie-operation-aborted.html" title="GWT and IE: operation aborted" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=3914310976393550930" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/3914310976393550930" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/3914310976393550930" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/09/gwt-and-ie-operation-aborted.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-4904771171528840633</id><published>2007-08-07T13:14:00.001+02:00</published><updated>2007-08-07T13:18:32.773+02:00</updated><title type="text">Ee-jay-bee</title><content type="html">Something just hit me: why does everyone (in Belgium at least) pronounces &lt;a href="http://java.sun.com/products/ejb/"&gt;EJB&lt;/a&gt; as ee-gi-bee?  Isn't a J pronounced as jay, so it should be ee-jay-bee?&lt;br /&gt;&lt;br /&gt;Or am I completely missing the point here and should I call it &lt;a href="http://java.sun.com/javaee/overview/faq/persistence.jsp"&gt;JPA&lt;/a&gt; (but is that gi-pi-ay or jay-pi-ay)?</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/EnjTCYOSd2w/ee-jay-bee.html" title="Ee-jay-bee" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=4904771171528840633" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/4904771171528840633" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/4904771171528840633" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/08/ee-jay-bee.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-5908017924884573286</id><published>2007-06-18T11:45:00.000+02:00</published><updated>2007-10-08T16:24:31.559+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="gwt" /><category scheme="http://www.blogger.com/atom/ns#" term="portfolio" /><title type="text">www.koopjeszoeker.com</title><content type="html">After tryouts with &lt;a href="http://script.aculo.us/"&gt;script.aculo.us&lt;/a&gt;, &lt;a href="http://mootools.net/"&gt;mootools&lt;/a&gt; and &lt;a href="http://getahead.org/dwr"&gt;DWR&lt;/a&gt;, I finally decided to go with &lt;a href="http://code.google.com/webtoolkit/"&gt;Google Web Toolkit&lt;/a&gt; (GWT) for the (badly needed) update of my &lt;a href="http://www.koopjeszoeker.com"&gt;koopjeszoeker&lt;/a&gt; website.&lt;br /&gt;&lt;br /&gt;GWT allows me to make changes much faster than I could do it with DWR or other frameworks.  Writing javascript from Java code seems strange at first, but it's much like writing a Swing application.&lt;br /&gt;&lt;br /&gt;On top of that, I get the following benefits:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;I don't need to worry about versioning, GWT uses hashes which create new filenames for every release.  So I can cache all files "until the sun explodes".&lt;/li&gt;&lt;br /&gt;&lt;li&gt;GWT compresses and obfuscates the generated javascript&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Internationalisation is fully supported as in Java with properties files&lt;/li&gt;&lt;br /&gt;&lt;li&gt;GWT creates separate files for every browser and language, which means that a Dutch user on Firefox doesn't need to download code that can be used on an English Safari.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The javascript is compatible on all major browsers&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;My experiences:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;During development, compile to Firefox for one language instead of to all browsers for all languages.  You can do this by adding this to your module xml file:&lt;br /&gt;&lt;pre&gt;&amp;lt;extend-property name="locale" values="nl_BE"/&amp;gt;&lt;br /&gt;&amp;lt;set-property name="user.agent" value="gecko"/&amp;gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Get a faster computer, it really helps.  On my Pentium 4 2.8 Ghz, it took 30 seconds to compile.  On my brand new Dual Core 2.6Ghz with 2 RAID disks, it takes 5 seconds.  Considering the number of times you compile, it really makes it much more fun to develop.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;There is also a "hosted mode" which runs the code as Java, without compiling to javascript.  I don't use this anymore because (for my project) it takes longer to start up than simply compiling to javascript and it's more difficult to integrate with a backend.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I did integration with Spring for the RPC calls by extending RemoteServiceServlet and overriding the method processCall:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public String processCall(String payload) throws SerializationException {&lt;br /&gt;        initialize();&lt;br /&gt;        try {&lt;br /&gt;            RPCRequest rpcRequest = RPC.decodeRequest(payload, AjaxService.class);&lt;br /&gt;            return RPC.invokeAndEncodeResponse(this.ajaxService, rpcRequest.getMethod(),&lt;br /&gt;                rpcRequest.getParameters());&lt;br /&gt;          } catch (IncompatibleRemoteServiceException ex) {&lt;br /&gt;            return RPC.encodeResponseForFailure(null, ex);&lt;br /&gt;          }&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;AJAX pages don't work well with Google indexing and Google Adsense.  For that reason, I created seperate pages for the search results instead of putting the whole site on one page.  I also added noscript tags to the html with a plain html result.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/4c47jk58R3g/wwwkoopjeszoekercom.html" title="www.koopjeszoeker.com" /><link rel="related" href="http://www.koopjeszoeker.com" title="www.koopjeszoeker.com" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=5908017924884573286" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/5908017924884573286" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/5908017924884573286" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/06/wwwkoopjeszoekercom.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-7523934831301793074</id><published>2007-04-23T13:26:00.000+02:00</published><updated>2007-04-23T13:31:55.792+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title type="text">Maven Integration for Eclipse plugin and FTP deployments</title><content type="html">I got a strange error after I configured Maven 2 to use ftp for deployment of artifacts to a local maven repository.  It worked from the command line, but not from within Eclipse.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;" class="error"&gt;[INFO]&lt;/span&gt;&lt;span style="font-family: courier new;"&gt; The internal default plexus-bootstrap.xml is missing. This is highly irregular, your plexus JAR is most likely corrupt. Realms:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; null.child-container&lt;/span&gt;&lt;span style="font-family: courier new;" class="error"&gt;[extensions]&lt;/span&gt;&lt;span style="font-family: courier new;"&gt; parent=null (null)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; plexus.core parent=sun.misc.Launcher$AppClassLoader@1a5ab41 (jar:file:///home/rsonnek/Programs/eclipse/configuration/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;org.eclipse.osgi/bundles/509/1/.cp/lib/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;maven-embedder-2.1.0.v20070110-2115-dep.jar%21/org/codehaus/plexus/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;plexus-bootstrap.xml)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Apparently there is an &lt;a href="http://jira.codehaus.org/browse/MNGECLIPSE-241"&gt;issue&lt;/a&gt; with the "&lt;a href="http://m2eclipse.codehaus.org/"&gt;Maven Integration for Eclipse&lt;/a&gt;" plugin that I use. A solution is available in svn, but I can't connect to it so at the moment, I'm stuck...</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/8Fv_OBkLIFI/maven-integration-for-eclipse-plugin.html" title="Maven Integration for Eclipse plugin and FTP deployments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=7523934831301793074" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/7523934831301793074" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/7523934831301793074" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/04/maven-integration-for-eclipse-plugin.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-8421980981416002205</id><published>2007-04-02T10:28:00.000+02:00</published><updated>2007-06-22T13:30:57.306+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="webdevelopment" /><category scheme="http://www.blogger.com/atom/ns#" term="spring" /><category scheme="http://www.blogger.com/atom/ns#" term="annotations" /><title type="text">Spring sample project</title><content type="html">I found a nice (and small) &lt;a href="http://blog.interface21.com/main/2007/03/12/carplant-not-accepting-null-carmodels/"&gt;Spring sample project&lt;/a&gt; on the &lt;a href="http://blog.interface21.com/main/"&gt;Interface21 Team Blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I learned about @NotNull annotations and how to define/process them in the applicationContext.xml.  Also, this is an interesting remark I found about registering PropertyEditors:&lt;br /&gt;&lt;br /&gt;&lt;quote&gt;The JavaBeans package uses a small little convention to resolve property editors. If a conversion is needed for a specific class, the JavaBeans package searches (amongst other) for a class in the same package named after the to be converted class, appended with 'Editor'. Therefore, the CarModelEditor does NOT have to be registered; it's found automatically!&lt;/quote&gt;&lt;br /&gt;&lt;br /&gt;I suggest you &lt;a href="http://blog.interface21.com/main/wp-content/uploads/2007/03/CarPlant.zip"&gt;download the code&lt;/a&gt; and have a look at the xml and java files.</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/BQaLmyy2ZgU/spring-sample-project.html" title="Spring sample project" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=8421980981416002205" title="4 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/8421980981416002205" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/8421980981416002205" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/04/spring-sample-project.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-6503923328836168486</id><published>2007-03-26T14:56:00.000+02:00</published><updated>2007-06-22T13:30:57.307+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="webdevelopment" /><title type="text">Webwerkers Blog</title><content type="html">Samen met Frank (een collega van mijn "The Reference" periode) en enkele andere collega's is het de bedoeling om een blog voor "&lt;a href="http://webwerkers.wordpress.com/"&gt;webwerkers&lt;/a&gt;" bij te houden.  Mijn eerste post over &lt;a href="http://webwerkers.wordpress.com/2007/03/26/html-optimalisaties/"&gt;HTML optimalisaties&lt;/a&gt; staat er al!</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/s675YHLnH94/webwerkers-blog.html" title="Webwerkers Blog" /><link rel="related" href="http://webwerkers.wordpress.com/" title="Webwerkers Blog" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=6503923328836168486" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/6503923328836168486" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/6503923328836168486" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/03/webwerkers-blog.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-5768680.post-3746061627275132908</id><published>2007-03-11T16:29:00.000+01:00</published><updated>2007-10-25T16:07:03.996+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server" /><title type="text">Website hosting</title><content type="html">After 303 days of uptime, I decided to reboot my onthoo.com server.  The load was getting a bit too high, especially since my brothers website &lt;a href="http://www.pets.be"&gt;pets.be&lt;/a&gt; was mentioned in some national newspapers (&lt;a href="http://www.hln.be/"&gt;Het Laatste Nieuws&lt;/a&gt; and &lt;a href="http://www.lameuse.be/"&gt;La Meuse&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;This was the last uptime message after a long time without any reboots:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;16:22:13 up 303 days, 21:43,  1 user,  load average: 0.31, 12.81, 57.29&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Memory was constantly at 800 MB used, without any significant processes running.  After the reboot, it was only 250 MB...&lt;br /&gt;&lt;br /&gt;Nevertheless a good uptime for this server, which has to handle quite a load these days.&lt;br /&gt;&lt;br /&gt;I still have to figure out what exactly went wrong, since the server didn't respond to http, ssh nor smtp.  After some hours, everything came up like nothing had happened.  In the Apache logs I found a lot of OutOfMemory errors, maybe the server was just constantly swapping without any time left for handling connections.&lt;br /&gt;&lt;br /&gt;I tweaked some Apache parameters, but apparently this wasn't enough.  If anyone knows of a way how to prevent Apache from taking too much memory, please let me know!</content><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/onthoo-programming/~3/RZvm0-52U3E/website-hosting.html" title="Website hosting" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5768680&amp;postID=3746061627275132908" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.onthoo.com/blog/programming/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/3746061627275132908" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5768680/posts/default/3746061627275132908" /><author><name>Pieter Coucke</name><uri>http://www.blogger.com/profile/11404303306310346933</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.onthoo.com/blog/programming/2007/03/website-hosting.html</feedburner:origLink></entry></feed>
