<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-18813684</id><updated>2012-02-16T09:13:09.753+01:00</updated><category term='logging'/><category term='flash'/><category term='ecmascript'/><category term='logs'/><category term='news'/><category term='bug'/><category term='asynhronous'/><category term='expose'/><category term='abortion'/><category term='adobe'/><category term='cocoa'/><category term='omniplan'/><category term='www'/><category term='make'/><category term='verbose'/><category term='maxosx'/><category term='extension'/><category term='sticky notes'/><category term='freebsd'/><category term='unicode'/><category term='mini'/><category term='macox'/><category term='xhtml'/><category term='opera'/><category term='patch'/><category term='scripting'/><category term='seashore'/><category term='aqua'/><category term='java'/><category term='user agent'/><category term='commit'/><category term='not found'/><category term='color profile'/><category term='mac os'/><category term='graphics'/><category term='omni'/><category term='tiger'/><category term='ip6'/><category term='msie'/><category term='compatibility'/><category term='logdoc'/><category term='delicious'/><category term='mac'/><category term='design'/><category term='java2d'/><category term='statistics'/><category term='xsltc'/><category term='saxon'/><category term='text-overflow'/><category term='svn'/><category term='konsole'/><category term='sessionalive'/><category term='this'/><category term='mail'/><category term='igtd'/><category term='introduction'/><category term='decrypt'/><category term='ipodnano'/><category term='acid3'/><category term='macosx'/><category term='web applications'/><category term='iso'/><category term='headless'/><category term='osx'/><category term='contract first'/><category term='openoffice'/><category term='dhtml'/><category term='safari 3'/><category term='ecma'/><category term='compilation'/><category term='espresso'/><category term='file format'/><category term='tdd'/><category term='services'/><category term='code'/><category term='image'/><category term='productivity'/><category term='prefetching'/><category term='update'/><category term='taskdef'/><category term='del.icio.us'/><category term='quicktime'/><category term='boot'/><category term='usb'/><category term='text replacement'/><category term='howto'/><category term='photoshop'/><category term='ppk'/><category term='ssh'/><category term='xslt'/><category term='yslow'/><category term='vnc'/><category term='widgets'/><category term='jquery'/><category term='print'/><category term='comma-separated values'/><category term='ipod'/><category term='mac mini'/><category term='log'/><category term='compliance'/><category term='standards'/><category term='xins3'/><category term='caching'/><category term='camino'/><category term='equals'/><category term='pensioenpage'/><category term='market share'/><category term='color space'/><category term='installation'/><category term='realplayer'/><category term='display'/><category term='html5'/><category term='web'/><category term='firebug'/><category term='junit'/><category term='leap'/><category term='finder'/><category term='quicksilver'/><category term='10.4.10'/><category term='xmlhttprequest'/><category term='2800'/><category term='verbosity'/><category term='browser detection'/><category term='applications'/><category term='a3'/><category term='hint'/><category term='css'/><category term='performance'/><category term='vim'/><category term='safari'/><category term='xml'/><category term='squirrelfish'/><category term='mysql'/><category term='googletalk'/><category term='keynote'/><category term='blogger beta'/><category term='language'/><category term='web standards'/><category term='firefox3.5'/><category term='gui'/><category term='ie8'/><category term='comma-separated'/><category term='atg'/><category term='integration'/><category term='concepts'/><category term='stdout'/><category term='contract-orientation'/><category term='swf'/><category term='release'/><category term='suspend'/><category term='iphoney'/><category term='webapps'/><category term='file formats'/><category term='annoyances'/><category term='yahoo'/><category term='roo'/><category term='javascript'/><category term='user agent sniffing'/><category term='user agent string'/><category term='bizarre'/><category term='web development'/><category term='firefox3'/><category term='youtube'/><category term='http'/><category term='vuescan'/><category term='browsers'/><category term='magiccamopen'/><category term='opera turbo'/><category term='decryption'/><category term='analysis'/><category term='browser'/><category term='class'/><category term='murder'/><category term='script'/><category term='windows'/><category term='background'/><category term='spotlight'/><category term='libpng'/><category term='404'/><category term='neooffice'/><category term='csv'/><category term='scroll wheel'/><category term='crash'/><category term='cvs'/><category term='induced abortion'/><category term='ant'/><category term='nano'/><category term='internet explorer'/><category term='kubuntu'/><category term='webdesign'/><category term='translator'/><category term='prefetch'/><category term='ods'/><category term='real player'/><category term='syntax highlighting'/><category term='gecko'/><category term='font'/><category term='pixelmator'/><category term='adobe reader'/><category term='life'/><category term='xins'/><category term='blogger'/><category term='parallels tools'/><category term='oo'/><category term='cinema'/><category term='generics'/><category term='magiccam'/><category term='tunnel'/><category term='search'/><category term='firefox2'/><category term='features'/><category term='jansi'/><category term='mozilla'/><category term='svk'/><category term='witch'/><category term='isight'/><category term='sysadmin'/><category term='lesscss'/><category term='grapple'/><category term='optipng'/><category term='gentoo'/><category term='collaboration'/><category term='ipod nano'/><category term='death'/><category term='fonts'/><category term='opendocument'/><category term='resolution'/><category term='wanadoo'/><category term='webmail'/><category term='impress'/><category term='aluminum'/><category term='gem'/><category term='bij'/><category term='apps'/><category term='torrent'/><category term='msie6'/><category term='video'/><category term='redirect'/><category term='openoffice.org'/><category term='jline'/><category term='sitepoint'/><category term='lock'/><category term='intro'/><category term='agent string'/><category term='format'/><category term='diff'/><category term='ellipsis'/><category term='winfax'/><category term='beta'/><category term='ooxml'/><category term='output'/><category term='parallels'/><category term='problems'/><category term='report'/><category term='dns'/><category term='ie6'/><category term='servicecaller'/><category term='error page'/><category term='cc'/><category term='optimization'/><category term='hyperwords'/><category term='error'/><category term='subversion'/><category term='msie8'/><category term='darwin'/><category term='remote vnc'/><category term='support'/><category term='import'/><category term='github'/><category term='tomcat'/><category term='png'/><category term='webstandards'/><category term='excel'/><category term='webkit'/><category term='invalid'/><category term='leopard'/><category term='planning'/><category term='jetty'/><category term='user interface'/><category term='macbook'/><category term='gimp'/><category term='10.4.9'/><category term='mighty mouse'/><category term='csvreader'/><category term='screen'/><category term='speed'/><category term='opendocument spreadsheet'/><category term='jna'/><category term='docs'/><category term='hier'/><category term='writer'/><category term='acorn'/><category term='10.5'/><category term='fluid'/><category term='mac os x'/><category term='colorspace'/><category term='gtk'/><category term='dashboard'/><category term='revert'/><category term='web services'/><category term='scrolling'/><category term='ie'/><category term='kde'/><category term='tip'/><category term='hewlett-packard'/><category term='vbtelecom'/><category term='acrobat'/><category term='wireless'/><category term='pagesender'/><category term='task'/><category term='kernel'/><category term='winxp'/><category term='ccze'/><category term='project management'/><category term='qt'/><category term='numbers'/><category term='ipv6'/><category term='install'/><category term='remotevnc'/><category term='image editor'/><category term='macos'/><category term='iterm'/><category term='omnigroup'/><category term='snow leopard'/><category term='tomato torrent'/><category term='javadoc'/><category term='epiphany'/><category term='log colorizer'/><category term='apache ant'/><category term='printing'/><category term='word'/><category term='syntax'/><category term='data exchange'/><category term='java5'/><category term='firefox'/><category term='fileformats'/><category term='test'/><category term='pngquant'/><category term='iphone'/><category term='opera10'/><category term='spring'/><category term='lnf'/><category term='todo'/><category term='eclipse'/><category term='webdev'/><category term='business inkjet'/><category term='bind'/><category term='bittorrent'/><category term='image manipulation'/><category term='turbo'/><category term='iwork'/><category term='refactoring'/><category term='security'/><category term='css3'/><category term='lookandfeel'/><category term='compile'/><category term='civil rights'/><category term='editor'/><category term='java6'/><category term='edit'/><category term='microsoft office'/><category term='html'/><category term='calc'/><category term='stats'/><category term='orange'/><category term='version control'/><category term='testing'/><category term='zlib'/><category term='hp'/><category term='hover'/><category term='ide'/><category term='web design'/><category term='iec'/><category term='macheist'/><category term='yui'/><category term='cache'/><category term='pcre'/><category term='converter'/><category term='apple'/><category term='google talk'/><category term='export'/><category term='overflow'/><category term='gnome'/><category term='real'/><category term='spreadsheet'/><category term='ms'/><category term='issues'/><category term='internet'/><category term='darwinports'/><category term='microsoft word'/><category term='linux'/><category term='gnupg'/><category term='powerpoint'/><category term='growl'/><category term='safari3'/><category term='gtd'/><category term='ssb'/><category term='inkjet'/><category term='pages'/><category term='ajax'/><category term='colorize'/><category term='2d'/><category term='bsd'/><category term='firewire'/><category term='odfidvd'/><category term='odf'/><category term='terminal'/><category term='prolife'/><category term='jboss'/><category term='microsoft'/><category term='formats'/><category term='less'/><category term='password'/><category term='xins.xins3'/><category term='system administration'/><title type='text'>Ernst's Corner</title><subtitle type='html'>Blog by Ernst de Haan (from .nl). What is there to know about me? Above all, that I am a christian. On this blog I write mostly about web development, UNIX, Apple, Java, XML and web design.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default?start-index=101&amp;max-results=100'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>155</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18813684.post-5018331709127351572</id><published>2011-05-11T00:34:00.000+02:00</published><updated>2011-05-11T00:34:41.223+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='user agent sniffing'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><category scheme='http://www.blogger.com/atom/ns#' term='browser detection'/><title type='text'>Clean CSS with Server-Side Browser Detection (1/2)</title><content type='html'>&lt;b&gt;Why?!&lt;/b&gt; &lt;br /&gt;We all know that &lt;a href="http://css-tricks.com/browser-detection-is-bad/"&gt;browser detection is bad&lt;/a&gt;, but let us look at some situations in which it may actually make sense; consider the following use cases:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A specific (old?) browser needs some special CSS styles to make things look/work acceptably.&lt;br /&gt;For example, Firefox 3.0 needs a negative margin on an INPUT field, to correct a bug.&lt;/li&gt;&lt;li&gt;Certain content should be highlighted to give a visual clue that this content appears most appropriate for the visitor's context, like browser and OS.&lt;br /&gt;For example, on a download page, you want to highlight a download for Mac OS X 10.6, because that is what the visitor appears to use.&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;Alternative Solutions&lt;/b&gt; &lt;br /&gt;Typical solutions for these problems are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Use &lt;a href="http://www.webdevout.net/css-hacks"&gt;CSS hacks&lt;/a&gt;.&lt;br /&gt;Downsides: Unreliable, cumbersome and very hard to maintain.&lt;/li&gt;&lt;li&gt;Use &lt;a href="http://msdn.microsoft.com/en-us/library/ms537512%28v=vs.85%29.aspx"&gt;conditional comments&lt;/a&gt;.&lt;br /&gt;Downside: IE-only.&lt;/li&gt;&lt;li&gt;Use &lt;a href="http://peter.michaux.ca/articles/feature-detection-state-of-the-art-browser-scripting"&gt;feature detection&lt;/a&gt;. Various client-side frameworks support this, e.g., &lt;a href="http://www.modernizr.com/"&gt;Modernizr&lt;/a&gt; or &lt;a href="http://www.electrictoolbox.com/jquery-browser-feature-detection/"&gt;jQuery's $.support&lt;/a&gt;.&lt;br /&gt;Downsides: Only works when JavaScript is enabled, only on more recent, capable browsers and &lt;em&gt;may&lt;/em&gt; impact performance negatively on less capable devices.&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;The Case for a Different Path&lt;/b&gt;&lt;br /&gt;Excluding the first one, the mentioned solutions have their applications in modern web development. However, they certainly do not cover all ground.&lt;br /&gt;&lt;br /&gt;An alternative solution for the specified use cases would be welcome if it would comply with all or most of the following requirements:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Reliable, e.g. should automatically pick up new browser versions.&lt;/li&gt;&lt;li&gt;Easy to apply.&lt;/li&gt;&lt;li&gt;Easy to maintain, i.e., no hacks like &lt;code&gt;html&amp;gt;/**/body {}&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Generally applicable, i.e., not specific to IE.&lt;/li&gt;&lt;li&gt;Supports &lt;a href="http://www.alistapart.com/articles/understandingprogressiveenhancement/"&gt;Progressive Enhancement&lt;/a&gt;, i.e., does not require JavaScript.&lt;/li&gt;&lt;li&gt;Supports older and less capable browsers as well as more recent and capable ones.&lt;/li&gt;&lt;li&gt;High performance, no time lost detecting features client-side on a limited CPU.&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;Server-Side Detection&lt;/b&gt;&lt;br /&gt;An alternative solution is to have a server-side algorithm add some CSS classes to an element on the HTML document. For example, an iPad agent string could result in the following BODY tag being generated:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&amp;lt;BODY class="Device-Tablet Browser-Safari BrowserEngine-WebKit BrowserOS-iOS"&amp;gt;&lt;/code&gt;&lt;/blockquote&gt;Let's look at what such an approach has to bring to the table in terms of requirements coverage:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Reliability: Fair/good. Newer browser versions will be picked up automatically or with an update of the detection algorithm.&lt;/li&gt;&lt;li&gt;Easy to apply: Yes, definitely: &lt;code&gt;BODY.BrowserOS-MacOS .MacDownload {border: 1px solid green;}&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Easy to maintain: Yes, you only deal with (readable!) CSS.&lt;/li&gt;&lt;li&gt;Generally applicable: Yes, only limited by what user agents offer (of course) and what the algorithm detects; but the algorithm can be extended.&lt;/li&gt;&lt;li&gt;Supports Progressive Enhancement: Yes, perfectly. Works without a single line of JavaScript.&lt;/li&gt;&lt;li&gt;Supports older and less capable browsers: Yes, the detection is done server-side, independent of the browser.&lt;/li&gt;&lt;li&gt;High performance: Yes, server-side algorithm should take less than 10 ms.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;b&gt;What's Next?&lt;/b&gt;&lt;br /&gt;Does it sound like there is a valid use case for server-side browser detection? Let me know in the comments!&lt;br /&gt;&lt;br /&gt;In a followup article, I will give some code samples.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-5018331709127351572?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/5018331709127351572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2011/05/clean-css-with-server-side-browser.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5018331709127351572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5018331709127351572'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2011/05/clean-css-with-server-side-browser.html' title='Clean CSS with Server-Side Browser Detection (1/2)'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-4370330671634821006</id><published>2010-12-27T21:27:00.001+01:00</published><updated>2010-12-27T21:37:15.511+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><category scheme='http://www.blogger.com/atom/ns#' term='javadoc'/><category scheme='http://www.blogger.com/atom/ns#' term='docs'/><title type='text'>TDD versus DDT</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;Test-driven development&lt;/a&gt;&amp;nbsp;(TDD) is commonly accepted as a practical approach for producing high quality production code and high quality unit tests at virtually the same time.&lt;br /&gt;&lt;br /&gt;This short article is about an alternative approach, called &lt;b&gt;Documentation-driven testing&lt;/b&gt; (DDT). While it does not apply in all situation (which approach does?) I have used it effectively, although until now I've never taken the effort to describe how we did it.&lt;br /&gt;&lt;br /&gt;This is how TDD works:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Write a minimal test for the currently non-existent production code; no more than is needed to make the test fail; and not compiling is a form of failing.&lt;/li&gt;&lt;li&gt;Make sure the test fails.&lt;/li&gt;&lt;li&gt;Write the production code; program only what is needed to make the test succeed. And yes, take this literally, even if it appears stupid (e.g. returning a constant from a computation method).&lt;/li&gt;&lt;li&gt;Make sure the test succeeds.&lt;/li&gt;&lt;li&gt;Either go to step 1 or refactor the code and go to step 3.&lt;/li&gt;&lt;/ol&gt;Now, here is how DDT works:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Write Javadoc API documentation for the production code, with a just an no-op implementation. The code should compile and the Javadoc API documentation should be generated.&lt;/li&gt;&lt;li&gt;Write unit tests using only that documentation. This should be done by somebody other than the one that wrote the documentation.&lt;/li&gt;&lt;li&gt;Make sure the test fails.&lt;/li&gt;&lt;li&gt;Implement the production code.&lt;/li&gt;&lt;li&gt;Make sure the test succeeds and, if not, find the source of the error (documentation, production code or test code).&lt;/li&gt;&lt;li&gt;Go back to step 1 or refactor the code and go to step 5.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Now, what is the advantage of this approach? The main driver is the quality of the documentation, including the consistency with the production code. Note that you should already get a good review of the quality of that documentation in step 2, since a lack of understanding on the side of the unit test author should ring some bells.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is clear this approach is not applicable everywhere, all the time. As is suggested in &lt;a href="http://www.objectmentor.com/omTeam/martin_r.html"&gt;Uncle Bob&lt;/a&gt;'s great book &lt;a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882"&gt;Clean Code&lt;/a&gt;, avoid comments except for public APIs. There it may be an approach that works for your team; if it works for you (or not) do let me know!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-4370330671634821006?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/4370330671634821006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2010/12/tdd-versus-ddt.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4370330671634821006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4370330671634821006'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2010/12/tdd-versus-ddt.html' title='TDD versus DDT'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-8380684770366976440</id><published>2010-10-19T21:54:00.000+02:00</published><updated>2010-10-19T21:54:32.469+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vbtelecom'/><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='redirect'/><category scheme='http://www.blogger.com/atom/ns#' term='bizarre'/><title type='text'>Bizarre: Site redirecting to about:blank</title><content type='html'>The site www.vbtelecom.nl is redirecting to about:blank. How bizarre! And it works in both Firefox 3.6.10 and Safari 5.0.2:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$ telnet www.vbtelecom.nl 80&lt;br /&gt;Trying 77.95.248.16...&lt;br /&gt;Connected to redirect.server.eu.&lt;br /&gt;Escape character is '^]'.&lt;br /&gt;GET / HTTP/1.1&lt;br /&gt;Host: www.vbtelecom.nl&lt;br /&gt;&lt;br /&gt;HTTP/1.1 302 Found&lt;br /&gt;Date: Tue, 19 Oct 2010 19:49:19 GMT&lt;br /&gt;Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny6 with Suhosin-Patch&lt;br /&gt;X-Powered-By: PHP/5.2.6-1+lenny6&lt;br /&gt;Location: about:blank&lt;br /&gt;Vary: Accept-Encoding&lt;br /&gt;Content-Length: 0&lt;br /&gt;Content-Type: text/html&lt;br /&gt;&lt;br /&gt;Connection closed by foreign host.&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-8380684770366976440?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/8380684770366976440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2010/10/bizarre-site-redirecting-to-aboutblank.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8380684770366976440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8380684770366976440'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2010/10/bizarre-site-redirecting-to-aboutblank.html' title='Bizarre: Site redirecting to about:blank'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-7380471527126590409</id><published>2010-04-30T13:43:00.000+02:00</published><updated>2010-04-30T13:43:59.973+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xins'/><category scheme='http://www.blogger.com/atom/ns#' term='ip6'/><category scheme='http://www.blogger.com/atom/ns#' term='ipv6'/><title type='text'>XINS lacking IPv6 support</title><content type='html'>If you get the following error while running a XINS-based application:&lt;br /&gt;&lt;blockquote&gt;&lt;tt&gt;org.xins.common.text.ParseException: The string "0:0:0:0:0:0:0:1%0" is not a valid IP address.&lt;/tt&gt;&lt;/blockquote&gt;&lt;br /&gt;then you found out the hard way that XINS lacks IPv6 support. This applies to all current versions of XINS: 2.2, 2.3-beta1 and 3.0-beta1.&lt;br /&gt;&lt;br /&gt;To work around this, set the system property &lt;tt&gt;java.net.preferIPv4Stack&lt;/tt&gt; to &lt;tt&gt;true&lt;/tt&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-7380471527126590409?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/7380471527126590409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2010/04/xins-lacking-ipv6-support.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7380471527126590409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7380471527126590409'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2010/04/xins-lacking-ipv6-support.html' title='XINS lacking IPv6 support'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-4019958030185917189</id><published>2010-04-28T23:13:00.000+02:00</published><updated>2010-04-28T23:13:17.607+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apache ant'/><category scheme='http://www.blogger.com/atom/ns#' term='xins3'/><category scheme='http://www.blogger.com/atom/ns#' term='xins'/><category scheme='http://www.blogger.com/atom/ns#' term='github'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='logdoc'/><title type='text'>XINS 3.0-beta1 released</title><content type='html'>Just now I tagged 3.0-beta1 of my experimental XINS fork (which is not so experimental from the perspective that it has been running in production-sites since 2007).&lt;br /&gt;&lt;br /&gt;Source and related stuff available from GitHub:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://github.com/znerd/xins"&gt;http://github.com/znerd/xins&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;For a complete download, get this ZIP package:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ernstdehaan.com/xins-3.0-beta1.zip"&gt;http://ernstdehaan.com/xins-3.0-beta1.zip&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Recent changes include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ant 1.8.0 is now properly supported&lt;/li&gt;&lt;li&gt;Logdoc definitions are now validated using XSDs (&lt;a href="http://github.com/znerd/logdoc"&gt;Logdoc&lt;/a&gt; 0.3 included)&lt;/li&gt;&lt;li&gt;Default runtime config file reload interval is now 5 instead of 60  seconds. &lt;/li&gt;&lt;li&gt; Not initializing logging subsystem (Log4J) if system property "org.xins.server.logging.init" is set to "false".&lt;/li&gt;&lt;li&gt;Not setting context IDs (in Log4J terminology: NDC.push() calls) if property "org.xins.server.contextID.push" is set to false (system, bootstrap or runtime property).&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-4019958030185917189?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/4019958030185917189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2010/04/xins-30-beta1-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4019958030185917189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4019958030185917189'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2010/04/xins-30-beta1-released.html' title='XINS 3.0-beta1 released'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-5585657839701186822</id><published>2010-04-17T15:04:00.000+02:00</published><updated>2010-04-17T15:04:17.119+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='contract first'/><category scheme='http://www.blogger.com/atom/ns#' term='contract-orientation'/><title type='text'>The importance of contract-first development</title><content type='html'>In enterprise IT projects, software services are typically consumed by other teams or even organisations than those who programmed those services. For example, a Billing system can be instructed by a User Profile system to allocate billing details for a new user profile. Or a Web Frontend system can ask a Session Management system for the data pertaining to a certain session ID.&lt;br /&gt;&lt;br /&gt;This is typical service-orientation.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Expectation management&lt;/b&gt;&lt;br /&gt;A challenge in such a service-oriented approach is making sure that all involved parties – and that can be or become a lot more than just 2 – have the same expectations from the service. In my experience this is the number one source of frustrations and issues.&lt;br /&gt;&lt;br /&gt;Before a service is built or extended, the parties involved at that point in time typically reach agreement what the new functionality should do and how it should be accessed. It is then quite common to have those teams work in parallel, because time-to-market is key.&lt;br /&gt;&lt;br /&gt;But even if the teams do not work in parallel, when the service provider delivers functionality for testing and integration, expectations from the other parties can be very hard to meet. For example, service consumers may have expected different formats or may have expected necessary transformations would be done by the service provider, while the service provider is pushing the requirement to the callers.&lt;br /&gt;&lt;br /&gt;When this happens, project deadlines and stress levels are at stake.&lt;br /&gt;&lt;br /&gt;And the more consumers and the more time it takes for the service provider to deliver a first version, the higher the risk.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Working with contracts&lt;/b&gt;&lt;br /&gt;The common solution to this is to work with a contract that defines the agreements between the provider(s) and the consumer(s). Such contracts vary from informal (e.g. Word-documents lacking strict interface definitions) to formal (WSDL with very strict constraints).&lt;br /&gt;&lt;br /&gt;Such contracts can be written at the start or they can be generated from existing code.&lt;br /&gt;&lt;br /&gt;Generating a contract from existing code is generally a bad idea. The contract is then focused on the implementation, which is subject to change. Then if the implementation changes, what happens to the interface? If it should also change, this violates the common principle of Separation of Concerns. And it is clearly the wrong way around, the contract is the agreement, not the implementation chosen by the provider.&lt;br /&gt;&lt;br /&gt;Another issue with contract generation is that the contract can be very much focused on the implementation, including specific data types tailored towards an implementation within a certain platform or programming language. This has an impact on the callers and, in the long term, also on the consumer, since the latter may be forced to stick with legacy implementation choices.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;An implementation-independent contract&lt;/b&gt;&lt;br /&gt;A first step towards a complete solution to this challenge is to author a contract that is implementation-independent. Such a contract can be agreed upon from the start by all involved parties. Real separation of concerns: the contract is the common agreement, while providers and consumers are free to make their own choices within the bounds of the contract.&lt;br /&gt;&lt;br /&gt;This may appear a complete solution.&lt;br /&gt;&lt;br /&gt;However, in practice, contracts change, possibly even during the initial implementation project. So what should be done in such a case? Is the contract still leading or will the contract by bypassed by reality?&lt;br /&gt;&lt;br /&gt;Based on my experience in professional environments I dare say that if the contract can be violated, it will be. With impact on stability/reliability and on stress levels. In the battle between contract-orientation and project deadlines, the former is easily sacrificed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Contract-first development&lt;/b&gt;&lt;br /&gt;The only way to really guarantee that you can keep the promise of an independent contract is to integrate your contract-orientation in your development process, making the implementation(s) &lt;i&gt;dependant&lt;/i&gt; on the contract, preferrably on both sides of the contract (providers as well as consumers).&lt;br /&gt;&lt;br /&gt;One way to achiebe this is to make your code link to the contract somehow, for example by having a URL to your WSDL files in all implementations, making sure that failures to adhere to the contract result in errors.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Validation at runtime&lt;/b&gt;&lt;br /&gt;To avoid the contract being bypassed, implementations should check all service invocations to make sure the contract is respected.&lt;br /&gt;&lt;br /&gt;This can be achieved by generating server- and client-side code from the contract. Having access to the contract (in some form) the implementation then checks all aspects of the invocation. Not only the&amp;nbsp; preconditions (consumer requests),  but also postconditions (provider responses). If either a consumer or a provider violates to the contract, that must be treated as a fatal  violation. Only then your contract will actually be leading.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Validation on the server versus on the client&lt;/b&gt;&lt;br /&gt;So if you want to validate your contract, where should you do it: on the client (consumer) or on the server (provider)?&lt;br /&gt;&lt;br /&gt;The best approach to this is to do it in both locations, for good reasons:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Separation of concerns: both ends should assume their responsibility, which is to adhere to the contract and consider violations fatal. Neither end can be sure the other end will validate the contract, so they should not assume that.&lt;/li&gt;&lt;li&gt;The provider and the consumer may have access to different versions of the contract. Validation on both ends will likely catch any incompatible differences in the contract versions.&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;Your contract is your treasure!&lt;/b&gt;&lt;br /&gt;Now when you have accomplished a true contract-oriented development process, you will find the contract is your gold mine. The contract is typically orders of magnitude simpler than implementations, making it easy to read and change. But since it describes an extremely important integration point so well (concise) and so correctly, it is easy to reuse it for all sorts of of purposes. For example:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;generation of documentation, e.g. Word-documents or web pages, etc.&lt;/li&gt;&lt;li&gt;generation of forms or programs for manual use (including human testing)&lt;/li&gt;&lt;li&gt;generation of unit-, performance- and load-tests&lt;/li&gt;&lt;li&gt;generation of IDE projects, such as Visual Studio, Eclipse, NetBeans, XCode, etc.&lt;/li&gt;&lt;/ul&gt;To enable certain possibilities, the formal part of the contract needs an additional informal part. The informal part can include examples and human-readable descriptions. They can also help humans understand the contract and its purpose faster and more easily.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Examples of contract-orientation&lt;/b&gt;&lt;br /&gt;While WSDL is an example of a contract definition language for web services, it does not provides a full contract-orientation process, requiring the contract to be held.&lt;br /&gt;&lt;br /&gt;The only fully contract-oriented projects I am aware of are those I initiated: &lt;a href="http://www.xins.org/"&gt;XINS&lt;/a&gt; and &lt;a href="http://github.com/znerd/logdoc"&gt;Logdoc&lt;/a&gt;. The first (XINS) is an open-source web services framework (that generates server- and client-side Java code), while the latter (Logdoc) implements contracts for logging, again including a Java-implementation.&lt;br /&gt;&lt;br /&gt;Do you have experience with contract-orientation? Do you know of other projects that put contract-orientation in the heart of their approach? Please let me know in the comments!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-5585657839701186822?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/5585657839701186822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2010/04/importance-of-contract-first.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5585657839701186822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5585657839701186822'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2010/04/importance-of-contract-first.html' title='The importance of contract-first development'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-4551562267723976645</id><published>2010-03-30T11:44:00.002+02:00</published><updated>2010-03-30T21:46:47.593+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='atg'/><category scheme='http://www.blogger.com/atom/ns#' term='darwin'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>ATG 9.1 on Mac OS X 10.6</title><content type='html'>Using the &lt;a href="http://blog.pulleman.com/2007/08/13/atg-20071-on-mac-os-x-with-mysql/"&gt;instructions from Ronald Pulleman&lt;/a&gt; (which focus on ATG 2007.1), I tried installing ATG 9.1 on &lt;a href="http://www.apple.com/macosx/"&gt;Mac OS X&lt;/a&gt; 10.6.2. Below are the instructions for reproducing what worked for me.&lt;br /&gt;&lt;br /&gt;Make sure you know &lt;a href="http://www.atg.com/en/ecommerce-suite/platform/supported-environments/"&gt;what is officially supported by ATG&lt;/a&gt;, since Mac OS X is not. Also make sure you have the Installation Guide handy, part of the ATG 9.1 documentation set.&lt;br /&gt;&lt;br /&gt;Below I refer to the &lt;tt&gt;.profile&lt;/tt&gt; file for adjusting environment variables. Make sure you apply these environment variable changes each time. If you do not use &lt;a href="http://www.gnu.org/software/bash/"&gt;bash&lt;/a&gt;, then replace &lt;tt&gt;.profile&lt;/tt&gt; with whatever your shell reads on startup.&lt;br /&gt;&lt;h3&gt;Install and configure MySQL&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Have &lt;a href="http://www.mysql.org/"&gt;MySQL&lt;/a&gt; installed; I picked &lt;a href="http://dev.mysql.com/downloads/mirror.php?id=385549"&gt;MySQL 5.1.45&lt;/a&gt; (64-bit), but 5.1.32 would have been supported.&lt;/li&gt;&lt;li&gt;Add this your &lt;tt&gt;.profile&lt;/tt&gt;:&lt;blockquote&gt;&lt;tt&gt;export MYSQL_HOME=/usr/local/mysql-5.1.45-osx10.6-x86_64&lt;br /&gt;export PATH=$MYSQL_HOME/bin:$PATH&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;In your &lt;i&gt;System Preferences&lt;/i&gt; application, start MySQL and make it start automatically at boot.&lt;/li&gt;&lt;li&gt;Change the password of the root user, for obvious reasons:&lt;blockquote&gt;&lt;tt&gt;mysqladmin -p -u root PASSWORD &lt;i&gt;newpass&lt;/i&gt;&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Make MySQL use the InnoDB engine by default, this is required for ATG: Create the file &lt;tt&gt;/etc/mysql/my.cnf&lt;/tt&gt; with the following contents:&lt;blockquote&gt;&lt;tt&gt;[mysqld]&lt;br /&gt;default-storage-engine=innodb&lt;br /&gt;sql-mode=TRADITIONAL&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Install and configure JBoss&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Install &lt;a href="http://www.jboss.org/"&gt;JBoss&lt;/a&gt;; I used &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=22866"&gt;JBoss 4.2.3-GA&lt;/a&gt; (community edition), while the (paid) JBoss EAP 4.2.0 CP05 would be the ATG-supported version.&lt;/li&gt;&lt;li&gt;Add this to your &lt;tt&gt;.profile&lt;/tt&gt;:&lt;blockquote&gt;&lt;tt&gt;export JBOSS_HOME=$HOME/jboss-4.2.3.GA&lt;br /&gt;export PATH=$JBOSS_HOME/bin:$PATH&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Modify the JVM arguments in the startup script, if you want to comply with the ATG recommendations for JVM parameters. Edit the &lt;tt&gt;bin/run.sh&lt;/tt&gt; file and modify the &lt;tt&gt;JAVA_OPTS&lt;/tt&gt; setting as follows:&lt;blockquote&gt;&lt;tt&gt;JAVA_OPTS="-server -Xms2048m -Xmx3072m -XX:MaxPermSize=768m -XX:MaxNewSize=768m -Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.rmi.client.gcInterval=3600000"&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Integrate MySQL with JBoss&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Download the MySQL JDBC driver &lt;a href="http://www.mysql.com/downloads/connector/j/"&gt;Connector/J&lt;/a&gt;, I got version 5.1.12.&lt;/li&gt;&lt;li&gt;Copy the Connector/J JAR file to the &lt;tt&gt;server/atg/lib&lt;/tt&gt; directory under the JBoss home directory:&lt;blockquote&gt;&lt;tt&gt;cp ~/Downloads/mysql-connector-java-5.1.12/mysql-connector-java-5.1.12-bin.jar $JBOSS_HOME/server/atg/lib/&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Install and configure ATG&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Download &lt;a href="http://www.atg.com/esupport/product_resources/license.jsp?SKU=KIT_91&amp;amp;PLATFORM=UNIX&amp;amp;licensepage=/licensetext/licenseText-d55.html"&gt;ATG  9.1&lt;/a&gt; from the ATG support site, this is a JAR file.&lt;/li&gt;&lt;li&gt;Unpack it and then execute the contained &lt;tt&gt;.bin&lt;/tt&gt; file:&lt;blockquote&gt;&lt;tt&gt;unzip ATG9.1.jar&lt;br /&gt;sh ATG9.1.bin&lt;/tt&gt;&lt;/blockquote&gt;Choose JBoss as the application server. I suggest you make sure there is no space in the name of the destination director (I chose &lt;tt&gt;~/atg-9.1&lt;/tt&gt;).       &lt;/li&gt;&lt;li&gt;Put your license keys in the &lt;tt&gt;home/localconfig/&lt;/tt&gt; directory (below the ATG installation directory).&lt;/li&gt;&lt;li&gt;Create the file &lt;tt&gt;home/bin/dasEnv.sh&lt;/tt&gt; with just one line in it:&lt;blockquote&gt;&lt;tt&gt;export ATGJRE=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Commands/java&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Create the file &lt;tt&gt;home/localconfig/atg/dynamo/service/jdbc/JTDataSource.properties&lt;/tt&gt; with the following contents:&lt;blockquote&gt;&lt;tt&gt;JNDIName=java:/MySqlDS&lt;br /&gt;$class=atg.nucleus.JNDIReference&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Initialize the ATG database&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Under the JBoss directory, create the file &lt;tt&gt;server/atg/deploy/mysql-ds.xml&lt;/tt&gt; with the following contents:&lt;blockquote&gt;&lt;tt&gt;&amp;lt;datasources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;local-tx-datasource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;jndi-name&amp;gt;MySqlDS&amp;lt;/jndi-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;connection-url&amp;gt;jdbc:mysql://127.0.0.1:3306/atg000&amp;lt;/connection-url&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;driver-class&amp;gt;com.mysql.jdbc.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;user-name&amp;gt;atg&amp;lt;/user-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;password&amp;gt;atgpass&amp;lt;/password&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;exception-sorter-class-name&amp;gt;org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter&amp;lt;/exception-sorter-class-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;valid-connection-checker-class-name&amp;gt;org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker&amp;lt;/valid-connection-checker-class-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;metadata&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;type-mapping&amp;gt;mySQL&amp;lt;/type-mapping&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/metadata&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/local-tx-datasource&amp;gt;&lt;br /&gt;&amp;lt;/datasources&amp;gt;&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Log in to the MySQL command line client &lt;i&gt;mysql&lt;/i&gt;:&lt;blockquote&gt;&lt;tt&gt;mysql -p -u root&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Create a database user for ATG:&lt;blockquote&gt;&lt;tt&gt;USE mysql&lt;br /&gt;INSERT INTO user (host, user, password) VALUES ('%', 'atg', PASSWORD('atgpass'));&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Create a database for ATG:&lt;blockquote&gt;&lt;tt&gt;CREATE DATABASE atg000;&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Allow the &lt;tt&gt;atg&lt;/tt&gt; user all access privileges on the &lt;tt&gt;atg000&lt;/tt&gt; database:&lt;blockquote&gt;&lt;tt&gt;GRANT ALL PRIVILEGES ON atg000.* TO atg;&lt;br /&gt;FLUSH PRIVILEGES;&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Exit the &lt;i&gt;mysql&lt;/i&gt; client (you can use Ctrl-D).&lt;/li&gt;&lt;li&gt;Create the ATG data structures in the database by executing the DDL scripts on MySQL (this typically takes less than a minute):&lt;blockquote&gt;&lt;tt&gt;cat DAS/sql/install/mysql/das_ddl.sql DPS/sql/install/mysql/dps_ddl.sql DSS/sql/install/mysql/dss_ddl.sql DCS/sql/install/mysql/dcs_ddl.sql | mysql -D atg000 -u atg -patgpass&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Run ATG&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Deploy an ATG application to JBoss.&lt;/li&gt;&lt;li&gt;Start JBoss: Go to the JBoss directory and execute:&lt;blockquote&gt;&lt;tt&gt;bin/run.sh -c atg&lt;/tt&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Using a browser visit &lt;a href="http://127.0.0.1:8080/dyn/admin/"&gt;http://127.0.0.1:8080/dyn/admin/&lt;/a&gt; to see the DynAdmin tool.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-4551562267723976645?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/4551562267723976645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2010/03/atg-91-on-mac-os-x-106.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4551562267723976645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4551562267723976645'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2010/03/atg-91-on-mac-os-x-106.html' title='ATG 9.1 on Mac OS X 10.6'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-4091867148394248441</id><published>2010-02-17T10:04:00.000+01:00</published><updated>2010-02-17T10:04:36.596+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='extension'/><category scheme='http://www.blogger.com/atom/ns#' term='sessionalive'/><category scheme='http://www.blogger.com/atom/ns#' term='webmail'/><title type='text'>Keep your (webmail?) session open</title><content type='html'>If you have a website that keeps expiring your session after a while, and you want to work around that, then try out the &lt;a href="http://netticat.ath.cx/SessionAlive/SessionAlive.htm"&gt;SessionAlive extension for Firefox&lt;/a&gt;. I find it extremely useful, especially for webmail (such as Microsoft Outlook Web Access).&lt;br /&gt;&lt;br /&gt;The extension works OK in &lt;a href="http://www.getfirefox.com/"&gt;Firefox&lt;/a&gt; 3.6.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-4091867148394248441?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/4091867148394248441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2010/02/keep-your-webmail-session-open.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4091867148394248441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4091867148394248441'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2010/02/keep-your-webmail-session-open.html' title='Keep your (webmail?) session open'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-817910290223948918</id><published>2010-02-16T19:55:00.000+01:00</published><updated>2010-02-16T19:55:48.039+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xins.xins3'/><title type='text'>Experimental XINS 3.0-alpha4 released</title><content type='html'>Just now I've tagged 3.0-alpha4 on &lt;a href="http://github.com/znerd/xins"&gt;my experimental XINS-fork&lt;/a&gt;. Changes since 3.0-alpha3:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;newer version of Logdoc, which no longer requires a DTD to be set&lt;/li&gt;&lt;li&gt;JMX port can be specified on the command line, e.g. "xins run-abc -Djmx.port=2090"&lt;/li&gt;&lt;li&gt;APIs using Logdoc actually have proper code (Log.java and TranslationBundle*.java files) generated&lt;/li&gt;&lt;li&gt;the 3 Library classes (in common, client and server) actually return the version of the library (instead of null) based on the meta information available from the JAR manifest&lt;/li&gt;&lt;li&gt;fixed client-side transaction logging, it actually works now&lt;/li&gt;&lt;li&gt;the _GetVersion meta-function now also returns the current Logdoc version &lt;/li&gt;&lt;li&gt;the _GetStatistics meta-function now supports a "targetFunction" parameter, to reduce the output to the statistics of one function only&lt;/li&gt;&lt;li&gt;the _GetStatistics meta-function now also returns the transaction ID for each call that information is provided for&lt;/li&gt;&lt;li&gt;_GetStatistics not only returns the average, but variance as well (compute the standard deviation from that by taking the square of it)&lt;/li&gt;&lt;li&gt;fixed and improved the unit tests&lt;/li&gt;&lt;/ul&gt;Go check it out at &lt;a href="http://github.com/znerd/xins/tree/xins-3.0-alpha4"&gt;http://github.com/znerd/xins/tree/xins-3.0-alpha4&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-817910290223948918?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/817910290223948918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2010/02/experimental-xins-30-alpha4-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/817910290223948918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/817910290223948918'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2010/02/experimental-xins-30-alpha4-released.html' title='Experimental XINS 3.0-alpha4 released'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-7391696360721530004</id><published>2010-02-11T20:47:00.000+01:00</published><updated>2010-02-11T20:47:35.368+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xins3'/><category scheme='http://www.blogger.com/atom/ns#' term='xins'/><title type='text'>XINS 2.x and my experimental XINS 3.0-fork</title><content type='html'>After some investigations by myself and a constructive discussion with &lt;a href="http://www.jroller.com/agoubard/"&gt;Anthony Goubard &lt;/a&gt;&lt;br /&gt;(maintainer of &lt;a href="http://xins.sourceforge.net/"&gt;the official XINS project&lt;/a&gt;) we have decided to backport features from &lt;a href="http://github.com/znerd/xins"&gt;my XINS 3-fork&lt;/a&gt; upstream instead of the other way around. Features will be discussed and ported one by one. This is the safest approach, leaving the baseline stable and only introducing changes gradually.&lt;br /&gt;&lt;br /&gt;Expect some changes to go into the upcoming XINS 2.3 release, while most will come into the picture only after that.&lt;br /&gt;&lt;br /&gt;Stay tuned for updates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-7391696360721530004?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/7391696360721530004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2010/02/xins-2x-and-my-experimental-xins-30.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7391696360721530004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7391696360721530004'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2010/02/xins-2x-and-my-experimental-xins-30.html' title='XINS 2.x and my experimental XINS 3.0-fork'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-2725423645569352151</id><published>2010-01-23T15:04:00.000+01:00</published><updated>2010-01-23T15:04:19.725+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xins'/><category scheme='http://www.blogger.com/atom/ns#' term='logdoc'/><title type='text'>XINS 3.0-alpha3 and Logdoc 0.2</title><content type='html'>I've just released the 3.0-alpha3 version of my XINS fork, which includes the also just released Logdoc 0.2. See:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://github.com/znerd/xins"&gt;http://github.com/znerd/xins&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/znerd/logdoc"&gt;http://github.com/znerd/logdoc&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Compared to version 0.1, &lt;b&gt;Logdoc 0.2&lt;/b&gt; is cleaned up: the internal logging output is now sent via Ant, meaning that the Ant options -verbose and -debug are needed to see all output. This improves usability.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;XINS 3.0-alpha3&lt;/b&gt; introduces lots of small changes, mostly cleanup and minor corrections. A functional change is the introduction of client-side transaction logging via the log messages 2300 and 2301. The former includes the input/output parameters, while the latter does not.&lt;br /&gt;&lt;br /&gt;Note that my XINS 3.0 fork is based off XINS 2.2-alpha2. &lt;b&gt;Porting&lt;/b&gt; the changes from the 2.x branch to my 3.0-fork is one of my next challenges. Help in this area would be much appreciated! If you are keen and precise and know a bit about Java coding, let me know via ernst [at] ernstdehaan com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-2725423645569352151?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/2725423645569352151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2010/01/xins-30-alpha3-and-logdoc-02.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2725423645569352151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2725423645569352151'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2010/01/xins-30-alpha3-and-logdoc-02.html' title='XINS 3.0-alpha3 and Logdoc 0.2'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-6447074489530853154</id><published>2010-01-11T23:43:00.001+01:00</published><updated>2010-01-23T15:04:47.272+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xins'/><category scheme='http://www.blogger.com/atom/ns#' term='logdoc'/><title type='text'>XINS 3.0-alpha2 and Logdoc 0.1</title><content type='html'>Just now I've released the 3.0-alpha2 version of my XINS branch, at:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://github.com/znerd/xins/"&gt;http://github.com/znerd/xins/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Main feature is that Logdoc has been factored out into its own project, of which I've released version 0.1:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://github.com/znerd/logdoc/"&gt;http://github.com/znerd/logdoc/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Logdoc is used to specify log mesages separate from code, generating both Log4J code and web documentation.&lt;br /&gt;&lt;br /&gt;Possibly Logdoc can be extended to support code generation to other environments, including Apache Commons Logging, Log4PHP, Log4C, etc.&lt;br /&gt;&lt;br /&gt;Another change made to XINS is that all source code is now under src/java making it much easier to work on XINS from an IDE.&lt;br /&gt;&lt;br /&gt;So most of the previously presented &lt;a href="http://ernstdehaan.blogspot.com/2009/12/random-ideas-for-xins-and-logdoc.html"&gt;random ideas&lt;/a&gt; have been implemented already...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-6447074489530853154?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/6447074489530853154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2010/01/xins-30-alpha2-and-logdoc-01.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6447074489530853154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6447074489530853154'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2010/01/xins-30-alpha2-and-logdoc-01.html' title='XINS 3.0-alpha2 and Logdoc 0.1'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-5163525268467428708</id><published>2009-12-30T23:18:00.001+01:00</published><updated>2009-12-30T23:19:27.503+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xins3'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='xins'/><category scheme='http://www.blogger.com/atom/ns#' term='logdoc'/><title type='text'>Random ideas for XINS and Logdoc</title><content type='html'>Here's a random list of possible enhancements to XINS.&lt;br /&gt;&lt;br /&gt;First, a couple of changes that would make it much easier to configure an IDE (such as Eclipse or NetBeans) to work with XINS:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Move all Java source code to src/java/&lt;/b&gt;; currently it is spread out over src/java-common, src/java-client-framework and src/java-server-framework. Still, the JAR files can remain the same.&lt;/li&gt;&lt;li&gt;Put the &lt;b&gt;generated Java source files also under src/java/&lt;/b&gt;, such as the Log and TranslationBundle classes.&lt;/li&gt;&lt;li&gt;Put &lt;b&gt;all generated class files under build/classes/&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Make the Library classes &lt;b&gt;detect the XINS version at runtime&lt;/b&gt;, instead of using a text replacement technique to modify the source code before compiling it.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Then some ideas on Logdoc:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Split out Logdoc&lt;/b&gt; from XINS. It's not needed inside XINS, all it needs is a JAR file and some Ant tasks for generating some stuff (like the Java source files and the documentation).&lt;/li&gt;&lt;li&gt;Make it easy to &lt;b&gt;plug in a different logging library&lt;/b&gt;. Currently, Logdoc generates Log4J code, but it should be fairly simple to make it generate code for other logging libraries. It doesn't mean Logdoc should actually implement this, but it would at least facilitate it.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;To be continued.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-5163525268467428708?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/5163525268467428708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/12/random-ideas-for-xins-and-logdoc.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5163525268467428708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5163525268467428708'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/12/random-ideas-for-xins-and-logdoc.html' title='Random ideas for XINS and Logdoc'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-2125791423673472867</id><published>2009-12-28T22:41:00.000+01:00</published><updated>2009-12-28T22:41:16.813+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xins3'/><category scheme='http://www.blogger.com/atom/ns#' term='xins'/><title type='text'>XINS 3.0-alpha1 tagged (fork at Github)</title><content type='html'>Just now I've created a tag for XINS 3.0-alpha1 in my &lt;a href="http://github.com/znerd/xins"&gt;XINS-fork&lt;/a&gt; at &lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://github.com/znerd/xins/tree/xins-3.0-alpha1"&gt;browse&lt;/a&gt;&lt;/li&gt;&lt;li&gt;download &lt;a href="http://github.com/znerd/xins/tarball/xins-3.0-alpha1"&gt;tgz&lt;/a&gt; | &lt;a href="http://github.com/znerd/xins/zipball/xins-3.0-alpha1"&gt;zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/znerd/xins/blob/xins-3.0-alpha1/CHANGES-3.0.txt"&gt;view overview of changes&lt;/a&gt; (plain text)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;From a runtime-stability point of view, I expect this release just works, even if it is tagged as an alpha-release. At least for me this branch has been running in production for a couple of years now.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, do note that from a development perspective, a lot of things may change before this goes into (or becomes) an official XINS 3 release. This requires agreement with other involved parties, especially &lt;a href="http://www.jroller.com/agoubard/"&gt;Anthony Goubard&lt;/a&gt;&amp;nbsp;(official XINS maintainer) and &lt;a href="http://www.online.nl/"&gt;Online&lt;/a&gt; (copyright owner of most of the code).&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some of the things still high on my TODO-list:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;get rid of all deprecation warnings by either resolving or suppressing them, depending on what is more appropriate&lt;/li&gt;&lt;li&gt;further change the code to use type-safe collections where possible, using generics&lt;br /&gt;&lt;/li&gt;&lt;li&gt;merge with official XINS 2.x changes&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-2125791423673472867?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/2125791423673472867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/12/xins-30-alpha1-tagged-fork-at-github.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2125791423673472867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2125791423673472867'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/12/xins-30-alpha1-tagged-fork-at-github.html' title='XINS 3.0-alpha1 tagged (fork at Github)'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-3027587007193634717</id><published>2009-12-28T22:20:00.002+01:00</published><updated>2009-12-28T22:22:39.006+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jline'/><category scheme='http://www.blogger.com/atom/ns#' term='jna'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='roo'/><category scheme='http://www.blogger.com/atom/ns#' term='jansi'/><title type='text'>Command line input in Java</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://jline.sourceforge.net/images/logo.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://jline.sourceforge.net/images/logo.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Today, someone introduced me to &lt;a href="http://www.springsource.org/roo"&gt;Spring Roo&lt;/a&gt;, which has quite some similarities with &lt;a href="http://xins.sourceforge.net/"&gt;XINS&lt;/a&gt; at first glance. I really like the command line shell interface Roo has, featuring unbuffered text input, completion and fancy colors. I know it's not even close to a rich IDE like &lt;a href="http://www.netbeans.org/"&gt;NetBeans&lt;/a&gt; or &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;, but I love command line tools for their productivity and simpicity.&lt;br /&gt;&lt;br /&gt;Looking at some documentation, the text-based shell interface is implemented using these technologies:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://jline.sourceforge.net/"&gt;JLine&lt;/a&gt;&amp;nbsp;- Library for handling console from Java, unbuffered.&lt;/li&gt;&lt;li&gt;&lt;a href="http://jansi.fusesource.org/"&gt;JAnsi&lt;/a&gt; - Library for using ANSI escape sequences to format console output.&lt;/li&gt;&lt;li&gt;&lt;a href="https://jna.dev.java.net/"&gt;JNA&lt;/a&gt; - Windows-specific library for displaying colored output on Windows-systems.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Both libraries work on Windows, Mac OS X and Linux/UNIX-systems. Definitely worth considering in case you want to implement a console application in Java.&lt;br /&gt;&lt;br /&gt;PS. Upon further inspection, Roo is very different from XINS, though. Roo is an aspect-oriented build-time code generator/manager that generates JSPs, Spring code, Java plumbing code (such as toString() methods), while XINS is an RPC-oriented component technology framework that also has (optional) runtime components (both client- and server-side, if you wish).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-3027587007193634717?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/3027587007193634717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/12/command-line-input-in-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3027587007193634717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3027587007193634717'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/12/command-line-input-in-java.html' title='Command line input in Java'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-4425066364682704250</id><published>2009-10-01T20:51:00.000+02:00</published><updated>2009-10-01T20:51:42.938+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xins3'/><category scheme='http://www.blogger.com/atom/ns#' term='xins'/><title type='text'>XINS 3.0 fork at Github</title><content type='html'>Just recently, I've made our internal XINS fork available via:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://github.com/znerd/xins"&gt;github.com/znerd/xins&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;The version is currently set at 3.0-alpha1-dev. This may become the official XINS 3.0 release at some point, or (some or all) changes may go into an official XINS release.&lt;br /&gt;&lt;br /&gt;The most important changes in compared to mainstream XINS are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Java 5-features, such as generics and foreach-loops (hence Java 5+ is required)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;lots of utility functions are added, to simplify programming with XINS&lt;/li&gt;&lt;li&gt;various libraries are updated, such as Saxon (from 8 to 9) , JUnit (from 3 to 4), Xerces, etc.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;a couple of previously deprecated members and classes are removed, most notably &lt;a href="http://xins.sourceforge.net/javadoc/2.2/org/xins/common/text/FastStringBuffer.html"&gt;FastStringBuffer&lt;/a&gt; and &lt;a href="http://xins.sourceforge.net/javadoc/2.2/org/xins/common/io/FastStringWriter.html"&gt;FastStringWriter&lt;/a&gt;&lt;/li&gt;&lt;li&gt;deprecated various classes and members, such as the &lt;a href="http://xins.sourceforge.net/javadoc/2.2/org/xins/common/xml/ElementBuilder.html"&gt;ElementBuilder&lt;/a&gt; class &lt;br /&gt;&lt;/li&gt;&lt;li&gt;upgraded from XSLT 1.0 to 2.0 &lt;br /&gt;&lt;/li&gt;&lt;li&gt;the &lt;a href="http://xins.sourceforge.net/javadoc/2.2/org/xins/common/xml/Element.html"&gt;Element&lt;/a&gt; class now supports mixed content (PCDATA and child elements), an &lt;tt&gt;add(String)&lt;/tt&gt; method has been added &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;This branch of XINS has been used in production for almost 3 years now, but you are not advised to use this code in production, as it has not gone through all the testing that is typically done for an official XINS release, across various platforms and Java versions.&lt;br /&gt;Also note that not all of the changes in XINS 2.2/2.3 have been incorporated (yet).&lt;br /&gt;&lt;br /&gt;The following things are still on my list of things to be done:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;clean the code up further&lt;/li&gt;&lt;li&gt;get rid of all deprecation warnings by either resolving or suppressing them (whatever is more appropriate)&lt;/li&gt;&lt;li&gt;further changing the code to use type-safe collections where possible, using generics&lt;/li&gt;&lt;li&gt;possibly adding Commons Lang as a dependency, so that various utility methods, like &lt;tt&gt;&lt;a href="http://xins.sourceforge.net/javadoc/2.2/org/xins/common/text/TextUtils.html#isEmpty%28java.lang.String%29"&gt;TextUtils.isEmpty(String)&lt;/a&gt;&lt;/tt&gt; can be deprecated (and later removed)&lt;/li&gt;&lt;li&gt;change &lt;a href="http://hc.apache.org/httpclient-3.x/index.html"&gt;HttpClient&lt;/a&gt; (which is deprecated) based code with &lt;a href="http://hc.apache.org/httpcomponents-client/"&gt;HttpComponents HttpClient&lt;/a&gt; based code&lt;/li&gt;&lt;li&gt;get rid of Jakarta ORO, just use the &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/regex/package-summary.html"&gt;J2SE regular expression-support&lt;/a&gt; that is available since J2SE 1.4&lt;/li&gt;&lt;/ol&gt;If you have any changes you would like to incorporate into (this branch of) XINS, fork the project at github. Using git, it is quite easy to merge different forks.&lt;br /&gt;&lt;br /&gt;To be continued.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-4425066364682704250?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/4425066364682704250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/10/xins-30-fork-at-github.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4425066364682704250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4425066364682704250'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/10/xins-30-fork-at-github.html' title='XINS 3.0 fork at Github'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-8468649301212718478</id><published>2009-09-22T09:51:00.005+02:00</published><updated>2009-09-22T10:36:00.232+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='google talk'/><category scheme='http://www.blogger.com/atom/ns#' term='magiccamopen'/><category scheme='http://www.blogger.com/atom/ns#' term='googletalk'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='lesscss'/><category scheme='http://www.blogger.com/atom/ns#' term='magiccam'/><title type='text'>Weird error while executing LessCSS</title><content type='html'>This is really odd: I got the following output while running &lt;span style="font-style: italic;"&gt;lessc&lt;/span&gt; on some .less files from an Apache Ant task:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;-lesscss:&lt;br /&gt;[003:221] MagicCam 0: Current process: java, Flash is loaded: no&lt;br /&gt;[003:221] Error(magiccammac.cc:276): MagicCam 0: MagicCamOpen: Not an allowed process!&lt;br /&gt;[000:002] MagicCam 0: Current process: java, Flash is loaded: no&lt;br /&gt;[000:002] Error(magiccammac.cc:276): MagicCam 0: MagicCamOpen: Not an allowed process!&lt;br /&gt;[000:001] MagicCam 1: Current process: java, Flash is loaded: no&lt;br /&gt;[000:001] Error(magiccammac.cc:276): MagicCam 1: MagicCamOpen: Not an allowed process!&lt;br /&gt;[000:002] MagicCam 1: Current process: java, Flash is loaded: no&lt;br /&gt;[000:002] Error(magiccammac.cc:276): MagicCam 1: MagicCamOpen: Not an allowed process!&lt;br /&gt;[lesscss] 0 file(s) transformed in 4 ms; 7 unmodified file(s) skipped.&lt;/pre&gt;&lt;/blockquote&gt;Now I had it at a different point in the build process:&lt;blockquote&gt;&lt;pre&gt;do-generate-headings:&lt;br /&gt;Warning: Reference saxon.classpath has not been set at runtime, but was found during&lt;br /&gt;build file parsing, attempting to resolve. Future versions of Ant may support&lt;br /&gt;referencing ids defined in non-executed targets.&lt;br /&gt;    [xslt] Processing /Users/ernst/albizia/build/contentdb/pfizer/content/PreprocessedSite.xml to /Users/ernst/albizia/build/contentdb/pfizer/content/PageHeadings.ErigeronStrings.xml&lt;br /&gt;    [xslt] Loading stylesheet /Users/ernst/albizia/src/build-xslt/GeneratePageHeadings.xslt&lt;br /&gt;[xmlvalidate2] 1 file(s) have been successfully validated.&lt;br /&gt;[000:224] MagicCam 0: Current process: java, Flash is loaded: no&lt;br /&gt;[000:224] Error(magiccammac.cc:276): MagicCam 0: MagicCamOpen: Not an allowed process!&lt;br /&gt;[000:003] MagicCam 0: Current process: java, Flash is loaded: no&lt;br /&gt;[000:003] Error(magiccammac.cc:276): MagicCam 0: MagicCamOpen: Not an allowed process!&lt;br /&gt;[000:000] MagicCam 1: Current process: java, Flash is loaded: no&lt;br /&gt;[000:001] Error(magiccammac.cc:276): MagicCam 1: MagicCamOpen: Not an allowed process!&lt;br /&gt;[000:002] MagicCam 1: Current process: java, Flash is loaded: no&lt;br /&gt;[000:002] Error(magiccammac.cc:276): MagicCam 1: MagicCamOpen: Not an allowed process!&lt;/pre&gt;&lt;/blockquote&gt;There is a tiny bit of information here:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://timesinker.blogspot.com/2009/05/weird-magiccam-error-message-from.html"&gt;Weird MagicCam error message from Google talk video device&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://discussions.apple.com/thread.jspa?messageID=10262865"&gt;Weird Errors on running applescript (Apple support site)&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-8468649301212718478?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/8468649301212718478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/09/weird-error-while-executing-lesscss.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8468649301212718478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8468649301212718478'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/09/weird-error-while-executing-lesscss.html' title='Weird error while executing LessCSS'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-6011870250338928606</id><published>2009-09-08T11:05:00.004+02:00</published><updated>2009-09-08T16:15:35.657+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='png'/><category scheme='http://www.blogger.com/atom/ns#' term='optipng'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='task'/><category scheme='http://www.blogger.com/atom/ns#' term='taskdef'/><title type='text'>OptiPNG Ant task</title><content type='html'>&lt;a href="http://optipng.sourceforge.net/"&gt;OptiPNG&lt;/a&gt; is a tool for optimizing PNG images. And now, there's an &lt;a href="http://ant.apache.org/"&gt;Ant&lt;/a&gt; task for executing it from an Ant build file:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://github.com/znerd/optipng-ant-task/"&gt;http://github.com/znerd/optipng-ant-task/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Mini-HOWTO for Linux/UNIX/Mac OS X systems, assuming you already have &lt;a href="http://ant.apache.org/"&gt;Apache Ant&lt;/a&gt; installed:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://prdownloads.sourceforge.net/optipng/optipng-0.6.3.tar.gz?download"&gt;download OptiPNG source code&lt;/a&gt; from SourceForge (TAR GZ file)&lt;/li&gt;&lt;li&gt;execute: &lt;tt&gt;./configure&lt;/tt&gt;&lt;/li&gt;&lt;li&gt;execute: &lt;tt&gt;make&lt;/tt&gt;&lt;/li&gt;&lt;li&gt;execute: &lt;tt&gt;sudo make install&lt;/tt&gt;&lt;br /&gt;(enter your password if required); the command &lt;tt&gt;optipng&lt;/tt&gt; is now installed in &lt;tt&gt;/usr/local/bin/&lt;/tt&gt;&lt;/li&gt;&lt;li&gt;download the optipng-ant-task source code from &lt;a href="http://github.com/znerd/optipng-ant-task/downloads"&gt;http://github.com/znerd/optipng-ant-task/downloads&lt;/a&gt; - take the latest version available (you can choose between a ZIP and a TAR GZ file)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;unpack the download file, this will create a new directory with an odd name like: &lt;tt&gt;znerd-optipng-ant-task-604de975b4cc4a1a2766e385c91b749318af038e&lt;/tt&gt; (you may want to rename it to &lt;tt&gt;optipng-ant-task&lt;/tt&gt; or so)&lt;/li&gt;&lt;li&gt;in that directory, execute: &lt;tt&gt;ant&lt;/tt&gt;&lt;br /&gt;this will compile the classes, run the available unit test and build the JAR file&lt;/li&gt;&lt;/ol&gt;Then you can use the Ant task from your own build file, for example as follows:&lt;blockquote&gt;&lt;tt&gt;&amp;lt;taskdef name="optipng" classname="com.pensioenpage.jynx.optipng.OptiPNGTask" classpath="lib/optipng-ant-task.jar" /&amp;gt;&lt;br /&gt;&amp;lt;optipng dir="src/htdocs" todir="build/htdocs" /&amp;gt;&lt;/tt&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-6011870250338928606?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/6011870250338928606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/09/optipng-ant-task.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6011870250338928606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6011870250338928606'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/09/optipng-ant-task.html' title='OptiPNG Ant task'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-2865587122068189635</id><published>2009-09-03T11:57:00.002+02:00</published><updated>2009-09-03T12:07:55.427+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='extension'/><category scheme='http://www.blogger.com/atom/ns#' term='class'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><category scheme='http://www.blogger.com/atom/ns#' term='this'/><title type='text'>Java language: referencing current class from static context</title><content type='html'>Currently, in &lt;a href="http://java.sun.com/"&gt;Java&lt;/a&gt; SE 6, to reference the current class from a static context the name of the class is needed. For example:&lt;blockquote&gt;&lt;pre&gt;public class Foo {&lt;br /&gt;  public static final valueOf(String s) {&lt;br /&gt;     if (s == null) {&lt;br /&gt;        return null;&lt;br /&gt;     } else if (s.startsWith(Foo.class.getName() + ':')) {&lt;br /&gt;        ...&lt;br /&gt;     } else {&lt;br /&gt;        ...&lt;br /&gt;     }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;However, if this code would be copied to another class, or if the class is renamed, then that code will cause issues, possibly even causing hard-to-find bugs.&lt;br /&gt;&lt;br /&gt;Instead it would be nice if the enclosing class could be referenced without using the name. A possible syntax that does not introduce new language keywords could just be:&lt;blockquote&gt;&lt;pre&gt;class&lt;/pre&gt;&lt;/blockquote&gt;The previous example would then become:&lt;blockquote&gt;&lt;pre&gt;public class Foo {&lt;br /&gt;  public static final valueOf(String s) {&lt;br /&gt;     if (s == null) {&lt;br /&gt;        return null;&lt;br /&gt;     } else if (s.startsWith(class.getName() + ':')) {&lt;br /&gt;        ...&lt;br /&gt;     } else {&lt;br /&gt;        ...&lt;br /&gt;     }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;Of course, this construct should also be allowed in non-static code.&lt;br /&gt;&lt;br /&gt;One open question is how to deal with inner classes and referencing a certain outer class. I would not mind keeping that out of scope, so the feature only allows referencing the direct enclosing class.&lt;br /&gt;&lt;br /&gt;Another issue is subclassing. Would the &lt;tt&gt;class&lt;/tt&gt; statement reference the current class (in case of a non-static context) or the one the method is defined in?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-2865587122068189635?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/2865587122068189635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/09/java-language-referencing-current-class.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2865587122068189635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2865587122068189635'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/09/java-language-referencing-current-class.html' title='Java language: referencing current class from static context'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-8556587526786494554</id><published>2009-09-03T11:04:00.005+02:00</published><updated>2009-09-03T11:36:52.778+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apache ant'/><category scheme='http://www.blogger.com/atom/ns#' term='stdout'/><category scheme='http://www.blogger.com/atom/ns#' term='output'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='verbosity'/><category scheme='http://www.blogger.com/atom/ns#' term='verbose'/><title type='text'>Improving Ant output</title><content type='html'>&lt;a href="http://ant.apache.org/"&gt;Ant&lt;/a&gt; is a very popular build tool in &lt;a href="http://java.sun.com/"&gt;Java&lt;/a&gt; environments. Numerous tasks have been developed for it that allow integration with various services and products quite easy.&lt;br /&gt;&lt;br /&gt;One area Ant could improve in is output. Running a typical build file produces a lot of output that is not really relevant to the user. Also, when an error occurs, it would be nice to have a stack trace giving more information, but then you need to rerun Ant with the &lt;span style="font-style: italic;"&gt;-verbose&lt;/span&gt; option, which enables verbose output for &lt;span style="font-style: italic;"&gt;all&lt;/span&gt; tasks, not just the failing one.&lt;br /&gt;&lt;br /&gt;And note that there may be situations in which rerunning the task is suboptimal:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the error does not occur again (but it may come back to hunt you later on)&lt;/li&gt;&lt;li&gt;executing the build takes a lot of time&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Here are some guidelines I propose for improving Ant output:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;keep output to &lt;span style="font-style: italic;"&gt;stdout&lt;/span&gt; very limited;&lt;/li&gt;&lt;li&gt;after completion of the build run, provide access to more output, including the stacktrace, without rerunning the task&lt;/li&gt;&lt;/ol&gt;Here's an example of some Ant output:&lt;blockquote&gt;&lt;pre&gt;-init-properties:&lt;br /&gt;&lt;br /&gt;-init-site-properties:&lt;br /&gt;&lt;br /&gt;check-questions:&lt;br /&gt;&lt;br /&gt;transform-questions-xml:&lt;br /&gt;[xmlvalidate2] 10 file(s) have been successfully validated.&lt;br /&gt;[xslt] Transforming into /Users/ernst/albizia/build/contentdbsrc/xsite/content&lt;br /&gt;[xslt] Processing /Users/ernst/albizia/build/contentdbsrc/xsite/content/AOW.QuestionsCategory.xml to /Users/ernst/albizia/build/contentdbsrc/xsite/content/Vragen_AOW.SourcePage.xml&lt;br /&gt;[xslt] Loading stylesheet /Users/ernst/albizia/src/build-xslt/PreprocessQuestions.xslt&lt;br /&gt;[xslt] Processing /Users/ernst/albizia/build/contentdbsrc/xsite/content/Berekenen.QuestionsCategory.xml to /Users/ernst/albizia/build/contentdbsrc/xsite/content/Vragen_Berekenen.SourcePage.xml&lt;/pre&gt;&lt;/blockquote&gt;The output from the &lt;span style="font-style: italic;"&gt;xmlvalidate2&lt;/span&gt; task is very brief. That's nice. In fact the question is whether the output should be shown at all. The output from the &lt;span style="font-style: italic;"&gt;xslt&lt;/span&gt; task, however, is quite verbose. Instead of listing all files being processed, it could just give a summary of what it did. When &lt;span style="font-style: italic;"&gt;-verbose&lt;/span&gt; is passed, it could output what is currently output.&lt;br /&gt;&lt;br /&gt;Here are some possible options for achieving the goals I stated above:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;When a certain Ant option is enabled (which could at some point be enabled by default), send all verbose output to a file on the file system, for example &lt;span style="font-style: italic;"&gt;build.log&lt;/span&gt; or &lt;span style="font-style: italic;"&gt;.build.log&lt;/span&gt;. This file can be examined by the user after the build is finished (or cancelled).&lt;/li&gt;&lt;li&gt;When using the default output mode for &lt;span style="font-style: italic;"&gt;stdout&lt;/span&gt;, do not output the names of tasks that are not actually run (depending on the &lt;span style="font-style: italic;"&gt;if&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;unless&lt;/span&gt; attributes).&lt;/li&gt;&lt;li&gt;By default make all tasks just output a single line with a summary of what it did.&lt;/li&gt;&lt;li&gt;Do not put an empty line between each executed task.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When using this mode, use fixed-width output for the target names, and put the task output behind that. Target and task names may have to be cropped for that. For example:&lt;blockquote&gt;&lt;pre&gt;-init-prope.:&lt;br /&gt;-init-site-.:&lt;br /&gt;check-quest.:&lt;br /&gt;transform-q.:xmlvali.: 10 file(s) validated.&lt;br /&gt;&amp;#160;&amp;#160;               xslt: 15 file(s) processed, 0 unmodified file(s) skipped.&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ol&gt;Note that the output Ant 1.7.1 currently produces when running Ant with the &lt;span style="font-style: italic;"&gt;-verbose&lt;/span&gt; option is always available after the build run, so the reduction of initial output is not limiting the investigation options for the user, but is in fact extending those.&lt;br /&gt;&lt;br /&gt;What do you think of this? Do you consider the current Ant output too verbose or just fine? Have you every had issues examining why an Ant build failed and you wish you would have passed &lt;span style="font-style: italic;"&gt;-verbose&lt;/span&gt; in the first place? And what do you think of the suggested changes?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-8556587526786494554?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/8556587526786494554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/09/improving-ant-output.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8556587526786494554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8556587526786494554'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/09/improving-ant-output.html' title='Improving Ant output'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-3494649184453115755</id><published>2009-09-03T10:13:00.005+02:00</published><updated>2009-09-03T10:42:18.523+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='opendocument'/><category scheme='http://www.blogger.com/atom/ns#' term='csv'/><category scheme='http://www.blogger.com/atom/ns#' term='translator'/><category scheme='http://www.blogger.com/atom/ns#' term='comma-separated'/><category scheme='http://www.blogger.com/atom/ns#' term='opendocument spreadsheet'/><category scheme='http://www.blogger.com/atom/ns#' term='converter'/><category scheme='http://www.blogger.com/atom/ns#' term='spreadsheet'/><category scheme='http://www.blogger.com/atom/ns#' term='ods'/><category scheme='http://www.blogger.com/atom/ns#' term='comma-separated values'/><title type='text'>Converting ODS to CSV</title><content type='html'>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 85px; height: 90px;" src="http://1.bp.blogspot.com/_mHXLKrDq9g8/Sp98T3nsFTI/AAAAAAAAAD8/IBGomb69E2s/s200/Afbeelding+2.png" alt="" border="0" /&gt;Recently I've released an ODS (OpenDocument Spreadsheet) to CSV (Comma-Separated Values) converter. It's available from GitHub:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://github.com/znerd/ods2csv"&gt;http://github.com/znerd/ods2csv&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;The current version (&lt;a href="http://github.com/znerd/ods2csv/tree/v0.1"&gt;0.1&lt;/a&gt;) is not perfect, I've documented &lt;a href="http://github.com/znerd/ods2csv/issues"&gt;some issues&lt;/a&gt;, mainly related to empty fields/records being output. After releasing version 0.1 I created &lt;a href="http://github.com/znerd/ods2csv/tree/e5f1cdb558385828dca01e3187b8f520fe99094e/src/com/pensioenpage/jynx/ods2csv/tests"&gt;some unit tests&lt;/a&gt;; once they pass, these issues should be resolved.&lt;br /&gt;&lt;br /&gt;During development, it turned out it's really easy to parse an ODS file, since it's just a ZIP file with the contents contained in  simple XML file inside it.&lt;br /&gt;&lt;br /&gt;The converter uses &lt;a href="http://www.saxproject.org/"&gt;SAX&lt;/a&gt; to parse the XML inside it, to minimize memory usage. It comes with a Java library, a command line program and an &lt;a href="http://ant.apache.org/"&gt;Apache Ant&lt;/a&gt; task. And there are no external dependencies other than a &lt;a href="http://java.sun.com/"&gt;Java&lt;/a&gt; runtime environment (version 1.5 or up).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-3494649184453115755?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/3494649184453115755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/09/converting-ods-to-csv.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3494649184453115755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3494649184453115755'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/09/converting-ods-to-csv.html' title='Converting ODS to CSV'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_mHXLKrDq9g8/Sp98T3nsFTI/AAAAAAAAAD8/IBGomb69E2s/s72-c/Afbeelding+2.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-7812321764579360794</id><published>2009-08-24T16:41:00.008+02:00</published><updated>2009-09-03T10:35:44.079+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='user agent string'/><category scheme='http://www.blogger.com/atom/ns#' term='user agent sniffing'/><category scheme='http://www.blogger.com/atom/ns#' term='ie8'/><category scheme='http://www.blogger.com/atom/ns#' term='user agent'/><category scheme='http://www.blogger.com/atom/ns#' term='msie8'/><category scheme='http://www.blogger.com/atom/ns#' term='msie6'/><category scheme='http://www.blogger.com/atom/ns#' term='ie6'/><category scheme='http://www.blogger.com/atom/ns#' term='agent string'/><title type='text'>Weirdest user agent string (updated)</title><content type='html'>Investigating a reported bug with one of our &lt;a href="https://www.pensioenpage.com/"&gt;PensioenPage&lt;/a&gt; websites (IE 8 being detected as IE6) I found out the cause of the issue: An IE8 instance returning the following user agent string:&lt;blockquote&gt;&lt;tt&gt;Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SIMBAR={B81922DF-CABA-4976-8A80-B27BE01CAC7C}; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; Creative ZENcast v2.01.01)&lt;/tt&gt;&lt;/blockquote&gt;Note that there's both &lt;tt&gt;MSIE 8.0&lt;/tt&gt; and &lt;tt&gt;MSIE 6.0&lt;/tt&gt; in the string! This is the weirdest user agent string I've ever seen.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update (August 25, 2009):&lt;/span&gt; And I'm not the only one seeing this kind of agent strings, I just noticed a &lt;a href="http://groups.google.com/group/fancybox/browse_thread/thread/b6297575ecc3a789"&gt;FancyBox mailing list posting&lt;/a&gt; with a similar one:&lt;blockquote&gt;&lt;tt&gt;Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; InfoPath.2)&lt;/tt&gt;&lt;/blockquote&gt;And if you &lt;a href="http://www.google.com/search?q=%22Trident%2F4.0%3B+Mozilla%2F4.0+%28compatible%3B+MSIE+6.0%3B%22"&gt;search for "Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0;" on Google&lt;/a&gt;, you can find a lot of similar ones. It's a strange world.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-7812321764579360794?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/7812321764579360794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/08/weirdest-user-agent-string.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7812321764579360794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7812321764579360794'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/08/weirdest-user-agent-string.html' title='Weirdest user agent string (updated)'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-7547670774830226020</id><published>2009-08-20T16:46:00.003+02:00</published><updated>2009-09-25T09:35:22.494+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax highlighting'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><category scheme='http://www.blogger.com/atom/ns#' term='lesscss'/><category scheme='http://www.blogger.com/atom/ns#' term='less'/><title type='text'>Vim syntax highlighting for lesscss</title><content type='html'>Here's a quick HOWTO for enabling &lt;a href="http://www.vim.org/"&gt;vim&lt;/a&gt; syntax highlighting for &lt;tt&gt;.less&lt;/tt&gt; (&lt;a href="http://lesscss.org/"&gt;lesscss&lt;/a&gt;) files:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create the directory &lt;tt&gt;~/.vim/syntax/&lt;/tt&gt; if it does not exist yet.&lt;/li&gt;&lt;li&gt;Download the vim syntax file &lt;tt&gt;less.vim&lt;/tt&gt; into that directory, e.g. with the command:&lt;blockquote&gt;&lt;pre&gt;wget &lt;a href="http://leafo.net/lessphp/vim/less.vim"&gt;http://leafo.net/lessphp/vim/less.vim&lt;/a&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Make sure the following statements are in your &lt;tt&gt;~/.vimrc&lt;/tt&gt;:&lt;blockquote&gt;&lt;pre&gt;syntax on&lt;br /&gt;au BufNewFile,BufRead *.less set filetype=less&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ol&gt;That's all.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update (Sept. 25, 2009):&lt;/span&gt; Here's a screenshot:&lt;br /&gt;&lt;img src="http://img.skitch.com/20090925-pw47h65fpp8rexp6t1r9q27hi9.png" alt="" border="0" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-7547670774830226020?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/7547670774830226020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/08/vim-syntax-highlighting-for-lesscss.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7547670774830226020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7547670774830226020'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/08/vim-syntax-highlighting-for-lesscss.html' title='Vim syntax highlighting for lesscss'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-6545585164470383375</id><published>2009-08-20T16:06:00.008+02:00</published><updated>2009-08-26T09:14:11.421+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apache ant'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='task'/><category scheme='http://www.blogger.com/atom/ns#' term='lesscss'/><title type='text'>Ant task for invoking lesscss (updated)</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Update (August 26, 2009):&lt;/span&gt; I've polished the Ant task for LessCSS files quite a bit and implemented support for both lessc and plessc (the LessPHP alternative).&lt;br /&gt;&lt;br /&gt;Features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;converts .less files to .css&lt;/li&gt;&lt;li&gt;supports both lessc and plessc (at least one is required)&lt;/li&gt;&lt;li&gt;supports time-outs&lt;/li&gt;&lt;li&gt;only processes changed files&lt;/li&gt;&lt;li&gt; supports separate source/target directories, with include/exclude patterns&lt;/li&gt;&lt;/ul&gt;It's available under de BSD-license for download from github: &lt;a href="http://github.com/znerd/lesscss-ant-task/"&gt;http://github.com/znerd/lesscss-ant-task/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;for lessc (tested lessc v1.1.13) to work to fail properly when lesscs fails, a minor change to one of the lessc files is required, this may be resolved in an upcoming version of the task and/or an upcoming version of lessc&lt;/li&gt;&lt;li&gt;plessc v0.1.6 works well with the task, but has a rather annoying &lt;a href="http://github.com/leafo/lessphp/issues#issue/4"&gt;bug&lt;/a&gt; related to negative background positions.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Below is the original blog post.&lt;br /&gt;&lt;hr /&gt;Here's some sample code for implementating an &lt;a href="http://ant.apache.org/"&gt;Apache Ant&lt;/a&gt; task for invoking &lt;a href="http://lesscss.org/"&gt;lesscss&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;import java.io.File;&lt;br /&gt;import org.apache.tools.ant.BuildException;&lt;br /&gt;import org.apache.tools.ant.DirectoryScanner;&lt;br /&gt;import org.apache.tools.ant.taskdefs.Execute;&lt;br /&gt;import org.apache.tools.ant.taskdefs.MatchingTask;&lt;br /&gt;&lt;br /&gt;public final class LesscssTask extends &lt;a href="http://api.dpml.net/ant/1.7.0/org/apache/tools/ant/taskdefs/MatchingTask.html"&gt;MatchingTask&lt;/a&gt; {&lt;br /&gt; public LesscssTask() {&lt;br /&gt;    setIncludes("*.less");&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private File _sourceDir;&lt;br /&gt; private File _destDir;&lt;br /&gt;&lt;br /&gt; public void setDir(File dir) {&lt;br /&gt;    _sourceDir = dir;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setToDir(File dir) {&lt;br /&gt;    _destDir = dir;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void execute() throws BuildException {&lt;br /&gt;    for (String inFileName : getDirectoryScanner(_sourceDir).getIncludedFiles()) {&lt;br /&gt;       &lt;a href="http://java.sun.com/javase/6/docs/api/java/io/File.html"&gt;File&lt;/a&gt;        inFile = new File(_sourceDir, inFileName);&lt;br /&gt;       String outFileName = inFile.getName().replaceFirst("\\.less$", ".css");&lt;br /&gt;       String outFilePath = new File(_destDir, outFileName).getPath();&lt;br /&gt;       String  inFilePath = inFile.getPath();&lt;br /&gt;&lt;br /&gt;       log("lesscss: From \"" + inFilePath + "\" to \"" + outFilePath + "\".");&lt;br /&gt;&lt;br /&gt;       &lt;a href="http://api.dpml.net/ant/1.7.0/org/apache/tools/ant/taskdefs/Execute.html"&gt;Execute&lt;/a&gt;.runCommand(this, new String[] { "lessc", inFilePath, outFilePath });&lt;br /&gt;    }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;After defining the &lt;tt&gt;lesscss&lt;/tt&gt; task in your build file (using a &lt;tt&gt;taskdef&lt;/tt&gt;) invoking it is as simple as:&lt;blockquote&gt;&lt;pre&gt;&amp;lt;lesscss dir="src/htdocs" todir="build/htdocs" /&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-6545585164470383375?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/6545585164470383375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/08/ant-task-for-invoking-lesscss.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6545585164470383375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6545585164470383375'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/08/ant-task-for-invoking-lesscss.html' title='Ant task for invoking lesscss (updated)'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-1249103824725852730</id><published>2009-08-20T14:53:00.002+02:00</published><updated>2009-08-20T14:58:25.640+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='installation'/><category scheme='http://www.blogger.com/atom/ns#' term='gem'/><category scheme='http://www.blogger.com/atom/ns#' term='lesscss'/><title type='text'>Installing lesscss on Gentoo Linux</title><content type='html'>Here's a short HOWTO on installing &lt;a href="http://lesscss.org/"&gt;lesscss&lt;/a&gt; on &lt;a href="http://www.gentoo.org/"&gt;Gentoo&lt;/a&gt;. As root, execute:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;tt&gt;emerge --sync&lt;/tt&gt; (or skip this if you know you are relatively up-to-date)&lt;/li&gt;&lt;li&gt;&lt;tt&gt;emerge rubygems&lt;/tt&gt;&lt;/li&gt;&lt;li&gt;&lt;tt&gt;gem install less&lt;/tt&gt;&lt;/li&gt;&lt;/ol&gt;That's all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-1249103824725852730?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/1249103824725852730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/08/installing-lesscss-on-gentoo-linux.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1249103824725852730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1249103824725852730'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/08/installing-lesscss-on-gentoo-linux.html' title='Installing lesscss on Gentoo Linux'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-6175432422158906111</id><published>2009-08-14T12:26:00.004+02:00</published><updated>2009-08-14T12:35:50.480+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='prefetch'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='xmlhttprequest'/><category scheme='http://www.blogger.com/atom/ns#' term='prefetching'/><category scheme='http://www.blogger.com/atom/ns#' term='msie'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='asynhronous'/><title type='text'>Prefetching files using jQuery</title><content type='html'>Since years, Gecko-based browsers have supported &lt;a href="https://developer.mozilla.org/en/Link_prefetching_FAQ"&gt;link prefetching&lt;/a&gt;, while other browsers (notably Internet Explorer) are lacking this function.&lt;br /&gt;&lt;br /&gt;Here's a simple JavaScript-based work-around based on &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;:&lt;blockquote&gt;&lt;pre&gt;$(document).ready(function() {&lt;br /&gt;&lt;br /&gt;     // Prefetch all files referenced in [LINK rel="prefetch" href="xyz"] tags...&lt;br /&gt;     var $prefetchTags = $('HEAD LINK[rel=prefetch][href]');&lt;br /&gt;&lt;br /&gt;     // ...starting with the ones that can be done asynchronously via AJAX...&lt;br /&gt;     $prefetchTags.filter('[href$=.txt],[href$=.js],[href$=.html]')&lt;br /&gt;     .each(function() {&lt;br /&gt;             $.ajax({url: this.href, dataType: 'text'});&lt;br /&gt;     });&lt;br /&gt;&lt;br /&gt;     // ...followed by all referenced images,&lt;br /&gt;     $prefetchTags.filter('[href$=.png],[href$=.jpg],[href$=.jpeg],[href$=.gif]')&lt;br /&gt;     .each(function() {&lt;br /&gt;             new Image().src = this.href;&lt;br /&gt;     });&lt;/pre&gt;&lt;/blockquote&gt;It looks for all &lt;code&gt;LINK&lt;/code&gt; tags in the &lt;code&gt;HEAD&lt;/code&gt; section of the HTML document that have &lt;code&gt;rel="prefetch"&lt;/code&gt; set.&lt;br /&gt;&lt;br /&gt;Then it processes all HREF attributes, but treating text files and images differently, since text files can easily be downloaded using asynchronous HTTP requests (a.k.a. XMLHttpRequest or AJAX), while this method is not well-suited for fetching binary files.&lt;br /&gt;&lt;br /&gt;This approach may be a bit rough on the edges, since I've only done limited testing, on Fireefox 3.0/Mac and MSIE 8.0/WinXP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-6175432422158906111?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/6175432422158906111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/08/prefetching-files-using-jquery.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6175432422158906111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6175432422158906111'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/08/prefetching-files-using-jquery.html' title='Prefetching files using jQuery'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-4147691803736105818</id><published>2009-07-15T11:57:00.002+02:00</published><updated>2009-07-15T12:02:29.776+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msie'/><category scheme='http://www.blogger.com/atom/ns#' term='ie'/><category scheme='http://www.blogger.com/atom/ns#' term='msie6'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='ie6'/><category scheme='http://www.blogger.com/atom/ns#' term='web standards'/><category scheme='http://www.blogger.com/atom/ns#' term='youtube'/><title type='text'>Reducing IE 6 support</title><content type='html'>It's well known that IE 6 is causing a lot of grief for Web Developers. Recently, Digg &lt;a href="http://blog.digg.com/?p=878"&gt;announced&lt;/a&gt; they will reduce support for IE 6.&lt;br /&gt;&lt;br /&gt;Now, Youtube is also announcing they are reducing IE 6 support. They are actively advising IE 6 users to upgrade to either IE 8, Google Chrome (of course) or Firefox 3.5.&lt;br /&gt;&lt;br /&gt;See this image:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://img43.imageshack.us/img43/2015/youtubeie6.png"&gt;screenshot showing banner warning an IE 6 user on the Youtube site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;In my opinion, this is an excellent development. End users as well as system admins should be pushed to migrate to more standards-compliant browsers. I realize this will have a significant impact on some companies, especially with IE6-specific intranet sites.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-4147691803736105818?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/4147691803736105818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/07/reducing-ie-6-support.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4147691803736105818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4147691803736105818'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/07/reducing-ie-6-support.html' title='Reducing IE 6 support'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-7181792477465020786</id><published>2009-07-01T15:11:00.006+02:00</published><updated>2009-07-04T11:50:32.525+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><category scheme='http://www.blogger.com/atom/ns#' term='junit'/><category scheme='http://www.blogger.com/atom/ns#' term='diff'/><category scheme='http://www.blogger.com/atom/ns#' term='equals'/><title type='text'>Advanced testing for equality in Java unit tests</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Testing the equals method&lt;/span&gt;&lt;br /&gt;When testing Java classes, a common requirement is that the &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html#equals%28java.lang.Object%29"&gt;equals(Object)&lt;/a&gt; method works properly. When using &lt;a href="http://www.junit.org/"&gt;JUnit&lt;/a&gt;, this can be as simple as:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;import static &lt;a href="http://junit.org/apidocs/org/junit/Assert.html"&gt;org.junit.Assert&lt;/a&gt;.*;&lt;br /&gt;:&lt;br /&gt;&lt;a href="http://junit.org/apidocs/org/junit/Assert.html#assertEquals%28java.lang.Object,%20java.lang.Object%29"&gt;assertEquals&lt;/a&gt;(a, b);&lt;/pre&gt;&lt;/blockquote&gt;However, you may want to test that not only &lt;code&gt;a&lt;/code&gt; considers itself equal to &lt;code&gt;b&lt;/code&gt; but also vice versa. With a single &lt;code&gt;assertEquals&lt;/code&gt; call this won't work, so you add:&lt;blockquote&gt;&lt;pre&gt;&lt;a href="http://junit.org/apidocs/org/junit/Assert.html#assertEquals%28java.lang.Object,%20java.lang.Object%29"&gt;&lt;/a&gt;&lt;a href="http://junit.org/apidocs/org/junit/Assert.html#assertEquals%28java.lang.Object,%20java.lang.Object%29"&gt;assertEquals&lt;/a&gt;(b, a);&lt;/pre&gt;&lt;/blockquote&gt;Perfect, right?&lt;br /&gt;&lt;br /&gt;Possibly. What if the test fails? How do you determine what the &lt;code&gt;equals&lt;/code&gt; method actually considers a difference? The comparison algorithm can be quite complex, involving several instance fields, including collections, maps and XML snippets.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Differences for humans&lt;/span&gt;&lt;br /&gt;It would help if the class would describe the differences in a human-readable manner. Here's how: Declare an interface &lt;code&gt;VerboseDiff&lt;/code&gt; (or whatever better name you can come up with) with just one method that describes the differences between this object and the specified argument. It returns &lt;code&gt;null&lt;/code&gt; if there are no differences:&lt;blockquote&gt;&lt;pre&gt;public interface VerboseDiff {&lt;br /&gt;  String describeDifferences(Object obj);&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;Then change your implementation classes to implement this interface and implement the &lt;code&gt;equals&lt;/code&gt; method as follows:&lt;blockquote&gt;&lt;pre&gt;@Override&lt;br /&gt;public boolean equals(Object obj) {&lt;br /&gt;  return describeDifferences(obj) == null;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;Your &lt;code&gt;describeDifferences&lt;/code&gt; method could be implemented as follows:&lt;blockquote&gt;&lt;pre&gt;public String describeDifferences(Object obj) {&lt;br /&gt;if (obj == null)) {&lt;br /&gt;  return "obj == null";&lt;br /&gt;} else if (! (obj instanceof ThisClass)) {&lt;br /&gt;  return "obj is not an instance of ThisClass, but an instance of class " + obj;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;ThisClass that = (ThisClass) obj;&lt;br /&gt;&lt;br /&gt;if (that._baseValue != _baseValue) {&lt;br /&gt;  return "baseValue of this object (" + _baseValue + ") is different from base value of argument (" + baseValue + ')';&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return null;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;Now your unit tests can look like this:&lt;blockquote&gt;&lt;pre&gt;&lt;a href="http://junit.org/apidocs/org/junit/Assert.html#assertEquals%28java.lang.Object,%20java.lang.Object%29"&gt;assertEquals&lt;/a&gt;(null, a.describeDifferences(b));&lt;br /&gt;&lt;a href="http://junit.org/apidocs/org/junit/Assert.html#assertEquals%28java.lang.Object,%20java.lang.Object%29"&gt;assertEquals&lt;/a&gt;(null, b.describeDifferences(a));&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;Further reading&lt;/span&gt;&lt;br /&gt;A final tip: Implementing a good comparison algorithm that is in line with the contract of the &lt;code&gt;equals&lt;/code&gt; method is typically not straight-forward, especially if you need to deal with subclasses. The article &lt;a href="http://www.artima.com/lejava/articles/equality.html"&gt;How to Write an Equality Method in Java&lt;/a&gt; (at artima.com) covers the topic excellently.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-7181792477465020786?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/7181792477465020786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/07/advanced-testing-for-equality-in-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7181792477465020786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7181792477465020786'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/07/advanced-testing-for-equality-in-java.html' title='Advanced testing for equality in Java unit tests'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-4164498188048527171</id><published>2009-06-30T20:43:00.004+02:00</published><updated>2009-08-11T12:55:55.386+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yui'/><category scheme='http://www.blogger.com/atom/ns#' term='sitepoint'/><category scheme='http://www.blogger.com/atom/ns#' term='lesscss'/><category scheme='http://www.blogger.com/atom/ns#' term='less'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>More CSS with Less</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lesscss.org"&gt;&lt;img style="float: right;" src="http://1.bp.blogspot.com/_mHXLKrDq9g8/SkpeiPiQCBI/AAAAAAAAAD0/TWvnVSOBL4U/s200/Afbeelding+2.png" alt="" id="BLOGGER_PHOTO_ID_5353195049462007826" border="0" /&gt;&lt;/a&gt;The people at &lt;a href="http://www.sitepoint.com/"&gt;Sitepoint&lt;/a&gt; send me a 'Tech Times' newsletter every now and then. I tend to ignore newsletters from most other companies, but this one is different, it is surprisingly interesting, most of the times.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sitepoint.com/newsletter/viewissue.php?id=3&amp;amp;issue=246"&gt;Today's Tech Times (issue 246)&lt;/a&gt; informed me about &lt;a href="http://lesscss.org/"&gt;Less&lt;/a&gt;, an improvement over regular CSS that adds variables, mixins, operations and nested rules to regular CSS. It's backwards compatible and compiles to regular CSS before you serve it to your favorite user agent. Wow.&lt;br /&gt;&lt;br /&gt;This is definitely something I intend to integrate into the work flow for the PensioenPage technology, right before optimizing the (normal) CSS using the &lt;a href="http://developer.yahoo.com/yui/compressor/"&gt;YUI Compressor&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-4164498188048527171?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/4164498188048527171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/06/more-css-with-less.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4164498188048527171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4164498188048527171'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/06/more-css-with-less.html' title='More CSS with Less'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_mHXLKrDq9g8/SkpeiPiQCBI/AAAAAAAAAD0/TWvnVSOBL4U/s72-c/Afbeelding+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-7804589364050925155</id><published>2009-06-30T20:38:00.002+02:00</published><updated>2009-06-30T20:43:06.371+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox3.5'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox3'/><title type='text'>Firefox 3.5 released</title><content type='html'>If you didn't know already, &lt;a href="http://www.getfirefox.com/"&gt;Firefox 3.5&lt;/a&gt; was released today (June 30, 2009).&lt;br /&gt;&lt;br /&gt;Of course, the PensioenPage technology is ready for it, even detecting the version properly, check out the source code:&lt;blockquote&gt;&lt;a href="https://www.pensioenpage.com/?_indent=true"&gt;www.pensioenpage.com/?_indent=true&lt;/a&gt;&lt;/blockquote&gt;Note that the &lt;em&gt;_indent=true&lt;/em&gt; enables indentation in the source code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-7804589364050925155?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/7804589364050925155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/06/firefox-35-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7804589364050925155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7804589364050925155'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/06/firefox-35-released.html' title='Firefox 3.5 released'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-3061557638218715796</id><published>2009-06-23T08:54:00.003+02:00</published><updated>2009-06-23T10:10:21.752+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='user agent string'/><category scheme='http://www.blogger.com/atom/ns#' term='user agent sniffing'/><category scheme='http://www.blogger.com/atom/ns#' term='user agent'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Combining CSS and user agent sniffing</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Avoid sniffing if you can&lt;/span&gt;&lt;br /&gt;User agent sniffing is bad and that's known. So avoid it if you can.&lt;br /&gt;&lt;br /&gt;However, in some cases a browser is just acting weird and you cannot ignore that, it needs some specific CSS instructions. Internet Explorer 6 and 7 are prime examples here.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The old days: CSS hacks&lt;/span&gt;&lt;br /&gt;In the past, this was resolved with odd &lt;a href="http://en.wikipedia.org/wiki/CSS_filter"&gt;CSS filters&lt;/a&gt; (better known as &lt;span style="font-style: italic;"&gt;hacks&lt;/span&gt;), constructs that were known to work in some browsers and be ignored in some other browsers. To do this well, you need to know about the quirks of all browsers. This is not scalable, with new browsers coming out all the time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Alternative: Sniffing and CSS classes&lt;/span&gt;&lt;br /&gt;Here's an alternative: Use server-side agent sniffing and put the results in a class attribute in the HTML. This allows you to write CSS rules like:&lt;blockquote&gt;&lt;pre&gt;.Browser-Opera ul.ModList li {display:block}&lt;/pre&gt;&lt;/blockquote&gt;or even:&lt;blockquote&gt;&lt;pre&gt;.BrowserOS-MacOS-10.Browser-Firefox-3-5 li.FooBar {margin-left:2px}&lt;/pre&gt;&lt;/blockquote&gt;To see this in action, have a look at the source code of the PensioenPage site:&lt;blockquote&gt;&lt;a href="https://www.pensioenpage.com/"&gt;www.pensioenpage.com&lt;/a&gt;&lt;/blockquote&gt;or, with indentation enabled in the source code:&lt;blockquote&gt;&lt;a href="https://www.pensioenpage.com/?_indent=true"&gt;www.pensioenpage.com/?_indent=true&lt;/a&gt;&lt;/blockquote&gt;Note that the user agent sniffing we implemented has more than 160 unit tests, detecting (Mobile) Internet Explorer, Opera Desktop/Mobile/Mini, Firefox, the old Netscape browsers,  Chrome, Safari, Maxthon, etc.&lt;br /&gt;&lt;br /&gt;Operating systems detected include Mac OS X, various Windows versions, BSD variants, Solaris, Linux, the iPhone OS, etc.&lt;br /&gt;&lt;br /&gt;Finally, the browser engine is also detected, allowing rules like this one:&lt;blockquote&gt;&lt;pre&gt;.BrowserEngine-Trident div.Tip {padding:0}&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-3061557638218715796?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/3061557638218715796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/06/combining-css-and-user-agent-sniffing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3061557638218715796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3061557638218715796'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/06/combining-css-and-user-agent-sniffing.html' title='Combining CSS and user agent sniffing'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-11698492854110218</id><published>2009-06-03T10:58:00.004+02:00</published><updated>2009-06-03T11:40:39.495+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='integration'/><category scheme='http://www.blogger.com/atom/ns#' term='services'/><category scheme='http://www.blogger.com/atom/ns#' term='data exchange'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='collaboration'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>The new OS challenge: data integration and synchronization</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Today's OS challenge&lt;/span&gt;&lt;br /&gt;In the past, operating systems had a limited function, synchronizing access to internal and external hardware, file systems, memory, processes, etc.&lt;br /&gt;&lt;br /&gt;Nowadays, user's demands far exceed these 'simple' requirements, expecting data integration and synchronization. People use different (portable) machines, applications and different (online) storage realms, and these all need to &lt;span style="font-weight: bold;"&gt;integrate&lt;/span&gt; in a customer-focused manner.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Examples: image manipulation, bookmarks, data exchange&lt;/span&gt;&lt;br /&gt;For example, on Mac OS X images can be manipulated with all sorts of relatively cheap programs these days (e.g. &lt;a href="http://www.skitch.com/"&gt;Skitch&lt;/a&gt;, &lt;a href="http://www.realmacsoftware.com/littlesnapper/"&gt;LittleSnapper&lt;/a&gt;, &lt;a href="http://flyingmeat.com/acorn/"&gt;Acorn&lt;/a&gt;, &lt;a href="http://www.pixelmator.com/"&gt;Pixelmator&lt;/a&gt;, &lt;a href="http://www.acqualia.com/picturesque/"&gt;Picturesque&lt;/a&gt;, etc.) All these programs have a different focus and provide different functions, with some overlap. However, when you try combining the functions of these programs, you are facing a real challenge. What format do you use for data exchange? PNG is a good choice for one-way image manipulation, but then don't try changing something in the middle of your process.&lt;br /&gt;&lt;br /&gt;This challenge becomes even larger when you try exchanging vector images between multiple applications, like &lt;a href="http://www.apple.com/iwork/keynote/"&gt;Keynote&lt;/a&gt;, &lt;a href="http://www.apple.com/iwork/pages/"&gt;Pages&lt;/a&gt;, &lt;a href="http://www.neooffice.org/"&gt;NeoOffice&lt;/a&gt;, &lt;a href="http://www.novamind.com/"&gt;Novamind&lt;/a&gt;, &lt;a href="http://www.microsoft.com/mac/products/Office2008/default.mspx"&gt;Microsoft Office&lt;/a&gt;, etc. Both SVG and OpenDocument are formally standards, but they are currently far from practical for inter-application data exchange. On the Mac platform, EPS and PDF are typically the best bets. An established practical standard is lacking.&lt;br /&gt;&lt;br /&gt;Another example is your bookmarks. How do you synchronize your bookmarks between Firefox, Safari, Opera and Internet Explorer? Each vendor starts to deploy his own web-based synchronization service (&lt;a href="http://www.apple.com/mobileme/"&gt;MobileMe&lt;/a&gt;, &lt;a href="http://link.opera.com/"&gt;Opera Link&lt;/a&gt;, etc.) and there are some that go a bit further already (&lt;a href="http://www.xmarks.com/"&gt;XMarks&lt;/a&gt;, &lt;a href="http://delicious.com/"&gt;Delicious&lt;/a&gt;) but we need one solution for all browsers that integrates with different operating systems.&lt;br /&gt;&lt;br /&gt;Finally, notice how online data exchange services have started to emerge. For example &lt;a href="http://quicksnapper.com/"&gt;Quicksnapper&lt;/a&gt;, &lt;a href="http://skitch.com/"&gt;Skitch.com&lt;/a&gt;, &lt;a href="http://www.me.com/"&gt;MobileMe&lt;/a&gt;, &lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt;, &lt;a href="http://www.youtube.com/"&gt;YouTube&lt;/a&gt;, etc. These services make it easy to share data over the internet, but they are typically focused on one type of data (images or video, for example) and fail to integrate with different sorts of applications. Their focus is typically limited.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.getdropbox.com/"&gt;Dropbox&lt;/a&gt; is a positive exception here, providing a generic data exchange experience that is seamless across Mac OS X and Windows platforms, transparently working with all sorts of applications &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; providing limited history/backup/versioning support. However, optimally, applications should be adjusted so they recognize and support this platform.&lt;br /&gt;&lt;br /&gt;And what if you want to view &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; edit your files on the fly from your mobile device, like an iPhone?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Network computer?&lt;/span&gt;&lt;br /&gt;In the past, companies like &lt;a href="http://www.sun.com/"&gt;Sun MicroSystems&lt;/a&gt; attempted to resolve these issues with a largely closed environment: the &lt;a href="http://en.wikipedia.org/wiki/Network_computer"&gt;network computer&lt;/a&gt;, sporting a central server for sharing all applications and data. Although there are still (business) environments where this is an excellent solution, the majority of the customers requires more choice and an open system.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Operating system support&lt;/span&gt;&lt;br /&gt;This is where an operating system like Mac OS X can make a big difference. OS X is already much appreciated for the system-wide services it provides, like spell checking, hyphenation, speech, etc. But these don't go far enough.&lt;br /&gt;&lt;br /&gt;For application interoperability, Apple should extend their vision, provide a platform and produce some guidelines. These should enable application developers to write interoperable programs that support tomorrow's applications, collaboration and synchronization tools and data exchange methods, including versioning support.&lt;br /&gt;&lt;br /&gt;This may require a strategic shift, as Apple is currently trying to make money off MobileMe, which is a closed and proprietary platform that has limited features and is based on an expensive yearly subscription model. Such a model is hardly suitable for large groups of customers that will look elsewhere for their data exchange requirements.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-11698492854110218?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/11698492854110218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/06/new-os-challenge-data-integration-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/11698492854110218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/11698492854110218'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/06/new-os-challenge-data-integration-and.html' title='The new OS challenge: data integration and synchronization'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-6948755205662751823</id><published>2009-04-27T15:26:00.005+02:00</published><updated>2009-04-28T09:37:23.471+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='parallels tools'/><category scheme='http://www.blogger.com/atom/ns#' term='parallels'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><title type='text'>Failed to install Parallels Tools 4.0 in Kubuntu Linux 9.0.4 (updated)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.parallels.com/r/img/parallels-logo.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right;" src="http://www.parallels.com/r/img/parallels-logo.gif" alt="" border="0" /&gt;&lt;/a&gt;I tried to install Parallels Tools 4.0 inside a fresh Kubuntu Linux 9.04 installation, but it failed. The log tail is:&lt;blockquote&gt;&lt;pre&gt;make[1]: Leaving directory `/usr/src/linux-headers-2.6.28-11-generic'&lt;br /&gt;Installation of kernel modules was finished successfully&lt;br /&gt;Start installation of user space modules&lt;br /&gt;X server: xorg, v1.6.0&lt;br /&gt;Install X modules from directory: .1.6&lt;br /&gt;System X modules are placed in /usr/lib/xorg/modules&lt;br /&gt;Error: there is no X modules for this version of X server&lt;br /&gt;Error: failed to install user space applications and drivers&lt;/pre&gt;&lt;/blockquote&gt;Any suggestions?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update (April 28, 2009)&lt;/span&gt;: This is a known issue, see these posts at the Parallels forum:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://forum.parallels.com/showthread.php?t=89623"&gt;Parallels Tools Ubuntu 9.04 Jaunty Jackalope&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://forum.parallels.com/showthread.php?p=369077"&gt;Parallels tools: noexec???&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-6948755205662751823?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/6948755205662751823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/04/failed-to-install-parallels-tools-40-in.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6948755205662751823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6948755205662751823'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/04/failed-to-install-parallels-tools-40-in.html' title='Failed to install Parallels Tools 4.0 in Kubuntu Linux 9.0.4 (updated)'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-5702256687876165072</id><published>2009-04-27T10:11:00.006+02:00</published><updated>2009-06-09T14:33:38.366+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='widgets'/><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><category scheme='http://www.blogger.com/atom/ns#' term='finder'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><category scheme='http://www.blogger.com/atom/ns#' term='dashboard'/><title type='text'>Favourite Mac OS X feature requests (updated)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mHXLKrDq9g8/Sf8wDprU2II/AAAAAAAAADs/dnC1kgeZzE8/s1600-h/Logo+Apple.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 152px; height: 186px;" src="http://4.bp.blogspot.com/_mHXLKrDq9g8/Sf8wDprU2II/AAAAAAAAADs/dnC1kgeZzE8/s320/Logo+Apple.png" alt="" id="BLOGGER_PHOTO_ID_5332033323115272322" border="0" /&gt;&lt;/a&gt;Here are some of my favourite Mac OS X feature requests, just aimed at improving my efficiency when using the Mac:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;when &lt;span style="font-weight: bold;"&gt;replying to a &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;sent&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; email&lt;/span&gt; from Mail, make sure the To:/CC: addresses are the same as the original (currently, in Mac OS X 10.5.6, the To: address is set to my own address);&lt;/li&gt;&lt;li&gt;make the Finder allow me to show &lt;span style="font-weight: bold;"&gt;folders first&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;allow me to put &lt;span style="font-weight: bold;"&gt;mount points in the Locations bar&lt;/span&gt; in the Finder (currently only folders &lt;span style="font-style: italic;"&gt;below&lt;/span&gt; the mount points can be put in there);&lt;/li&gt;&lt;li&gt;make &lt;span style="font-weight: bold;"&gt;Cmd-` work while dragging&lt;/span&gt; from a Finder window, inside the Finder (perhaps this is even a bug on my system?);&lt;/li&gt;&lt;li&gt;allow me to configure Dashboard &lt;span style="font-weight: bold;"&gt;widgets are pre-started&lt;/span&gt; before I activate the Dashboard, this saves me quite some time;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;resize windows from any corner&lt;/span&gt; - at least make this an option;&lt;/li&gt;&lt;li&gt;in the Finder, have a &lt;span style="font-weight: bold;"&gt;Go-back keyboard shortcut&lt;/span&gt; for going back to the previous location (like Cmd-LeftArrow in Safari and Firefox).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-5702256687876165072?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/5702256687876165072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/04/favourite-mac-os-x-feature-requests.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5702256687876165072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5702256687876165072'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/04/favourite-mac-os-x-feature-requests.html' title='Favourite Mac OS X feature requests (updated)'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mHXLKrDq9g8/Sf8wDprU2II/AAAAAAAAADs/dnC1kgeZzE8/s72-c/Logo+Apple.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-6546390501579591247</id><published>2009-04-22T21:25:00.004+02:00</published><updated>2009-04-22T21:31:50.649+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='odf'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft office'/><title type='text'>Idea: Phasing out Office documents per e-mail</title><content type='html'>Currently, Microsoft Office files, in various incarnations, are still the dominant format for mailing documents. Although everybody (including Microsoft) agrees these formats are not standards-based en hence (at least in theory) not future-proof, this is a situation that is not easy to change.&lt;br /&gt;&lt;br /&gt;Try sending an ODT* file to a colleague. Chances are she will have no idea what to do with it. But since everybody knows Word, Excel and Powerpoint, the situation will remain for a while.&lt;br /&gt;&lt;br /&gt;Here's a wild idea for improving the situation: when sending an email, most mail clients support a standard for sending both text and HTML email as alternative formats in the same mail. Perhaps a similar approach could also be applied to DOC/XLS/PPT attachments: For example: every time a user sends an ODT file, a corresponding DOC file is automatically attached as well, and vice versa.&lt;br /&gt;&lt;br /&gt;* ODT = OpenDocument Text, an ISO standard format for text documents.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-6546390501579591247?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/6546390501579591247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/04/idea-phasing-out-office-documents-per-e.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6546390501579591247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6546390501579591247'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/04/idea-phasing-out-office-documents-per-e.html' title='Idea: Phasing out Office documents per e-mail'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-2384780588720801396</id><published>2009-04-22T16:23:00.004+02:00</published><updated>2009-04-22T19:34:01.454+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='password'/><category scheme='http://www.blogger.com/atom/ns#' term='gnupg'/><category scheme='http://www.blogger.com/atom/ns#' term='decryption'/><category scheme='http://www.blogger.com/atom/ns#' term='decrypt'/><title type='text'>Decrypting multiple files with GnuPG</title><content type='html'>&lt;a style="float: right;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_mHXLKrDq9g8/Se9U4PwzXOI/AAAAAAAAADk/DsMhmSKabs8/s1600-h/gnupg.png"&gt;&lt;img src="http://1.bp.blogspot.com/_mHXLKrDq9g8/Se9U4PwzXOI/AAAAAAAAADk/DsMhmSKabs8/s320/gnupg.png" alt="" id="BLOGGER_PHOTO_ID_5327570209483218146" border="0" /&gt;&lt;/a&gt;Here's a simple UNIX/Linux script that asks for a password and then decrypts a batch of files using that password, using &lt;a href="http://www.gnupg.org/"&gt;GnuPG&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;echo -n "Enter password: "&lt;br /&gt;stty -echo&lt;br /&gt;read password&lt;br /&gt;stty echo&lt;br /&gt;&lt;br /&gt;for encrypted in *.gpg; do&lt;br /&gt;     decrypted=`echo ${encrypted} | sed s/.gpg\$//`&lt;br /&gt;     echo -n ${decrypted}&lt;br /&gt;     echo "${password}" | gpg --passphrase-fd 0 -o "${decrypted}" -d "${encrypted}" &gt; /dev/null 2&gt; /dev/null&lt;br /&gt;     if [ "$?" = "0" ]; then&lt;br /&gt;             chmod 600 "${decrypted}"&lt;br /&gt;             echo " [ DONE ]"&lt;br /&gt;     else&lt;br /&gt;             echo " [ FAILED ]"&lt;br /&gt;     fi&lt;br /&gt;done&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-2384780588720801396?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/2384780588720801396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/04/decrypting-multiple-files-with-gnupg.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2384780588720801396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2384780588720801396'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/04/decrypting-multiple-files-with-gnupg.html' title='Decrypting multiple files with GnuPG'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_mHXLKrDq9g8/Se9U4PwzXOI/AAAAAAAAADk/DsMhmSKabs8/s72-c/gnupg.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-136235742779650263</id><published>2009-04-21T11:04:00.024+02:00</published><updated>2009-06-09T14:31:16.107+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='safari'/><category scheme='http://www.blogger.com/atom/ns#' term='opera'/><title type='text'>Favourite browser features</title><content type='html'>Here's an overview of what I appreciate in a browser. This table only considers browsers available on Mac OS X, since that's my desktop environment. Note that most of this is very subjective, it's just my personal preferences.&lt;br /&gt;&lt;p&gt;In Firefox, I've installed the following add-ons:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Web Developer&lt;/li&gt;&lt;li&gt;Firebug&lt;/li&gt;&lt;li&gt;Google Page Speed&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The &lt;b&gt;bold&lt;/b&gt; items are my favourites.&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;&lt;/th&gt;&lt;th&gt;Firefox 3.0&lt;/th&gt;&lt;th&gt;Safari 4.0&lt;/th&gt;&lt;th&gt;Opera 10 (beta)&lt;br /&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Startup time&lt;/th&gt;&lt;td&gt;Pretty bad&lt;/td&gt;&lt;td&gt;&lt;b&gt;Very good&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Very good&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Ability to immediately edit the address in the address bar after startup&lt;/th&gt;&lt;td&gt;&lt;b&gt;OK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Bad: there is a delay&lt;/td&gt;&lt;td&gt;&lt;b&gt;OK&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Shows plain XML in a nice tree&lt;/th&gt;&lt;td&gt;&lt;b&gt;Yes&lt;/b&gt;&lt;/td&gt;&lt;td&gt;No&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Yes&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Recognizes a port number, even when no protocol (e.g. "http") is specified&lt;/th&gt;&lt;td&gt;&lt;b&gt;Yes&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Yes&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Yes&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;OS X look-and-feel&lt;/th&gt;&lt;td&gt;&lt;b&gt;Nice&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Nice&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Not very nice&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;New tab page&lt;/th&gt;&lt;td&gt;Fast, but empty&lt;/td&gt;&lt;td&gt;&lt;b&gt;Top sites: useful and very attractive&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Speed dial, quite nice&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Search Google from address bar&lt;/th&gt;&lt;td&gt;&lt;span style="font-weight: bold;"&gt;Yes&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Find in page&lt;/th&gt;&lt;td&gt;Toolbar at bottom is OK, but far from optimal&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Result highlighting: very nice and polished&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Bad: separate dialog window&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Progress of downloads visible in OS (e.g. in Stacks)&lt;/th&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;&lt;b&gt;Yes&lt;/b&gt;&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Web development tools&lt;/th&gt;&lt;td&gt;&lt;b&gt;Combination of Firebug, Web Developer and Google Page Speed works like a charm&lt;/b&gt;&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;"Inspect Element" is very nice and integrated&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Developer tool is not very intuitive&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Login form autocompletion&lt;/th&gt;&lt;td&gt;&lt;b&gt;Excellent, supporting multiple accounts&lt;/b&gt;&lt;/td&gt;&lt;td&gt;OK&lt;/td&gt;&lt;td&gt;OK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Browser can be configured to have just one window with tabs, even when a link is pressed in an external application&lt;/th&gt;&lt;td&gt;&lt;b&gt;Yes&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Yes&lt;/b&gt;&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Link targets can show in a tooltip (e.g. at the window bottom, like Google Chrome) and do not require a status bar to display&lt;/th&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Activity monitor&lt;br /&gt;&lt;/th&gt;&lt;td&gt;No&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;Yes&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Number of clicks in the address bar needed to select all text&lt;/th&gt;&lt;td style="font-weight: bold;"&gt;One&lt;/td&gt;&lt;td&gt;Three&lt;/td&gt;&lt;td&gt;&lt;b&gt;One&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Prompt to store login details&lt;/th&gt;&lt;td style="font-weight: bold;"&gt;Unobtrusive and non-blocking bar at the top&lt;/td&gt;&lt;td&gt;Blocking dialog window (very bad)&lt;/td&gt;&lt;td&gt;Obtrusive dialog window, but non-blocking&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Supported by XMarks&lt;/th&gt;&lt;td style="font-weight: bold;"&gt;Yes&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;&lt;span style="font-weight: normal;"&gt;Officially only Safari 3 is supported, but in practice it works with version 4&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Updated&lt;/span&gt; on June 9, 2009, for Safari 4 final release and Opera 10.00 beta. Updated and added criteria.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-136235742779650263?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/136235742779650263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/04/favourite-browser-features.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/136235742779650263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/136235742779650263'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/04/favourite-browser-features.html' title='Favourite browser features'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-3365514320596383246</id><published>2009-04-08T11:37:00.030+02:00</published><updated>2009-04-10T16:01:28.159+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ide'/><category scheme='http://www.blogger.com/atom/ns#' term='edit'/><category scheme='http://www.blogger.com/atom/ns#' term='macheist'/><category scheme='http://www.blogger.com/atom/ns#' term='editor'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='maxosx'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='espresso'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Espresso - first impressions (updated x2)</title><content type='html'>&lt;a style="float: right;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://macrabbit.com/espresso/images/BannerIcon.png"&gt;&lt;img style="width: 120px;" src="http://macrabbit.com/espresso/images/BannerIcon.png" alt="" border="0" /&gt;&lt;/a&gt;As part of the &lt;a href="http://www.macheist.com/"&gt;MacHeist&lt;/a&gt; 3 bundle, I purchased &lt;a href="http://macrabbit.com/espresso/"&gt;Espresso&lt;/a&gt;, a neat little code editor for Mac OS X. It looks simple and intuitive and works well overall. For a code editor, the functionality is fairly limited, though.&lt;br /&gt;&lt;br /&gt;It supports plugins, which Espresso calls &lt;span style="font-style: italic;"&gt;sugars&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;After using Espresso for just a couple of hours, here are some of the things I would suggest as improvements:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;show that a line is wrapped by placing a special &lt;span style="font-weight: bold;"&gt;line wrap symbol&lt;/span&gt; at the end of the line that's being wrapped;&lt;/li&gt;&lt;li&gt;support &lt;span style="font-weight: bold;"&gt;find in files&lt;/span&gt; instead of only supporting find in file &lt;span style="font-style: italic;"&gt;names&lt;/span&gt; (which only works inside the current project);&lt;br /&gt;&lt;/li&gt;&lt;li&gt;when a &lt;span style="font-weight: bold;"&gt;search operation wraps&lt;/span&gt; (inside the current file) around, then have a clear visual signal indicating this, I currently have to take care that I watch the line numbers on the left;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;allow opening &lt;span style="font-weight: bold;"&gt;new files in tabs&lt;/span&gt; by default, now I have to drag the tab to the main window every time;&lt;/li&gt;&lt;li&gt;allow &lt;span style="font-weight: bold;"&gt;tabs/spaces configuration per file type&lt;/span&gt;: I'd like to use tabs in XML files while using spaces in programming code (such as Java code);&lt;/li&gt;&lt;li&gt;include &lt;span style="font-weight: bold;"&gt;more themes&lt;/span&gt; in the distribution, instead of just a single one, for example one that looks like &lt;a href="http://www.vim.org/"&gt;vim&lt;/a&gt; on a black background with syntax highlighting enabled;&lt;/li&gt;&lt;li&gt;on the theme website, show &lt;span style="font-weight: bold;"&gt;visual theme examples&lt;/span&gt;;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;support &lt;span style="font-weight: bold;"&gt;theme import&lt;/span&gt;/translation from existing themes from other programs (e.g. Eclipse, NetBeans, vim, etc.) to Espresso;&lt;/li&gt;&lt;li&gt;make the &lt;span style="font-weight: bold;"&gt;file modified indicator&lt;/span&gt; stand out more (inside the tab header);&lt;/li&gt;&lt;li&gt;use common &lt;span style="font-weight: bold;"&gt;keyboard shortcuts for switching tabs&lt;/span&gt;, e.g. Alt-Shift-arrows (like Safari) or Cmd-Alt-arrows (like Firefox);&lt;/li&gt;&lt;li&gt;have &lt;span style="font-weight: bold;"&gt;keyboard shortcuts for moving tabs&lt;/span&gt; to the left or the right;&lt;/li&gt;&lt;li&gt;add &lt;span style="font-weight: bold;"&gt;Java support&lt;/span&gt;, including syntax highlighting and navigator-support;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;support &lt;span style="font-weight: bold;"&gt;localization&lt;/span&gt; and provide support for the Dutch locale;&lt;/li&gt;&lt;li&gt;integrate &lt;span style="font-weight: bold;"&gt;visual CSS&lt;/span&gt; editing;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;double-clicking on a folder&lt;/span&gt; in the project should open that folder;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;workspace folders&lt;/span&gt;: it would be nice if a folder could be added in the workspace, for quick access;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;MobileMe&lt;/span&gt;-support for publish servers would be nice to have;&lt;/li&gt;&lt;li&gt;have an option to &lt;span style="font-weight: bold;"&gt;remove trailing whitespace&lt;/span&gt; when saving files; in my opinion this could even be a global option for any file type, since I'd enable it for all; currently Espresso automatically inserts whitespace (to keep the indentation level) but it does not remove it;&lt;/li&gt;&lt;li&gt;when deleting an element/comment from the navigator, &lt;span style="font-weight: bold;"&gt;also delete the newline&lt;/span&gt; at the end - hence, if a comment occupies a line and there is nothing else on it, then the whole line should be removed;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;These are things I consider bugs:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;while searching, when I add or delete some text, the &lt;span style="font-weight: bold;"&gt;occurrence counter&lt;/span&gt; is not updated;&lt;/li&gt;&lt;li&gt;there are &lt;span style="font-weight: bold;"&gt;no &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;small icon&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; version&lt;/span&gt; of the "Action" and "Tools" icons, hence using the "Small icons" variant of the toolbar hardly increases the available screen estate;&lt;/li&gt;&lt;li&gt;while hovering over the icons in the toolbar, &lt;span style="font-weight: bold;"&gt;no icon title/description&lt;/span&gt; is shown, even if only icons are shown in the toolbar (without text below them);&lt;/li&gt;&lt;li&gt;when I click on Help -&gt; Get Espresso Sugars the &lt;a href="http://fileability.net/coffee/"&gt;Coffee House website&lt;/a&gt; I'm sent to displays all sorts of errors (this is fixed as of April 9, 2009);&lt;/li&gt;&lt;li&gt;when the &lt;span style="font-weight: bold;"&gt;Settings&lt;/span&gt; button is clicked in the toolbar, the caption of the button changes to "Hide Settings", moving the icon, instead the button should -in my opinion- just be visualized as depressed.&lt;/li&gt;&lt;/ul&gt;These features make Espresso stand out:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;excellent Mac citizen&lt;/span&gt;: it's fast, stable and integrates nicely in the Mac OS X environment;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the &lt;span style="font-weight: bold;"&gt;find/replace&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; feature&lt;/span&gt; (inside a single file) works like the search feature in Safari, highlighting occurrences, while dimming the rest of the text: awesome;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;dragging tabs&lt;/span&gt; between windows looks and works very nicely;&lt;/li&gt;&lt;li&gt;you can create a &lt;span style="font-weight: bold;"&gt;rectangular text selection&lt;/span&gt; using Cmd-Alt-mouseclick/-movement, which is very practical in some situations;&lt;/li&gt;&lt;li&gt;automatic XML &lt;span style="font-weight: bold;"&gt;ending tag completion&lt;/span&gt; - when you want to close an open XML element, just press the smaller-than-sign and the slash and Espresso will append the rest;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;easy element/comment deletion&lt;/span&gt;: just select the tag or comment in the &lt;span style="font-style: italic;"&gt;navigator&lt;/span&gt; and select Backspace - gone.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic;"&gt;Note: Updated on April 9 and April 10, 2009, to add more details.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-3365514320596383246?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/3365514320596383246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/04/espresso-first-impressions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3365514320596383246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3365514320596383246'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/04/espresso-first-impressions.html' title='Espresso - first impressions (updated x2)'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-4014052001676128370</id><published>2009-03-13T12:15:00.034+01:00</published><updated>2009-03-13T12:40:34.469+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internet explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='ie8'/><category scheme='http://www.blogger.com/atom/ns#' term='opera turbo'/><category scheme='http://www.blogger.com/atom/ns#' term='msie'/><category scheme='http://www.blogger.com/atom/ns#' term='ie'/><category scheme='http://www.blogger.com/atom/ns#' term='msie8'/><category scheme='http://www.blogger.com/atom/ns#' term='safari'/><category scheme='http://www.blogger.com/atom/ns#' term='browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='turbo'/><category scheme='http://www.blogger.com/atom/ns#' term='opera'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Browser news updates</title><content type='html'>Some recent browser news updates:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the &lt;a href="http://www.apple.com/safari/"&gt;Safari&lt;/a&gt; 4 beta has been released by Apple&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Microsoft has posted some Internet Explorer 8 performance statistics, which (surprisingly) render IE 8 as better performant than other major browsers, see &lt;a href="http://arstechnica.com/microsoft/news/2009/03/microsofts-own-speed-tests-show-ie-beating-chrome-firefox.ars"&gt;the Arstechnica article&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the Internet Explorer team has written a quite extensive &lt;a href="http://blogs.msdn.com/ie/archive/2009/03/12/site-compatibility-and-ie8.aspx"&gt;compatibility checklist&lt;/a&gt; for IE 8&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://labs.opera.com/"&gt;Opera Labs&lt;/a&gt; has released Opera Turbo, see &lt;a href="http://my.opera.com/desktopteam/blog/2009/03/13/opera-turbo-labs-release"&gt;the Opera Desktop team blog&lt;/a&gt;. - &lt;a href="http://www.favbrowser.com/opera-turbo-is-here/"&gt;stability may not be as desired&lt;/a&gt;, though&lt;/li&gt;&lt;li&gt;&lt;a href="http://caminobrowser.org/"&gt;Camino&lt;/a&gt; 2.0 beta 2 &lt;a href="http://caminobrowser.org/blog/2009/#camino2.0b2"&gt;has been released&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.omnigroup.com/applications/omniweb/"&gt;OmniWeb&lt;/a&gt; is now free, the current version is 5.9.1, see &lt;a href="http://blog.omnigroup.com/2009/02/25/omniweb-omnidazzle-omnidisksweeper-and-omniobjectmeter-now-freeware/"&gt;the announcement on their weblog&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the next Firefox release &lt;a href="https://developer.mozilla.org/devnews/index.php/2009/03/06/shiretoko-to-be-named-firefox-35/"&gt;will be named 3.5&lt;/a&gt; (instead of 3.1)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Another thing worth noting: Peter-Paul Koch is &lt;a href="http://www.quirksmode.org/blog/archives/2009/03/testing_mobile.html"&gt;currently testing mobile browser compatiblity&lt;/a&gt;, paid by Vodafone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-4014052001676128370?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/4014052001676128370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/03/browser-news-updates.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4014052001676128370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4014052001676128370'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/03/browser-news-updates.html' title='Browser news updates'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-506042706798243837</id><published>2009-02-11T11:09:00.009+01:00</published><updated>2009-02-11T11:34:02.361+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iterm'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='terminal'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>iTerm suggested improvements</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://iterm.sourceforge.net/"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_mHXLKrDq9g8/SZKn_BKKHJI/AAAAAAAAADc/c-Ciyaq8CC4/s200/iTerm.png" alt="" id="BLOGGER_PHOTO_ID_5301484412453133458" border="0" /&gt;&lt;/a&gt;&lt;a href="http://iterm.sourceforge.net/"&gt;iTerm&lt;/a&gt; is the best terminal emulator on the Mac, IMHO. It's more customizable than the &lt;a href="http://www.apple.com/macosx/technology/unix.html"&gt;Leopard Terminal&lt;/a&gt; application and supports transparency, tabs, select-to-copy, middle-button-paste, a full-screen mode (with Cmd-Enter), etc.&lt;br /&gt;&lt;br /&gt;Here are some suggestions for bringing iTerm closer to perfection, in order of (subjective) importance:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;bug&lt;/span&gt;: &lt;span style="font-weight: bold;"&gt;scrolling&lt;/span&gt; a view while more output is added (for example when monitoring an active log file) does not work reliably, the view constantly jumps to the end of the output;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;feature&lt;/span&gt;: have an option to briefly &lt;span style="font-weight: bold;"&gt;show tab titles&lt;/span&gt; while switching tabs; this is especially useful in full-screen mode, since the tabs are then not visible;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;feature&lt;/span&gt;: have a &lt;span style="font-weight: bold;"&gt;keyboard shortcut for moving tabs&lt;/span&gt; to the left or to the right;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;bug&lt;/span&gt;: when &lt;span style="font-weight: bold;"&gt;changing monitors&lt;/span&gt; (e.g. disconnect an external monitor), while iTerm is in full-screen mode, iTerm does seem to notice the resolution change, causing iTerm  to show as an odd borderless window;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;bug&lt;/span&gt;: if iTerm is active and you &lt;span style="font-weight: bold;"&gt;switch from the current &lt;a href="http://www.apple.com/macosx/features/spaces.html"&gt;Space&lt;/a&gt;&lt;/span&gt; to another and back, then iTerm is no longer on the foreground, but the Finder is;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;bug&lt;/span&gt;: when &lt;span style="font-weight: bold;"&gt;switching to full-screen&lt;/span&gt; mode and a tab other than the first is active, then the contents of the first tab are briefly (~1 second) shown before the contents of the active tab are shown again.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-506042706798243837?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/506042706798243837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/02/iterm-suggested-improvements.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/506042706798243837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/506042706798243837'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/02/iterm-suggested-improvements.html' title='iTerm suggested improvements'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_mHXLKrDq9g8/SZKn_BKKHJI/AAAAAAAAADc/c-Ciyaq8CC4/s72-c/iTerm.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-3229992592537993092</id><published>2009-02-06T08:39:00.002+01:00</published><updated>2009-02-06T08:55:24.552+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='www'/><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Browser news updates</title><content type='html'>Here are some browser news updates:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.microsoft.com/windows/internet-explorer/beta/"&gt;Internet Explorer 8 RC1&lt;/a&gt; is now available (announced in a &lt;a href="http://blogs.msdn.com/ie/archive/2009/01/26/internet-explorer-8-release-candidate-now-available.aspx"&gt;blog post&lt;/a&gt; on the IE blog). See the &lt;a href="http://blogs.msdn.com/ie/archive/2009/01/26/upgrading-to-internet-explorer-8-release-candidate-1.aspx"&gt;upgrade guide&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://webkit.org/"&gt;WebKit&lt;/a&gt; (the engine inside &lt;a href="http://www.apple.com/safari/"&gt;Safari&lt;/a&gt; and &lt;a href="http://www.google.com/chrome"&gt;Chrome&lt;/a&gt;) introduces &lt;a style="font-weight: bold;" href="http://webkit.org/blog/324/css-animation-2/"&gt;CSS-based animations&lt;/a&gt;, which is different from &lt;a href="http://webkit.org/specs/CSSVisualEffects/CSSTransitions.html"&gt;transitions&lt;/a&gt;. Animations are explicitly triggered.&lt;/li&gt;&lt;li&gt;In line with &lt;a href="http://code.google.com/p/v8/"&gt;V8&lt;/a&gt; an &lt;a href="http://webkit.org/blog/214/introducing-squirrelfish-extreme/"&gt;Squirrelfish Extreme&lt;/a&gt;, &lt;a href="http://www.opera.com/"&gt;Opera&lt;/a&gt; has announced it is also working on a new JavaScript engine: &lt;a style="font-weight: bold;" href="http://my.opera.com/core/blog/2009/02/04/carakan"&gt;Carakan&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.getfirebug,com/"&gt;Firebug&lt;/a&gt; 1.3.1b4 has been released.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sitepoint.com/"&gt;SitePoint&lt;/a&gt; &lt;a href="http://www.sitepoint.com/blogs/2009/01/27/introducing-firescope-the-sitepoint-reference-tool-for-firebug/"&gt;announced&lt;/a&gt; it has released &lt;a href="http://tools.sitepoint.com/firescope/"&gt;&lt;span style="font-weight: bold;"&gt;FireScope&lt;/span&gt;&lt;/a&gt;, an extension for &lt;a href="http://www.getfirebug.com/"&gt;Firebug&lt;/a&gt; that provides an in-place reference for HTML, JavaScript and CSS.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-3229992592537993092?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/3229992592537993092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2009/02/browser-news-updates.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3229992592537993092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3229992592537993092'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2009/02/browser-news-updates.html' title='Browser news updates'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-4374829624994884088</id><published>2008-12-10T10:26:00.005+01:00</published><updated>2008-12-10T10:50:19.614+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='murder'/><category scheme='http://www.blogger.com/atom/ns#' term='death'/><category scheme='http://www.blogger.com/atom/ns#' term='civil rights'/><category scheme='http://www.blogger.com/atom/ns#' term='induced abortion'/><category scheme='http://www.blogger.com/atom/ns#' term='abortion'/><title type='text'>Who cares about murdering babies?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mHXLKrDq9g8/ST-QGTDII0I/AAAAAAAAADQ/V1ixf8cGeRQ/s1600-h/abortion22weeksjpg.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_mHXLKrDq9g8/ST-QGTDII0I/AAAAAAAAADQ/V1ixf8cGeRQ/s200/abortion22weeksjpg.jpg" alt="" id="BLOGGER_PHOTO_ID_5278095726168515394" border="0" /&gt;&lt;/a&gt;In a way I'm surprised to see that if a baby is killed after being born in the Netherlands, my home country, people appear shocked and the police sets up a big investigation to find out who did it so this person can be prosecuted. The same applies to a lot of other Western countries.&lt;br /&gt;&lt;br /&gt;Why am I surprised? Because if the baby was killed just a few weeks before, while still inside the mother, it's not called murder. Then the baby is called a "fetus" and the murder is called "abortion" and it's claimed a "civil right." How can we be so blind?!&lt;br /&gt;&lt;br /&gt;Look at the image. This is a photo of a so-called "aborted fetus", 22-weeks after conception. Is this not a baby? If it was born at 21 weeks, doctors managed to keep it alive, and then at 22 weeks the mother decided: "oh wait, no, I've got a holiday coming up and I feel really bad and I don't have the money, to raise this child," is it OK to still get rid of it?&lt;br /&gt;&lt;br /&gt;Here are some of the facts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the heart of a baby works as of 4 weeks since the conception&lt;/li&gt;&lt;li&gt;at 10 weeks, the baby is small, but complete, all it needs to do is &lt;span style="font-style: italic;"&gt;grow&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;medical science is advancing, and babies born 21 weeks after conception may soon be able to survive already (if that's not &lt;span style="font-style: italic;"&gt;already&lt;/span&gt; possible)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;in the Netherlands abortions are allowed until 24 weeks after conception&lt;/li&gt;&lt;li&gt;abortions in Israel are allowed until the 9th month (!)&lt;/li&gt;&lt;li&gt;in 2005, there were about 33.000 registered induced abortions in the Netherlands only&lt;/li&gt;&lt;li&gt;reasons for abortions include: interference with holiday planning, financial challenges, unknown father, etc.&lt;/li&gt;&lt;/ul&gt;I'm wondering: Do we really care about any murder at all, or have we become too wealthy and egocentric to care about anything other than our own "freedom", comfort and wealth?&lt;br /&gt;&lt;br /&gt;If you are thinking about having an abortion, think twice, ask for information from both sides. There is help available from prolife-organisations, even after having had an abortion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-4374829624994884088?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/4374829624994884088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/12/who-cares-about-murdering-babies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4374829624994884088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4374829624994884088'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/12/who-cares-about-murdering-babies.html' title='Who cares about murdering babies?'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_mHXLKrDq9g8/ST-QGTDII0I/AAAAAAAAADQ/V1ixf8cGeRQ/s72-c/abortion22weeksjpg.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-8525465086039117553</id><published>2008-12-05T17:20:00.005+01:00</published><updated>2008-12-09T10:40:15.555+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='opera10'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='opera'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Opera 10 alpha looks promising</title><content type='html'>&lt;img style="margin: 0pt 0pt 10px 10px; float: right;" src="http://1.bp.blogspot.com/_mHXLKrDq9g8/STlcTclMJnI/AAAAAAAAADI/Er3WrBETB2c/s200/OperaLogo.jpg" alt="" id="BLOGGER_PHOTO_ID_5276349927600694898" border="0" /&gt;&lt;a href="http://www.opera.com/"&gt;Opera&lt;/a&gt; have released the first alpha of the &lt;a href="http://www.opera.com/browser/next/"&gt;new version&lt;/a&gt; 10 of their flagship product, Opera (for the desktop). Major changes include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Presto 2.2 engine&lt;br /&gt;&lt;/li&gt;&lt;li&gt;30% improved performance (at least this is what Opera claim)&lt;/li&gt;&lt;li&gt;support for web fonts&lt;/li&gt;&lt;li&gt;increased CSS 3 compliance (including RGBA and HSLA)&lt;/li&gt;&lt;li&gt;developer tool Dragonfly has been improved&lt;/li&gt;&lt;li&gt;&lt;a href="http://acid3.acidtests.org/"&gt;Acid 3&lt;/a&gt; compliance&lt;/li&gt;&lt;li&gt;support for the &lt;a href="http://www.w3.org/TR/selectors-api/"&gt;W3C Selectors API&lt;/a&gt;&lt;/li&gt;&lt;li&gt;improved &lt;a href="http://dev.w3.org/html5/spec/Overview.html"&gt;HTML5&lt;/a&gt; support&lt;/li&gt;&lt;/ul&gt;Other things, less important to web developers, include inline spell checking and automatic updates.&lt;br /&gt;&lt;br /&gt;For more information, check out the detailed change logs for &lt;a href="http://snapshot.opera.com/windows/w100a1.html"&gt;Windows&lt;/a&gt;, &lt;a href="http://snapshot.opera.com/unix/u100a1.html"&gt;Linux/UNIX&lt;/a&gt; and &lt;a href="http://snapshot.opera.com/mac/m100a1.html"&gt;Mac OS X&lt;/a&gt;. Note that big parts of those documents overlap eachother.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-8525465086039117553?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/8525465086039117553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/12/opera-10-alpha-looks-promising.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8525465086039117553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8525465086039117553'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/12/opera-10-alpha-looks-promising.html' title='Opera 10 alpha looks promising'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_mHXLKrDq9g8/STlcTclMJnI/AAAAAAAAADI/Er3WrBETB2c/s72-c/OperaLogo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-8492307935235149351</id><published>2008-11-18T21:37:00.002+01:00</published><updated>2008-11-18T21:40:12.900+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='error page'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='404'/><category scheme='http://www.blogger.com/atom/ns#' term='not found'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>A more useful 404 (Not Found) page</title><content type='html'>There's an interesting article over at the A List Apart site:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://alistapart.com/articles/amoreuseful404"&gt;A More Useful 404&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Definitely worth a read for web developers. It discusses some techniques to guess &lt;span style="font-style: italic;"&gt;why&lt;/span&gt; somebody got to a 404 page and then takes action and displays info to the visitor based on that knowledge.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-8492307935235149351?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/8492307935235149351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/11/more-useful-404-not-found-page.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8492307935235149351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8492307935235149351'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/11/more-useful-404-not-found-page.html' title='A more useful 404 (Not Found) page'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-1878823828202550734</id><published>2008-11-04T14:55:00.004+01:00</published><updated>2008-11-04T15:05:22.722+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='statistics'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='internet explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='stats'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='report'/><category scheme='http://www.blogger.com/atom/ns#' term='market share'/><title type='text'>Firefox usage up to 20%</title><content type='html'>NetApps has provided some statistics regarding browser usage. According to their report:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://marketshare.hitslink.com/report.aspx?qprid=1"&gt;Market share for browsers, operating systems and search engines&lt;/a&gt; (November 2008)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Firefox usage is still climbing and now almost at 20%, while Internet Explorer usage is still decreasing and now down to just above 71%.&lt;br /&gt;&lt;br /&gt;Of course, your mileage may vary, depending on the kind of site, your geographical location, etc.&lt;br /&gt;&lt;br /&gt;But it is becoming more and more obvious that web developers programming Internet sites to Internet Explorer only are irresponsible and are causing issues for their employers and for the visitors of the sites.&lt;br /&gt;&lt;br /&gt;An approach that works very well:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;program to web standards, avoid JavaScript and Flash initially;&lt;/li&gt;&lt;li&gt;add JavaScript support to make things look better or work nicer (without disrupting the functionality for user agents without JavaScript);&lt;br /&gt;&lt;/li&gt;&lt;li&gt;add some Flash if you must, but have replacement content in case Flash is unavailable;&lt;/li&gt;&lt;/ul&gt;Benefits:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;standards compliance;&lt;/li&gt;&lt;li&gt;accessibility for visually impaired is likely to be easy to achieve;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the same applies to Search Engine Optimization.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-1878823828202550734?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/1878823828202550734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/11/firefox-usage-up-to-20.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1878823828202550734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1878823828202550734'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/11/firefox-usage-up-to-20.html' title='Firefox usage up to 20%'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-4915880324963447628</id><published>2008-10-16T12:34:00.012+02:00</published><updated>2009-08-24T11:48:31.722+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gecko'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='css3'/><category scheme='http://www.blogger.com/atom/ns#' term='ellipsis'/><category scheme='http://www.blogger.com/atom/ns#' term='text-overflow'/><category scheme='http://www.blogger.com/atom/ns#' term='overflow'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Ellipsis in all modern browsers (updated x4)</title><content type='html'>When you want to avoid that text in a web page wraps, you can use:&lt;pre&gt;   overflow:hidden&lt;/pre&gt;However, it's nice to show to users that some content is actually missing. This is typically done with an ellipsis character, that is displayed as three dots:&lt;pre&gt;   ...&lt;/pre&gt;Getting this working across all modern browsers has always been a pain in the neck, but there is &lt;strike&gt;an easy solution&lt;/strike&gt; a hack that works around the issue, to a certain extent.&lt;br /&gt;&lt;br /&gt;First, make sure you have a small &lt;code&gt;ellipsis-xbl.xml&lt;/code&gt; file on your web server that is served with the content type &lt;code&gt;text/xml&lt;/code&gt;, with the following contents:&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;&amp;lt;bindings xmlns="http://www.mozilla.org/xbl" xmlns:xbl="http://www.mozilla.org/xbl" xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"&gt;&lt;br /&gt;&amp;lt;binding id="ellipsis"&gt;&lt;br /&gt;   &amp;lt;content&gt;&lt;br /&gt;      &amp;lt;xul:window&gt;&lt;br /&gt;         &amp;lt;xul:description crop="end" xbl:inherits="value=xbl:text"&gt;&amp;lt;children/&gt;&amp;lt;/xul:description&gt;&lt;br /&gt;      &amp;lt;/xul:window&gt;&lt;br /&gt;   &amp;lt;/content&gt;&lt;br /&gt;&amp;lt;/binding&gt;&lt;br /&gt;&amp;lt;/bindings&gt;&lt;/pre&gt;Then mark all HTML elements you would like to show the ellipsis character on overflow with the class &lt;code&gt;Ellipsis&lt;/code&gt;, e.g.:&lt;pre&gt;   &amp;lt;div id="BreadCrumbs" class="ShyText Ellipsis"&gt;&lt;/pre&gt;Then add the following to your CSS:&lt;pre&gt;   .Ellipsis {&lt;br /&gt;text-overflow:ellipsis;&lt;br /&gt;-o-text-overflow:ellipsis;&lt;br /&gt;-ms-text-overflow:ellipsis;&lt;br /&gt;-moz-binding:url(/ellipsis-xbl.xml#ellipsis)&lt;br /&gt;}&lt;/pre&gt;Elaboration:&lt;dl&gt;&lt;dt&gt;text-overflow&lt;/dt&gt;&lt;dd&gt;for WebKit-based browsers (Safari, Chrome, etc.) and for Internet Explorer 7 and before;&lt;/dd&gt;&lt;dt&gt;-o-text-overflow&lt;/dt&gt;&lt;dd&gt;for Opera;&lt;/dd&gt;&lt;dt&gt;-ms-text-overflow&lt;/dt&gt;&lt;dd&gt;for Internet Explorer 8;&lt;/dd&gt;&lt;dt&gt;-moz-binding&lt;/dt&gt;&lt;dd&gt;for Gecko-based browsers (Firefox, Camino, etc.)&lt;/dd&gt;&lt;/dl&gt;Note that the &lt;code&gt;text-overflow&lt;/code&gt; will be standardized as of the CSS 3 standard, which is currently still in draft.&lt;br /&gt;&lt;br /&gt;Credit for the Gecko solution go to Rikkert Koppes and William Khoe, see the article &lt;a href="http://www.rikkertkoppes.com/thoughts/2008/6/"&gt;text-overflow: ellipsis for firefox&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update (Oct. 22, 2008):&lt;/strong&gt; The solution for Gecko-based browsers (Firefox, etc.) is far from perfect. The solution has at least the following issues:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;applying the &lt;code&gt;.Ellipsis&lt;/code&gt; class to an inline element causes the element to disappear;&lt;/li&gt;&lt;li&gt;in Firefox 3.0 (not in Firefox 2.0), soft hyphens inside &lt;code&gt;.Ellipsis&lt;/code&gt; elements always show as dashes;&lt;/li&gt;&lt;li&gt;text inside a &lt;code&gt;.Ellipsis&lt;/code&gt; element can no longer be selected.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Update (August 11, 2009):&lt;/span&gt; Mozilla (in the person of Simon Montagu) is working on a solution, which may or may not go into Firefox 3.6/Gecko 1.9.2. Vote for &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=312156"&gt;bug 312156&lt;/a&gt; if you think it's important.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update (August 13, 2009):&lt;/span&gt; Don't expect the solution to go into &lt;a href="https://wiki.mozilla.org/Firefox/Namoroka"&gt;Firefox 3.6&lt;/a&gt;/Gecko 1.9.2 (scheduled for release fall 2009), the bug has been tagged as "-wanted1.9.2" (starting with a minus-sign) meaning it's not planned for the upcoming release. It may still go into &lt;a href="https://wiki.mozilla.org/Firefox/3.7_Windows_Theme_Mockups"&gt;Firefox 3.7&lt;/a&gt;, which is tentatively scheduled for release in 2010, see the &lt;a href="http://blog.mozilla.com/meeting-notes/archives/201"&gt;Mozilla Project Meeting Minutes of July 20, 2009&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update (August 24, 2009):&lt;/span&gt; Devon Govett provides &lt;a href="http://devongovett.wordpress.com/2009/04/06/text-overflow-ellipsis-for-firefox-via-jquery/"&gt;a nice jQuery-based solution&lt;/a&gt; that at least allows you to resolve the issue when JavaScript is enabled. It works like a charm, at least on Firefox 3.5.2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-4915880324963447628?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/4915880324963447628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/10/ellipsis-in-all-modern-browsers.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4915880324963447628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4915880324963447628'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/10/ellipsis-in-all-modern-browsers.html' title='Ellipsis in all modern browsers (updated x4)'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-673350351322975381</id><published>2008-10-10T14:57:00.006+02:00</published><updated>2008-10-10T15:10:59.017+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='headless'/><category scheme='http://www.blogger.com/atom/ns#' term='fonts'/><category scheme='http://www.blogger.com/atom/ns#' term='font'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='aqua'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>Mac OS X, fonts and headless Java</title><content type='html'>If on Mac OS X your custom font is not available in headless Java, try installing it in /System/Library/Fonts/ instead of /Library/Fonts/.&lt;br /&gt;&lt;br /&gt;Don't ask me why, but this solved the issue I'd been struggling with for days. Below is the background.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Font installed&lt;/span&gt;&lt;br /&gt;I purchased a font called "standard 07_55" from the &lt;a href="http://miniml.com/"&gt;miniml.com&lt;/a&gt; site and installed it via the font catalog program, which copied the .otf (OpenType) file to /Library/Fonts/:&lt;br /&gt;&lt;pre&gt;  $ ls -lae /Library/Fonts/standard*otf&lt;br /&gt;  -rw-r--r--@ 1 ernst  admin  11996 Oct  8 15:39 /Library/Fonts/standard 07_55.otf&lt;/pre&gt;It was accessible from the user account on the Mac, which is confirmed by running a text editor program.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Java program to list all available fonts&lt;/span&gt;&lt;br /&gt;The following Java program lists all available fonts:&lt;br /&gt;&lt;pre&gt;  public class ListFonts {&lt;br /&gt;     public static void main(String[] args) {&lt;br /&gt;        String[] fonts = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();&lt;br /&gt;        for(int i=0; i&amp;lt;fonts.length; i++) System.out.println(fonts[i]);&lt;br /&gt;     }&lt;br /&gt;  }&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;Running the program from the graphical environment&lt;/span&gt;&lt;br /&gt;When I ran this program is from Aqua, it worked well and displayed all fonts, including the installed "standard 07_55" font:&lt;br /&gt;&lt;pre&gt;  $ java -version&lt;br /&gt;  java version "1.5.0_13"&lt;br /&gt;  Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05-237)&lt;br /&gt;  Java HotSpot(TM) Client VM (build 1.5.0_13-119, mixed mode, sharing)&lt;br /&gt;  $ javac ListFonts.java&lt;br /&gt;  $ java -cp . ListFonts | grep tand&lt;br /&gt;  KufiStandardGK&lt;br /&gt;  standard 07_55&lt;/pre&gt;Even when I added -Djava.awt.headless=true it still worked fine:&lt;br /&gt;&lt;pre&gt;  $ java -Djava.awt.headless=true -cp . ListFonts | grep tand&lt;br /&gt;  KufiStandardGK&lt;br /&gt;  standard 07_55&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;Running the program via a remote connection&lt;/span&gt;&lt;br /&gt;However, when that same program was run via a remote connection (SSH), then the program would not start up like this:&lt;br /&gt;&lt;pre&gt;  $ java -cp . ListFonts | grep tand&lt;br /&gt;  Exception in thread "main" java.lang.InternalError: Can't connect to window server - not enough permissions.&lt;br /&gt;          at java.lang.ClassLoader$NativeLibrary.load(Native Method)&lt;br /&gt;          at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1822)&lt;br /&gt;          at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1723)&lt;br /&gt;          at java.lang.Runtime.loadLibrary0(Runtime.java:822)&lt;br /&gt;          at java.lang.System.loadLibrary(System.java:993)&lt;br /&gt;          at sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:50)&lt;br /&gt;          at java.security.AccessController.doPrivileged(Native Method)&lt;br /&gt;          at apple.awt.CGraphicsEnvironment.&lt;clinit&gt;(CGraphicsEnvironment.java:23)&lt;br /&gt;          at java.lang.Class.forName0(Native Method)&lt;br /&gt;          at java.lang.Class.forName(Class.java:164)&lt;br /&gt;          at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:68)&lt;br /&gt;          at ListFonts.main(ListFonts.java:3)&lt;/pre&gt;This is understandable, since this is a remote connection, it cannot access the window server. So  I started the Java program in headless AWT mode, and then it did run. However, now it does not show the font anymore:&lt;br /&gt;&lt;pre&gt;  $ java -Djava.awt.headless=true -cp . ListFonts | grep tand&lt;br /&gt;  KufiStandardGK&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;Solving the issue&lt;/span&gt;&lt;br /&gt;The fix? Simple: as root, move the font file to /System:&lt;br /&gt;&lt;pre&gt;  # sudo mv /Library/Fonts/standard*otf /System/Library/Fonts/&lt;/pre&gt;I hope this helps someone else with a similar issue.&lt;br /&gt;&lt;/clinit&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-673350351322975381?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/673350351322975381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/10/mac-os-x-fonts-and-headless-java.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/673350351322975381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/673350351322975381'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/10/mac-os-x-fonts-and-headless-java.html' title='Mac OS X, fonts and headless Java'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-130509691753279249</id><published>2008-10-07T22:10:00.003+02:00</published><updated>2008-10-07T22:17:41.071+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='webstandards'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='web standards'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Use HTML 4 instead of XHTML</title><content type='html'>Here are some simple reasons for using HTML 4.01 with a strict doctype instead of using XHTML:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/ie/archive/2005/09/15/467901.aspx"&gt;Internet Explorer 7 and before do not support it&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.mozilla.org/en/Mozilla_Web_Developer_FAQ#section_10"&gt;Mozilla advices against it&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://webkit.org/blog/68/understanding-html-xml-and-xhtml/"&gt;the Safari team advices against it&lt;/a&gt; – see the section Best Practices&lt;br /&gt;&lt;/li&gt;&lt;li&gt;in general, HTML has better support from search engines and mobile devices&lt;/li&gt;&lt;li&gt;in general, HTML support is better tested than XHTML support&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-130509691753279249?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/130509691753279249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/10/use-html-4-instead-of-xhtml.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/130509691753279249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/130509691753279249'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/10/use-html-4-instead-of-xhtml.html' title='Use HTML 4 instead of XHTML'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-1487546291830169098</id><published>2008-09-10T12:25:00.005+02:00</published><updated>2008-09-10T13:19:37.413+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pixelmator'/><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><category scheme='http://www.blogger.com/atom/ns#' term='image editor'/><category scheme='http://www.blogger.com/atom/ns#' term='image manipulation'/><title type='text'>Another look at Pixelmator</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://37prime.com/blog/wp-content/uploads/2008/02/pixelmator_icon.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 128px;" src="http://37prime.com/blog/wp-content/uploads/2008/02/pixelmator_icon.png" alt="" border="0" /&gt;&lt;/a&gt;After posting a &lt;a href="http://ernstdehaan.blogspot.com/2008/09/quick-review-of-pixelmator.html"&gt;quick review&lt;/a&gt; of &lt;a href="http://www.pixelmator.com/"&gt;Pixelmator&lt;/a&gt; version 1.2.3, I got some comments that basically said two things:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;crop to selection&lt;/span&gt; is available in the context menu;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;paste as a new image&lt;/span&gt; is easy to accomplish.&lt;/li&gt;&lt;/ol&gt;These issues are indeed resolved, see below. So I continued my quest and tried to find the following features in Pixelmator:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;autocrop&lt;br /&gt;&lt;/li&gt;&lt;li&gt;show the image size&lt;/li&gt;&lt;li&gt;view the name of the assigned color profile&lt;/li&gt;&lt;li&gt;remove the assigned color profile&lt;/li&gt;&lt;li&gt;show the size of the current selection while selecting&lt;/li&gt;&lt;li&gt;edit the selection&lt;/li&gt;&lt;li&gt;quantization, convert to indexed color&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;span style="font-weight: bold;"&gt;Crop to selection&lt;/span&gt;&lt;br /&gt;Indeed crop to selection is available in the context menu, which is activated by Ctrl-LeftClick or RightClick (if your mouse has a second button).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Paste as new image&lt;/span&gt;&lt;br /&gt;Doing a bit of searching I found (on the &lt;a href="http://www.pixelmator.com/support/viewtopic.php?t=328&amp;amp;sid=df98a2e6f44787427d1b7c6b0b4101dc"&gt;Pixelmator forum&lt;/a&gt;) that pasting as a new image is indeed easy, just follow these steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;copy whatever you want to paste in Pixelmator to the clipboard;&lt;/li&gt;&lt;li&gt;activate File -&gt; New Image in Pixelmator (Cmd-N); the new image will automatically take the dimensions of the image in the clipboard;&lt;/li&gt;&lt;li&gt;activate Edit -&gt; Paste (Cmd-V) in Pixelmator.&lt;/li&gt;&lt;/ol&gt;That's it. Indeed very simple, although not intuitive IMHO.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Autocrop&lt;br /&gt;&lt;/span&gt;Autocrop is not available directly in Pixelmator, it seems. However, this is fairly easily worked around:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;select the Magic Wand tool (keyboard shortcut: W);&lt;/li&gt;&lt;li&gt;click on the outer region of the image;&lt;/li&gt;&lt;li&gt;invert the selection (Shift-Cmd-I);&lt;/li&gt;&lt;li&gt;show the context menu (Ctrl-LeftClick or RightClick);&lt;/li&gt;&lt;li&gt;select Crop;&lt;/li&gt;&lt;li&gt;press Enter to confirm.&lt;/li&gt;&lt;/ol&gt;However, since I use this feature a lot, I still prefer to have a single menu option so I can assign a keyboard shortcut to it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Show the image size&lt;/span&gt;&lt;br /&gt;The size of the current image can be viewed using the command File -&gt; File Info... or by pressing the keyboard shortcut Alt-Shift-Cmd-I. Easy enough.&lt;br /&gt;&lt;br /&gt;Personally I would prefer to have the option to show the image size in the title bar. This option is unavailable in the Preferences. But this is a minor nuisance.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;View the name of the assigned color profile&lt;/span&gt;&lt;br /&gt;The assigned color profile can also be viewed using the File Info... command (Alt-Shift-Cmd-I). Excellent.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Remove the assigned color profile&lt;/span&gt;&lt;br /&gt;There is no direct menu option for removing the color profile. However, it's easy to do:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;select all of the image (Cmd-A);&lt;/li&gt;&lt;li&gt;copy it (Cmd-C);&lt;/li&gt;&lt;li&gt;create a new image (Cmd-N) – it will automatically get the right dimensions;&lt;/li&gt;&lt;li&gt;paste (Cmd-V).&lt;/li&gt;&lt;/ol&gt;That's it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Show the size of the current selection while selecting&lt;/span&gt;&lt;br /&gt;With the Rectangular Marquee Tool (shortcut: M) you can select a rectangular region. While selecting, I'd like to be able to see the size of the selection, because often the selection needs to fit a certain predefined size or maximum size.&lt;br /&gt;&lt;br /&gt;In Pixelmator it seems impossible, however, to view the width and height of the selection while selecting it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Edit the selection&lt;/span&gt;&lt;br /&gt;When a (rectangular) region is selected, the selection cannot easily be adjusted. There is a Refine Selection tool available for changing the selection, but this tool does not allow manually editing the selection, for example to add a few pixels on the right.&lt;br /&gt;&lt;br /&gt;GIMP 2.4.7 has a simple but powerful feature that allows the selection to be edited with the mouse on 6 axes (top, top-right, right, etc.) This would be a welcome improvement for Pixelmator as well.&lt;br /&gt;&lt;br /&gt;Although this (fairly basic) functionality is missing, the power of the Refine Selection tool should not go unnoticed. It allows advanced selection editing, for example to change a rectangular selection area to a rounded rectangular area. Very nice indeed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Quantization, convert to indexed color&lt;/span&gt;&lt;br /&gt;Finally another feature I'm using all the time in GIMP is changing an RGB image to indexed color, to optimize it for display on the Web. This uses a technique known as image quantization, which uses one of a few algorithms to create an optimum palette for the resulting image.&lt;br /&gt;&lt;br /&gt;This feature seems to be missing in Pixelmator.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;Pixelmator is a powerful image manipulation program that looks very very good. It has various very powerful functions, such as filters, layers, advanced selections, etc. Also it support a large number of bitmap formats for export.&lt;br /&gt;&lt;br /&gt;However, for me, Pixelmator is currently not able to replace GIMP for day-to-day image manipulation. It seems to be missing some features that I need to have at my fingertips all the time.&lt;br /&gt;&lt;br /&gt;If some of the features I think are missing are hidden somewhere under the surface, please drop me a note in the comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-1487546291830169098?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/1487546291830169098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/09/another-look-at-pixelmator.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1487546291830169098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1487546291830169098'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/09/another-look-at-pixelmator.html' title='Another look at Pixelmator'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-614256849148521344</id><published>2008-09-08T12:38:00.004+02:00</published><updated>2008-09-08T12:58:23.507+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='image'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='image editor'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='image manipulation'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>Quick review of Pixelmator</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://37prime.com/blog/wp-content/uploads/2008/02/pixelmator_icon.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 128px;" src="http://37prime.com/blog/wp-content/uploads/2008/02/pixelmator_icon.png" alt="" border="0" /&gt;&lt;/a&gt;While still looking for a real Mac OS X image manipulation program to replace GIMP, I did a quick review of &lt;a href="http://www.pixelmator.com/"&gt;Pixelmator&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After starting Pixelmator, it's obvious the developers have put a lot of time and effort into making this application look and feel like a charm. Although the black transparent look is not conform the standard Aqua look and feel on Mac OS X 10.5 "Leopard", this does not reduce the usability of the application.&lt;br /&gt;&lt;br /&gt;Pixelmator has more features than &lt;a href="http://flyingmeat.com/acorn/"&gt;Acorn&lt;/a&gt; or Seashore combined together, but not as many as Photoshop or GIMP. But although there are a lot of features, for me just a few are important, since I need them on a day-to-day basis.&lt;br /&gt;&lt;br /&gt;My findings based on a quick review:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;There seems to be no way to &lt;span style="font-weight: bold;"&gt;remove a color profile&lt;/span&gt;, although color profiles can be assigned. This can be worked around by copying all and pasting from clipboard.&lt;/li&gt;&lt;li&gt;There is no &lt;span style="font-weight: bold;"&gt;Paste as New Image&lt;/span&gt; option.&lt;/li&gt;&lt;li&gt;An &lt;span style="font-weight: bold;"&gt;Autocrop&lt;/span&gt; feature seems to be unavailable.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A &lt;span style="font-weight: bold;"&gt;Crop to Selection&lt;/span&gt; features seem to be missing; and since a &lt;span style="font-style: italic;"&gt;Paste as New Image&lt;/span&gt; option is also missing, this cannot be easily worked around. There is a Crop tool, but this is in my workflow not productive, since in the absence of an autocrop feature I typically (a) use the magic wand to select an outer part of an image, (b) invert the selection (c) crop to the selection.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-614256849148521344?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/614256849148521344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/09/quick-review-of-pixelmator.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/614256849148521344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/614256849148521344'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/09/quick-review-of-pixelmator.html' title='Quick review of Pixelmator'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-5849415524851031259</id><published>2008-09-08T12:12:00.007+02:00</published><updated>2008-09-08T12:44:49.489+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='image editor'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='seashore'/><category scheme='http://www.blogger.com/atom/ns#' term='image manipulation'/><title type='text'>Quick review of Seashore</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://z.about.com/d/graphicssoft/1/0/n/z/4/seashore-icon.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://z.about.com/d/graphicssoft/1/0/n/z/4/seashore-icon.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;a href="http://seashore.sourceforge.net/"&gt;Seashore&lt;/a&gt; is a promising application, aiming to deliver a Mac OS X-version of the popular GIMP image manipulation program. I did a quick review of 0.1.9 and found the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This build is dated &lt;span style="font-weight: bold;"&gt;April 2007&lt;/span&gt;, which seems to indicate development has stalled - which is too bad...&lt;/li&gt;&lt;li&gt;The &lt;span style="font-weight: bold;"&gt;Open with...&lt;/span&gt; option in the Finder did not work for me when I selected Seashore.&lt;/li&gt;&lt;li&gt;Full &lt;span style="font-weight: bold;"&gt;quantization&lt;/span&gt; support has not been ported yet, so there is no option to reduce the number of colors.&lt;/li&gt;&lt;li&gt;There is a &lt;span style="font-weight: bold;"&gt;Select menu&lt;/span&gt;, but some of the selection actions are under the Edit menu (Select All, Alpha, Inverse, None). This seems counter-intuitive.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Zoom in and zoom out&lt;/span&gt; are under the keyboard shortcuts Cmd-Up and Cmd-Down respectively. Typically these are under Cmd-Plus and Cmd-Minus.&lt;/li&gt;&lt;li&gt;There is no &lt;span style="font-weight: bold;"&gt;autocrop&lt;/span&gt; feature.&lt;/li&gt;&lt;li&gt;Overall, the application &lt;span style="font-weight: bold;"&gt;looks very nice&lt;/span&gt;. It feels like a decent Mac OS X-citizen.&lt;/li&gt;&lt;/ul&gt;My conclusion is that it's a very promising application, that may be able to beat &lt;a href="http://www.adobe.com/nl/products/photoshopelmac/"&gt;Photoshop Elements&lt;/a&gt; and &lt;a href="http://flyingmeat.com/acorn/"&gt;Acorn&lt;/a&gt; one day. But not today.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-5849415524851031259?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/5849415524851031259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/09/quick-review-of-seashore.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5849415524851031259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5849415524851031259'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/09/quick-review-of-seashore.html' title='Quick review of Seashore'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-2287665087187553667</id><published>2008-09-08T11:51:00.005+02:00</published><updated>2008-09-08T12:04:13.556+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac os'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><category scheme='http://www.blogger.com/atom/ns#' term='image editor'/><category scheme='http://www.blogger.com/atom/ns#' term='acorn'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>Features missing in Acorn</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.rogueamoeba.com/utm/content/images/20070910acorn.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://www.rogueamoeba.com/utm/content/images/20070910acorn.png" alt="" border="0" /&gt;&lt;/a&gt;I really like the looks of &lt;a href="http://flyingmeat.com/acorn/"&gt;Acorn&lt;/a&gt;, a powerful little image manipulation program for Mac OS X. However, there are some hurdles for me adopting it to replace GIMP:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It's not easy to &lt;span style="font-weight: bold;"&gt;remove all tranparency&lt;/span&gt; from an image. It requires creating a new background layer, filling it with white color and then flattening the image. In GIMP, it's one command.&lt;/li&gt;&lt;li&gt;There is no support for viewing or removing &lt;span style="font-weight: bold;"&gt;color profiles&lt;/span&gt;. It seems a color profile can be removed by selecting all of the image, copying the selection to the clipboard and then creating a new image from the clipboard.&lt;/li&gt;&lt;li&gt;There is no support for &lt;span style="font-weight: bold;"&gt;quantization&lt;/span&gt;, to reduce the number of colors to produce an indexed color image.&lt;/li&gt;&lt;/ul&gt;Still, Acorn looks very promising. It looks and feels like an excellent Mac OS X-citizen. It seems strong in filters and automation, but that's not what I am looking for...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-2287665087187553667?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/2287665087187553667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/09/features-missing-in-acorn.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2287665087187553667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2287665087187553667'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/09/features-missing-in-acorn.html' title='Features missing in Acorn'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-6704586295239994635</id><published>2008-09-08T11:01:00.011+02:00</published><updated>2010-03-31T19:47:02.037+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac os'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><category scheme='http://www.blogger.com/atom/ns#' term='apps'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='applications'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>Favourite Mac apps (updated x5)</title><content type='html'>Here's the list of my favourite Mac OS X applications:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.parallels.com/"&gt;Parallels&lt;/a&gt; Desktop — For running Windows and Linux in virtual machines. With Windows XP inside it, for testing web pages in Internet Explorer (6, 7 and 8 all have their own dedicated VM). (€80)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.adobe.com/products/acrobat/"&gt;Adobe Acrobat 8 Professional&lt;/a&gt; — Version 9 probably runs better on my Intel Mac with Snow Leopard. I didn't need all the extra stuff in the Professional edition, but there was no Standard edition for Mac. (version 9 is $450)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cheapimpostor.com/"&gt;Cheap Impostor&lt;/a&gt; — For creating A3 and A4 booklets. Cheap, effective and fast. ($35)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.novamind.com/novamind/express.php"&gt;NovaMind Express&lt;/a&gt; — For mind mapping, use it for interaction designs for web sites. ($50)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mozilla.org/firefox/"&gt;Firefox&lt;/a&gt; with the &lt;a href="https://addons.mozilla.org/nl/firefox/addon/1843"&gt;Firebug&lt;/a&gt;, &lt;a href="https://addons.mozilla.org/nl/firefox/addon/60"&gt;Web Developer&lt;/a&gt;, &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/10868"&gt;Weave&lt;/a&gt;, &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/7931"&gt;CyberSearch,&lt;/a&gt; &lt;a href="https://addons.mozilla.org/nl/firefox/addon/1865"&gt;AdBlock Plus&lt;/a&gt; and &lt;a href="http://netticat.ath.cx/SessionAlive/SessionAlive.htm"&gt;SessionAlive&lt;/a&gt; extensions — Nothing beats the fox. (all free)&lt;/li&gt;&lt;li&gt;&lt;a href="http://flyingmeat.com/acorn/"&gt;Acorn&lt;/a&gt; — Fairly simple image manipulation.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.skitch.com/"&gt;Skitch&lt;/a&gt; — Easy and simple image  editing and sharing for everyone. (free) &lt;/li&gt;&lt;li&gt;&lt;a href="http://gimp.lisanet.de/"&gt;GIMP&lt;/a&gt; — Advanced image manipulation, includingremoval of color profiles. Requires X11. (free)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.neooffice.org/"&gt;NeoOffice&lt;/a&gt; — Complete office suite, based on &lt;a href="http://www.neooffice.org/"&gt;OpenOffice.org&lt;/a&gt; code. No need to purchase &lt;a href="http://www.microsoft.com/mac/products/Office2008/default.mspx"&gt;Microsoft Office&lt;/a&gt; anymore, it even supports the new &lt;i&gt;.docx&lt;/i&gt; and &lt;i&gt;.xlsx&lt;/i&gt; file types. (free, donations welcome)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.skype.com/"&gt;Skype&lt;/a&gt; — For video conferencing, also with non-Mac people; &lt;a href="http://www.apple.com/macosx/what-is-macosx/ichat.html"&gt;iChat&lt;/a&gt; video quality is much higher though. (free)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.apple.com/iwork/"&gt;iWork&lt;/a&gt; — Nothing beats Keynote presentations! ($79)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.flip4mac.com/"&gt;Flip4Mac&lt;/a&gt; — Be able to watch Windows Media videos (WMV). (free version available)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.shinywhitebox.com/home/home.html"&gt;iShowU&lt;/a&gt; — Screen video capture. ($20)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://iterm.sourceforge.net/"&gt;iTerm&lt;/a&gt; — Best terminal program for the Mac - beats Apple's built-in Terminal application in terms of productivity and usability (free, donations welcome.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.coriolis-systems.com/iPartition.php"&gt;iPartition&lt;/a&gt; — For dynamically changing hard drive partitions, includes resizing functionality. ($50)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;And I'm considering adding the following to my toolset:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.pixelmator.com/"&gt;Pixelmator&lt;/a&gt; — For real Mac-style image manipulation. Question is whether it can do what I do with GIMP, including the removal of color profiles and such ($59).&lt;/li&gt;&lt;li&gt;&lt;a href="http://likethought.com/opacity/"&gt;Opacity&lt;/a&gt; — For creating very nice-looking icons, fast ($90).&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Updates:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Sept. 11, 2008&lt;/i&gt;: Considering &lt;a href="http://www.pixelmator.com/"&gt;Pixelmator&lt;/a&gt; instead of &lt;a href="http://flyingmeat.com/acorn/"&gt;Acorn&lt;/a&gt;, the latter just does not have enough features. And added &lt;a href="http://www.coriolis-systems.com/iPartition.php"&gt;iPartition&lt;/a&gt; as a favourite app.&lt;/li&gt;&lt;li&gt;&lt;i&gt;Sept. 17, 2008&lt;/i&gt;: Added &lt;a href="http://sourceforge.net/projects/cotvnc/"&gt;Chicken of the VNC&lt;/a&gt; and &lt;a href="http://www.ksuther.com/chax/"&gt;Chax&lt;/a&gt; and listed the price of &lt;a href="http://www.coriolis-systems.com/iPartition.php"&gt;iPartition&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;i&gt;March 9, 2010&lt;/i&gt;: Updated information on Parallels. Using a different set of Firefox extensions. Removed SuperDocker.&lt;/li&gt;&lt;li&gt;&lt;i&gt;March 13, 2010&lt;/i&gt;: Added the &lt;a href="http://netticat.ath.cx/SessionAlive/SessionAlive.htm"&gt;SessionAlive&lt;/a&gt; extension for Firefox and &lt;a href="http://www.skitch.com/"&gt;Skitch&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;i&gt;March 31, 2010&lt;/i&gt;: Removed &lt;a href="http://www.omnigroup.com/products/omniplan/"&gt;OmniPlan&lt;/a&gt;, &lt;a href="http://www.ironicsoftware.com/leap/index.html"&gt;Leap&lt;/a&gt;, &lt;a href="http://www.ksuther.com/chax/"&gt;Chax&lt;/a&gt;. Changed the link to GIMP on OS X. Added &lt;a href="http://flyingmeat.com/acorn/"&gt;Acorn&lt;/a&gt; and added &lt;a href="https://addons.mozilla.org/addon/60"&gt;Web Developer&lt;/a&gt; extension for Firefox. Updated some descriptions.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-6704586295239994635?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/6704586295239994635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/09/favourite-mac-apps.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6704586295239994635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6704586295239994635'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/09/favourite-mac-apps.html' title='Favourite Mac apps (updated x5)'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-9028370285966526301</id><published>2008-08-25T13:00:00.015+02:00</published><updated>2008-08-27T23:22:58.813+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='annoyances'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>Leopard annoyances</title><content type='html'>I finally made the switch from Mac OS X 10.4 "Tiger" to 10.5 "Leopard". Here are some things I ran into while upgrading:&lt;br /&gt;&lt;br /&gt;iChat:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;iChat&lt;/span&gt; still has &lt;span style="font-weight: bold;"&gt;separate windows&lt;/span&gt; for Jabber-, AIM- and Bonjour contact lists. &lt;a href="http://www.ksuther.com/chax/"&gt;Chax&lt;/a&gt; can fix this, though;&lt;/li&gt;&lt;li&gt;one of my 'buddies' has both a GMail account (via Jabber) and a MobileMe account (via AIM) - these get &lt;span style="font-weight: bold;"&gt;mixed up&lt;/span&gt; in the contacts lists;&lt;/li&gt;&lt;/ul&gt;Migration:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When &lt;span style="font-weight: bold;"&gt;migrating&lt;/span&gt; the programs from my Tiger backup, I also migrated some issues, so I decides to reinstall all programs.&lt;/li&gt;&lt;/ul&gt;Spaces:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;Spaces&lt;/span&gt; does not support &lt;span style="font-weight: bold;"&gt;labels&lt;/span&gt; for spaces; numbers are quite meaningless.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;NetBeans&lt;/span&gt; 6.1 does not work well with &lt;span style="font-weight: bold;"&gt;Spaces&lt;/span&gt;. If you press Cmd-Tab to switch to NetBeans, the correct Space is not activated. Very annoying. It has been noticed by &lt;a href="http://www.nabble.com/Mac-OS-X-10.5,-Spaces-and-Netbeans-td18981483.html"&gt;others&lt;/a&gt; as well.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I assigned F6 to &lt;span style="font-weight: bold;"&gt;Spaces&lt;/span&gt;, to show the overview. It's not possible to start dragging an application and then press F6 to drop it in a different space.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Software Update&lt;/span&gt; does not seem to work with Spaces, when I Cmd-Tab to it after it completed (and starts jumping in the Dock), nothing happens.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Mail:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When I tell Mail to &lt;span style="font-weight: bold;"&gt;permanently accept an SSL certificate&lt;/span&gt; it considers unsafe, then it still keeps asking for it when I restart Mail.&lt;/li&gt;&lt;li&gt;When &lt;span style="font-weight: bold;"&gt;replying&lt;/span&gt; to a mail I sent to somebody else, my address is in the To: field and the original recipient is in the CC: field. I would hope this was fixed since Tiger.&lt;/li&gt;&lt;/ul&gt;Finder:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I tried to &lt;span style="font-weight: bold;"&gt;customize the icon&lt;/span&gt; for a folder by dropping a JPEG on top of the icon in the "Info" window. Instead of showing the image, it shows a generic JPEG icon. D'oh! The &lt;a href="http://www.iconicosx.com/"&gt;Iconic&lt;/a&gt; tool provides a partial resolution. It 'carves' an image into a Leopard folder image and makes that the icon for a specific folder, if you want. I'd prefer to have just the original image as the folder icon, but I'm not sure how to do that.&lt;/li&gt;&lt;li&gt;It is not possible to add a mount point to the &lt;span style="font-weight: bold;"&gt;Locations&lt;/span&gt;-section in the Finder sidebar.&lt;/li&gt;&lt;/ul&gt;Spotlight:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When searching with &lt;span&gt;Spotlight&lt;/span&gt;, the &lt;span style="font-weight: bold;"&gt;results window&lt;/span&gt; has no option to show more columns, like the number of attachments or the size of the image. And it's not possible to hide the Relevance column (which I never use). &lt;a href="http://www.yepthat.com/leap/index.html"&gt;Leap&lt;/a&gt; is a powerful alternative, though.&lt;/li&gt;&lt;/ul&gt;AddressBook:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Sometimes when I start editing a card, all &lt;span style="font-weight: bold;"&gt;details disappear&lt;/span&gt;. This is resolved by pressing Cmd-Z.&lt;/li&gt;&lt;/ul&gt;Dock:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If I put the Dock on the right side of my screen then it turns into a 2D-style Dock; so far so good. But then when I move the mouse pointer over the &lt;span style="font-weight: bold;"&gt;stripes&lt;/span&gt; (between the applications and the stacks) that allow me to change the size of the Dock (without clicking), then the mouse pointer keeps its resize-appearance.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Other:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;X11&lt;/span&gt; does not work for me. &lt;a href="http://xquartz.macosforge.org/trac/wiki"&gt;XQuartz&lt;/a&gt; 2.3.0 seems to work like a charm though.&lt;/li&gt;&lt;li&gt;Software Update still says there's &lt;span style="font-weight: bold;"&gt;new software&lt;/span&gt; available for my computer (in bold) even after it finished installing all available updates. Confusing, especially for less tech-savvy people.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-9028370285966526301?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/9028370285966526301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/08/leopard-annoyances.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/9028370285966526301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/9028370285966526301'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/08/leopard-annoyances.html' title='Leopard annoyances'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-5676941564193451441</id><published>2008-07-10T22:47:00.003+02:00</published><updated>2008-07-10T22:53:49.165+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xins'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>XINS 2.2 alpha 2 released</title><content type='html'>Today (July 10th, 2008) &lt;a href="http://www.xins.org/"&gt;XINS&lt;/a&gt; 2.2 alpha 2 has been released, featuring several improvements:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;a new _xml type for sending XML values (e.g. in input or output parameters);&lt;/li&gt;&lt;li&gt;there is now an option that makes the client framework follow HTTP redirect responses;&lt;/li&gt;&lt;li&gt;compatibility of the SOAP calling convention (in the server framework) with .NET has been improved&lt;/li&gt;&lt;li&gt;some log messages have been improved;&lt;/li&gt;&lt;li&gt;bug fixes and small RFEs.&lt;/li&gt;&lt;/ul&gt;Although this is an alpha release, the quality is high. In this case alpha moslty means that new features can be added, removed or refined.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-5676941564193451441?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/5676941564193451441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/07/xins-22-alpha-2-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5676941564193451441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5676941564193451441'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/07/xins-22-alpha-2-released.html' title='XINS 2.2 alpha 2 released'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-662002247799152094</id><published>2008-06-19T00:51:00.004+02:00</published><updated>2008-08-27T23:24:05.902+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='compliance'/><category scheme='http://www.blogger.com/atom/ns#' term='compatibility'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox3'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='pensioenpage'/><title type='text'>PensioenPage supports Firefox 3.0</title><content type='html'>As one of the first companies, we at &lt;a href="http://www.pensioenpage.com/"&gt;PensioenPage&lt;/a&gt; are proud to announce we have confirmed compatibility with &lt;a href="http://www.mozilla.com/en-US/firefox/"&gt;Firefox 3.0&lt;/a&gt;, mere hours after it's release. Since we adhere to a standards-based approach, compatiblity is mostly out-of-the-box.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-662002247799152094?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/662002247799152094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/06/pensioenpage-supports-firefox-30.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/662002247799152094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/662002247799152094'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/06/pensioenpage-supports-firefox-30.html' title='PensioenPage supports Firefox 3.0'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-4936411978294898408</id><published>2008-06-18T09:23:00.004+02:00</published><updated>2008-06-18T20:18:34.634+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='squirrelfish'/><category scheme='http://www.blogger.com/atom/ns#' term='msie'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='msie8'/><category scheme='http://www.blogger.com/atom/ns#' term='safari'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><category scheme='http://www.blogger.com/atom/ns#' term='ie8'/><category scheme='http://www.blogger.com/atom/ns#' term='ie'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox3'/><category scheme='http://www.blogger.com/atom/ns#' term='grapple'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><title type='text'>Firefox 3.0 released - and other browser news</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Today (June 18), &lt;a href="http://www.mozilla.com/"&gt;Mozilla&lt;/a&gt; Firefox 3.0 has officially been released. &lt;a href="http://developer.yahoo.com/yslow/"&gt;YSlow&lt;/a&gt; (a web page performance analysis extension for Firefox, by Yahoo) has been &lt;a href="http://developer.yahoo.net/blog/archives/2008/06/new_yslow_with.html"&gt;updated&lt;/a&gt; to 0.9.5 beta 2, just in time to support Firefox 3.&lt;br /&gt;&lt;br /&gt;Some other browser news:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.opera.com/"&gt;Opera&lt;/a&gt; 9.5 has been released;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the Firefox 3.1 features have been defined, see the &lt;a href="http://wiki.mozilla.org/Firefox3.1/Features"&gt;MozillaWiki&lt;/a&gt; and the &lt;a href="http://mozillalinks.org/wp/2008/06/firefox-31-shiretoko-planned-features-draft/"&gt;article on MozillaLink&lt;/a&gt;; a first alpha release is target for mid July;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Microsoft &lt;a href="http://blogs.msdn.com/ie/archive/2008/06/03/ie8-beta-2-coming-in-august.aspx"&gt;announced&lt;/a&gt; that the 2nd beta of IE 8 is scheduled for August 2008;&lt;/li&gt;&lt;li&gt;Apple has provided an early build of Safari 4 on the &lt;a href="http://developer.apple.com/"&gt;Apple Developer Connection&lt;/a&gt;, apparently with their new JavaScript engine SquirrelFish integrated;&lt;/li&gt;&lt;li&gt;the &lt;a href="http://www.takebacktheweb.org/"&gt;GrApple theme&lt;/a&gt; (that makes Firefox look like a native Mac app) has been updated for Firefox 3.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-4936411978294898408?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/4936411978294898408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/06/firefox-30-released-and-other-browser.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4936411978294898408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4936411978294898408'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/06/firefox-30-released-and-other-browser.html' title='Firefox 3.0 released - and other browser news'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-1297390785591357202</id><published>2008-06-04T21:33:00.006+02:00</published><updated>2008-06-10T09:40:44.092+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='snow leopard'/><category scheme='http://www.blogger.com/atom/ns#' term='leopard'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Mac OS X 10.6 'Snow Leopard' (updated)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mHXLKrDq9g8/SEcKA26rsNI/AAAAAAAAABs/z1_0GYKF7g0/s1600-h/Afbeelding+1.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_mHXLKrDq9g8/SEcKA26rsNI/AAAAAAAAABs/z1_0GYKF7g0/s200/Afbeelding+1.png" alt="" id="BLOGGER_PHOTO_ID_5208142503935193298" border="0" /&gt;&lt;/a&gt;Several sites (including &lt;a href="http://www.macrumors.com/2008/06/04/mac-os-x-10-6-called-snow-leopard-all-cocoa/"&gt;MacRumors&lt;/a&gt; and &lt;a href="http://arstechnica.com/journals/apple.ars/2008/06/04/mac-os-x-10-6-code-named-snow-leopard-may-be-pure-cocoa"&gt;Arstechnica&lt;/a&gt;) are spreading the rumor that &lt;a href="http://www.apple.com/macosx/"&gt;Mac OS X&lt;/a&gt; 10.6 will be announced at Apple's &lt;a href="http://developer.apple.com/wwdc/"&gt;&lt;acronym title="World Wide Developer's Conference"&gt;WWDC&lt;/acronym&gt;&lt;/a&gt;, this coming week. The new release will supposedly be called "Snow Leopard" and the release focus will be on stability and performance.&lt;br /&gt;&lt;br /&gt;If this is true, then that is in my opinion a Good Thing. After using &lt;a href="http://www.freebsd.org/"&gt;FreeBSD&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Linux"&gt;Linux&lt;/a&gt; on my primary desktop for years, I switched to Mac OS X 10.4 (Tiger) in Q4 2006. Although I've not had major problems, OS X has been pestering me now and then:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;crashing background processes (sometimes several times an hour)&lt;/li&gt;&lt;li&gt;spontaneous reboots (1 or 2 per year)&lt;/li&gt;&lt;li&gt;failures to come back to life after being suspended (closed lid on MacBook Pro)&lt;/li&gt;&lt;/ul&gt;Rock solid stability is definitely very much welcomed, as well as improved security, especially for professional/business users like myself.&lt;br /&gt;&lt;br /&gt;For me, a desktop computer should allow it's users to work efficient. For this, you need sufficient speed, proper functionality, an effective keyboard/mouse/touch interface, stability and security.&lt;br /&gt;&lt;br /&gt;In my experience, the OS X 10.4 operating system works nicely, but has it's stability issues. It's probably more stable than Windows, but definitely less than Linux and FreeBSD.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update (June 10):&lt;/span&gt; Indeed this has been announced by Apple as anticipated, see &lt;a href="http://www.apple.com/macosx/snowleopard/"&gt;the Apple site&lt;/a&gt; for more information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-1297390785591357202?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/1297390785591357202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/06/mac-os-x-106-snow-leopard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1297390785591357202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1297390785591357202'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/06/mac-os-x-106-snow-leopard.html' title='Mac OS X 10.6 &apos;Snow Leopard&apos; (updated)'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mHXLKrDq9g8/SEcKA26rsNI/AAAAAAAAABs/z1_0GYKF7g0/s72-c/Afbeelding+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-224296684408739841</id><published>2008-06-04T11:38:00.003+02:00</published><updated>2008-06-04T23:35:32.320+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='ecmascript'/><category scheme='http://www.blogger.com/atom/ns#' term='dhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox3'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='firebug'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Firebug 1.2 beta 2 for Firefox 3.0</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://firefox.phpmagazine.net/upload/2007/02/the_others_usage_of_firebug_fl/firebug-logo.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand" src="http://firefox.phpmagazine.net/upload/2007/02/the_others_usage_of_firebug_fl/firebug-logo.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;On the &lt;a href="http://www.getfirebug.com/"&gt;Firebug&lt;/a&gt; &lt;a href="http://www.getfirebug.com/blog/"&gt;blog&lt;/a&gt;, an &lt;a href="http://www.getfirebug.com/blog/2008/06/03/firebug-12b2-for-firefox-30/"&gt;announcement&lt;/a&gt; is posted about the release of Firebug 1.2 beta 2. It's compatible with Firefox 3.0 RC, but not with Firefox 2.0.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;For the uninitiated, Firebug is a Firefox extension that provides a host of web development tools, such as various inspectors, a JavaScript debugger, etc.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-224296684408739841?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/224296684408739841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/06/firebug-12-beta-2-for-firefox-30.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/224296684408739841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/224296684408739841'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/06/firebug-12-beta-2-for-firefox-30.html' title='Firebug 1.2 beta 2 for Firefox 3.0'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-2090962591468269360</id><published>2008-06-03T10:16:00.004+02:00</published><updated>2008-06-03T10:25:06.278+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='ecmascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ecma'/><category scheme='http://www.blogger.com/atom/ns#' term='squirrelfish'/><category scheme='http://www.blogger.com/atom/ns#' term='safari'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>WebKit (Safari) gets a new JavaScript engine: SquirrelFish</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webkit.org/blog-files/squirrelfish.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer" src="http://webkit.org/blog-files/squirrelfish.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;On "&lt;a href="http://webkit.org/blog/"&gt;Surfin' Safari&lt;/a&gt;", the &lt;a href="http://webkit.org/"&gt;WebKit&lt;/a&gt; blog (WebKit being the engine for &lt;a href="http://www.apple.com/"&gt;Apple&lt;/a&gt;'s &lt;a href="http://www.apple.com/safari/"&gt;Safari&lt;/a&gt; browser) an new JavaScript engine has been announced. It's called &lt;a href="http://webkit.org/blog/189/announcing-squirrelfish/" rel="bookmark" title="Announcing SquirrelFish"&gt;SquirrelFish&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;While the current JavaScript engine (in Safari 3.1) is an interpreter, the new one is based on bytecode execution, increasing the possibilities for performance improvements. Already the WebKit developers are claiming a 50% improvement over the production release of Safari, version 3.1.&lt;br /&gt;&lt;br /&gt;Although the fish logo is funny, I find it hard to associate it with speed in any way...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-2090962591468269360?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/2090962591468269360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/06/webkit-safari-gets-new-javascript.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2090962591468269360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2090962591468269360'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/06/webkit-safari-gets-new-javascript.html' title='WebKit (Safari) gets a new JavaScript engine: SquirrelFish'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-2472801605991309876</id><published>2008-06-02T11:50:00.002+02:00</published><updated>2008-06-02T11:55:04.142+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spotlight'/><category scheme='http://www.blogger.com/atom/ns#' term='leap'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='finder'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>Finding files on Mac OS X: Leap</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.ironicsoftware.com/leap/images/spotlight.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://www.ironicsoftware.com/leap/images/spotlight.jpg" alt="" border="0" /&gt;&lt;/a&gt;Today I came across &lt;a href="http://www.ironicsoftware.com/leap/"&gt;Leap&lt;/a&gt;, a search utility for Mac OS X. It seems to be much better than Spotlight. Have a look at the &lt;a href="http://www.ironicsoftware.com/leap/video.html"&gt;introduction videos&lt;/a&gt;. Leap works on Mac OS X 10.4.10 and up and is available as a Universal Binary.&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://www.ironicsoftware.com/downloads/Leap_1.0.5.dmg"&gt;fully functional 21-day trial&lt;/a&gt; can be downloaded from their site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-2472801605991309876?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/2472801605991309876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/06/finding-files-on-mac-os-x-leap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2472801605991309876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2472801605991309876'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/06/finding-files-on-mac-os-x-leap.html' title='Finding files on Mac OS X: Leap'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-3756891667091836085</id><published>2008-06-02T11:09:00.003+02:00</published><updated>2008-06-02T11:16:05.474+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='neooffice'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='openoffice.org'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='openoffice'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>NeoOffice 2.2.3 patch 5 available</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.neooffice.org/neojava/images/ship2.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://www.neooffice.org/neojava/images/ship2.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.neooffice.org/"&gt;NeoOffice&lt;/a&gt; 2.2.3 patch 5 has been released. Nothing exciting, just some bug fixes:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Opening Office 2003 XML files produced a General I/O error&lt;/li&gt;&lt;li&gt;Poor selection of Polish and Cyrillic replacement fonts&lt;/li&gt;&lt;li&gt;Landscape documents could be cropped when printing&lt;/li&gt;&lt;/ol&gt;Download from the &lt;a href="http://www.neooffice.org/neojava/nl/patch.php"&gt;patch download page&lt;/a&gt;. For more information, see the &lt;a href="http://neowiki.neooffice.org/index.php/NeoOffice_2.2.3_Release_Notes"&gt;NeoOffice 2.2.3 release notes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;NeoOffice is an OpenOffice.org-cousin that nicely integrates with Mac OS X, unlike the regular OpenOffice.org 2 for Mac OS X, which requires X11 to function.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-3756891667091836085?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/3756891667091836085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/06/neooffice-223-patch-5-available.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3756891667091836085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3756891667091836085'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/06/neooffice-223-patch-5-available.html' title='NeoOffice 2.2.3 patch 5 available'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-7446447319790947591</id><published>2008-05-26T10:00:00.003+02:00</published><updated>2008-05-26T10:05:20.767+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='introduction'/><category scheme='http://www.blogger.com/atom/ns#' term='cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><category scheme='http://www.blogger.com/atom/ns#' term='intro'/><title type='text'>Video intro to Mac OS X Cocoa</title><content type='html'>There's a lengthy &lt;a href="http://theocacao.com/document.page/573"&gt;video introduction to Cocoa&lt;/a&gt; available from Theocacao. Although I haven't watched it (yet), it appears to be received very positively. An unofficial &lt;a href="http://thepiratebay.org/tor/4198001"&gt;BitTorrent&lt;/a&gt; is also available. You need &lt;a href="http://www.apple.com/quicktime/"&gt;QuickTime&lt;/a&gt; for this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-7446447319790947591?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/7446447319790947591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/video-intro-to-mac-os-x-cocoa.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7446447319790947591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7446447319790947591'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/video-intro-to-mac-os-x-cocoa.html' title='Video intro to Mac OS X Cocoa'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-1641105849713416066</id><published>2008-05-21T15:56:00.003+02:00</published><updated>2008-05-21T16:05:07.738+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aluminum'/><category scheme='http://www.blogger.com/atom/ns#' term='crash'/><category scheme='http://www.blogger.com/atom/ns#' term='usb'/><title type='text'>Crash your Mac with a stick</title><content type='html'>If you want to crash your Mac, or perhaps any kind of computer, put a little piece of aluminum foil paper inside the USB connection of an external device and then plug the device in, while your computer is running.&lt;br /&gt;&lt;br /&gt;In my case, it worked: the Mac spontaneously rebooted. After 2 reboots I realized that my Mac experienced a real physical problem and found the culprit inside the connector of my USB stick. It was the result of keeping the USB stick in my pocket, along with some random other stuff, aparently including some aluminum foil paper.&lt;br /&gt;&lt;br /&gt;So: be warned :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-1641105849713416066?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/1641105849713416066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/crash-your-mac-with-stick.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1641105849713416066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1641105849713416066'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/crash-your-mac-with-stick.html' title='Crash your Mac with a stick'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-5177728902087858508</id><published>2008-05-21T14:25:00.002+02:00</published><updated>2008-05-21T14:32:43.283+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lnf'/><category scheme='http://www.blogger.com/atom/ns#' term='lookandfeel'/><category scheme='http://www.blogger.com/atom/ns#' term='gui'/><category scheme='http://www.blogger.com/atom/ns#' term='leopard'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='10.5'/><category scheme='http://www.blogger.com/atom/ns#' term='user interface'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>Changing Leopard's look and feel</title><content type='html'>&lt;a href="http://www.ryanfaas.com/"&gt;Ryan Faas&lt;/a&gt; has written another excellent article, this time about changing the look and feel of &lt;a href="http://www.apple.com/macosx/"&gt;Mac OS X&lt;/a&gt; 10.5 (Leopard):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9084398"&gt;Leopard tamers: 9 terrific interface tweaks&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-5177728902087858508?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/5177728902087858508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/changing-leopards-look-and-feel.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5177728902087858508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5177728902087858508'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/changing-leopards-look-and-feel.html' title='Changing Leopard&apos;s look and feel'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-7022860446479370814</id><published>2008-05-20T14:49:00.002+02:00</published><updated>2008-05-21T14:35:19.784+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='extension'/><category scheme='http://www.blogger.com/atom/ns#' term='delicious'/><category scheme='http://www.blogger.com/atom/ns#' term='compatibility'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox3'/><category scheme='http://www.blogger.com/atom/ns#' term='del.icio.us'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='beta'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>del.icio.us extension for Firefox 3.0</title><content type='html'>Just recently, &lt;a href="http://www.mozilla.com/en-US/firefox/all-rc.html"&gt;Firefox 3.0 RC&lt;/a&gt; was released.&lt;br /&gt;&lt;br /&gt;I use a fair amount of Firefox extensions, including &lt;a href="http://www.getfirebug.com/"&gt;Firebug&lt;/a&gt;, &lt;a href="http://developer.yahoo.com/yslow/"&gt;YSlow for Firebug&lt;/a&gt; and the &lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt; extension. The latter was not available for Firefox 3.0, until recently:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.delicious.com/blog/2008/04/firefox-3-delicious-and-you.html"&gt;Firefox 3, del.icio.us, and you&lt;/a&gt; (posting on the delicious blog)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://del.icio.us/extensions/firefox/delicious.xpi"&gt;download the latest (beta) version of the extension&lt;/a&gt; (currently 2.0.48)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-7022860446479370814?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/7022860446479370814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/delicious-extension-for-firefox-30.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7022860446479370814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7022860446479370814'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/delicious-extension-for-firefox-30.html' title='del.icio.us extension for Firefox 3.0'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-7150606516609864662</id><published>2008-05-13T23:10:00.003+02:00</published><updated>2008-05-13T23:13:33.739+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='neooffice'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='openoffice.org'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='openoffice'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>NeoOffice integration with Mac OS X improves</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://neowiki.neooffice.org/images/f/f9/NeoOffice-2.2.3_Patch_3_New_Features.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://neowiki.neooffice.org/images/f/f9/NeoOffice-2.2.3_Patch_3_New_Features.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Even though a &lt;a href="http://ernstdehaan.blogspot.com/2008/05/openoffice-30-beta-available.html"&gt;beta of OpenOffice.org 3&lt;/a&gt;, with a native Aqua version, has been made available, &lt;a href="http://www.neooffice.org/"&gt;NeoOffice&lt;/a&gt; is still standing strong as a stable OpenOffice.org cousin that provides slick Mac OS X integration. Standing isn't the right word, though, because it's constantly improving.&lt;br /&gt;&lt;br /&gt;Since 2.2.3 Patch 3, NeoOffice now improves on the Mac OS X integration by adding these features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://neowiki.neooffice.org/index.php/NeoOffice_2.2.4_New_Features#Media_Browser_support"&gt;media browser support&lt;/a&gt;: have a media browser floating window, similar to what iLife applications (iPhoto, iMovie, etc.) offer;&lt;/li&gt;&lt;li&gt;&lt;a href="http://neowiki.neooffice.org/index.php/NeoOffice_2.2.4_New_Features#Native_floating_tool_windows"&gt;native floating tool windows&lt;/a&gt;: they are no longer standard Mac windows, but look and act like native floating windows;&lt;/li&gt;&lt;li&gt;&lt;a title="" href="http://neowiki.neooffice.org/index.php/NeoOffice_2.2.4_New_Features#Magnify_and_swipe_trackpad_gestures"&gt;magnify and swipe trackpad gestures&lt;/a&gt;: or at least on hardware that supports it (MacBook Air and recent MacBook Pro models).&lt;/li&gt;&lt;/ul&gt;Previously, NeoOffice 2.2.3 Patch 2 added &lt;a title="" href="http://neowiki.neooffice.org/index.php/NeoOffice_2.2.4_New_Features#Horizontal_scrollwheel_support"&gt;horizontal scrollwheel support&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-7150606516609864662?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/7150606516609864662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/neooffice-integration-with-mac-os-x.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7150606516609864662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7150606516609864662'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/neooffice-integration-with-mac-os-x.html' title='NeoOffice integration with Mac OS X improves'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-6399435134233380537</id><published>2008-05-13T23:01:00.002+02:00</published><updated>2008-05-13T23:14:42.142+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='format'/><category scheme='http://www.blogger.com/atom/ns#' term='file format'/><category scheme='http://www.blogger.com/atom/ns#' term='formats'/><category scheme='http://www.blogger.com/atom/ns#' term='file formats'/><category scheme='http://www.blogger.com/atom/ns#' term='fileformats'/><category scheme='http://www.blogger.com/atom/ns#' term='unicode'/><title type='text'>Information on Unicode characters</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;The site fileformat.info claims to provide extensive information on various file formats. I haven't checked that claim myself, but I have found their information on Unicode characters is extremely useful. For example, see this page on the Unicode symbol 'EURO SIGN':&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.fileformat.info/info/unicode/char/20ac/index.htm"&gt;http://www.fileformat.info/info/unicode/char/20ac/index.htm&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;It shows a picture of the symbol, as well various descriptions and links. Then it shows how the character is encoded in, for example, HTML, UTF-8 and UTF-16 and how to use it in source code (C/C#/C++/Java/Python).&lt;br /&gt;&lt;br /&gt;A great resource for information on Unicode characters!&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-6399435134233380537?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/6399435134233380537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/information-on-unicode-characters.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6399435134233380537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6399435134233380537'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/information-on-unicode-characters.html' title='Information on Unicode characters'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-6934085013916438215</id><published>2008-05-13T22:56:00.001+02:00</published><updated>2008-05-13T22:56:32.078+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ecmascript'/><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Smooth web image zooming with FancyZoom </title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;a href='http://www.cabel.name/2008/02/fancyzoom-10.html'&gt;FancyZoom&lt;/a&gt; is a JavaScript library for zooming into images on a web page. It looks really well, zooming images smoothly when you click on them. And then when they show, they get a shadow effect applied.&lt;br/&gt;&lt;br/&gt;The library works with most modern browsers: (Mobile) Safari, Firefox, IE6/7 and Opera are reportedly supported, but no word of Konqueror (KHTML). See it in action on here:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;&lt;a href='http://www.cabel.name/2008/02/fancyzoom-10.html'&gt;http://www.cabel.name/2008/02/fancyzoom-10.html&lt;/a&gt;&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;FancyZoom is free for non-commercial use. To use it commercially, the author asks $39 per site.&lt;br/&gt;&lt;br/&gt;FancyZoom 1.1 comes with for 2 JavaScript files (34 KB) and 15 PNG image files (100 KB), which sums up to 134 KB. With current broadband connections it should not be a problem in itself, but it may add up to the total download size for a web page, especially for first-time visitors. Note that a compression tool like &lt;a href='http://open.yahoo.com/yui/compressor/'&gt;YUI Compressor&lt;/a&gt; may tighten the file sizes a bit.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-6934085013916438215?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/6934085013916438215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/smooth-web-image-zooming-with-fancyzoom.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6934085013916438215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6934085013916438215'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/smooth-web-image-zooming-with-fancyzoom.html' title='Smooth web image zooming with FancyZoom '/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-2516602109908338946</id><published>2008-05-07T23:40:00.001+02:00</published><updated>2008-05-07T23:40:43.068+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='png'/><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='leopard'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Opacity 1.1 released</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;img width='224' height='166' src='http://downloads.likethought.com/media/opacity-poster.jpg' style='max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;'/&gt;If you're creating iconic graphics, either for desktop applications, mobile apps or the web, and you're lucky to be using Mac OS X 10.5 (Leopard), then &lt;a href='http://likethought.com/opacity/'&gt;Opacity&lt;/a&gt; is definitely a contender for creating those nifty looking images.&lt;br/&gt;&lt;br/&gt;Opacity is simple, intuitive but still very powerful when it comes to creating small graphics. It supports layers, different kinds of shapes, all sorts of effects and integrates with a couple of FTP programs.&lt;br/&gt;&lt;br/&gt;The user interface works mostly consistent with the rest of Leopard.&lt;br/&gt;&lt;br/&gt;Have a look at the screencast on their site.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-2516602109908338946?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/2516602109908338946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/opacity-11-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2516602109908338946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2516602109908338946'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/opacity-11-released.html' title='Opacity 1.1 released'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-4720632059264233323</id><published>2008-05-07T10:09:00.001+02:00</published><updated>2008-05-07T10:09:20.489+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='odf'/><category scheme='http://www.blogger.com/atom/ns#' term='neooffice'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='openoffice.org'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='openoffice'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>OpenOffice 3.0 beta available</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;The OpenOffice.org 3.0 beta is now available from &lt;a href='http://download.openoffice.org/3.0beta/'&gt;download.openoffice.org&lt;/a&gt;. One of the most compelling changes is Mac OS X support. Localized builds are also available, but not directly linked from that page. Instead, check out one of &lt;a href='http://distribution.openoffice.org/mirrors#extmirrors'&gt;the mirrors&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Currently, most Mac users prefer &lt;a href='http://www.neooffice.org/'&gt;NeoOffice&lt;/a&gt; over OpenOffice 3. OpenOffice 2 does not work under Aqua (only under X11) and NeoOffice has a history of stable OpenOffice-functionality for the Aqua/Mac OS X platform. This may change once OpenOffice 3 becomes (more) stable.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-4720632059264233323?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/4720632059264233323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/openoffice-30-beta-available.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4720632059264233323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4720632059264233323'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/05/openoffice-30-beta-available.html' title='OpenOffice 3.0 beta available'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-4912063773354344995</id><published>2008-04-30T00:15:00.003+02:00</published><updated>2008-04-30T00:25:02.096+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='leopard'/><category scheme='http://www.blogger.com/atom/ns#' term='java6'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>Finally: Java 6 for Mac OS X</title><content type='html'>Apple has finally delivered Java 6 for Mac OS X as part of an update called &lt;a href="http://www.apple.com/downloads/macosx/apple/application_updates/javaformacosx105release1.html"&gt;Java for Mac OS X 10.5 Release 1&lt;/a&gt;. There was a Java 6 pre-release for Tiger, ages ago, but finally the real thing seems to have arrived. Let's hope it fixes most of the bugs in the pre-release.&lt;br /&gt;&lt;br /&gt;It's well-known that this release comes really late. Java 6 was &lt;a href="http://en.wikipedia.org/wiki/Java_version_history#Java_SE_6_.28December_11.2C_2006.29"&gt;released&lt;/a&gt; (for Windows and Linux) in December 2006 and Java 5 has already &lt;a href="http://java.sun.com/javase/downloads/index_jdk5.jsp"&gt;entered&lt;/a&gt; it's Technology End of Life (EOL) transition period.&lt;br /&gt;&lt;br /&gt;Too bad the update is only for Leopard (Mac OS X 10.5) and requires a 64-bit Intel processor (such as the Core 2 Duo).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-4912063773354344995?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/4912063773354344995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/finally-java-6-for-mac-os-x.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4912063773354344995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4912063773354344995'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/finally-java-6-for-mac-os-x.html' title='Finally: Java 6 for Mac OS X'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-1819426363568099559</id><published>2008-04-29T19:47:00.003+02:00</published><updated>2008-04-30T16:43:35.611+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zlib'/><category scheme='http://www.blogger.com/atom/ns#' term='png'/><category scheme='http://www.blogger.com/atom/ns#' term='pngquant'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='compilation'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='cc'/><category scheme='http://www.blogger.com/atom/ns#' term='libpng'/><category scheme='http://www.blogger.com/atom/ns#' term='compile'/><category scheme='http://www.blogger.com/atom/ns#' term='make'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>Compiling zlib, libpng and pngquant on Mac OS X (updated)</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Here are some instructions for compiling &lt;span style="font-style: italic;"&gt;pngquant&lt;/span&gt; on Mac OS X. Included are instructions for compiling &lt;span style="font-style: italic;"&gt;libpng&lt;/span&gt; (which is a dependency for &lt;span style="font-style: italic;"&gt;pngquant&lt;/span&gt;) and &lt;span style="font-style: italic;"&gt;zlib&lt;/span&gt; (which is a dependency for &lt;span style="font-style: italic;"&gt;libpng&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Step 1. First, download &lt;span style="font-style: italic;"&gt;pngquant&lt;/span&gt; from SourceForge:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=32355"&gt;http://sourceforge.net/project/showfiles.php?group_id=32355&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;as well as &lt;span style="font-style: italic;"&gt;libpng&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;zlib&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=5624"&gt;http://sourceforge.net/project/showfiles.php?group_id=5624&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Step 2. Unpack them all in the same directory and then generate symbolic links called &lt;code&gt;libpng&lt;/code&gt; and &lt;code&gt;zlib&lt;/code&gt; that point to the actual directories. E.g.:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;total 16&lt;br /&gt;lrwxr-xr-x     1 ernst  ernst    13 Apr 29 19:27 libpng -&amp;gt; libpng-1.2.27&lt;br /&gt;drwxr-xr-x   103 ernst  ernst  3502 Apr 29 19:28 libpng-1.2.27&lt;br /&gt;drwxr-xr-x    10 ernst  ernst   340 Apr 29 19:18 pngquant-1.0&lt;br /&gt;lrwxr-xr-x     1 ernst  ernst    10 Apr 29 19:27 zlib -&amp;gt; zlib-1.2.3&lt;br /&gt;drwxr-xr-x    64 ernst  ernst  2176 Apr 29 19:22 zlib-1.2.3&lt;/pre&gt;&lt;/blockquote&gt;Step 3. Now go to the &lt;code&gt;zlib&lt;/code&gt; directory and execute &lt;code&gt;./configure&lt;/code&gt; followed by &lt;code&gt;make&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Step 4. Go to the libpng directory and execute &lt;code&gt;make -f scripts/makefile.darwin&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Step 5. Go to the directory that contains the &lt;i&gt;pngquant&lt;/i&gt; source code and execute &lt;code&gt;make -f Makefile.unx&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;That's it. You should now have a &lt;code&gt;pngquant&lt;/code&gt; executable.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Updated&lt;/span&gt; (April 30, 2008): On request, here's a link to the resulting executable: &lt;a href="http://www.ernstdehaan.com/pngquant"&gt;pngquant (for Mac OS X)&lt;/a&gt;. MD5 checksum is 20820366a7fffc6305ada6b727656b7b.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-1819426363568099559?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/1819426363568099559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/compiling-zlib-libpng-and-pngquant-on.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1819426363568099559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1819426363568099559'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/compiling-zlib-libpng-and-pngquant-on.html' title='Compiling zlib, libpng and pngquant on Mac OS X (updated)'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-7382465149551881335</id><published>2008-04-25T14:59:00.005+02:00</published><updated>2008-04-25T15:12:56.771+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ie8'/><category scheme='http://www.blogger.com/atom/ns#' term='msie'/><category scheme='http://www.blogger.com/atom/ns#' term='ie'/><category scheme='http://www.blogger.com/atom/ns#' term='msie8'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='ms'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Microsoft wants to break up HTML 5</title><content type='html'>In an &lt;a href="http://www.sdtimes.com/content/article.aspx?ArticleID=32067&amp;amp;AspxAutoDetectCookieSupport=1"&gt;interview with SDTimes&lt;/a&gt;, Chris Wilson, &lt;abbr title="Microsoft Internet Explorer"&gt;MSIE&lt;/abbr&gt; platform architect Chris Wilson proposed that &lt;a href="http://www.w3.org/html/wg/html5/"&gt;HTML 5&lt;/a&gt; be split into several substandards.&lt;br /&gt;&lt;br /&gt;Sounds like a reasonable and interesting proposal, but even better is to see that Microsoft appears to join the HTML 5 bandwagon. Although reviews on &lt;abbr title="Microsoft Internet Explorer"&gt;MSIE&lt;/abbr&gt; 8 beta 1 have &lt;a href="http://mozillalinks.org/wp/2008/03/internet-explorer-8-beta-1-first-impressions/"&gt;not&lt;/a&gt; &lt;a href="http://cssvault.com/blog/2008/03/10/internet-explorer-8-beta-released-fails-to-excite/"&gt;been&lt;/a&gt; &lt;a href="http://review.zdnet.com/browsers/internet-explorer-8-beta/4505-3514_16-32890529.html"&gt;very&lt;/a&gt; positive, the overall impression is that web standards support from Redmond is improving.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-7382465149551881335?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/7382465149551881335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/microsfot-wants-to-break-up-html-5.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7382465149551881335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7382465149551881335'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/microsfot-wants-to-break-up-html-5.html' title='Microsoft wants to break up HTML 5'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-6087581425858904340</id><published>2008-04-25T14:49:00.003+02:00</published><updated>2008-04-25T15:13:48.272+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Decorations 1.0 released</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://decoration.japplis.com/images/filters.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://decoration.japplis.com/images/filters_tn.png" alt="" border="0" /&gt;&lt;/a&gt;Anthony Goubard (of &lt;a href="http://www.antcommander.com/"&gt;Ant Commander&lt;/a&gt; fame) has released &lt;a href="http://decoration.japplis.com/"&gt;Decoration 1.0&lt;/a&gt;. It's an interesting &lt;a href="http://java.sun.com/"&gt;Java&lt;/a&gt;-based application for graphical designers that makes it easy to apply all sorts of effects (100+) to graphics and text, including gradients, drop shadows, glow, etc.&lt;br /&gt;&lt;br /&gt;What makes it attractive for professional use is that it supports a batch mode, for processing hundreds (or more?) of images sequentially.&lt;br /&gt;&lt;br /&gt;For more information check out the &lt;a href="http://decoration.japplis.com/screenshots.html"&gt;screenshots&lt;/a&gt; section or the &lt;a href="http://decoration.japplis.com/gallery.html"&gt;gallery&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-6087581425858904340?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/6087581425858904340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/decorations-10-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6087581425858904340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6087581425858904340'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/decorations-10-released.html' title='Decorations 1.0 released'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-3056445803650389531</id><published>2008-04-21T21:07:00.001+02:00</published><updated>2008-04-21T21:10:28.904+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox2'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><title type='text'>Firefox 2.0.0.14</title><content type='html'>&lt;a href="http://www.mozilla.org/nl/products/firefox/"&gt;Firefox&lt;/a&gt; 2.0.0.14 was &lt;a href="http://www.mozilla.org/nl/products/firefox/2.0.0.14/releasenotes/"&gt;released&lt;/a&gt;. Nothing much, 'just' a single security issue was fixed, &lt;a href="http://www.mozilla.org/security/announce/2008/mfsa2008-20.html"&gt;a crash in the JavaScript garbage collector&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-3056445803650389531?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/3056445803650389531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/firefox-20014.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3056445803650389531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3056445803650389531'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/firefox-20014.html' title='Firefox 2.0.0.14'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-2372778178313312106</id><published>2008-04-19T15:47:00.004+02:00</published><updated>2008-04-19T15:51:07.250+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='camino'/><category scheme='http://www.blogger.com/atom/ns#' term='gecko'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Camino 1.6 released</title><content type='html'>&lt;a href="http://caminobrowser.org/releases/1.6/"&gt;Camino 1.6&lt;/a&gt; has been released. Camino is a &lt;a href="http://www.mozilla.org/"&gt;Mozilla&lt;/a&gt; Gecko-based browser for Mac OS X.&lt;br /&gt;Among &lt;a href="http://caminobrowser.org/releases/1.6/complete.php"&gt;other things&lt;/a&gt;, it now supports multi-touch gestures (if you have the right hardware).&lt;br /&gt;This version requires Mac OS X 10.3.9 or higher and comes in different language-flavours, including Dutch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-2372778178313312106?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/2372778178313312106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/camino-16-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2372778178313312106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2372778178313312106'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/camino-16-released.html' title='Camino 1.6 released'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-4392743725228466062</id><published>2008-04-12T17:26:00.003+02:00</published><updated>2008-04-12T17:32:02.558+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ssb'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='fluid'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>Fluid, site-specific browsers integrated in Mac OS X</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mHXLKrDq9g8/SADV5r8pveI/AAAAAAAAABk/kV5_cvIRiPc/s1600-h/Afbeelding+1.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_mHXLKrDq9g8/SADV5r8pveI/AAAAAAAAABk/kV5_cvIRiPc/s200/Afbeelding+1.png" alt="" id="BLOGGER_PHOTO_ID_5188381957757189602" border="0" /&gt;&lt;/a&gt;If you have certain sites you use like an application, you may want your OS to treat these as applications as well, with a specific application that has it's own application title and icon, can be switched to using Cmd-Tab, etc.&lt;br /&gt;&lt;br /&gt;This is called &lt;span style="font-style: italic;"&gt;site specific browsers&lt;/span&gt;. The freeware application &lt;a href="http://fluidapp.com/"&gt;Fluid&lt;/a&gt; makes them integrate with Mac OS X seamlessly. For a walk-through, have a look at the intro:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=0C0jaaB2w0U"&gt;Fluid introduction video&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-4392743725228466062?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/4392743725228466062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/fluid-site-specific-browsers-integrated.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4392743725228466062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4392743725228466062'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/fluid-site-specific-browsers-integrated.html' title='Fluid, site-specific browsers integrated in Mac OS X'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_mHXLKrDq9g8/SADV5r8pveI/AAAAAAAAABk/kV5_cvIRiPc/s72-c/Afbeelding+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-8899603756626662313</id><published>2008-04-12T10:12:00.004+02:00</published><updated>2008-04-12T10:16:29.652+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='invalid'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Invalid XHTML / CSS</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mHXLKrDq9g8/SABvh78pvdI/AAAAAAAAABc/arQLoaEk3P8/s1600-h/Afbeelding+8.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_mHXLKrDq9g8/SABvh78pvdI/AAAAAAAAABc/arQLoaEk3P8/s200/Afbeelding+8.png" alt="" id="BLOGGER_PHOTO_ID_5188269399549263314" border="0" /&gt;&lt;/a&gt;Today, for the first time, I came across a site that explicitly (proudly?) announces it does not validate the XHTML/CSS standards:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.artofadambetts.com/weblog/"&gt;The Art of Adam Betts&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Very nice looking site, though. A real piece of art.&lt;br /&gt;&lt;br /&gt;Is this going to be a new trend?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-8899603756626662313?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/8899603756626662313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/invalid-xhtml-css.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8899603756626662313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8899603756626662313'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/invalid-xhtml-css.html' title='Invalid XHTML / CSS'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_mHXLKrDq9g8/SABvh78pvdI/AAAAAAAAABc/arQLoaEk3P8/s72-c/Afbeelding+8.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-9124854083734892383</id><published>2008-04-11T15:59:00.003+02:00</published><updated>2008-04-11T16:03:53.634+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='ppk'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Quirksmode.org getting updated for latest browsers</title><content type='html'>It seems that after a long time of relative quiteness, PPK is updating his site &lt;a href="http://www.quirksmode.org/"&gt;quirksmode.org&lt;/a&gt; again, to describe the features and quirks of the current browser incarnations IE 5.5–8b1, Opera 9.5b, Safari 3.1, Konqueror 3.5 and Firefox 2/3b5. Keep up the good work, Peter Paul!&lt;br /&gt;&lt;br /&gt;Have a look at his blog:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.quirksmode.org/blog/"&gt;QuirksBlog&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-9124854083734892383?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/9124854083734892383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/quirksmodeorg-getting-updated-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/9124854083734892383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/9124854083734892383'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/quirksmodeorg-getting-updated-for.html' title='Quirksmode.org getting updated for latest browsers'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-6262793669579243882</id><published>2008-04-11T10:55:00.003+02:00</published><updated>2008-04-11T11:02:02.159+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msie'/><category scheme='http://www.blogger.com/atom/ns#' term='msie8'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><title type='text'>HTML and DOM Standards Compliance in IE8 Beta 1</title><content type='html'>The Internet Explorer blog added a new and interesting article on the standards compliance improvements in MSIE 8 beta 1:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/ie/archive/2008/04/10/html-and-dom-standards-compliance-in-ie8-beta-1.aspx"&gt;HTML and DOM Standards Compliance in IE8 Beta 1&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;It not only elaborates on the changes in beta 1, but also notes what is planned for beta 2 and -more importantly- what is and what is &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; planned to be fixed in the IE 8 final release.&lt;br /&gt;&lt;br /&gt;Note that there's a reference to our very own (Dutch) PPK, of &lt;a href="http://www.quirksmode.org/"&gt;quirksmode.org&lt;/a&gt; and &lt;a href="http://www.fronteers.nl/"&gt;fronteers.nl&lt;/a&gt; fame.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-6262793669579243882?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/6262793669579243882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/html-and-dom-standards-compliance-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6262793669579243882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6262793669579243882'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/html-and-dom-standards-compliance-in.html' title='HTML and DOM Standards Compliance in IE8 Beta 1'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-589184712795757220</id><published>2008-04-02T10:56:00.002+02:00</published><updated>2008-04-02T10:59:26.727+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='epiphany'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Epiphany browser switching to WebKit engine</title><content type='html'>The &lt;a href="http://www.gnome.org/projects/epiphany/"&gt;Epiphany&lt;/a&gt; browser (for &lt;a href="http://www.gnome.org/"&gt;GNOME&lt;/a&gt;) is announcing a switch to the &lt;a href="http://www.webkit.org/"&gt;WebKit&lt;/a&gt; engine. See the announcement:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogs.gnome.org/epiphany/2008/04/01/the-future-of-epiphany/"&gt;The Future of Epiphany&lt;/a&gt; (April 1, 2008)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-589184712795757220?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/589184712795757220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/epiphany-browser-switching-to-webkit.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/589184712795757220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/589184712795757220'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/epiphany-browser-switching-to-webkit.html' title='Epiphany browser switching to WebKit engine'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-7888579991422402352</id><published>2008-04-02T09:41:00.003+02:00</published><updated>2008-04-02T09:46:25.298+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Eclipse: Changing an existing project to a Java project</title><content type='html'>Do you have an existing project in Eclipse, but want to convert it to a Java project? From the UI, you cannot do it (at least in Eclipse 3.2). Instead, follow the instructions given here:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://enarion.net/programming/tools/eclipse/changing-general-project-to-java-project/"&gt;Change a default general Eclipse project to a Eclipse Java project&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-7888579991422402352?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/7888579991422402352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/eclipse-changing-existing-project-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7888579991422402352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/7888579991422402352'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/eclipse-changing-existing-project-to.html' title='Eclipse: Changing an existing project to a Java project'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-1705356126309736545</id><published>2008-04-02T08:25:00.005+02:00</published><updated>2008-04-02T09:41:01.603+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ooxml'/><category scheme='http://www.blogger.com/atom/ns#' term='odf'/><category scheme='http://www.blogger.com/atom/ns#' term='iec'/><category scheme='http://www.blogger.com/atom/ns#' term='ecma'/><category scheme='http://www.blogger.com/atom/ns#' term='iso'/><title type='text'>OOXML approved</title><content type='html'>According to Intellectual Property Watch, &lt;a href="http://www.ip-watch.org/weblog/index.php?p=986"&gt;OOXML has been approved&lt;/a&gt;. No official announcement from ISO yet, though.&lt;div&gt;See also:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ecma-international.org/news/TC45_current_work/ISO_and_IEC_approve_Office_Open_XML.htm"&gt;ISO and IEC approve Office Open XML document format standard&lt;/a&gt; (ECMA site)&lt;/li&gt;&lt;li&gt;&lt;a href="http://consortiuminfo.org/standardsblog/"&gt;ConsortiumInfo – The Standards Blog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.oreillynet.com/xml/blog/2007/02/watching_the_odf_ooxml_debate.html"&gt;Watching the ODF – OOXML debate&lt;/a&gt; (O'Reilly)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-1705356126309736545?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/1705356126309736545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/ooxml-approved.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1705356126309736545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1705356126309736545'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/04/ooxml-approved.html' title='OOXML approved'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-1814903918273810591</id><published>2008-03-29T11:57:00.003+01:00</published><updated>2008-03-29T13:28:26.545+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='xins'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='concepts'/><title type='text'>Introduction to XML technologies</title><content type='html'>There's a guy from the U.S. that calls himself Gerald that wrote a blog entry aiming to introduce XML technologies (from a Java point-of-view):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://zhguo.blogspot.com/2008/03/java-xml-related-concepts-and.html"&gt;Java XML related concepts and implementations&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Quite interesting, especially for beginners or to those wanting to take a step back and getting another overview.&lt;br /&gt;&lt;br /&gt;Note that he also mentions &lt;a href="http://xins.sourceforge.net/"&gt;XINS&lt;/a&gt; as a web services framework.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-1814903918273810591?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/1814903918273810591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/introduction-to-xml-technologies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1814903918273810591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/1814903918273810591'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/introduction-to-xml-technologies.html' title='Introduction to XML technologies'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-6660465992988640316</id><published>2008-03-28T09:26:00.004+01:00</published><updated>2008-03-28T09:29:07.993+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox2'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Firefox 2.0.0.13 released</title><content type='html'>Firefox 2.0.0.13 was released. No features added, just some &lt;a href="http://www.mozilla.org/projects/security/known-vulnerabilities.html#firefox2.0.0.13"&gt;security vulnerabilities fixed&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-6660465992988640316?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/6660465992988640316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/firefox-20013-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6660465992988640316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6660465992988640316'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/firefox-20013-released.html' title='Firefox 2.0.0.13 released'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-2843527686603653163</id><published>2008-03-27T12:01:00.002+01:00</published><updated>2008-03-27T12:07:10.542+01:00</updated><title type='text'>Opera also claims 100/100 on Acid3</title><content type='html'>Although they don't provide a publicly downloadable build yet (unlike &lt;a href="http://ernstdehaan.blogspot.com/2008/03/webkit-passes-acid3-test.html"&gt;WebKit&lt;/a&gt;), &lt;a href="http://my.opera.com/desktopteam/blog/2008/03/26/opera-and-the-acid3-test"&gt;Opera also claims&lt;/a&gt; they have a score of 100/100 on Acid3. Coming soon to a download location near you...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-2843527686603653163?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/2843527686603653163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/opera-also-claims-100100-on-acid3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2843527686603653163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2843527686603653163'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/opera-also-claims-100100-on-acid3.html' title='Opera also claims 100/100 on Acid3'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-2115084760105971617</id><published>2008-03-27T08:59:00.004+01:00</published><updated>2008-03-27T09:04:05.845+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='compatibility'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='acid3'/><category scheme='http://www.blogger.com/atom/ns#' term='browsers'/><title type='text'>WebKit passes Acid3 test</title><content type='html'>Wow, they did it! While my Firefox 3 beta 4 (on Mac OS X 10.4) gets no more than 68 points (out of 100), the &lt;a href="http://webkit.org/"&gt;WebKit&lt;/a&gt; team managed to make their browser engine pass the &lt;a href="http://acid3.acidtests.org/"&gt;Acid3 test&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://webkit.org/blog/173/webkit-achieves-acid3-100100-in-public-build/"&gt;WebKit achieves Acid3 100/100 in public build&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Now they 'just' need to do some profiling to make sure the test is passed quickly and the animation is smooth...&lt;br /&gt;&lt;br /&gt;They sure deserve some credit for this!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-2115084760105971617?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/2115084760105971617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/webkit-passes-acid3-test.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2115084760105971617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2115084760105971617'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/webkit-passes-acid3-test.html' title='WebKit passes Acid3 test'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-4849854681770237116</id><published>2008-03-27T08:41:00.004+01:00</published><updated>2008-03-27T09:07:31.876+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ie8'/><category scheme='http://www.blogger.com/atom/ns#' term='msie'/><category scheme='http://www.blogger.com/atom/ns#' term='ie'/><category scheme='http://www.blogger.com/atom/ns#' term='msie8'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>CSS improvements planned for MSIE 8.0 (final)</title><content type='html'>On the &lt;a href="http://blogs.msdn.com/ie/"&gt;Microsoft Internet Explorer blog&lt;/a&gt;, a new article appeared today, titled "&lt;a href="http://blogs.msdn.com/ie/archive/2008/03/26/internet-explorer-8-beta-1-for-developers-standards-highlights-part-2.aspx"&gt;Internet Explorer 8 Beta 1 for Developers – Standards Highlights Part 2&lt;/a&gt;". This article points to a document about the various IE versions and CSS compatibility:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/cc351024%28VS.85%29.aspx"&gt;CSS Compatibility and Internet Explorer&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;From the document, it becomes clear that while IE 8 beta 1 already improves CSS compatibility compared to IE 7, there are still some improvements planned before the IE 8 final release:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;support for the CSS 2.1 pseudo-classes &lt;a id="ctl00_rs1_mainContentContainer_ctl26" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl26',this);" href="http://msdn2.microsoft.com/en-us/library/cc304080.aspx"&gt;:focus&lt;/a&gt; and &lt;a id="ctl00_rs1_mainContentContainer_ctl27" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl27',this);" href="http://msdn2.microsoft.com/en-us/library/ms530766.aspx"&gt;:hover&lt;/a&gt; and full support for &lt;a id="ctl00_rs1_mainContentContainer_ctl22" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl22',this);" href="http://msdn2.microsoft.com/en-us/library/ms530714.aspx"&gt;:active&lt;/a&gt;;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;full support for the CSS 2.1 &lt;a id="ctl00_rs1_mainContentContainer_ctl50" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl50',this);" href="http://msdn2.microsoft.com/en-us/library/ms530762.aspx"&gt;font-weight&lt;/a&gt; property;&lt;/li&gt;&lt;li&gt;support for the CSS 2.1 property &lt;a id="ctl00_rs1_mainContentContainer_ctl60" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl60',this);" href="http://msdn2.microsoft.com/en-us/library/ms531185.aspx"&gt;word-spacing&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;support for the CSS 3 properties &lt;a id="ctl00_rs1_mainContentContainer_ctl61" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl61',this);" href="http://msdn2.microsoft.com/en-us/library/ms531150.aspx"&gt;ruby-align&lt;/a&gt;, &lt;a id="ctl00_rs1_mainContentContainer_ctl62" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl62',this);" href="http://msdn2.microsoft.com/en-us/library/ms531151.aspx"&gt;ruby-overhang&lt;/a&gt; and &lt;a id="ctl00_rs1_mainContentContainer_ctl63" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl63',this);" href="http://msdn2.microsoft.com/en-us/library/ms531152.aspx"&gt;ruby-position&lt;/a&gt; – support for these properties was available in IE 6, but not in IE 7;&lt;/li&gt;&lt;li&gt;full support for CSS 2.1 generated content (properties &lt;a id="ctl00_rs1_mainContentContainer_ctl70" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl70',this);" href="http://msdn2.microsoft.com/en-us/library/cc304061.aspx"&gt;content&lt;/a&gt;, &lt;a id="ctl00_rs1_mainContentContainer_ctl71" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl71',this);" href="http://msdn2.microsoft.com/en-us/library/cc196963.aspx"&gt;counter-increment&lt;/a&gt;, &lt;a id="ctl00_rs1_mainContentContainer_ctl72" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl72',this);" href="http://msdn2.microsoft.com/en-us/library/cc196964.aspx"&gt;counter-reset&lt;/a&gt; and quotes);&lt;/li&gt;&lt;li&gt;support for the CSS 2.1 empty-cells property;&lt;/li&gt;&lt;li&gt;completed support for the CSS 2.1 positioning-related properties &lt;a id="ctl00_rs1_mainContentContainer_ctl109" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl109',this);" href="http://msdn2.microsoft.com/en-us/library/ms530745.aspx"&gt;bottom&lt;/a&gt;, &lt;a id="ctl00_rs1_mainContentContainer_ctl111" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl111',this);" href="http://msdn2.microsoft.com/en-us/library/ms530751.aspx"&gt;display&lt;/a&gt;, &lt;a id="ctl00_rs1_mainContentContainer_ctl113" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl113',this);" href="http://msdn2.microsoft.com/en-us/library/ms530778.aspx"&gt;left&lt;/a&gt;, &lt;a id="ctl00_rs1_mainContentContainer_ctl120" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl120',this);" href="http://msdn2.microsoft.com/en-us/library/ms531149.aspx"&gt;right&lt;/a&gt;, &lt;a id="ctl00_rs1_mainContentContainer_ctl121" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl121',this);" href="http://msdn2.microsoft.com/en-us/library/ms531177.aspx"&gt;top&lt;/a&gt; and &lt;a id="ctl00_rs1_mainContentContainer_ctl124" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl124',this);" href="http://msdn2.microsoft.com/en-us/library/ms531188.aspx"&gt;z-index&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;support for the CSS 3 positioning-related properties &lt;a id="ctl00_rs1_mainContentContainer_ctl127" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl127',this);" href="http://msdn2.microsoft.com/en-us/library/cc304062.aspx"&gt;orphans&lt;/a&gt;, &lt;a id="ctl00_rs1_mainContentContainer_ctl128" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl128',this);" href="http://msdn2.microsoft.com/en-us/library/ms530842.aspx"&gt;page-break-after&lt;/a&gt;, &lt;a id="ctl00_rs1_mainContentContainer_ctl129" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl129',this);" href="http://msdn2.microsoft.com/en-us/library/ms530844.aspx"&gt;page-break-before&lt;/a&gt;, &lt;a id="ctl00_rs1_mainContentContainer_ctl130" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl130',this);" href="http://msdn2.microsoft.com/en-us/library/cc304067.aspx"&gt;page-break-inside&lt;/a&gt; and &lt;a id="ctl00_rs1_mainContentContainer_ctl131" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl131',this);" href="http://msdn2.microsoft.com/en-us/library/cc304068.aspx"&gt;widows&lt;/a&gt;&lt;/li&gt;&lt;li&gt;support for the CSS 2.1 &lt;a id="ctl00_rs1_mainContentContainer_ctl132" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl132',this);" href="http://msdn2.microsoft.com/en-us/library/aa358795.aspx"&gt;cursor&lt;/a&gt; property.&lt;/li&gt;&lt;/ul&gt;So there's still something to look forward to...&lt;br /&gt;&lt;br /&gt;I wonder how much of this will affect the IE 8 score on the Acid 3 test, but I don't expect them to beat WebKit anytime soon (who just &lt;a href="http://webkit.org/blog/173/webkit-achieves-acid3-100100-in-public-build/"&gt;achieved 100/100&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-4849854681770237116?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/4849854681770237116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/css-improvements-planned-for-msie-80.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4849854681770237116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/4849854681770237116'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/css-improvements-planned-for-msie-80.html' title='CSS improvements planned for MSIE 8.0 (final)'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-5687940134446028279</id><published>2008-03-24T21:16:00.003+01:00</published><updated>2008-03-24T21:22:11.429+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ecmascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Ajax Performance</title><content type='html'>Here's a great blog about client-side JavaScript and CSS: &lt;a href="http://www.ajaxperformance.com/"&gt;Ajax Performance&lt;/a&gt;. Some articles of interest:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ajaxperformance.com/2008/03/16/testing-ie8s-connection-parallelism/"&gt;Testing IE8’s Connection Parallelism&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ajaxperformance.com/2008/03/07/ie8-the-performance-implications/"&gt;IE8: The Performance Implications&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ajaxperformance.com/2008/02/23/yay-the-css-sprite-generator-is-open-source-lets-play/" rel="bookmark" title="Permanent Link to Yay!  The CSS Sprite Generator is Open Source.  Let’s play!"&gt;Yay!  The CSS Sprite Generator is Open Source.  Let’s play!&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ajaxperformance.com/2008/02/20/studies-of-mobile-ajax-performance/" rel="bookmark" title="Permanent Link to Studies of mobile Ajax performance"&gt;Studies of mobile Ajax performance&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ajaxperformance.com/2007/08/29/microsofts-ajax-view/" rel="bookmark" title="Permanent Link to Microsoft’s Ajax View"&gt;Microsoft’s Ajax View&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Interesting stuff!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-5687940134446028279?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/5687940134446028279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/ajax-performance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5687940134446028279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5687940134446028279'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/ajax-performance.html' title='Ajax Performance'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-8164053658471490258</id><published>2008-03-24T15:15:00.003+01:00</published><updated>2008-03-25T11:34:50.977+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Browser-specific CSS</title><content type='html'>The main browser engines support some CSS properties (or property values) that are not (yet) standardized. These get a browser engine-specific prefix, to maintain future compatibility, as the property (value) may make it into a standard, but possibly with slightly different characteristics.&lt;br /&gt;&lt;br /&gt;The prefixes used are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;-moz-&lt;/span&gt; for &lt;a href="http://www.mozilla.org/"&gt;Mozilla&lt;/a&gt;-based browsers (such as &lt;a href="http://www.mozilla.org/products/firefox/"&gt;Firefox&lt;/a&gt; and &lt;a href="http://caminobrowser.org/"&gt;Camino&lt;/a&gt;);&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;-o-&lt;/span&gt; for &lt;a href="http://www.opera.com/"&gt;Opera&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;-webkit-&lt;/span&gt; for &lt;a href="http://www.webkit.org/"&gt;WebKit&lt;/a&gt;-based browsers (such as &lt;a href="http://www.apple.com/safari/"&gt;Safari&lt;/a&gt;, &lt;a href="http://www.omnigroup.com/applications/omniweb/"&gt;OmniWeb&lt;/a&gt; and &lt;a href="http://www.icab.de/"&gt;iCab&lt;/a&gt;);&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;-khtml-&lt;/span&gt; for &lt;a href="http://en.wikipedia.org/wiki/KHTML"&gt;KHTML&lt;/a&gt;-based browsers (such as &lt;a href="http://www.konqueror.org/"&gt;Konqueror&lt;/a&gt;).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Microsoft is not that careful with CSS compatibility, their &lt;a href="http://www.microsoft.com/windows/products/winfamily/ie/default.mspx"&gt;Internet Explorer&lt;/a&gt; does not use a prefix, except for one property: &lt;a href="http://msdn2.microsoft.com/en-us/library/ms530822%28VS.85%29.aspx"&gt;-ms-interpolation-mode&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here are lists of CSS properties/property values specific to these browsers:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/workshop/author/css/reference/attributes.asp"&gt;Internet Explorer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.mozilla.org/en/docs/CSS_Reference:Mozilla_Extensions"&gt;Mozilla&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.opera.com/docs/specs/opera9/css/index.dml"&gt;Opera&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://qooxdoo.org/documentation/general/webkit_css_styles"&gt;WebKit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://websvn.kde.org/*checkout*/trunk/KDE/kdelibs/khtml/css/cssproperties.in"&gt;KHTML&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-8164053658471490258?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/8164053658471490258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/browser-specific-css.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8164053658471490258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8164053658471490258'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/browser-specific-css.html' title='Browser-specific CSS'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-449594668425429802</id><published>2008-03-24T12:43:00.003+01:00</published><updated>2008-03-24T13:04:42.343+01:00</updated><title type='text'>Browser blogs</title><content type='html'>Here are links to some blogs dedicated to the main browser engines:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/ie/"&gt;Microsoft Internet Explorer&lt;/a&gt; – since the release of the IE 8 beta, there are is one new post every day, mainly focusing on functionalities and technologies;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.mozilla.org/devnews/"&gt;Mozilla Developer News&lt;/a&gt; – Covers not only browsers, but other products as well.&lt;/li&gt;&lt;li&gt;&lt;a href="http://caminobrowser.org/blog/"&gt;Camino&lt;/a&gt; – a blog dedicated to Mozilla Camino (for Mac OS X).&lt;/li&gt;&lt;li&gt;&lt;a href="http://webkit.org/blog/"&gt;WebKit&lt;/a&gt; – the engine of -primarily- &lt;a href="http://www.apple.com/safari/"&gt;Safari&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://people.opera.com/howcome/"&gt;Opera&lt;/a&gt; – Blog by Håkon Wium Lie, CTO of Opera.&lt;/li&gt;&lt;/ul&gt;For &lt;a href="http://www.konqueror.org/"&gt;Konqueror&lt;/a&gt;, I could not find a decent blog...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-449594668425429802?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/449594668425429802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/browser-blogs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/449594668425429802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/449594668425429802'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/browser-blogs.html' title='Browser blogs'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-2918115752893152458</id><published>2008-03-22T22:27:00.004+01:00</published><updated>2008-03-22T22:37:30.136+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='death'/><category scheme='http://www.blogger.com/atom/ns#' term='prolife'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='abortion'/><title type='text'>The truth about abortion</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.circleofprayer.com/abortion-posters.html"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 500px;" src="http://www.circleofprayer.com/abortionposter6.jpg" alt="" border="0" /&gt;&lt;/a&gt;This picture speaks for itself. If you believe abortion is principally different from killing a baby, think again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-2918115752893152458?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/2918115752893152458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/truth-about-abortion.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2918115752893152458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2918115752893152458'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/truth-about-abortion.html' title='The truth about abortion'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-3732268217669302996</id><published>2008-03-22T10:27:00.007+01:00</published><updated>2008-03-22T13:06:26.310+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='gecko'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='colorspace'/><category scheme='http://www.blogger.com/atom/ns#' term='color profile'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox3'/><category scheme='http://www.blogger.com/atom/ns#' term='safari'/><category scheme='http://www.blogger.com/atom/ns#' term='color space'/><title type='text'>Color spaces in Safari and Firefox 3</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/en/3/37/Colorspace.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://upload.wikimedia.org/wikipedia/en/3/37/Colorspace.png" alt="" border="0" /&gt;&lt;/a&gt;Since long, &lt;a href="http://www.apple.com/safari/"&gt;Safari 3&lt;/a&gt; has supported support for &lt;a href="http://en.wikipedia.org/wiki/Color_space"&gt;color profiles&lt;/a&gt; (see the WebKit blog entry &lt;a href="http://webkit.org/blog/73/color-spaces/"&gt;Color Spaces&lt;/a&gt;). Now &lt;a href="http://www.mozilla.com/en-US/firefox/all-beta.html"&gt;the Firefox 3 betas&lt;/a&gt; also come with support for it, although it's disabled by default.&lt;br /&gt;&lt;br /&gt;To enable support for color spaces in Firefox 3 beta 4, do the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to about:config&lt;/li&gt;&lt;li&gt;Confirm you want to edit settings&lt;/li&gt;&lt;li&gt;Set the option "gfx.color_management.enabled" to "true"&lt;/li&gt;&lt;li&gt;Restart Firefox&lt;/li&gt;&lt;/ol&gt;Now check out some sites. Like with Safari 3, colors in sites may look quite different, since an extra step is applied to convert the colors from the original color space to the color space for your screen.&lt;br /&gt;&lt;br /&gt;For web developers this smart behavior introduces some challenges, since sites now look different on different browsers on the same platform. Of note, Safari and Firefox implement color space support differently: Safari only adjusts images (such as PNGs), while Firefox also adjusts CSS colors.&lt;br /&gt;&lt;br /&gt;So even between Safari and Firefox 3 with color space support enabled, there are differences, as reported in &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=424356"&gt;Firefox bug report #424356&lt;/a&gt; (see the attached &lt;a href="https://bugzilla.mozilla.org/attachment.cgi?id=310981"&gt;screenshot&lt;/a&gt;) Firefox seems to do a better job here than Safari, because with the latter the colors of different elements on a web page may mismatch, as can be seen (with Safari 3.1) on a website like&lt;a href="http://www.route65.eu/"&gt; http://www.route65.eu/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For web developers, here's a pragmatic approach:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;make sure your images do not include a color profile (saves ~4KB)&lt;/li&gt;&lt;li&gt;do not specify colors in CSS if there is an image that needs to match the color, instead use a dot image with the exact same color&lt;/li&gt;&lt;/ol&gt;Still your site will look different on browsers with or without color space support, but at least you work around the problem in Safari 3.1.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-3732268217669302996?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/3732268217669302996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/color-spaces-in-safari-and-firefox-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3732268217669302996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/3732268217669302996'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/color-spaces-in-safari-and-firefox-3.html' title='Color spaces in Safari and Firefox 3'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-8155868612494167495</id><published>2008-03-10T15:29:00.003+01:00</published><updated>2008-03-10T15:33:52.117+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iwork'/><category scheme='http://www.blogger.com/atom/ns#' term='keynote'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Apple Keynote 4 does not support soft hyphens</title><content type='html'>Currently, Apple's &lt;a href="http://www.apple.com/iwork/keynote/"&gt;Keynote&lt;/a&gt; (v4.0.2) does not support &lt;a href="http://en.wikipedia.org/wiki/Hyphen#Hyphens_in_computing"&gt;soft hyphens&lt;/a&gt;. When a soft hyphen is inserted, it is treated as a normal (breaking) hyphen: even if the word is no split over 2 lines, the hyphen is still shown.&lt;br /&gt;&lt;br /&gt;Steps to reproduce:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;create a new Keynote document&lt;/li&gt;&lt;li&gt;create a text field&lt;/li&gt;&lt;li&gt;add a long word in it&lt;/li&gt;&lt;li&gt;move the cursos to the middle of the word&lt;/li&gt;&lt;li&gt;go to Edit &gt; Special characters...&lt;/li&gt;&lt;li&gt;in the dialog that appears, enter "SOFT HYPHEN" in the search box&lt;/li&gt;&lt;li&gt;double-click on "SOFT HYPHEN" in the list that appears&lt;/li&gt;&lt;li&gt;click on button labeled "Insert"&lt;/li&gt;&lt;li&gt;resize the text field so it is large enough to show the word without breaking&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Expected behaviour:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the soft hyphen does not show&lt;/li&gt;&lt;/ul&gt;Actual behaviour:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the soft hyphen shows, in the middle of the word&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-8155868612494167495?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/8155868612494167495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/apple-keynote-4-does-not-support-soft.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8155868612494167495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8155868612494167495'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/apple-keynote-4-does-not-support-soft.html' title='Apple Keynote 4 does not support soft hyphens'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-2932438731803521986</id><published>2008-03-04T08:50:00.004+01:00</published><updated>2008-03-04T08:53:53.065+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internet explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='ie8'/><category scheme='http://www.blogger.com/atom/ns#' term='msie'/><category scheme='http://www.blogger.com/atom/ns#' term='ie'/><category scheme='http://www.blogger.com/atom/ns#' term='msie8'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>MSIE 8 default is standards compliance</title><content type='html'>This is great news! &lt;a href="http://blogs.msdn.com/ie/archive/2008/03/03/microsoft-s-interoperability-principles-and-ie8.aspx"&gt;Microsoft is announcing&lt;/a&gt; they changed their standards compliance policy for Internet Explorer 8. It will now default to the new IE8 rendering engine, offering the best standards compliance so far.&lt;br /&gt;&lt;br /&gt;This is great news to the Web, to both users and developers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-2932438731803521986?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/2932438731803521986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/msie-8-default-is-standards-compliance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2932438731803521986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/2932438731803521986'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/03/msie-8-default-is-standards-compliance.html' title='MSIE 8 default is standards compliance'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-6615498297724326674</id><published>2008-02-02T20:54:00.001+01:00</published><updated>2008-02-02T21:01:35.252+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='caching'/><category scheme='http://www.blogger.com/atom/ns#' term='dns'/><category scheme='http://www.blogger.com/atom/ns#' term='cache'/><title type='text'>Work around slow DNS</title><content type='html'>If you have a slow DNS server that is causing you delays, for example while browsing the web, then try switching to a faster DNS server.&lt;br /&gt;&lt;br /&gt;If that does not work, then here's a trick you may want to try: make your computer perform DNS lookups for the hostnames you use most often (such as &lt;a href="http://www.google.com/"&gt;www.google.com&lt;/a&gt;) on a regular basis.&lt;br /&gt;&lt;br /&gt;On Mac OS X, Linux and UNIX systems this can be accomplished using a simple &lt;a href="http://en.wikipedia.org/wiki/cron"&gt;cron&lt;/a&gt; job, just execute a command like:&lt;blockquote&gt;&lt;code&gt;nslookup www.google.com&lt;/code&gt;&lt;/blockquote&gt;or:&lt;blockquote&gt;&lt;code&gt;host www.google.com&lt;/code&gt;&lt;/blockquote&gt;This will perform the DNS lookup, and -as a side-effect- add the result to the local DNS cache.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-6615498297724326674?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/6615498297724326674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/02/work-around-slow-dns.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6615498297724326674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/6615498297724326674'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/02/work-around-slow-dns.html' title='Work around slow DNS'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-5157822886549856739</id><published>2008-01-18T13:07:00.000+01:00</published><updated>2008-01-30T13:57:13.458+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='todo'/><category scheme='http://www.blogger.com/atom/ns#' term='igtd'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><category scheme='http://www.blogger.com/atom/ns#' term='gtd'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>iGTD</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mHXLKrDq9g8/R5CYc_fQJAI/AAAAAAAAAA8/8gPwUtCG3w4/s1600-h/igtd.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_mHXLKrDq9g8/R5CYc_fQJAI/AAAAAAAAAA8/8gPwUtCG3w4/s320/igtd.jpg" alt="" id="BLOGGER_PHOTO_ID_5156789197185491970" border="0" /&gt;&lt;/a&gt;Today I started using &lt;a href="http://www.igtd.pl/iGTD/"&gt;iGTD&lt;/a&gt;, a Mac OS X application for todo-management. This application helps you to get yourself organized, registering all things you need to do in a single database on your own machine.&lt;br /&gt;&lt;br /&gt;Overall iGTD v1.4.5.6 seems to be a well-designed application that is very usable for it's core functionality. It works very stable on Mac OS X 10.4 (Tiger). I have not tried running it on 10.5 (Leopard).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Wish list&lt;/span&gt;&lt;br /&gt;While working with iGTD for a couple of hours, here's a list of things I'd recommend for improvement:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mHXLKrDq9g8/R5CdnPfQJDI/AAAAAAAAABU/1gj_TI6a1yU/s1600-h/Afbeelding+5.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_mHXLKrDq9g8/R5CdnPfQJDI/AAAAAAAAABU/1gj_TI6a1yU/s320/Afbeelding+5.png" alt="" id="BLOGGER_PHOTO_ID_5156794870837290034" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Search everything&lt;/span&gt; – when searching, you currently have to choose from "Search by task name or note" and few other options, but "Search everything" is not an option. I'd like a single operation to search project names, task names, tags, etc.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Dates&lt;/span&gt; – Although iGTD displays dates in a friendly format such as "Today" or "Tuesday", it's not possible to enter dates that way. It would be nice to just type "tue" and get iGTD to recognize that as "this coming Tuesday".&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Resize window&lt;/span&gt; – When increasing the size of the main iGTD application window, the last column in the task list becomes wider. By default, that's the "Due date" column, which doesn't need that much space, normally. Instead, the "Name" column should be widened, which contains both the task name (left-aligned) and the tag names (right-aligned).&lt;/li&gt;&lt;li&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_mHXLKrDq9g8/R5CdNvfQJCI/AAAAAAAAABM/44llP5lH1EY/s1600-h/Afbeelding+4.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_mHXLKrDq9g8/R5CdNvfQJCI/AAAAAAAAABM/44llP5lH1EY/s320/Afbeelding+4.png" alt="" id="BLOGGER_PHOTO_ID_5156794432750625826" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Effort colors&lt;/span&gt; – The effort column in the task list allows 4 values, ranging from low to high (see the image). The values are represented by a bar that is shorter (for low effort) or longer. Each bar length has it's own color, these are (from low effort to high): dark grey, green, brown and red. It would be nice if the colors would be more intuitive, such as: green, orange, red and black.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Defaults&lt;/span&gt; – It would be nice if the configuration would allow that tasks entered without details (e.g. via "Quick type", hotkey F8) are explicitly be assigned some defaults, such as a default project.&lt;/li&gt;&lt;li&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mHXLKrDq9g8/R5CcXPfQJBI/AAAAAAAAABE/d7-KMrG1YCs/s1600-h/dockstar_20080102151913.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_mHXLKrDq9g8/R5CcXPfQJBI/AAAAAAAAABE/d7-KMrG1YCs/s320/dockstar_20080102151913.jpg" alt="" id="BLOGGER_PHOTO_ID_5156793496447755282" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Dock icon&lt;/span&gt; – iGTD offers the option of putting the number of open tasks in your Inbox in the dock icon. That's very nice indeed. It would, however, by even nicer if it could show the combined number of open tasks from all contexts, or even show multiple  numbers, for different contexts, similar to what &lt;a href="http://www.ecamm.com/mac/dockstar/"&gt;DockStar&lt;/a&gt; (see image) does for the Apple Mail application.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Resize panes&lt;/span&gt; – The main application window is divided in 3 main panes: the list of contexts or projects, the list of tasks and task details.  It would be nice if these panes could be resized, for example to allow more room for the task list.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Task dependencies&lt;/span&gt; – It seems there is no way to make tasks dependent on eachother. I tried looking at the various task properties, I tried right-clicking a task and I tried dragging a task onto another using various modifier keys (Cmd, Cmd-Alt, Shift, etc.) If iGTD offers this functionality, it seems well-hidden...&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Multi-client&lt;/span&gt; – I am one of the (probably many) people that do work in multiple locations, from different computers, but want to have the same personal information in all these places. To accomplish this, you can use a combination of &lt;a href="http://www.apple.com/dotmac/"&gt;.Mac&lt;/a&gt; (for your address book, certificates, etc.), &lt;a href="http://del.icio.us/"&gt;del.ico.us&lt;/a&gt; (for your bookmarks).&lt;br /&gt;What I could not find out yet, is whether iGTD also supports working from different computers in an easy-to-setup manner.&lt;/li&gt;&lt;/ol&gt;In my opinion, iGTD is a great application that is very usable. And the &lt;a href="http://www.igtd.pl/iGTD/iGTD2/"&gt;iGTD 2 alpha&lt;/a&gt; looks very promising!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-5157822886549856739?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/5157822886549856739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/01/igtd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5157822886549856739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/5157822886549856739'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/01/igtd.html' title='iGTD'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_mHXLKrDq9g8/R5CYc_fQJAI/AAAAAAAAAA8/8gPwUtCG3w4/s72-c/igtd.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-8371420896194306309</id><published>2008-01-08T09:52:00.000+01:00</published><updated>2008-01-08T10:44:15.993+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='servicecaller'/><category scheme='http://www.blogger.com/atom/ns#' term='xins3'/><category scheme='http://www.blogger.com/atom/ns#' term='xins'/><category scheme='http://www.blogger.com/atom/ns#' term='log'/><category scheme='http://www.blogger.com/atom/ns#' term='logging'/><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><category scheme='http://www.blogger.com/atom/ns#' term='logdoc'/><title type='text'>XINS: Splitting out Logdoc?</title><content type='html'>Talking to &lt;a href="http://www.jroller.com/agoubard/"&gt;Anthony Goubard&lt;/a&gt; yesterday (of &lt;a href="http://www.jlearnit.com/"&gt;JLearnIt&lt;/a&gt; and &lt;a href="http://www.antcommander.com/"&gt;AntCommander&lt;/a&gt; fame), I realized that adding features like &lt;a href="https://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1859843&amp;amp;group_id=71598&amp;amp;atid=531817"&gt;SMTP&lt;/a&gt;- and &lt;a href="https://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1864427&amp;amp;group_id=71598&amp;amp;atid=531817"&gt;SMS&lt;/a&gt;-support to a Web Services framework like &lt;a href="http://xins.sourceforge.net/"&gt;XINS&lt;/a&gt; can hardly be considered good &lt;a href="http://en.wikipedia.org/wiki/Separation_of_concerns"&gt;separation of concerns&lt;/a&gt;. So I definitely need to revise &lt;a href="http://ernstdehaan.blogspot.com/2007/11/xins-30.html"&gt;my XINS 3.0 wishlist&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Instead, it may be a much better idea to make XINS focus more on the Web Services functionality and split some technologies out. The main candidates seem to be Logdoc and the ServiceCaller framework:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mHXLKrDq9g8/R4M-3ffQI_I/AAAAAAAAAA0/p5NZz571IFQ/s1600-h/Afbeelding+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_mHXLKrDq9g8/R4M-3ffQI_I/AAAAAAAAAA0/p5NZz571IFQ/s320/Afbeelding+1.png" alt="" id="BLOGGER_PHOTO_ID_5153031521708286962" border="0" /&gt;&lt;/a&gt;In the picture the arrows indicate dependencies. So XINS would depend on Logdoc and the ServiceCaller framework and the latter would also depend on Logdoc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Logdoc: What is it?&lt;/span&gt;&lt;br /&gt;In this post I will focus on Logdoc.&lt;br /&gt;&lt;br /&gt;So what is Logdoc and why would we want to separate that out from XINS? Is it useful for other projects as well?&lt;br /&gt;&lt;br /&gt;IMHO the answer is "yes". Logdoc is a logging system based on the infamous &lt;a href="http://logging.apache.org/log4j/"&gt;Apache Log4J&lt;/a&gt; library that offers some features over Log4J:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;registered logging categories&lt;/span&gt;: there is an explicit list of all logging categories, with documentation;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;unique log messages&lt;/span&gt;: each log message is in a specific category and gets a specific number; this allows system administrators to enable or disable individual messages;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;multi-locale&lt;/span&gt;: it is straight-forward to add a new language for log messages;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;separation of concerns&lt;/span&gt;: the code does not bother with log levels, translations and categories, instead it just deals with a single log message (identified by ID) and it's parameters.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Logdoc code example&lt;/span&gt;&lt;br /&gt;Here is an example of a piece of Java code that uses Logdoc, from the HTTPServiceCaller class (&lt;a href="http://xins.sourceforge.net/javadoc/2.1/org/xins/common/http/HTTPServiceCaller.java"&gt;javadoc&lt;/a&gt;/&lt;a href="http://xins.sourceforge.net/j2h/2.1/org/xins/common/http/HTTPServiceCaller.java.html"&gt;source&lt;/a&gt;):&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;// Unknown host&lt;br /&gt;if (exception instanceof UnknownHostException) {&lt;br /&gt; Log.log_1102(url, params, duration);&lt;/pre&gt;&lt;/blockquote&gt;Notice that there is no category, no creation of objects and no language-specific stuff.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Logdoc definitions&lt;/span&gt;&lt;br /&gt;The key to the Logdoc system is the definition of categories and entries in XML. Every entry is within a single category. Translations can be specified in separate files, one per language/locale. So for example, for the XINS/Java Server Framework, the following files define all logdoc entries and their translations:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;src/logdoc/server/log.xml&lt;/span&gt; - defines all categories and contained entries; each entry has a unique number, it specified a log level and optionally some parameters;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;src/logdoc/server/translation-bundle-en_US.xml&lt;/span&gt; - defines all U.S. English translations for the log messages defined in the log.xml file;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;src/logdoc/server/translation-bundle-fr_FR.xml&lt;/span&gt; - defines all French (France) translations;&lt;/li&gt;&lt;/ul&gt;Adding a new set of translations is as easy as adding one line to the log.xml and one translation-bundle-&lt;span style="font-style: italic;"&gt;xx&lt;/span&gt;_&lt;span style="font-style: italic;"&gt;XX&lt;/span&gt;.xml file, where &lt;span style="font-style: italic;"&gt;xx&lt;/span&gt; is the ISO language code and &lt;span style="font-style: italic;"&gt;XX&lt;/span&gt; is the ISO country code.&lt;br /&gt;&lt;br /&gt;Now from these specifications, both code and documentation is automatically generated, XINS-style. Here is an example of  generated Logdoc documentation:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://xins.sourceforge.net/logdoc/2.1/server/"&gt;Logdoc documentation for the XINS/Java Server Framework&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Notice that there are 2 ways to find log entries: by category and by ID (see the &lt;a href="http://xins.sourceforge.net/logdoc/2.1/server/entry-list.html"&gt;Logdoc entry list&lt;/a&gt; link at the top).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;More information&lt;/span&gt;&lt;br /&gt;For more information on Logdoc, check out the section titled "&lt;a href="http://xins.sourceforge.net/docs/ar01s14.html"&gt;Managing logs&lt;/a&gt;" in the XINS User Guide.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-8371420896194306309?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/8371420896194306309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2008/01/xins-splitting-out-logdochttpwwwblogger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8371420896194306309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8371420896194306309'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2008/01/xins-splitting-out-logdochttpwwwblogger.html' title='XINS: Splitting out Logdoc?'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_mHXLKrDq9g8/R4M-3ffQI_I/AAAAAAAAAA0/p5NZz571IFQ/s72-c/Afbeelding+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18813684.post-8689580227368068381</id><published>2007-11-28T09:55:00.000+01:00</published><updated>2008-01-08T10:46:28.378+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xins3'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='java5'/><category scheme='http://www.blogger.com/atom/ns#' term='xins'/><category scheme='http://www.blogger.com/atom/ns#' term='generics'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><category scheme='http://www.blogger.com/atom/ns#' term='web applications'/><title type='text'>XINS 3.0 (updated x3)</title><content type='html'>&lt;span style="font-style: italic;"&gt;Note (added Jan 8, 2008): This article is outdated, please read "&lt;/span&gt;&lt;a style="font-style: italic;" href="http://ernstdehaan.blogspot.com/2008/01/xins-splitting-out-logdochttpwwwblogger.html"&gt;XINS: Splitting out Logdoc?&lt;/a&gt;&lt;span style="font-style: italic;"&gt;"&lt;/span&gt;&lt;hr /&gt;&lt;a href="http://www.xins.org/"&gt;XINS&lt;/a&gt; is a powerful technology for writing web applications and web services. While the current 2.1 version already sports a lot of functionality and flexibility, here's my wishlist for a 3.0 version:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Support for Java 5 &lt;span style="font-weight: bold;"&gt;generics&lt;/span&gt;. If this will make the framework Java 5+ only, so be it.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Support for &lt;span style="font-weight: bold;"&gt;XML-type parameters&lt;/span&gt;, both in and out.&lt;/li&gt;&lt;li&gt;A &lt;span style="font-weight: bold;"&gt;XINS service caller engine&lt;/span&gt;; a separation between the &lt;tt&gt;&lt;a href="http://xins.sourceforge.net/javadoc/latest/org/xins/client/XINSServiceCaller.html"&gt;XINSServiceCaller&lt;/a&gt;&lt;/tt&gt; and the actual protocol used, possibly with a (static, non-final) inner class &lt;tt&gt;Engine&lt;/tt&gt;.&lt;/li&gt;&lt;li&gt;Provide an &lt;span style="font-weight: bold;"&gt;alternative front-end&lt;/span&gt; calling convention that sports clear URLs, path-based instead of parameter-based.&lt;/li&gt;&lt;li&gt;Combine &lt;span style="font-weight: bold;"&gt;multiple function invocations in one call&lt;/span&gt;, avoiding the network overhead of multiple calls.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Multi-implementations&lt;/span&gt;: Allow a single API implementation to implement multiple API interfaces.&lt;/li&gt;&lt;li&gt;Allow &lt;span style="font-weight: bold;"&gt;API inheritance&lt;/span&gt;, so that one API can inherit the functions defined in another.&lt;/li&gt;&lt;li&gt;After some thorough analysis, apply some &lt;span style="font-weight: bold;"&gt;secure defaults&lt;/span&gt;. E.g. only allow metafunctions to be called from localhost.&lt;/li&gt;&lt;li&gt;An &lt;span style="font-weight: bold;"&gt;SMTP caller&lt;/span&gt; that supports load-balancing and fail-over (see &lt;a href="https://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1859843&amp;amp;group_id=71598&amp;amp;atid=531817"&gt;RFE 1859843&lt;/a&gt;).&lt;/li&gt;&lt;li&gt;A similar &lt;span style="font-weight: bold;"&gt;SMS caller&lt;/span&gt; (see &lt;a href="https://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1864427&amp;amp;group_id=71598&amp;amp;atid=531817"&gt;RFE 1864472&lt;/a&gt;) that allows the sending of SMSes via different gateways.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;See also:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://sourceforge.net/tracker/?group_id=71598&amp;amp;atid=531817"&gt;XINS RFE list&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Updated December 20, 2007: Added #5, #6 and #7.&lt;br /&gt;Updated December 24, 2007: Added #8.&lt;br /&gt;Updated January 5, 2008: Added #9 and #10.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18813684-8689580227368068381?l=ernstdehaan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ernstdehaan.blogspot.com/feeds/8689580227368068381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ernstdehaan.blogspot.com/2007/11/xins-30.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8689580227368068381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18813684/posts/default/8689580227368068381'/><link rel='alternate' type='text/html' href='http://ernstdehaan.blogspot.com/2007/11/xins-30.html' title='XINS 3.0 (updated x3)'/><author><name>Ernst de Haan</name><uri>http://www.blogger.com/profile/15780623249185165261</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
