<?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-7012742729372608936</id><updated>2011-12-10T16:17:21.933+01:00</updated><category term='visual studio'/><category term='mail'/><category term='gta'/><category term='photo'/><category term='ubuntu jauntyjackalope eclipse subclipse'/><category term='eclipsecon'/><category term='git'/><category term='programming'/><category term='build system'/><category term='tv'/><category term='eclipse'/><category term='heroes'/><category term='gaming'/><category term='gui'/><category term='whining'/><category term='hardware'/><title type='text'>This is not a programmer's blog.</title><subtitle type='html'>Computers, technology, games. And other ramblings. And sometimes in Swedish.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>97</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-776085142442237718</id><published>2011-10-22T17:33:00.003+01:00</published><updated>2011-10-22T17:56:00.752+01:00</updated><title type='text'>AmigaOS refuses to die</title><content type='html'>I was an avid AmigaOS user in the early 90s, but my Amiga has been collecting dust in the attic for the last 15 years or so. But its fun to see that AmigaOS is not quite dead yet. AmigaOS 4.1 is available from &lt;a href="http://www.amigaos.net/"&gt;http://www.amigaos.net/&lt;/a&gt;, and Hyperion seems to be putting out updates on a fairly regular basis.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-6SR6wvStqHw/TqLzGcFuuII/AAAAAAAAB3Q/3JVPrpeR_5M/s1600/amigaone_x1000_case_sm.jpg.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 175px; height: 135px;" src="http://4.bp.blogspot.com/-6SR6wvStqHw/TqLzGcFuuII/AAAAAAAAB3Q/3JVPrpeR_5M/s400/amigaone_x1000_case_sm.jpg.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5666358573130496130" /&gt;&lt;/a&gt;&lt;br /&gt;But it is sad to see that Hyperion doesn't realize that for desktop computing, x86 is the only relevant hardware platform today. As long as they limit themselves to PowerPC, they will never reach other users than the old hardcore Amiga fans from the 90s -- I will simply not purchase a separate piece of pretty expensive hardware from some obscure online store in Germany for my already crowded desk just to be able to run an OS which was cool 20 years ago.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-776085142442237718?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/776085142442237718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=776085142442237718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/776085142442237718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/776085142442237718'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2011/10/amigaos-refuses-to-die.html' title='AmigaOS refuses to die'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-6SR6wvStqHw/TqLzGcFuuII/AAAAAAAAB3Q/3JVPrpeR_5M/s72-c/amigaone_x1000_case_sm.jpg.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-7892823156520537827</id><published>2011-09-21T11:40:00.004+01:00</published><updated>2011-09-23T07:37:22.666+01:00</updated><title type='text'>Eclipse sucks. Or does it?</title><content type='html'>I stumbled across this long-running blog-post about people complaining about Eclipse. Pretty fun to read actually: &lt;a href="http://techdetails.agwego.com/2007/02/23/121/"&gt;http://techdetails.agwego.com/2007/02/23/121/&lt;/a&gt;. Lots of the comments are your regular aggressive internet trolls and other people venting their frustration, but there are some gold comments in there:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;"It is like a sweet cherub that lures you in with kind smiles and a gentle touch, AND THEN, when you want to do something out of its little box of gay baby tricks, it turns into devil spawn, with the wrath of all injustice ever served, it sucks your soul dry, and makes everything black and death and hate and pain. DO NOT USE THIS SOFTWARE. You have been warned."&lt;br /&gt;&lt;li&gt;"I look back on the time I used eclipse and a dark shadow falls upon my whole being. I can see now that it was some twisted mind f*ck that I will never understand the extent of the evil behind. It is a darker, more spirited and intent evil than any else i know of on Earth. At the time of using Eclipse, its power blocked all light and i could see only darkness, a deep desperate hole that the Eclipse designers and engineers had constructed so perfectly there seemed to be no seam; no way out. I can now see past it. To all other developers that find themselves in the depths of despair that Eclipse will bring you, I offer you only solace: if you have any human soul you will defeat the dark, dark evil that lies in the lines of code of this devil-sent tool. Find the strength to defeat this great evil. Developers everywhere require it of you."&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;I think Bjarne Stoustrop said (about C++) that &lt;i&gt;There are two kinds of programming languages: The kind everyone complains about, and the kind no one uses. &lt;/i&gt;This is true for Eclipse as well. For any piece of software in widespread use, you can find a number of people who think that it is a piece of shit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-7892823156520537827?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/7892823156520537827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=7892823156520537827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7892823156520537827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7892823156520537827'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2011/09/eclipse-sucks-or-does-it.html' title='Eclipse sucks. Or does it?'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-7033935282394129343</id><published>2010-08-25T17:54:00.006+01:00</published><updated>2010-08-25T20:23:53.297+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Using git-svn for cross-platform development</title><content type='html'>I do a lot of cross-platform development, mostly Windows and Linux. Being able to build and test on multiple platforms before pushing changes to other people is crucial in order to avoid build and test failures. Git is almost the ideal tool to do this, but since we are using Subversion at work (that won't change in the forseeable future), I've been trying out git-svn to see if it is up to the task.&lt;br /&gt;&lt;br /&gt;A typical work-flow goes like this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Update local source tree with new changes from central repository&lt;/li&gt;&lt;li&gt;... hack hack ...&lt;/li&gt;&lt;li&gt;Build and test on Linux&lt;/li&gt;&lt;li&gt;Transfer local changes to a Windows machine&lt;/li&gt;&lt;li&gt;Build and test on Windows machine&lt;/li&gt;&lt;li&gt;Fix problem which only shows up on Windows&lt;/li&gt;&lt;li&gt;Transfer changes back to Linux machine &lt;/li&gt;&lt;li&gt;Commit all changes to central repository, confident that everything builds and runs on both Linux and Windows.&lt;/li&gt;&lt;/ol&gt;The tricky parts are the "transfer changes from machine A to machine B" without committing to the central repository. I've tried several solutions to this (source code on a network share, "manually" copying the sources (for various values of "manually")), but none of them really flew. I always ended up committing to the central repo anyway. Fortunately we have a fairly low-traffic repo, and I can usually fix broken things before breaking anyone elses build.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(For the rest of this post, I'm ignoring Subversion branches, even if git-svn does handle Subversion branches as well as could be expected.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, using git-svn isn't completely unproblematic either. In an ideal world, I would like to be able to both push and pull to/from the central repo from both machines A and B as well as push/pull between them, but git-svn does not support that. The translation of git commits and their Subversion counterparts has to be done in a single place, or havoc will ensue. In practise, this means that we have a single repo where we run git-svn. This repo can be pulled from, but should not be pushed to (or git-svn will get confused when trying to pull new changes from the central Subversion repo), nor should we pull from any other repo into it. The exact reasons for this is the topic for another post.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;How do we then get our changes back into the git-svn repo if we cannot push or pull into it? The solution is to use the command "git format-patch". This command creates a patch-set containing a set of changes. "git format-patch origin" will create a patch for all changes present in the local repo, which is not present in the "origin" remote, so if I on the Windows box pull from the Linux machine, I can do "git format-patch origin" to get all the local commits I've made which I need to apply to the repo on the Linux machine (the git-svn repo) and from there committed to the central Subversion repo. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once the patches have been transferred to the Linux machine (this can be done in many ways, I just copy the .patch files over a network share), they can be applied using "git am *.patch". This will apply the patches and commit the change. Conflicts are resolved just as normal git conflicts.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The workflow then becomes:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Bring in new changes from the central Subversion repo: git svn rebase&lt;/li&gt;&lt;li&gt;... hack hack ...&lt;/li&gt;&lt;li&gt;Pull changes to Windows machine: git pull&lt;/li&gt;&lt;li&gt;Build and test on Windows&lt;/li&gt;&lt;li&gt;Fix eventual problems on Windows&lt;/li&gt;&lt;li&gt;Generate patch set to bring back changes to Linux: git format-patch origin&lt;/li&gt;&lt;li&gt;Copy patch files back to Linux&lt;/li&gt;&lt;li&gt;Apply changes: git am *.patch&lt;/li&gt;&lt;li&gt;Commit things back to Subversion: git svn dcommit&lt;/li&gt;&lt;/ol&gt;It is still a bit cumbersome, but the benefits are several:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;I can produce commits which I have tested on both Windows and Linux.&lt;/li&gt;&lt;li&gt;I can use "git rebase -i" to edit/reorder the commits before finally pushing them to Subversion. This makes it easy to produce clear and concise commits.&lt;/li&gt;&lt;li&gt;I can use "git gui" to commit partial files. I can include a single added line from a file with hundreds of other changes in it. This also helps in produce commits which are easy to understand.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;In short, git and git-svn allows me to &lt;i&gt;write better code.&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-7033935282394129343?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/7033935282394129343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=7033935282394129343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7033935282394129343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7033935282394129343'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2010/08/using-git-svn-for-cross-platform.html' title='Using git-svn for cross-platform development'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-5355735599548884379</id><published>2010-05-19T20:15:00.004+01:00</published><updated>2010-05-19T20:56:57.432+01:00</updated><title type='text'>Resistance is futile. You will be simulated.</title><content type='html'>&lt;span style="font-style:italic;"&gt;Resistance is futile. You will be simulated.&lt;/span&gt; was the text printed (using a &lt;a href="http://www.talshiar.org/Fonts/StarDown.ttf"&gt;Star Trek font&lt;/a&gt;) on a limited number of t-shirts we had printed when I worked at &lt;a href="http://www.virtutech.com/"&gt;Virtutech&lt;/a&gt;. The simulator is called Simics, and is a full-system simulator capable of simulator entire computer systems with sufficient fidelity that the simulated software is not aware that it is being simulated.&lt;br /&gt;&lt;br /&gt;Raymond Chen recently posted an entry on his excellent &lt;a href="http://blogs.msdn.com/oldnewthing/"&gt;The Old New Thing&lt;/a&gt; blog, titled &lt;a href="http://blogs.msdn.com/oldnewthing/"&gt;If you can detect the difference between an emulator and the real thing, then the emulator has failed&lt;/a&gt;. This made remember a fun challenge once held at a party at Virtutech after I had left the company (I don't remember the occasion). There were two black screens displaying a Linux command prompt. One of the screens was connected to a physical PowerPC board, and the other was connected to a simulated PowerPC board. The task was then to decide, using the only the command lines of the two machines, which machine was simulated and which one was not.&lt;br /&gt;&lt;br /&gt;Doing "cat /proc/cpuinfo" only revealed that both systems where running on PowerPC hardware (the output was different, but then only the people setting up the challenge new exactly which PowerPC hardware was being used), and the simulation was fast enough to not reveal anything performance wise. Now, I happened to have some insider info allowing me to solve the problem: Simics does not (or did not then) have any USB-support, which meant that the "lsusb" command should provide some crucial hints. Quite correctly, the simulated machine did not have any USB-devices, while the real hardware had a number of USB-related devices. I'm not sure if I won the challenge or not, but I remember a bunch of people standing around the terminal discussing different ways of beating the system.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-5355735599548884379?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/5355735599548884379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=5355735599548884379' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5355735599548884379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5355735599548884379'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2010/05/resistance-is-futile-you-will-be.html' title='Resistance is futile. You will be simulated.'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-153634034603759553</id><published>2010-05-16T19:36:00.001+01:00</published><updated>2010-05-16T19:36:16.682+01:00</updated><title type='text'>Egit</title><content type='html'>I have a hobby programming project I work  on from time to time. The goal is to implement a JVM (or something resembling one). It will most certainly never be completed, but it is fun to work on it. &lt;br /&gt;&lt;br /&gt;One thing I've used it for is to learn and experiment with git in a way were I don't risk breaking things for other people.&lt;br /&gt;&lt;br /&gt;Git's command line interface is as impressive as they come, but since I've used Eclipse CDT for writing the code, I wanted to try Egit. Also, since git is on it's way to replace cvs at Eclipse, I thought it would good to know. &lt;br /&gt;&lt;br /&gt;The general impression about Egit is that it is pretty solid, but a few areas needs polishing, for example, there's no easy equivalent to "git pull". The "fetch from" command gives me a big dialog with no sensible defaults. A lot of thought has been put into the command line interface, and creating a GUI with the same expressiveness is not done overnight.   &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- Posted using BlogPress from my iPhone&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-153634034603759553?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/153634034603759553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=153634034603759553' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/153634034603759553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/153634034603759553'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2010/05/egit.html' title='Egit'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-5695337218786701931</id><published>2010-04-07T06:36:00.002+01:00</published><updated>2010-04-07T06:44:43.307+01:00</updated><title type='text'>Error recovery features in Clang</title><content type='html'>&lt;div&gt;Came across this blogpost about the cool clang error recovery features:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://blog.llvm.org/2010/04/amazing-feats-of-clang-error-recovery.html"&gt;http://blog.llvm.org/2010/04/amazing-feats-of-clang-error-recovery.html&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Clang really goes "above and beyond the call of duty" to deliver good error messages. For example, it has a built-in spell-checker, so that if you type "int64" instead of "int64_t", it will actually point that out. It also detects source code conflict markers, and only parse one side of it (failing of course, but without attempting to parse the conflict markers). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is probably very true:&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;a href="http://blog.llvm.org/2010/04/amazing-feats-of-clang-error-recovery.html"&gt;&lt;/a&gt;&lt;i&gt;It's sad but true that being an experienced C++ programmer really means that you're adept at decyphering the error messages that your compiler spews at you.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;/blockquote&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/7012742729372608936-5695337218786701931?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/5695337218786701931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=5695337218786701931' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5695337218786701931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5695337218786701931'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2010/04/error-recovery-features-in-clang.html' title='Error recovery features in Clang'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-3074630298893125550</id><published>2010-03-29T09:37:00.003+01:00</published><updated>2010-03-29T09:46:41.873+01:00</updated><title type='text'>New keyboard</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://a248.e.akamai.net/7/248/2041/1677/as-images.apple.com/is/image/AppleInc/MB869LL?wid=326&amp;amp;hei=326&amp;amp;fmt=jpeg&amp;amp;qlt=95&amp;amp;op_sharpen=0&amp;amp;resMode=bicub&amp;amp;op_usm=0.5,0.5,0,0&amp;amp;iccEmbed=0&amp;amp;layer=comp"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 326px; height: 326px;" src="http://a248.e.akamai.net/7/248/2041/1677/as-images.apple.com/is/image/AppleInc/MB869LL?wid=326&amp;amp;hei=326&amp;amp;fmt=jpeg&amp;amp;qlt=95&amp;amp;op_sharpen=0&amp;amp;resMode=bicub&amp;amp;op_usm=0.5,0.5,0,0&amp;amp;iccEmbed=0&amp;amp;layer=comp" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;While at EclipseCon, I visited the Apple Store at the Valley Fair Mall, and bought an &lt;a href="http://store.apple.com/us/product/MB869LL/A?fnode=MTY1NDA1Mg&amp;amp;mco=MTA4Mzc5NDY"&gt;Apple Keyboard&lt;/a&gt;. Very nice and clean keyboard which frees up quite a bit of space on my desk.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Setting it up wasn't really that difficult, but in order to be able to access keys like &lt;i&gt;forward delete&lt;/i&gt; and &lt;i&gt;page-up &lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;/page-down, &lt;/i&gt;I had to install the boot-camp drivers. &lt;a href="http://superuser.com/questions/88912/does-apple-magic-mouse-fully-work-on-windows-7-x86-x64"&gt;This question&lt;/a&gt; on &lt;a href="http://superuser.com/"&gt;Superuser.com&lt;/a&gt; proved useful in order to find the drivers. Now I just need to train my fingers a little to avoid pressing Fn instead of Control.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Highly recommended keyboard. If you can't live without the numerical keyboard, I recommend that you buy &lt;a href="http://store.apple.com/us/product/MB110LL/A?fnode=MTY1NDA1Mg&amp;amp;mco=MTA4Mzc4ODA"&gt;this one&lt;/a&gt; instead.&lt;/div&gt;&lt;div&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/7012742729372608936-3074630298893125550?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/3074630298893125550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=3074630298893125550' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3074630298893125550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3074630298893125550'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2010/03/new-keyboard.html' title='New keyboard'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-3407614998210178739</id><published>2010-03-19T23:04:00.002+01:00</published><updated>2010-03-19T23:09:34.634+01:00</updated><title type='text'>EclipseCon 2010</title><content type='html'>I'm leaving for EclipseCon 2010 tomorrow morning. Looking forward to an interesting week, and hopefully some SF sightseeing as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-3407614998210178739?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/3407614998210178739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=3407614998210178739' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3407614998210178739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3407614998210178739'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2010/03/eclipsecon-2010.html' title='EclipseCon 2010'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-2888067930982293764</id><published>2009-10-25T23:14:00.003+01:00</published><updated>2009-10-25T23:16:12.884+01:00</updated><title type='text'>Debugging parallell code using a simulator</title><content type='html'>&lt;a href="http://jakob.engbloms.se/archives/975?owa_from=feed&amp;amp;owa_sid="&gt;Excellent article&lt;/a&gt; about tracking down a particularly nasty concurrency code using &lt;a href="http://www.virtutech.com/"&gt;Simics&lt;/a&gt;, by &lt;a href="http://www.engbloms.se/"&gt;Jakob Engblom&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-2888067930982293764?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/2888067930982293764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=2888067930982293764' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2888067930982293764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2888067930982293764'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/10/debugging-parallell-code-using.html' title='Debugging parallell code using a simulator'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-11739610770445939</id><published>2009-10-03T18:05:00.004+01:00</published><updated>2009-10-03T19:10:26.957+01:00</updated><title type='text'>Windows 7</title><content type='html'>I recently got a new laptop at work (an &lt;a href="http://www.google.se/search?q=hp6930p+notebook"&gt;HP 6930p&lt;/a&gt;) which I'm very happy with. The harddrive was blank (presumably because I ordered a 250GB instead of the standard 160GB), so I had a good opportunity to skip Vista and install Windows 7 directly. Since it had 4GB I installed the 64-bit version (Enterprise), and the overall experience is pretty good. One thing I am really impressed with is the 32-bit compatibility on 64-bit Windows. The details may be gory, but the bottom line is that there is really no reason whatsoever to take the 64-bit Windows if you have 4GB or more.&lt;br /&gt;&lt;br /&gt;Performance-wise I don't want to say anything for a year or so when Windows-machines usually start to get bogged down, but feature-wise there are quite a few goodies in there. Here are some of my favorites:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The new dock-like taskbar.&lt;/li&gt;&lt;li&gt;The window-management shortcuts (window movement/maximizing), taskbar navigation.&lt;/li&gt;&lt;li&gt;Notification icon cleanup.&lt;/li&gt;&lt;/ul&gt;But of course, there are areas which Microsoft has forgotten about completely and which basically have not gotten any attention since Windows 2000:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Environment variable setup. WTF!? Why can I at least get a &lt;span style="font-weight: bold;"&gt;multiline&lt;/span&gt;-control for editing values?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The Windows console. Resizing? Copy/paste? Tabs? The list of missing features is endless.&lt;/li&gt;&lt;/ul&gt;I'm normally a Linux-guy, but nowadays I'm doing so much work in Eclipse that the operating system really doesn't matter too much. Also, requirements at work make it difficult for me to use Linux at work, so the last months I've worked completely in Windows. And Windows 7 is definitely a big improvement over both XP and Vista.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-11739610770445939?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/11739610770445939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=11739610770445939' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/11739610770445939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/11739610770445939'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/10/windows-7.html' title='Windows 7'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-2310408120519892737</id><published>2009-08-14T07:10:00.003+01:00</published><updated>2009-08-14T07:44:46.132+01:00</updated><title type='text'>Top things I miss when going from Eclipse JDT to Visual Studio C++</title><content type='html'>I recently dived into Visual Studio to do some C++ hacking after several months of doing mostly Java in Eclipse, and discovered a few items which I really miss.&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Hot code replacement. This is &lt;b&gt;really&lt;/b&gt; addictive in Eclipse: I set a breakpoint in a function, edit the code around it. After saving, the code in the debugged JVM is replaced and PC is reset to the start of the function. The other day I got annoyed when this didn't work (I changed the class' external signature), and I actually had to restart the debug session. Oh no!&lt;/li&gt;&lt;li&gt;Drop-to-frame. I can at any time reset the execution state to a frame further down on the stack and rerun from there.&lt;/li&gt;&lt;li&gt;Automatic code formatting. In Eclipse I have function "format entire source file on save" switched on, basically letting the editor do all the formatting for me. It even does line-wrapping inside comments, something I find very handy. In Visual Studio I have to manually indent each line (well, the indentation level is given automatically), but things like line-wrapping I have to do manually. &lt;/li&gt;&lt;li&gt;Incremental background compilation. I can sit several seconds waiting for the code to build before I realize that I need to start the build manually. (You also have to &lt;b&gt;save&lt;/b&gt; your code before you can get any sort of feedback from the compiler.)&lt;/li&gt;&lt;li&gt;The "open type" and "open resource" commands. "Open type" allows me to interactively search for a class and jump to it. Visual Studio has a similar search, but I often get multiple matches and need to think about which match I'm actually interested in. "Open resource" does the same thing, but searches for files in the workspace. Visual Studio only gives me the regular Open File dialog, which is useless since I first need to locate the directory the file is in.&lt;/li&gt;&lt;li&gt;Red squiggles for errors. Compilation errors are indicated as a tiny line in the margin, instead of a red squiggle in the code.&lt;/li&gt;&lt;li&gt;The Emacs-bindings in Visual Studio are much crappier than in Eclipse. The most annoying part is that TAB doesn't indent an empty line, so you have to start your line at column zero, and not until you've written at least one character can you indent the line. (The Emacs-bindings in Eclipse aren't perfect either, I especially miss the kill-ring).&lt;/li&gt;&lt;/ul&gt;I realize that several of these issues are very difficult to get right in a C++ IDE (hot code replacement and drop-to-frame, for example), or completely subjective (I don't really expect Microsoft to spend a lot of time getting Emacs-binding completely right; I'm actually very happy that there are Emacs bindings at all).&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/7012742729372608936-2310408120519892737?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/2310408120519892737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=2310408120519892737' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2310408120519892737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2310408120519892737'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/08/top-things-i-miss-when-going-from.html' title='Top things I miss when going from Eclipse JDT to Visual Studio C++'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-135931057149491158</id><published>2009-08-11T09:34:00.002+01:00</published><updated>2009-08-11T09:57:15.864+01:00</updated><title type='text'>The role of exercise in weight loss</title><content type='html'>I've recently lost a bit of weight by using a controlled diet. By writing down everything I eat (using the Weight Watcher's point system) I managed to lose around 18 kg in around 30 weeks, getting me down from 105 kg to a considerably healthier 87, where I've stayed now for a while. I can now run without breaking my knees, and my current personal record over 10km is under 54 minutes. Using a pulse-meter I've also been able to keep a decent track of calories spent while exercising.&lt;br /&gt;&lt;br /&gt;One of the revelations I got when starting to document how much I ate (calories or weight-watcher points, it doesn't really matter), is that exercise does not really matter when losing weight. First, if you're 20 kg overweight like I was, chances are that you're overeating with at least a day or two worth of food per week. A pizza easily covers 80-100% of your recommended calorie intake per day. To balance one day worth of calories, you will need at a significant amount of intensive exercise. Going swimming or running 30 minutes twice a week will not help.&lt;br /&gt;&lt;br /&gt;According to the article &lt;a href="http://www.time.com/time/health/article/0,8599,1914857,00.html"&gt;Why Exercise Won't Make You Thin&lt;/a&gt;, exercise will also stimulate hunger, causing you to eat more. (It certainly does for me; I ofter food-hallucinate when I'm running.)&lt;br /&gt;&lt;br /&gt;So, while exercising is a good idea for most people, don't expect to lose any weight unless you also change what you eat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-135931057149491158?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/135931057149491158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=135931057149491158' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/135931057149491158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/135931057149491158'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/08/role-of-exercise-in-weight-loss.html' title='The role of exercise in weight loss'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-4541833427233468601</id><published>2009-07-07T13:02:00.002+01:00</published><updated>2009-07-07T13:16:26.165+01:00</updated><title type='text'>Mobile broadband in Ubuntu Jaunty</title><content type='html'>Writing using mobile broadband in the archipelago outside Stockholm...&lt;br /&gt;&lt;br /&gt;Getting the broadband dongle from &lt;a href="http://tre.se"&gt;3&lt;/a&gt; to work, I braced myself for an afternoon of twiddling around. To my surprise it actually worked directly out of the box. Well, almost. The dongle wasn't recognized directly when inserted, but had to be manually added in the Network Manager. This was really easy; I just selected "3 (Bredband)" in the wizard, and typed in the PIN code when asked to. After that, everything worked. (Not too good bandwidth though, but I can live with that.)&lt;br /&gt;&lt;br /&gt;This actually makes it even easier to use from Linux than from Windows, where you need to install a special client application, manually start the client application, enter the PIN, and connect to the network.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-4541833427233468601?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/4541833427233468601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=4541833427233468601' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/4541833427233468601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/4541833427233468601'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/07/mobile-broadband-in-ubuntu-jaunty.html' title='Mobile broadband in Ubuntu Jaunty'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-3105977254383783256</id><published>2009-07-06T08:18:00.002+01:00</published><updated>2009-07-06T08:28:27.843+01:00</updated><title type='text'>Broken sector</title><content type='html'>I seem to have bad karma when it comes to harddrives. The upside is that I've become very paranoid about having proper backups on all my data. Last week, just before leaving town for a week, my primary harddrive on my &lt;a href="http://thisisnotaprogrammersblog.blogspot.com/2009/04/christmas.html"&gt;new computer&lt;/a&gt; started getting bad sectors. Running chkdsk seems to have fixed the problem, though. But I'm wondering what I'm doing wrong. I've got a stack of three harddrives standing on my desk in various stages of brokenness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-3105977254383783256?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/3105977254383783256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=3105977254383783256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3105977254383783256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3105977254383783256'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/07/broken-sector.html' title='Broken sector'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-1265440175563792757</id><published>2009-06-25T09:27:00.001+01:00</published><updated>2009-06-25T09:28:51.118+01:00</updated><title type='text'>Eclipse 3.5</title><content type='html'>Eclipse 3.5 is finally &lt;a href="http://eclipse.org/"&gt;out&lt;/a&gt;. Just in time for my vacation... :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-1265440175563792757?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/1265440175563792757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=1265440175563792757' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1265440175563792757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1265440175563792757'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/06/eclipse-35.html' title='Eclipse 3.5'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-2924951936190031844</id><published>2009-06-23T06:40:00.002+01:00</published><updated>2009-06-23T06:42:48.459+01:00</updated><title type='text'>TF2 + AFV == funny</title><content type='html'>I haven't laughed this hard at a video clip for a long time: &lt;a href="http://www.youtube.com/watch?v=639y7fweUBg"&gt;World of Crashes - TF2 Style&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-2924951936190031844?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/2924951936190031844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=2924951936190031844' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2924951936190031844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2924951936190031844'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/06/tf2-afv-funny.html' title='TF2 + AFV == funny'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-5308894502278802273</id><published>2009-06-17T08:59:00.003+01:00</published><updated>2009-06-21T22:30:53.482+01:00</updated><title type='text'>nView slowdown</title><content type='html'>I've experienced some serious UI performance issues on my Windows XP workstation lately. Programs like Eclipse, Safari, have been excruciatingly slow. In particular, some string entry boxes in the Eclipse launch configuration dialog have been so slow that they only manage to echo 2-3 characters per second. Something was seriously wrong, and it didn't seem fair to blame Eclipse or Safari without some investigating.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To get some idea of what the processes were doing, I used &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx"&gt;Process Monitor&lt;/a&gt;, and added a filter to show only activities from "eclipse.exe". Collecting data from 15 seconds and typing some data in a file generated 12629 events (842 events/sec). 11304 of these (89%) were registry calls to &lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;HKLM\SOFTWARE\NVIDIA Corporation\Global\NVTweak\DisableWindowCaching&lt;/span&gt;&lt;/b&gt;. WTF?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Googling around a little proved that I'm not alone. Some related links:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"   style="  white-space: pre; font-family:Tahoma;font-size:12px;"&gt;&lt;a href="http://www.tech-archive.net/Archive/VB/microsoft.public.vb.general.discussion/2007-10/msg01176.html"&gt;http://www.tech-archive.net/Archive/VB/microsoft.public.vb.general.discussion/2007-10/msg01176.html&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"   style="font-family:Tahoma, fantasy;font-size:100%;"&gt;&lt;span class="Apple-style-span"  style=" white-space: pre;font-size:12px;"&gt;&lt;span class="Apple-style-span"  style="font-family:Tahoma;"&gt;&lt;a href="http://forums.nvidia.com/lofiversion/index.php?t48735.html"&gt;http://forums.nvidia.com/lofiversion/index.php?t48735.html&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"   style="font-family:Tahoma, -webkit-fantasy;font-size:100%;"&gt;&lt;span class="Apple-style-span"  style=" white-space: pre;font-size:12px;"&gt;&lt;span class="Apple-style-span"  style="font-family:Tahoma;"&gt;&lt;a href="http://winhlp.com/node/188"&gt;http://winhlp.com/node/188&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"   style="font-family:Tahoma, -webkit-fantasy;font-size:100%;"&gt;&lt;span class="Apple-style-span"  style=" white-space: pre;font-size:12px;"&gt;&lt;span class="Apple-style-span"  style="font-family:Tahoma;"&gt;&lt;a href="http://social.expression.microsoft.com/Forums/en-US/web/thread/f99c5e4f-20f9-47fa-8e99-93e943df62a1"&gt;http://social.expression.microsoft.com/Forums/en-US/web/thread/f99c5e4f-20f9-47fa-8e99-93e943df62a1&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;I solved the problem by creating the registry key with a DWORD value of 0. Now everything goes much faster...&lt;/div&gt;&lt;div&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/7012742729372608936-5308894502278802273?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/5308894502278802273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=5308894502278802273' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5308894502278802273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5308894502278802273'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/06/nview-slowdown.html' title='nView slowdown'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-5052980604972550056</id><published>2009-06-11T21:58:00.002+01:00</published><updated>2009-06-11T22:38:23.431+01:00</updated><title type='text'>Terminator Salvation</title><content type='html'>So, I finished playing through Terminator Salvation. This was one of those games that being a Terminator-fan for a long time, I felt that I had to get. To avoid being disappointed by any bad reviews, I bought it and played it without reading any.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The game has two gameplay modes: single player and co-op. I've only tried single-player, in which you play John Connor making his way around Los Angeles shooting at machines, together with several NPCs. The game is played from a third-person perspective, which I'm not too fond of. The game has three levels of difficulty; I played at medium.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lets start with the positive aspects first. The graphics is what you might expect from a game with hardware requirements such as these. The cutscenes are nicely shot with cool camera-focus effects, and the overall environment is impressive. (My HD4870 had no problem running it at 1600x1200 at maximum detail.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The designers have tried to avoid the regular arcade shooting and introduce some tactics by letting the player take cover and move from cover to cover. Some enemies can only take damage from behind, so you will need to move carefully around these enemies. The endo-skeletons carry miniguns which inflict serious damage, so using covers is necessary in order to stay alive. Also, if any endo-skeleton gets to close, it will grab you by the neck and throw you head first into the nearest wall. You can only carry two weapons at a time, so you need to think a little before switching weapons. Weapons and ammunition are rather plenty, even if I ran out of ammo at some places. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are several places where you get to play gunner in a vehicle, but boringly enough you don't get to drive anything (at least in single-player mode). Unfortunately, none of the vehicle parts presents much of a challenge.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Which brings me to what probably bothers me the most with the game. There is really no challenge. I played the game from beginning to end in 5.5 hours (according to Steam), and long sections just felt like transport; another street with endo-skeletons and other enemies which are taken care of by suitable weapons. The "crawl around to shoot the spiders from behind"-routine quickly becomes exactly that, &lt;i&gt;routine. &lt;/i&gt;There are also remarkably few enemy types: Aerostats (small flying things which shoot at you), Spiders (walks around and shoots at you, needs to be taken down from behind), Endo-skeletons (walks around and shoots at you, needs a grenade or rocket launcher to take down), well, that's it. Oh, yes, and some form of driver-less motorbike in some of the vehicle chase scenes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If I pay €40 for a game, I really like it if it lasts more than 5.5 hours. Or at least presents me with a good challenge, or has a intriguing atmosphere or gameplay.  Even Half Life 2: Episode One and Two gave more gameplay for the money, despite that they were pretty short.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Steam's metascore gives 56/100 to Terminator Salvation, which I think is a little on the low side. I give it a 65 for good presentation and some fun arcade shooting.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-5052980604972550056?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/5052980604972550056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=5052980604972550056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5052980604972550056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5052980604972550056'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/06/terminator-salvation.html' title='Terminator Salvation'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-6758266608889167798</id><published>2009-05-22T19:38:00.003+01:00</published><updated>2009-05-22T20:31:51.076+01:00</updated><title type='text'>More blogger.com weirdness</title><content type='html'>I just &lt;a href="http://thisisnotaprogrammersblog.blogspot.com/2009/04/auto-formatting-source-code.html"&gt;published a blog entry&lt;/a&gt; I wrote a couple of weeks ago, but never really finished. I thought the post would be dated when I pressed "Publish Post", but instead it is dated the time the draft was created. Which means that it doesn't show up in the RSS feed. Urg.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;EDIT: Well. Apparently it did show up, but with a longer delay than usual.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-6758266608889167798?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/6758266608889167798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=6758266608889167798' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/6758266608889167798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/6758266608889167798'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/05/more-bloggercom-weirdness.html' title='More blogger.com weirdness'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-4104337924589343612</id><published>2009-05-22T07:45:00.000+01:00</published><updated>2009-05-22T22:06:55.702+01:00</updated><title type='text'>Auto-formatting source code</title><content type='html'>Code formatting is a sensitive subject. There are countless articles, blog posts, and other texts available on the subject. Everyone who's worked with other programmers knows that most programmers have a pretty good idea on how they want their code. Tabs vs spaces, 2/4/8 steps indenting, where to put the braces, etc.&lt;br /&gt;&lt;br /&gt;There are several studies (see &lt;a href="http://www.codinghorror.com/blog/archives/001254.html"&gt;Death to the Space Infidels!&lt;/a&gt; for example) indicating that consistent code formatting improves team productivity. The hypothesis is that it is easier to read and understand code which follow certain rules. Atwood quotes a study on chess-players which compared the ability of remembering the layout of a chess-game. When the pieces were laid out as they might be in a game, the expert's memories were far superior than the novices, but when arranged randomly, there was little difference. The same type of idea seems to hold true for programmers as well.&lt;br /&gt;&lt;br /&gt;I've written quite a lot of Java in Eclipse lately, and have become very fond if the "auto-format on save" feature introduced in Eclipse 3.4 (I think). The idea is that given a fairly detailed set of formatting rules, your editor (Eclipse in this case) formats your code automatically before saving. When I first tried it, I thought that it would be annoying and intrusive, but the feature turned out to be very nice. So nice that now I get annoyed when stuck in an editor which doesn't do this for me.&lt;br /&gt;&lt;br /&gt;I started thinking about it, and realized that code formatting in this respect is a lot like code generation. Source code is just another representation of your program. It is different from the compiled code (or any other representation) because it is intended for human consumption and processing while the compiled code is designed to be executed in hardware. Compiler writers spend lots and lots of time making the compiler generate good code (which usually means "fast", but could also mean "small", or a combination of the two). In the same way, source code needs to be properly formatted for it to be efficient, i.e. easy to read and edit by programmers. This is a task which in very many cases can be automatically handled by the editor (or an add-on program).&lt;br /&gt;&lt;br /&gt;The Java editor in Eclipse does this very well. Compilation and source code formatting is performed incrementally so there is no noticable delay while typing. However, there are a few drawbacks. One problem is with code which is commented out using block comments. Since the editor doesn't recognize it as code, it is formatted as ordinary text, making it unreadable. I usually work around this using "if (false) { … }". The other problem is that the formatter has a few blind spots. Complex boolean expressions are not indented in any structured way, and certain patterns of chained method calls are indented at the line width, instead of aligning. If you use the &lt;i&gt;Builder&lt;/i&gt; design pattern, you'll know what I mean.&lt;br /&gt;&lt;div&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/7012742729372608936-4104337924589343612?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/4104337924589343612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=4104337924589343612' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/4104337924589343612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/4104337924589343612'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/04/auto-formatting-source-code.html' title='Auto-formatting source code'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-1622570085628118692</id><published>2009-05-18T20:37:00.002+01:00</published><updated>2009-05-18T20:55:32.736+01:00</updated><title type='text'>1 hour!</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://2.bp.blogspot.com/_gIwnv8AsteU/ShG47i58GxI/AAAAAAAAA3A/1HSTFeHlHwI/s1600-h/image-upload-267-738765.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_gIwnv8AsteU/ShG47i58GxI/AAAAAAAAA3A/1HSTFeHlHwI/s320/image-upload-267-738765.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span&gt;I finally ran 10 km under an hour, something that I've had as a new years resolution for at least 10 years.&lt;/span&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/7012742729372608936-1622570085628118692?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/1622570085628118692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=1622570085628118692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1622570085628118692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1622570085628118692'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/05/1-hour.html' title='1 hour!'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_gIwnv8AsteU/ShG47i58GxI/AAAAAAAAA3A/1HSTFeHlHwI/s72-c/image-upload-267-738765.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-2947335648595807472</id><published>2009-05-15T09:17:00.003+01:00</published><updated>2009-05-15T09:22:50.622+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu jauntyjackalope eclipse subclipse'/><title type='text'>Eclipse, Subclipse, and Jaunty Jackalope</title><content type='html'>Getting Subclipse 1.6.x to work with Eclipse 3.4.x and Jaunty Jackalope was a little tricky. It turns out that Subclipse 1.6.x is too new for Jaunty, so you &lt;a href="http://www.asgrim.com/2009/05/07/javahl-not-available-solution/"&gt;need to roll your own Subversion/Java bindings&lt;/a&gt;. (Fortunately I already had a colleague at work do that for me).&lt;br /&gt;&lt;br /&gt;The crucial step which is not done automatically is to add the path to the libsvn-javahl-1.so library to the JNI load path. This is done my adding the following line to eclipse.ini, after the "-vmargs" parameter:&lt;br /&gt; &lt;pre&gt;&lt;br /&gt;-vmargs&lt;br /&gt;...&lt;br /&gt;-Djava.library.path=/usr/lib/jni&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-2947335648595807472?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/2947335648595807472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=2947335648595807472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2947335648595807472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2947335648595807472'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/05/eclipse-subclipse-and-jaunty-jackalope.html' title='Eclipse, Subclipse, and Jaunty Jackalope'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-194721483571010761</id><published>2009-05-13T15:35:00.003+01:00</published><updated>2009-05-13T15:41:52.148+01:00</updated><title type='text'>Broken camera</title><content type='html'>The other day I was planning to bring my (and my wife's) Nikon D40 along to take some pictures when I realized that the memory card reader did not lock the SD card properly. Pressing the card in usually locks the card in place, but now it just pops out again. Depressingly enough, the local camera store I went to here in Uppsala wanted 500SEK (~$60) just to send it to the repair shop, and estimated that fixing it would cost at least 1500SEK (~$190).&lt;br /&gt;&lt;br /&gt;Maybe this is a sign from above that I should upgrade to a D60.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-194721483571010761?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/194721483571010761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=194721483571010761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/194721483571010761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/194721483571010761'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/05/broken-camera.html' title='Broken camera'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-6613596408905669650</id><published>2009-05-12T21:19:00.005+01:00</published><updated>2009-05-12T21:27:05.591+01:00</updated><title type='text'>Blog weirdness</title><content type='html'>I had a &lt;a href="http://thisisnotaprogrammersblog.blogspot.com/2009/04/christmas.html"&gt;blogpost "Christmas"&lt;/a&gt; which seemed to have disappeared. It did not show up in my blog archive list, but searching for "Christmas" turned up the post, so where did it go. I changed the blog archive box to use a flat layout, which looked like this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gIwnv8AsteU/SgnamVlcznI/AAAAAAAAA2g/IJu3izFhcCk/s1600-h/blogscrdump1.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 182px; height: 217px;" src="http://1.bp.blogspot.com/_gIwnv8AsteU/SgnamVlcznI/AAAAAAAAA2g/IJu3izFhcCk/s400/blogscrdump1.png" alt="" id="BLOGGER_PHOTO_ID_5335035585761169010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In the blog archive list there are now 2 (!) entries for March:&lt;br /&gt;http://thisisnotaprogrammersblog.blogspot.com/2009_03_01_archive.html, and http://thisisnotaprogrammersblog.blogspot.com/2009_03_31_archive.html.&lt;br /&gt;&lt;br /&gt;Can anyone enlighten me about what's going on?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-6613596408905669650?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/6613596408905669650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=6613596408905669650' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/6613596408905669650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/6613596408905669650'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/05/blog-weirdness.html' title='Blog weirdness'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_gIwnv8AsteU/SgnamVlcznI/AAAAAAAAA2g/IJu3izFhcCk/s72-c/blogscrdump1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-3230268624949535535</id><published>2009-05-08T09:07:00.007+01:00</published><updated>2009-05-12T21:30:04.187+01:00</updated><title type='text'>Getting rid of the mouse</title><content type='html'>I'm making a serious attempt at learning how to use Windows without a mouse, primarily because I feel that moving my hands between the keyboard and the mouse is &lt;span style="font-weight: bold;"&gt;slow&lt;/span&gt;. So, here goes.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;The very first item on the list is to install the &lt;a href="https://addons.mozilla.org/sv-SE/firefox/addon/879"&gt;Mouseless Browsing&lt;/a&gt; add-on (MLB) to Firefox. It adds little numbers to every hyperlink, allowing you to click on any link using a number instead of tabbing.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Know the necessary &lt;a href="http://support.microsoft.com/kb/301583"&gt;windows shortcuts&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I have a multi-monitor setup, so I want a shortcut for moving windows between monitors. Since I have an nVidia graphics card, I can use nVidia's desktop manager to add a shortcut (Alt+` in my case).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Learning Eclipse keyboard navigation. &lt;a href="http://rayfd.wordpress.com/2007/05/20/10-eclipse-navigation-shortcuts-every-java-programmer-should-know/"&gt;10 Eclipse keyboard shortcuts every programmer should know&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I've already discovered problems with several programs. (If I'm wrong, please tell me!)&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.digsby.com/"&gt;Digsby&lt;/a&gt;'s preferences page does not have any support for keyboard navigation.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;WinAmp doesn't have any way of minimizing itself (Alt-F10 does not bring up the window's system menu)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt; preview function is not keyboard accessible, and the HTML compose widget interacts badly with MLB, since the numbers inserted by MLB are kept in the HTML code for the blog post.&lt;/li&gt;&lt;/ul&gt;EDIT: this did not turn out the way I hoped. There are simply too many things which are difficult to navigate by mouse: the windows task bar, quick launch field, and notification icons, Eclipse multi-page editors (plugin manifest editor, product editor, feature editor, update-site editor), etc. MLB was neat, but I think I need to be forced to live without a mouse and suffer a couple of weeks of pain before actually getting used to working without a mouse.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-3230268624949535535?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/3230268624949535535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=3230268624949535535' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3230268624949535535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3230268624949535535'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/05/getting-rid-of-mouse.html' title='Getting rid of the mouse'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-1087073134825844019</id><published>2009-04-29T13:39:00.003+01:00</published><updated>2009-04-29T13:41:29.009+01:00</updated><title type='text'>Jaunty Jackalope</title><content type='html'>I finally got around to upgrade my work laptop to Jaunty Jackalope. Things worked pretty ok, the only snag I found so far was that the ftp.funet.fi mirror was actually missing some packages, causing the update to terminate prematurely.&lt;br /&gt;&lt;br /&gt;I haven't had time to walk around the release that much, but so far, no problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-1087073134825844019?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/1087073134825844019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=1087073134825844019' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1087073134825844019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1087073134825844019'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/04/jaunty-jackalope.html' title='Jaunty Jackalope'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-6661719285669290270</id><published>2009-04-29T13:35:00.002+01:00</published><updated>2009-04-29T13:39:07.339+01:00</updated><title type='text'>Keyboard shortcuts in Outlook</title><content type='html'>Sometimes I end up in Outlook, and I have to navigate around. After taking some time to try to find the most basic keyboard shortcuts (such as moving to the next message), I finally found &lt;a href="http://office.microsoft.com/en-gb/outlook/HP012303961033.aspx"&gt;this link&lt;/a&gt;. Very useful information, but one would think that "move to the next message" would be common enough to warrant its own place in the menus.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-6661719285669290270?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/6661719285669290270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=6661719285669290270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/6661719285669290270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/6661719285669290270'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/04/keyboard-shortcuts-in-outlook.html' title='Keyboard shortcuts in Outlook'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-2236971586469966636</id><published>2009-04-28T18:48:00.001+01:00</published><updated>2009-04-28T18:48:12.538+01:00</updated><title type='text'>Stort hål i marken</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://1.bp.blogspot.com/_gIwnv8AsteU/SfdBXJPjFpI/AAAAAAAAA2Y/6vrLBJ9ql_c/s1600-h/image-upload-458-792116.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_gIwnv8AsteU/SfdBXJPjFpI/AAAAAAAAA2Y/6vrLBJ9ql_c/s320/image-upload-458-792116.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;span/&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/7012742729372608936-2236971586469966636?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/2236971586469966636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=2236971586469966636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2236971586469966636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2236971586469966636'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/04/stort-hal-i-marken.html' title='Stort hål i marken'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_gIwnv8AsteU/SfdBXJPjFpI/AAAAAAAAA2Y/6vrLBJ9ql_c/s72-c/image-upload-458-792116.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-7320021314840077947</id><published>2009-04-28T11:10:00.002+01:00</published><updated>2009-04-28T14:21:08.510+01:00</updated><title type='text'>Resecentrum</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://3.bp.blogspot.com/_gIwnv8AsteU/SfbWB337jfI/AAAAAAAAA2Q/YkORlmnIo6I/s1600-h/image-upload-455-714957.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_gIwnv8AsteU/SfbWB337jfI/AAAAAAAAA2Q/YkORlmnIo6I/s320/image-upload-455-714957.jpg" /&gt;&lt;/a&gt;&lt;span&gt;&lt;br /&gt;Rejält gjutet och armerat.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-7320021314840077947?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/7320021314840077947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=7320021314840077947' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7320021314840077947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7320021314840077947'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/04/resecentrum.html' title='Resecentrum'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_gIwnv8AsteU/SfbWB337jfI/AAAAAAAAA2Q/YkORlmnIo6I/s72-c/image-upload-455-714957.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-4624128037139107076</id><published>2009-04-23T17:11:00.002+01:00</published><updated>2009-04-23T17:57:50.592+01:00</updated><title type='text'>Crane</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://1.bp.blogspot.com/_gIwnv8AsteU/SfCTKlrQ-_I/AAAAAAAAA1A/DgXtKBc7geI/s1600-h/image-upload-146-782235.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_gIwnv8AsteU/SfCTKlrQ-_I/AAAAAAAAA1A/DgXtKBc7geI/s320/image-upload-146-782235.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span&gt;A large mobile crane outside the railway station in Uppsala. It looked larger in real life, though.&lt;/span&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/7012742729372608936-4624128037139107076?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/4624128037139107076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=4624128037139107076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/4624128037139107076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/4624128037139107076'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/04/crane.html' title='Crane'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_gIwnv8AsteU/SfCTKlrQ-_I/AAAAAAAAA1A/DgXtKBc7geI/s72-c/image-upload-146-782235.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-2803293413503450103</id><published>2009-04-23T17:08:00.002+01:00</published><updated>2009-04-23T17:59:11.143+01:00</updated><title type='text'>Märklig dörrskylt</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://3.bp.blogspot.com/_gIwnv8AsteU/SfCSgcbz2SI/AAAAAAAAA04/8G0KGEEOuIc/s1600-h/image-upload-155-713406.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_gIwnv8AsteU/SfCSgcbz2SI/AAAAAAAAA04/8G0KGEEOuIc/s320/image-upload-155-713406.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;Såg den här skylten inne på &lt;a href="http://www.nickis.nu/uppsala.shtml"&gt;Nickis Äventyrslek&lt;/a&gt;. Man undrar ju varför knappen sitter där den sitter...&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-2803293413503450103?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/2803293413503450103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=2803293413503450103' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2803293413503450103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2803293413503450103'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/04/marklig-dorrskylt.html' title='Märklig dörrskylt'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_gIwnv8AsteU/SfCSgcbz2SI/AAAAAAAAA04/8G0KGEEOuIc/s72-c/image-upload-155-713406.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-7673819790788837119</id><published>2009-04-19T17:13:00.002+01:00</published><updated>2009-04-19T21:21:59.831+01:00</updated><title type='text'>Adventures into album covers</title><content type='html'>I've spent several hours trying to complete my music library with the correct album covers, including various tracks I really don't remember where I got. I'm sure some of them are illegally copied from somewhere, but the majority are ripped from physical CDs that I own. (I have a whole bunch of old vinyl albums which I haven't digitalized yet, though.)&lt;br /&gt;&lt;br /&gt;Mp3Tag has been an invaluable help; it can search freedb given a set of tracks, and it can also search Amazon.com. There is also a menu option for searching discogs.com, but that never seems to work. I'm not sure why.&lt;br /&gt;&lt;br /&gt;Several hundred tracks did not have any tag info at all. I had to go purely by file and directory names. Very weird, I'm sure that when I ripped them, they looked good. My programmer brain wanted to start disecting the files to figure out if the files contained any clues to which program I used to rip them, but the rational part of my brain said that that was a waste of time. Which it surely was. I'm still curious about how it really happened. After getting the album and song names correct, Mp3Tag could fix the rest.&lt;br /&gt;&lt;br /&gt;I still have problems with a couple of albums. I borrowed a CD from my sister (which I still think I haven't returned -- I'm sure she's forgotten): "Pops by Gershwin" with John Williams and the Boston Pops Orchestra. I can't find any information about the album at all. Even Google lets me down.&lt;br /&gt;&lt;br /&gt;The OCD part of my brain tells me that I have to keep going until there are no more unknown album covers, while the other not-so-OCD part protests and would rather play another level of GTA:IV. We'll see which part wins.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-7673819790788837119?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/7673819790788837119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=7673819790788837119' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7673819790788837119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7673819790788837119'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/04/adventures-into-album-covers.html' title='Adventures into album covers'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-3358326207797401464</id><published>2009-04-10T19:46:00.002+01:00</published><updated>2009-04-10T19:49:11.426+01:00</updated><title type='text'>How (not) to transport secret documents.</title><content type='html'>&lt;a href="http://www.guardian.co.uk/uk/2009/apr/09/bob-quick-terror-raids-leak#zoomed-picture"&gt;Oops&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-3358326207797401464?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/3358326207797401464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=3358326207797401464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3358326207797401464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3358326207797401464'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/04/how-not-to-transport-secret-documents.html' title='How (not) to transport secret documents.'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-234260107260604158</id><published>2009-04-01T20:53:00.006+01:00</published><updated>2009-05-09T18:05:48.410+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Christmas!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gIwnv8AsteU/SdPKLBf82fI/AAAAAAAAAz4/WQCrUIJZi_E/s1600-h/DSC_0084.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 133px;" src="http://2.bp.blogspot.com/_gIwnv8AsteU/SdPKLBf82fI/AAAAAAAAAz4/WQCrUIJZi_E/s200/DSC_0084.JPG" alt="" id="BLOGGER_PHOTO_ID_5319817875584506354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gIwnv8AsteU/SdPIi7gbu1I/AAAAAAAAAzw/cqKlUwGoP-0/s1600-h/DSC_0080.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 133px;" src="http://4.bp.blogspot.com/_gIwnv8AsteU/SdPIi7gbu1I/AAAAAAAAAzw/cqKlUwGoP-0/s200/DSC_0080.JPG" alt="" id="BLOGGER_PHOTO_ID_5319816087269522258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;New hardware is always fun. My new machine arrived today (well, I had to actually go and pick it up at my &lt;a href="http://eis.nu/"&gt;local computer vendor, EIS&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;I was a little adventurous and installed Vista Home Premium 64-bit. Since the machine has 4GB of RAM, it felt less than optimal just to be able to use 3 of those. Lets see how that turns out.&lt;br /&gt;&lt;br /&gt;The graphics card is a ATI HD4870, which takes up two slots (just one PCIE slot, though), one being used just for the fan and heatpipes. However, I was expecting the box to be full of cables, wiring, etc., but it was surprisingly empty. The cpu and cpu-fan was much smaller than I expected. The included keyboard wasn't too good though. Much too noisy and cheap-plastic feeling. I think I'll switch back to my old and battered HP keyboard.&lt;br /&gt;&lt;br /&gt;The Antec Sonata III chassi is very nice, black and silent. When writing this, I actually cannot determine if the faint humming sound is the ventilation in the room itself or the computer case/graphics card. Excellent!&lt;br /&gt;&lt;br /&gt;So on the list of things to do (after installing Firefox, which is the very first thing I always do on any Windows machine I get my hands on), is:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Set up a backup solution&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Install Steam&lt;/li&gt;&lt;li&gt;Figure out a way to transfer all my old game files (I don't really want to play GTA: San Andreas from scratch)&lt;/li&gt;&lt;li&gt;Restore stuff from my old harddrive&lt;/li&gt;&lt;/ul&gt;And a bunch of other things, but that'll probably be enough for tonight.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-234260107260604158?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/234260107260604158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=234260107260604158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/234260107260604158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/234260107260604158'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/04/christmas.html' title='Christmas!'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_gIwnv8AsteU/SdPKLBf82fI/AAAAAAAAAz4/WQCrUIJZi_E/s72-c/DSC_0084.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-56749259960162399</id><published>2009-03-28T11:23:00.002+01:00</published><updated>2009-03-28T11:42:48.951+01:00</updated><title type='text'>New hardware</title><content type='html'>After my 3 years old PC started &lt;a href="http://thisisnotaprogrammersblog.blogspot.com/2009/01/malfunction.html"&gt;malfunctioning&lt;/a&gt; I decided it was time for an upgrade. I'm not very much of an hardware freak), so I ended up at EIS here in Uppsala ordering a complete PC: &lt;a href="http://www.eis.nu/cgi-bin/eis/eis.cgi?142572311794814=7&amp;amp;10203600"&gt;EIS  XTREME i2 GAMER PLUS E8500, 1TB &amp;amp; HD4870 512MB&lt;/a&gt;, but with a &lt;a href="http://www.antec.com/Believe_it/product.php?id=MjA="&gt;Antec Sonata III chassis&lt;/a&gt;. Should be enough for any household task, such as playing &lt;a href="http://www.rockstargames.com/IV/"&gt;GTA:IV&lt;/a&gt;. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-56749259960162399?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/56749259960162399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=56749259960162399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/56749259960162399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/56749259960162399'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/03/new-hardware.html' title='New hardware'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-3747557290389657473</id><published>2009-01-30T08:49:00.002+01:00</published><updated>2009-01-30T08:59:21.570+01:00</updated><title type='text'>The X-Files Revisited</title><content type='html'>The other day I bought the first season of The X-Files on DVD. I found it at a groceries store for 99:- (ca $14), and having followed almost all episodes when they aired in Sweden I thought it would make for some good nostalgia.&lt;br /&gt;&lt;br /&gt;Quite right. The series started in 1992, 17 years ago. Anyone born then is allowed to take driving lessons now! There were no digital cameras, computer monitors were small, fat, and monochrome (at least in the series) and Gillian Anderson looked like she was barely out of high-school.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-3747557290389657473?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/3747557290389657473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=3747557290389657473' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3747557290389657473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3747557290389657473'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/01/x-files-revisited.html' title='The X-Files Revisited'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-8027524155003112475</id><published>2009-01-29T15:07:00.002+01:00</published><updated>2009-01-29T15:10:14.174+01:00</updated><title type='text'>Infrastructure and terrorists</title><content type='html'>&lt;a href="http://www.schneier.com/blog/archives/2009/01/helping_the_ter.html"&gt;Another excellent article&lt;/a&gt; by Bruce Schneier on the topic of how infrastructure helping terrorists, and why this shouldn't cause us to, for example, &lt;a href="http://technology.timesonline.co.uk/tol/news/tech_and_web/the_web/article5311241.ece"&gt;ban Google Earth&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-8027524155003112475?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/8027524155003112475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=8027524155003112475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8027524155003112475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8027524155003112475'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/01/infrastructure-and-terrorists.html' title='Infrastructure and terrorists'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-5425662946544737293</id><published>2009-01-28T22:26:00.003+01:00</published><updated>2009-01-28T22:43:08.746+01:00</updated><title type='text'>Malfunction</title><content type='html'>It seems that hardware failure is epidemic, and can even spread through human contact. I went &lt;a href="http://david.kagedal.org/2009/01/26/skidor-och-linux/"&gt;with two friends to Kungsberget&lt;/a&gt; this weekend, and apparently David's hardware problem have now infected my machine as well. Not that any of the symptoms are the same, though. Did I say that I ramble sometimes?&lt;br /&gt;&lt;br /&gt;The major issue at the time is that the USB support seems to be shot. I think it started a week or two ago when the machine refused to boot. BIOS complained about "DISK BOOT FAILURE...", and I was getting a little nervous having suffered several harddrive failures recently. Well, I decided to be a little optimistic, and out of a hunch I entered the boot menu and selected the correct harddrive to boot from, and things worked nicely. It seems that suddenly there is a conflict between my external USB backup drive, which was what the machine was trying to boot from. Anyway, I don't reboot very often, so I didn't think more often.&lt;br /&gt;&lt;br /&gt;Yesterday I shut down the machine in order to mount the case on a &lt;a href="http://www.ikea.com/se/sv/catalog/products/50086666"&gt;new set of wheels&lt;/a&gt;, and when I tried to bring it up today, only some USB devices seemed to work. The mouse doesn't work at all (I've tried several different mice), the keyboard works sometimes. My external soundcard also works sometimes.&lt;br /&gt;&lt;br /&gt;These two might be related, but I really have no clue. I don't even know where to start troubleshooting. "usb doesn't work" gives me 27.5 million hits on Google. I think I'll just power down the machine, and hope that things will magically improve tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-5425662946544737293?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/5425662946544737293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=5425662946544737293' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5425662946544737293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5425662946544737293'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/01/malfunction.html' title='Malfunction'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-650697955840000154</id><published>2009-01-20T08:37:00.001+01:00</published><updated>2009-01-20T08:46:54.012+01:00</updated><title type='text'>Red October</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://1.bp.blogspot.com/_j9YEvqsZOd0/SXV_Rf54oRI/AAAAAAAAAAM/a6QkuE3KDYE/s1600-h/image-upload-114-760623.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_j9YEvqsZOd0/SXV_Rf54oRI/AAAAAAAAAAM/a6QkuE3KDYE/s320/image-upload-114-760623.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;span&gt;Here is the painting I won at the art club lottery.&lt;/span&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/7012742729372608936-650697955840000154?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/650697955840000154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=650697955840000154' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/650697955840000154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/650697955840000154'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/01/red-october.html' title='Red October'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_j9YEvqsZOd0/SXV_Rf54oRI/AAAAAAAAAAM/a6QkuE3KDYE/s72-c/image-upload-114-760623.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-8616540227087351015</id><published>2009-01-12T20:45:00.002+01:00</published><updated>2009-01-12T20:49:45.272+01:00</updated><title type='text'>The Big Picture</title><content type='html'>&lt;a href="http://www.boston.com/bigpicture/"&gt;The Big Picture&lt;/a&gt; is a really good photo-blog covering current events. Highly recommended if you like good photography.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-8616540227087351015?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/8616540227087351015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=8616540227087351015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8616540227087351015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8616540227087351015'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/01/big-picture.html' title='The Big Picture'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-2259323624464394617</id><published>2009-01-04T20:03:00.005+01:00</published><updated>2009-01-04T20:13:07.194+01:00</updated><title type='text'>Birthday</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gIwnv8AsteU/SWEKO7Il2MI/AAAAAAAAADA/VcUVZCmnBms/s1600-h/DSC_0028.JPG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 133px;" src="http://4.bp.blogspot.com/_gIwnv8AsteU/SWEKO7Il2MI/AAAAAAAAADA/VcUVZCmnBms/s200/DSC_0028.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5287518689017845954" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gIwnv8AsteU/SWEJtTfrr1I/AAAAAAAAAC4/ThRMzBJR478/s1600-h/DSC_0012.JPG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 133px; height: 200px;" src="http://4.bp.blogspot.com/_gIwnv8AsteU/SWEJtTfrr1I/AAAAAAAAAC4/ThRMzBJR478/s200/DSC_0012.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5287518111441596242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gIwnv8AsteU/SWEIqL2e1hI/AAAAAAAAACw/fuvaqoMd1yk/s1600-h/DSC_0064.JPG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 133px;" src="http://2.bp.blogspot.com/_gIwnv8AsteU/SWEIqL2e1hI/AAAAAAAAACw/fuvaqoMd1yk/s200/DSC_0064.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5287516958338504210" /&gt;&lt;/a&gt;&lt;br /&gt;My birthday this year was unusually cold. It is right now &lt;a href="http://www.temperatur.nu/temperatur-1-0_0_96.html"&gt;-13.5&lt;/a&gt; degrees, but there isn't very much snow. These pictures were taken on New Year's Day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-2259323624464394617?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/2259323624464394617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=2259323624464394617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2259323624464394617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2259323624464394617'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2009/01/birthday.html' title='Birthday'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_gIwnv8AsteU/SWEKO7Il2MI/AAAAAAAAADA/VcUVZCmnBms/s72-c/DSC_0028.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-5067737926901105484</id><published>2008-12-28T12:01:00.003+01:00</published><updated>2008-12-28T12:03:16.529+01:00</updated><title type='text'>World of Goo</title><content type='html'>Just tried out the demo of &lt;a href="http://2dboy.com/games.php"&gt;World of Goo&lt;/a&gt;, a really fun and cheap puzzle game. And to make it all much more fun, its only $20 and is devoid of any form of DRM or copy-protection. Fun, fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-5067737926901105484?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/5067737926901105484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=5067737926901105484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5067737926901105484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5067737926901105484'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/12/world-of-goo.html' title='World of Goo'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-5210647872370493300</id><published>2008-12-25T21:33:00.002+01:00</published><updated>2008-12-25T21:43:42.253+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Git rocks!</title><content type='html'>When I started using Git for my home hacking projects I mostly liked it because it was easy to set up a server via ssh without having to do a full Subversion setup and it was something I wanted to learn. I never really imagined that the distributed stuff would come in handy. Today, the remote machine I usually push/pull against was down, and I needed to sync a bunch of stuff down to my laptop. With Subversion I would have lost; ending up with manually copying files. With Git, it was as easy as&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;laptop$ git clone hacks hacks.git --bare&lt;br /&gt;homepc$ git remote add mylaptop ssh://[user]@[host]/hacks.git&lt;br /&gt;homepc$ git push mylaptop&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Done. Happy, happy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-5210647872370493300?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/5210647872370493300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=5210647872370493300' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5210647872370493300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5210647872370493300'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/12/git-rocks.html' title='Git rocks!'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-6739044427843191585</id><published>2008-11-23T22:33:00.000+01:00</published><updated>2008-11-23T22:34:20.694+01:00</updated><title type='text'>Lego safe</title><content type='html'>Keep your geeky gadgets safe!&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/XjWt4O4bSjQ&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/XjWt4O4bSjQ&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-6739044427843191585?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/6739044427843191585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=6739044427843191585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/6739044427843191585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/6739044427843191585'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/11/lego-safe.html' title='Lego safe'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-3111187741354588211</id><published>2008-11-22T23:15:00.006+01:00</published><updated>2008-12-12T19:03:38.097+01:00</updated><title type='text'>Project Euler, problem 31</title><content type='html'>I solved another Project Euler problem today using constraints. The problem was to figure out how many ways you can combine English coins to form £2. Here's the constraint variant.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;currency(List, Sum) :-&lt;br /&gt;     List = [N1,N2,N5,N10,N20,N50,N100,N200],&lt;br /&gt;     200 #= N1 + N2 * 2 + N5 * 5 + N10 * 10 + N20 * 20 + N50 * 50 + N100 * 100 + N200 * 200,&lt;br /&gt;     N1 #&gt;= 0, N2 #&gt;= 0, N5 #&gt;= 0, N10 #&gt;= 0,&lt;br /&gt;     N20 #&gt;= 0, N50 #&gt;= 0, N100 #&gt;= 0, N200 #&gt;= 0,&lt;br /&gt;     fd_labeling(List).&lt;br /&gt;&lt;br /&gt;ways(Sum, Number) :-&lt;br /&gt;     findall(List, currency(List, Sum), Ways),&lt;br /&gt;     length(Ways).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note that you have to explicitly inform the solver to use 0 or more coins of each denomination.&lt;br /&gt;&lt;br /&gt;Edit: replaced "Sum" with 200 in the currency/2 predicate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-3111187741354588211?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/3111187741354588211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=3111187741354588211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3111187741354588211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3111187741354588211'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/11/project-euler.html' title='Project Euler, problem 31'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-5136917270713818352</id><published>2008-11-12T20:11:00.003+01:00</published><updated>2008-11-12T20:12:44.553+01:00</updated><title type='text'>Ljud och ljusspel i Engelska parken</title><content type='html'>Har ni vägarna förbi Uppsala så måste ni gå och besöka Engelska parken kvällstid nu i november:&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/rV6EkCAjFik&amp;hl=sv&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/rV6EkCAjFik&amp;hl=sv&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-5136917270713818352?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/5136917270713818352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=5136917270713818352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5136917270713818352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5136917270713818352'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/11/ljud-och-ljusspel-i-engelska-parken.html' title='Ljud och ljusspel i Engelska parken'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-3088876575944989165</id><published>2008-11-05T21:46:00.002+01:00</published><updated>2008-11-05T21:48:38.513+01:00</updated><title type='text'>A tribute to John Williams</title><content type='html'>A really impressive four-voice a capella tribute to John Williams:&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/lk5_OSsawz4&amp;hl=sv&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/lk5_OSsawz4&amp;hl=sv&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-3088876575944989165?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/3088876575944989165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=3088876575944989165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3088876575944989165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3088876575944989165'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/11/tribute-to-john-williams.html' title='A tribute to John Williams'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-3286456985075999436</id><published>2008-11-05T11:38:00.003+01:00</published><updated>2008-11-05T11:48:52.563+01:00</updated><title type='text'>260 bytes ought to be enough for anyone, right!</title><content type='html'>I'm approaching the point were I'm just going to assume that Windows is a game-console which can be used to play Grand Theft Auto on, and just ignore the fact that people actually want to use it as a "normal" operating system. If anyone walks in to my office and talks about windows, I'll just look at them with a puzzling look on my face.&lt;br /&gt;&lt;br /&gt;What pushed me a little closer this time was that my colleague managed to break out nightly build (just as we're about to build a snapshot for other departments to start using) by checking in a directory. This directory, called "launches", caused Subversion to fail in a checkout step during the nightly build complaining that "The filename or extension is too long". WTF! IDIOTS!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-3286456985075999436?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/3286456985075999436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=3286456985075999436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3286456985075999436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3286456985075999436'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/11/260-bytes-ought-to-be-enough-for-anyone.html' title='260 bytes ought to be enough for anyone, right!'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-7555884802673822258</id><published>2008-11-04T11:32:00.003+01:00</published><updated>2008-11-04T11:42:58.114+01:00</updated><title type='text'>Ubuntu 8.10</title><content type='html'>I installed Intrepid Ibex this morning on my HP 6710b laptop, and I have to say that I am impressed. It took around an hour (most of the time downloading and installing packages) and after rebooting It Just Worked. &lt;b&gt;One&lt;/b&gt; reboot.&lt;br /&gt;&lt;br /&gt;It also automatically detected my external monitor automatically (well, I had to switch of the "mirror screens" option in the screen resolutions settings). So now I have &lt;a href="http://bp1.blogger.com/_zaXXBbhPPOA/RxTwo-_QilI/AAAAAAAAAUc/9vlbiase3r4/s1600-h/Dilbert-multiMonitors.png"&gt;three monitors&lt;/a&gt;, two for my laptop, and one for my PC. I can use the same keyboard by connecting the PC using &lt;a href="http://synergy2.sourceforge.net/"&gt;Synergy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I haven't tried any of the new shiny features, such as creating an USB stick with Ubuntu on it, though. (Too bad Emacs still does not come by default with xft font support. I'll just have to get that manually.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-7555884802673822258?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/7555884802673822258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=7555884802673822258' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7555884802673822258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7555884802673822258'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/11/ubuntu-810.html' title='Ubuntu 8.10'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-805028194705109000</id><published>2008-11-02T20:02:00.004+01:00</published><updated>2008-11-02T20:26:13.601+01:00</updated><title type='text'>Constraint programming</title><content type='html'>I've exercises the programming part brain by solving problems at &lt;a href="http://projecteuler.net/"&gt;ProjectEuler.net&lt;/a&gt; now and then. Has some fun problems which usually don't take too much time to solve (I haven't gotten to the difficult ones yet...). Today I finally got to exercise my knowledge of &lt;a href="http://en.wikipedia.org/wiki/Constraint_programming"&gt;constraint-programming&lt;/a&gt; in Prolog. &lt;a href="http://eprints.sics.se/3132/01/plilp98.pdf"&gt;My master's thesis&lt;/a&gt; was about implementing multithreading in Prolog, and &lt;a href="http://www.sics.se/%7Ematsc/"&gt;my supervisor&lt;/a&gt; is a die-hard constraint programmer, so he would never forgive me if I solved the problem by brute force. :-)&lt;br /&gt;&lt;br /&gt;The problem in question is &lt;a href="http://projecteuler.net/index.php?section=problems&amp;amp;id=9"&gt;Problem 9&lt;/a&gt;: find the only Pythagorean triplet {X,Y,Z} such that X + Y + Z = 1000. Here's the constraint solution:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;triplet([X, Y, Z]) :-&lt;br /&gt;     X #\= 0, Y #\= 0, Z #\= 0,&lt;br /&gt;     X**2 + Y**2 #= Z**2,&lt;br /&gt;     X + Y + Z #= 1000,&lt;br /&gt;     fd_labeling([X, Y, Z]).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It isn't the shortest solution, but it has a clearness to it which is just amazing. It almost feels like cheating. (If you want to try it, you can use &lt;a href="http://www.gprolog.org/"&gt;GNU Prolog&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-805028194705109000?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/805028194705109000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=805028194705109000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/805028194705109000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/805028194705109000'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/11/constraint-programming.html' title='Constraint programming'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-9200608319064008629</id><published>2008-10-31T13:27:00.006+01:00</published><updated>2008-10-31T14:07:01.723+01:00</updated><title type='text'>Ruby performance bug</title><content type='html'>I got a bugreport the other day about a piece of Ruby code which was executing much slower than it really should. It's basically a piece of code which unpacks a zip-archive using rubyzip. Since I like TDD, I started by writing a test-case which would exhibit the behavior: create a zip-archive with 500 smallish files (around 100 bytes). Unpacking this took in the order of 10 seconds (as a baseline, unpacking the same zipfile using "unzip" takes .03 seconds). There are a lot of other things going on (YAML-parsing, for example), so we don't need to be on par with unzip, but 10 seconds is way too much. &lt;br /&gt;&lt;br /&gt;I managed to narrow down the problem to a function which is called to print the name of each file as it is being unpacked. Removing the call to this function cuts the time from 10 seconds to 3 seconds. But why? The code looks essentially like this: &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if @@current_obj != @obj&lt;br /&gt;   # do stuff&lt;br /&gt;   @@current_obj = @obj&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If I comment out the &lt;tt&gt;@@current_obj = @obj&lt;/tt&gt; line, things go fast (~3 seconds), and if I keep the assignment, it takes ~10 seconds. Surely a simple assigment can't take (10 - 3)/500 = 14 msecs?&lt;br /&gt;&lt;br /&gt;If turned out that the real problem was the comparison. My guess is that Ruby attempts to make a deep comparison (&lt;tt&gt;@obj&lt;/tt&gt; isn't very large, but making a deep comparison might take some time). Also, when I removed the assignment at the end of the if-statement, the comparison was always made with &lt;tt&gt;nil&lt;/tt&gt;, which should be very fast (and constant).&lt;br /&gt;&lt;br /&gt;So, I changed the comparison to&lt;br /&gt;&lt;pre&gt;    &lt;br /&gt;if @@current_obj.object_id != @obj.object_id&lt;br /&gt;   # do stuff&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;which prevents Ruby from making a deep comparison.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-9200608319064008629?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/9200608319064008629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=9200608319064008629' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/9200608319064008629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/9200608319064008629'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/10/ruby-performance-bug.html' title='Ruby performance bug'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-3588075243413199388</id><published>2008-10-28T17:49:00.003+01:00</published><updated>2008-10-28T17:50:25.593+01:00</updated><title type='text'>One-man thriller</title><content type='html'>Impressive:&lt;br /&gt;&lt;object width="450" height="370"&gt;&lt;param name="movie" value="http://www.liveleak.com/e/724_1225139182"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.liveleak.com/e/724_1225139182" type="application/x-shockwave-flash" wmode="transparent" width="450" height="370"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-3588075243413199388?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/3588075243413199388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=3588075243413199388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3588075243413199388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3588075243413199388'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/10/one-man-thriller.html' title='One-man thriller'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-1783758305351640613</id><published>2008-10-24T18:23:00.004+02:00</published><updated>2008-10-24T18:36:47.730+02:00</updated><title type='text'>Merging in Subversion</title><content type='html'>Now I've done my second Subversion merge using the new 1.5 mergeinfo, and &lt;b&gt;both&lt;/b&gt; times I've hit the same problem when trying to "reintegrate" the branch. Subversion complains:&lt;br /&gt;&lt;pre&gt;   Some revisions have been merged under it that have not been merged&lt;br /&gt;  into the reintegration target; merge them first, then retry.&lt;/pre&gt;&lt;a href="http://blogs.open.collab.net/svn/2008/07/subversion-merg.html"&gt;This post&lt;/a&gt; on CollabNet's Subversion blog helped me out. The problem boils down to the fact that there is "subtree" mergeinfo in the branch and/or trunk which prevents the merge from completing. Usually you can safely delete the subtree merge info:&lt;br /&gt;&lt;pre&gt;   svn propdel svn:mergeinfo &amp;lt;subtree&amp;gt; -R&lt;/pre&gt;I honestly don't understand why this issue arises or why Subversion is not able to resolve it. Despite having mergeinfo is much better than not having it, I can't help feeling that this is a kludge to handle a feature which Subversion wasn't at all designed for.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-1783758305351640613?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/1783758305351640613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=1783758305351640613' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1783758305351640613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1783758305351640613'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/10/merging-in-subversion.html' title='Merging in Subversion'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-2889239818159336515</id><published>2008-10-21T11:11:00.001+02:00</published><updated>2008-10-21T11:12:35.452+02:00</updated><title type='text'>Michael Palin is not the funniest Palin anymore...</title><content type='html'>John Cleese is hilarious as always:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/jMyNk8J1c8g&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/jMyNk8J1c8g&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-2889239818159336515?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/2889239818159336515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=2889239818159336515' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2889239818159336515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2889239818159336515'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/10/michael-palin-is-not-funniest-palin.html' title='Michael Palin is not the funniest Palin anymore...'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-5262544774705268729</id><published>2008-10-08T21:52:00.000+02:00</published><updated>2008-10-08T21:53:15.427+02:00</updated><title type='text'>How many T-shirts is that?</title><content type='html'>Funny:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/dKd1Ao4LiP8&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/dKd1Ao4LiP8&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-5262544774705268729?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/5262544774705268729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=5262544774705268729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5262544774705268729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5262544774705268729'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/10/how-many-t-shirts-is-that.html' title='How many T-shirts is that?'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-552112817633427809</id><published>2008-10-07T20:43:00.001+02:00</published><updated>2008-10-07T20:43:35.104+02:00</updated><title type='text'>New shiny colors</title><content type='html'>Time for some new colors on this blog...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-552112817633427809?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/552112817633427809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=552112817633427809' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/552112817633427809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/552112817633427809'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/10/new-shiny-colors.html' title='New shiny colors'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-1166985983423632037</id><published>2008-10-07T19:49:00.002+02:00</published><updated>2008-10-07T19:51:12.629+02:00</updated><title type='text'>The 500-mile email</title><content type='html'>Very funny anecdote on mysteriously failing emails: &lt;a href="http://www.ibiblio.org/harris/500milemail.html"&gt;The case of the 500-mile email&lt;/a&gt;. (It's from 2002, but it was the first time I heard about it.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-1166985983423632037?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/1166985983423632037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=1166985983423632037' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1166985983423632037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1166985983423632037'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/10/500-mile-email.html' title='The 500-mile email'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-8056362554241138413</id><published>2008-10-07T08:49:00.004+02:00</published><updated>2008-10-07T09:19:12.515+02:00</updated><title type='text'>Microsoft bashing day (again)</title><content type='html'>For some strange reason, I still get surprised at how bad Microsoft is at designing user-interfaces. And now I'm not even talking about the graphical ones. The command-line has long been viewed at Microsoft as something inherently evil: everything must have a graphical interface to be deemed usable; command-line tools are by definition user-hostile. Which, of course, is not true. &lt;span style="font-weight: bold;"&gt;Badly designed&lt;/span&gt; command-line tools are user-hostile, just as badly designed graphical user-interfaces are user-hostile. And Microsoft is pretty good at doing both.&lt;br /&gt;&lt;br /&gt;Microsoft does not lack good interface designers. Where they really put in the effort, the result is sometimes really good. For example, I like the new Office-toolbar and the interactive display of keyboard shortcuts (even if it's a little annoying to have to relearn the entire user-interface. Every single command seems to have been moved), and the new dialogs with big descriptive buttons instead of just yes/no buttons. Also, I like the new Google Chrome. No wait, wrong company.&lt;br /&gt;&lt;br /&gt;But the command-line tools seldom get any attention (with the possible exception of PowerShell, which I haven't tried yet). When will we get a new Windows console, for example? With a real font selection dialog, proper resizing, etc.?&lt;br /&gt;&lt;br /&gt;The tool which actually caused my bloodpressure to exceed the "must-blog-about-it" point, is &lt;span style="font-weight: bold;"&gt;CACLS&lt;/span&gt;. CACLS is a tool for displaying or modifying the ACLs for files and folders. I wanted to use it to be able to remove a write-protected file (a file checked out by svn with the svn:needs-lock attribute), and I wanted to do it in an automated test. &lt;br /&gt;&lt;br /&gt;Guess what: CACLS will ask the user for confirmation when changing permissions, and &lt;b&gt;there is no option to turn it off&lt;/b&gt;. What is the BLOODY POINT of having a command-line tool which cannot be used from a script or bat file? The workaround is apparently to do "echo Y | cacls ...", but still. How hard can it be to add a single flag to switch on/off the question?&lt;br /&gt;&lt;br /&gt;Now I'll go back to work and try to figure out how to prevent interactive dialogs blocking my automated build.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-8056362554241138413?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/8056362554241138413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=8056362554241138413' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8056362554241138413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8056362554241138413'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/10/microsoft-bashing-day-again.html' title='Microsoft bashing day (again)'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-7475032558200336917</id><published>2008-10-04T10:11:00.001+02:00</published><updated>2008-10-04T10:13:49.139+02:00</updated><title type='text'>Running a marathon...</title><content type='html'>First, you better &lt;a href="http://www.tjuvlyssnat.se/mellersta-sverige/hennes-ord-holl-inte-i-det-langa-loppet"&gt;read a book&lt;/a&gt; about it. Or not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-7475032558200336917?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/7475032558200336917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=7475032558200336917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7475032558200336917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7475032558200336917'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/10/blog-post.html' title='Running a marathon...'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-5341659463928261521</id><published>2008-09-26T09:40:00.005+02:00</published><updated>2008-09-26T09:44:17.075+02:00</updated><title type='text'>Internal error!</title><content type='html'>Funny error dialog from Eclipse:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gIwnv8AsteU/SNySO84RqhI/AAAAAAAAABY/qqmPjHWmlAM/s1600-h/internal-error.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_gIwnv8AsteU/SNySO84RqhI/AAAAAAAAABY/qqmPjHWmlAM/s320/internal-error.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5250232051165145618"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-5341659463928261521?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/5341659463928261521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=5341659463928261521' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5341659463928261521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5341659463928261521'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/09/internal-error.html' title='Internal error!'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_gIwnv8AsteU/SNySO84RqhI/AAAAAAAAABY/qqmPjHWmlAM/s72-c/internal-error.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-3574950895465366680</id><published>2008-09-18T08:15:00.004+02:00</published><updated>2008-09-18T08:22:27.782+02:00</updated><title type='text'>Hack of the day: displaying the repository location in your bash prompt</title><content type='html'>I usually want to keep track of which repository/branch the current directory is pointing at, so I wrote the following bash script to display it in the prompt. The script can handle Git and Subversion.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function is_git_repo()&lt;br /&gt;{&lt;br /&gt;  if [ $PWD = / ]; then&lt;br /&gt;    return 1;&lt;br /&gt;  elif [ -d $PWD/.git ]; then&lt;br /&gt;    return 0;&lt;br /&gt;  else&lt;br /&gt;    (cd ..; is_git_repo)&lt;br /&gt;  fi&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function display_vc_location()&lt;br /&gt;{&lt;br /&gt;  if [ -d $PWD/.svn ]; then&lt;br /&gt;    SVNLOC=$(svn info $PWD | sed -ne 's@URL: \(.*\)@\1@p' | cut -d/ -f4-)&lt;br /&gt;    SVNREV=$(svn info $PWD | sed -ne 's@Revision: \(.*\)@\1@p')&lt;br /&gt;    echo svn\($SVNLOC@$SVNREV\)&lt;br /&gt;  elif is_git_repo; then&lt;br /&gt;    GITLOC=$(git branch -a | grep -e '^*' | cut -d' ' -f2-)&lt;br /&gt;    echo git\($GITLOC\)&lt;br /&gt;  fi&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Add it to your PS1 variable, like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;PS1="... \$(display_vc_location) ..."&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Exercise: extract both URL and revision without running &lt;tt&gt;svn info&lt;/tt&gt; twice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-3574950895465366680?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/3574950895465366680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=3574950895465366680' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3574950895465366680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3574950895465366680'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/09/hack-of-day-displaying-repository.html' title='Hack of the day: displaying the repository location in your bash prompt'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-7857311228484909322</id><published>2008-09-16T23:16:00.002+02:00</published><updated>2008-09-16T23:21:01.751+02:00</updated><title type='text'>Haiku</title><content type='html'>Inspired by an &lt;a href="http://www.dn.se/DNet/jsp/polopoly.jsp?d=1298&amp;amp;a=828933"&gt;article in Dagens Nyheter&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;the moose is loose&lt;br /&gt;it could not find its way out&lt;br /&gt;it had to be shot&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-7857311228484909322?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/7857311228484909322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=7857311228484909322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7857311228484909322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7857311228484909322'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/09/haiku.html' title='Haiku'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-570501200047623115</id><published>2008-09-16T21:12:00.002+02:00</published><updated>2008-09-16T21:15:53.782+02:00</updated><title type='text'>Stack overflow</title><content type='html'>Short post today. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For those of you who haven't found it yet, head over to &lt;a href="http://stackoverflow.com/"&gt;Stack Overflow&lt;/a&gt; and start contributing to the collective programming knowledge heap. It's a pretty neat site for asking and answering questions about programming.&lt;div&gt;&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/7012742729372608936-570501200047623115?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/570501200047623115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=570501200047623115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/570501200047623115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/570501200047623115'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/09/stack-overflow.html' title='Stack overflow'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-7988494125679514820</id><published>2008-09-05T22:06:00.004+02:00</published><updated>2008-09-06T11:23:07.076+02:00</updated><title type='text'>Pirate Bay and the Arboga child murders</title><content type='html'>The two murdered children in Arboga has gotten quite a &lt;a href="http://www.dn.se/DNet/jsp/polopoly.jsp?d=554&amp;amp;a=760494"&gt;media coverage&lt;/a&gt; here in Sweden (article from The Local, &lt;a href="http://www.thelocal.se/13424/20080801/"&gt;in english&lt;/a&gt;). Now &lt;a href="http://www.dn.se/DNet/jsp/polopoly.jsp?d=147&amp;amp;a=824668"&gt;the entire police investigation can be downloaded&lt;/a&gt; from Pirate Bay. I usually don't object to what the Pirate Bay does -- usually the only damages they cause are economic ones to large media companies.&lt;br /&gt;&lt;br /&gt;But this time they are actually taking it one step further and showing immense disrespect towards two brutally murdered children who now have photos of their autopsies publically available on the internet. And since the internet never forgets, the damage is already done. Of course, the Pirate Bay people -- arrogant as they are -- don't really care: "I don't think it is our job to judge if something is ethical or unethical" (Peter Sunde). I suppose it is just a matter of time before outright criminal material such as child porn is regularly hosted by the Pirate Bay.&lt;br /&gt;&lt;br /&gt;I'll just have to get my hands on the next season of 24 through some other channel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-7988494125679514820?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/7988494125679514820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=7988494125679514820' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7988494125679514820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7988494125679514820'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/09/pirate-bay-and-arboga-child-murders.html' title='Pirate Bay and the Arboga child murders'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-2380823450519360487</id><published>2008-09-05T22:00:00.003+02:00</published><updated>2008-09-05T22:06:39.682+02:00</updated><title type='text'>I can play GTA San Andreas again! Yipiee!</title><content type='html'>A couple of months ago, GTA:SA refused to start after a driver update (no symptoms really, the game just would not start). I didn't have time to pursue the problem at the time -- I have completed all the missions and don't really play the game too much now, but it is still fun to pick up now and then.&lt;br /&gt;&lt;br /&gt;Now after a couple of minutes googling, I found some posts indicating that a corrupt user-settings file called gta_sa.set may cause these exact symptoms. I deleted the file (it's in the My Documents\GTA San Andreas User Files directory), and now the game starts. &lt;br /&gt;&lt;br /&gt;I'm off to running over old ladies again!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-2380823450519360487?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/2380823450519360487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=2380823450519360487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2380823450519360487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2380823450519360487'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/09/i-can-play-gta-san-andreas-again-yipiee.html' title='I can play GTA San Andreas again! Yipiee!'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-8238208119620194007</id><published>2008-07-22T20:47:00.003+02:00</published><updated>2008-07-22T20:55:58.550+02:00</updated><title type='text'>Autobuilding (Erlang) using inotifywait</title><content type='html'>Quick hack of the day:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;ERLC="erlc -W +debug_info"&lt;br /&gt;inotifywait -m -e close_write *.erl | while read f; do&lt;br /&gt;    file=$(echo "$f" | cut -d' ' -f1)&lt;br /&gt;    cmd="$ERLC $file"&lt;br /&gt;    clear&lt;br /&gt;    date&lt;br /&gt;    echo $cmd&lt;br /&gt;    $cmd &amp;&amp; echo "Success."&lt;br /&gt;done&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Requires a fairly modern Linux kernel (2.6.13-ish). Run the script in a terminal, and it will automatically compile any Erlang sources as soon as you save them, and display the error messages in the terminal window. (Replace ERLC with compilation command of your choice.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-8238208119620194007?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/8238208119620194007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=8238208119620194007' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8238208119620194007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8238208119620194007'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/07/autobuilding-erlang-using-inotifywait.html' title='Autobuilding (Erlang) using inotifywait'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-5943212826899162568</id><published>2008-06-03T15:55:00.000+02:00</published><updated>2008-06-03T15:56:37.432+02:00</updated><title type='text'>Goosh</title><content type='html'>&lt;a href="http://goosh.org/"&gt;Cool&lt;/a&gt; stuff. Command line access to Google, Wiki, and a host of other stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-5943212826899162568?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/5943212826899162568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=5943212826899162568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5943212826899162568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5943212826899162568'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/06/goosh.html' title='Goosh'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-7799864927992286703</id><published>2008-05-08T21:57:00.005+02:00</published><updated>2008-05-08T22:05:47.594+02:00</updated><title type='text'>Can we just STOP using fixed coordinates for laying our user interface elements?</title><content type='html'>What is it with these Windows-people who still use fixed coordinates for laying out user-interfaces?! I thought that would be something that at least would be eradicated when Microsoft released the .NET platform a few years ago, but no. Every other decent UI toolkit (Qt, SWT, Gtk+, and a couple of others) has abandoned fixed coordinates for layout, but Windows people persist. Is there some misguided idea that "we MUST know exactly on the pixel how our user interface looks, and it has to look exactly the same everywhere"?&lt;br /&gt;&lt;br /&gt;Yes, user interface layout is a difficult problem, but treating it as a drawing problem is not the solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-7799864927992286703?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/7799864927992286703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=7799864927992286703' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7799864927992286703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7799864927992286703'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/05/can-we-just-stop-using-fixed.html' title='Can we just STOP using fixed coordinates for laying our user interface elements?'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-3399663770675121596</id><published>2008-05-08T11:08:00.002+02:00</published><updated>2008-05-08T11:11:11.769+02:00</updated><title type='text'>Impressive data recovery</title><content type='html'>People at NASA have &lt;a href="http://blocksandfiles.com/article/5056"&gt;successfully recovered&lt;/a&gt; 90% of the data on a 400MB Seagate harddrive from the Colombia Space Shuttle. Yes, that's the one that &lt;a href="http://en.wikipedia.org/wiki/Space_Shuttle_Columbia_disaster"&gt;crashed and burned&lt;/a&gt; at high altitude. Very impressive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-3399663770675121596?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/3399663770675121596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=3399663770675121596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3399663770675121596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3399663770675121596'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/05/impressive-data-recovery.html' title='Impressive data recovery'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-469611306754426218</id><published>2008-05-05T20:33:00.002+02:00</published><updated>2008-05-05T20:48:46.077+02:00</updated><title type='text'>Microsoft is "getting the facts". Again.</title><content type='html'>Microsoft has a &lt;a href="http://www.microsoft.com/windowsserver/compare/default.mspx"&gt;site&lt;/a&gt; which claims to help customers compare Windows Server editions with Linux. I stumbled across it while reading &lt;a href="http://www.itwire.com/component/option,com_rd_rss/id,18/"&gt;David M. Williams&lt;/a&gt; blog, and he pointed out a &lt;a href="http://www.microsoft.com/windowsserver/compare/CaseStudyDetails.mspx?recid=178"&gt;case study&lt;/a&gt; on the site involving &lt;a href="http://www.uppsala.se/"&gt;Uppsala&lt;/a&gt;. Since I've lived in Uppsala for many years, I couldn't resist reading on. It turns out that there was no comparison at all. Uppsala hired a Microsoft Gold Certified partner to see if they could increase the security of their windows networks and the conclusion was that Windows Server 2008 is a better product than Windows Server 2003. No mention of Linux at all (except an off-hand remark by a server technician).&lt;br /&gt;&lt;br /&gt;It's good to see that Microsoft still knows how to do real FUD.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-469611306754426218?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/469611306754426218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=469611306754426218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/469611306754426218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/469611306754426218'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/05/microsoft-is-getting-facts-again.html' title='Microsoft is &quot;getting the facts&quot;. Again.'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-819713582025613122</id><published>2008-04-16T11:09:00.002+02:00</published><updated>2008-04-16T11:12:01.239+02:00</updated><title type='text'>Debugging JNI code using Eclipse and Visual Studio</title><content type='html'>&lt;p&gt;Debugging &lt;a href="http://en.wikipedia.org/wiki/Java_Native_Interface" class="extiw" title="w:Java_Native_Interface"&gt;Java Native Interface&lt;/a&gt; code (JNI) can be quite an adventure, but fortunately it works quite nice when you have Eclipse and Visual Studio (and preferrably at least 2 monitors). I have Eclipse on the primary monitor, and Visual Studio on the secondary. This is how it goes: &lt;/p&gt; &lt;ol&gt;&lt;li&gt; Start your java program, with a breakpoint before entering the native method you want to debug. You probably want to break after the native code has been loaded, but you don't have to. &lt;/li&gt;&lt;li&gt; Switch to Visual Studio, and bring up the "Attach to process" dialog (Ctrl-Alt-P). Select the java process (javaw.exe or java.exe) by typing "j" (possible several times, epending on how many processes you have starting with the letter "j"). Press return. Visual Studio should now switch to debugging and the title bar should include the test "(Running)", indicating that you are debugging a running process. &lt;/li&gt;&lt;li&gt; Set a breakpoint to cause Visual Studio to stop in your native code. &lt;/li&gt;&lt;li&gt; Switch back to Eclipse, and start running. When eclipse enters your native code, Visual Studio will break the debugged java program. (Eclipse may note that the debugged program is not responding, since it is suspended by Visual Studio). &lt;/li&gt;&lt;li&gt; When you're done debugging, you can "release" the java-program using the "Stop Debugging" command in Visual Studio. This will cause the java program to continue running normally (and terminate, unless Eclipse has a breakpoint on it). &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Some things you may want to pay special attention to: &lt;/p&gt; &lt;ul&gt;&lt;li&gt; Eclipse and Visual Studio have different shortcuts for run/step/step-over, etc. This is a major pain, and I think my muscle memory is permanently damaged when it comes to learning them. &lt;/li&gt;&lt;li&gt; You need to keep track of who is debugging. This can be confusing. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;People are &lt;a href="http://wiki.eclipse.org/index.php/Support_seamless_debugging_between_JDT_and_CDT"&gt;working&lt;/a&gt; on making JDT and CDT cooperate in debugging JNI code, allowing seamless stepping in and out of Java/JNI code and integrated debugger views (callstack with both Java and native frames displayed, for example), but it is still in the early prototyping phase. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-819713582025613122?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/819713582025613122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=819713582025613122' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/819713582025613122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/819713582025613122'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/04/debugging-jni-code-using-eclipse-and.html' title='Debugging JNI code using Eclipse and Visual Studio'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-4951367451293667625</id><published>2008-04-11T12:32:00.002+02:00</published><updated>2008-04-11T12:36:52.182+02:00</updated><title type='text'>9-year-old rides the subway, Alone!</title><content type='html'>&lt;a href="http://www.nysun.com/editorials/why-i-let-my-9-year-old-ride-subway-alone"&gt;Good article&lt;/a&gt; about not giving in to fear and a  &lt;a href="http://www.schneier.com/blog/archives/2008/04/overestimating.html"&gt;commentary by Bruce Schneier&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-4951367451293667625?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/4951367451293667625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=4951367451293667625' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/4951367451293667625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/4951367451293667625'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/04/9-year-old-rides-subway-alone.html' title='9-year-old rides the subway, Alone!'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-4559608396663469857</id><published>2008-04-02T22:04:00.001+02:00</published><updated>2008-04-02T22:05:57.209+02:00</updated><title type='text'>April Fool's Day</title><content type='html'>&lt;a href="http://blogoscoped.com/archive/2008-04-01-n71.html"&gt;Funny&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-4559608396663469857?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/4559608396663469857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=4559608396663469857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/4559608396663469857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/4559608396663469857'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/04/april-fools-day.html' title='April Fool&apos;s Day'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-6424734130343874050</id><published>2008-03-28T19:17:00.001+01:00</published><updated>2008-03-28T19:19:23.539+01:00</updated><title type='text'>Boknördstestet</title><content type='html'>Jag är 55% boknörd:&lt;br /&gt;&lt;br /&gt;&lt;a style="left: 0px ! important; top: 13px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-007051731004998008 visible" href="http://www.barnensbokklubb.se/bbk2/boknordstestet/blog.swf?p=2,1,1,3,2,2,5,55,jesper"&gt;&lt;/a&gt;&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" id="blog" align="middle" height="372" width="320"&gt;&lt;param name="allowScriptAccess" value="sameDomain"&gt;&lt;param name="movie" value="http://www.barnensbokklubb.se/bbk2/boknordstestet/blog.swf?p=2,1,1,3,2,2,5,55,jesper"&gt;&lt;param name="quality" value="high"&gt;&lt;param name="bgcolor" value="#ffffff"&gt;&lt;embed src="http://www.barnensbokklubb.se/bbk2/boknordstestet/blog.swf?p=2,1,1,3,2,2,5,55,jesper" quality="high" bgcolor="#ffffff" name="blog" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" align="middle" height="372" width="320"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-6424734130343874050?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/6424734130343874050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=6424734130343874050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/6424734130343874050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/6424734130343874050'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/03/boknrdstestet.html' title='Boknördstestet'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-2793006160568387150</id><published>2008-03-26T22:07:00.001+01:00</published><updated>2008-03-26T22:09:34.158+01:00</updated><title type='text'>JavaCity</title><content type='html'>&lt;a href="http://flickr.com/photos/25052705@N02/2364142955/"&gt;Funny name&lt;/a&gt; for a cafe at a an Eclipse-conference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-2793006160568387150?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/2793006160568387150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=2793006160568387150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2793006160568387150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2793006160568387150'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/03/javacity.html' title='JavaCity'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-7706625893216782801</id><published>2008-03-26T21:59:00.000+01:00</published><updated>2008-03-26T22:00:39.776+01:00</updated><title type='text'>Chocolate fountain</title><content type='html'>&lt;a href="http://flickr.com/photos/25052705@N02/2364117693/"&gt;This&lt;/a&gt; was really tasty. They had one with white chocolate as well. Next year I'm hoping for one with dark chocolate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-7706625893216782801?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/7706625893216782801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=7706625893216782801' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7706625893216782801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7706625893216782801'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/03/chocolate-fountain.html' title='Chocolate fountain'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-7952426821255944878</id><published>2008-03-26T20:42:00.006+01:00</published><updated>2008-03-26T21:57:59.190+01:00</updated><title type='text'>Summarizing EclipseCon 2008</title><content type='html'>Well, my attempt at blogging at least sem-regularly during EclipseCon didn't exactly work out. Fortunately that was largely cause by my own laziness, not by the lack of interesting topics. But now that I'm back in warm and sunny Sweden (NOT!) and have slept off most of my jetlag, I'll try to do a short summary.&lt;br /&gt;&lt;br /&gt;EclipseCon is a &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; big conference (well, maybe not in parity with JavaOne or OOPSLA) with over 300 talks of varying length and (wildly) varying topics. Here's what I enjoyed the most (in no particular order):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.eclipsecon.org/2008/?page=sub/&amp;amp;id=472"&gt;Eclipse, Open Source, Wall Street and Competition: Big Drama, Big Money&lt;/a&gt;. Brent Williams talked about how big business view Eclipse/FOSS.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipsecon.org/2008/index.php?page=sub/&amp;amp;id=537"&gt;Dan Lyons keynote&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipsecon.org/2008/?page=sub/&amp;amp;id=572"&gt;Adopting and Commercializing Eclipse: Wind River's Strategy&lt;/a&gt;. Tomas Evenson (CTO at Wind River) covered Wind River's history behind their Eclipse adoption, and how they view their collaboration with the Eclipse community. Especially interesting, since Wind River in practice controls most of the C/C++ development efforts (CDT and DSDP).&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://www.eclipsecon.org/2008/index.php?page=sub/&amp;amp;id=105"&gt;Debugging Java and JNI together&lt;/a&gt;. A short talk presenting a way to seamlessly debug Java and JNI (Java Native Interface) code together, i.e. being able to step from Java code into JNI code (moving from JDT to CDT). Impressingly enough they pulled of a working demo as well (the short talks were only 10 minutes). Having come across JNI at more or less every place I've worked at, I've been wanting this for the last ten years. Unfortunately it is currently limited to gdb and required a specially patch version of Apache's JVM, but it is a step in the right direction for those of use who don't have the luxury of living in the padded room of the JVM.&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.eclipsecon.org/2008/?page=sub/&amp;amp;id=220"&gt;The Next Wave of IDE Innovation: Eclipse and Visual Studio in 2010&lt;/a&gt;. Kevin McGuire and Tim Wagner talked about what new innovations we can expect in the coming years in the area of IDE-development (not necessary Eclipse) -- new input devices, multi-monitors, multi-core support. My first impression of this talk was that it was too much wild speculation and brainstorm, but I suppose that all innovation has to start that way.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;I'm looking forward to EclipseCon 2009 already.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-7952426821255944878?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/7952426821255944878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=7952426821255944878' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7952426821255944878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7952426821255944878'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/03/summarizing-eclipsecon-2008.html' title='Summarizing EclipseCon 2008'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-1373000585288693880</id><published>2008-03-20T18:37:00.003+01:00</published><updated>2008-03-20T18:48:57.559+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipsecon'/><title type='text'>VerMonster Sundae</title><content type='html'>We went to watch a movie yesterday, and took an icecream at Ben and Jerry's first. Not only do they have really tasty ice-creams, they have &lt;a href="http://daviswiki.org/Ben_&amp;amp;_Jerry%27s:_Vermonster_Challenge"&gt;really&lt;/a&gt; &lt;a href="http://static.flickr.com/76/174209579_c80fe735f2.jpg"&gt;large&lt;/a&gt; &lt;a href="http://www.virginiaservice.org/vermonster/"&gt;ones&lt;/a&gt; as well.&lt;br /&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-1373000585288693880?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/1373000585288693880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=1373000585288693880' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1373000585288693880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1373000585288693880'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/03/vermonster-sundae.html' title='VerMonster Sundae'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-2427407192013639888</id><published>2008-03-18T18:37:00.008+01:00</published><updated>2008-03-19T17:38:03.681+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipsecon'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>EclipseCon 2008: Fake Steve Jobs</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Daniel_Lyons"&gt;Daniel Lyons&lt;/a&gt; (aka &lt;a href="http://fakesteve.blogspot.com/"&gt;Fake Steve Jobs&lt;/a&gt;) gave a really funny keynote yesterday. If you aren't reading his blog, you're missing out on some great satire.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-2427407192013639888?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/2427407192013639888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=2427407192013639888' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2427407192013639888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2427407192013639888'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/03/eclipsecon-2008-fake-steve-jobs.html' title='EclipseCon 2008: Fake Steve Jobs'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-31500444220855013</id><published>2008-03-17T06:03:00.003+01:00</published><updated>2008-03-17T06:22:01.018+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipsecon'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>EclipseCon 2008, day 0</title><content type='html'>So, I've finally arrived in Santa Clara for &lt;a href="http://www.eclipsecon.org/2008/"&gt;EclipseCon&lt;/a&gt;. We (I'm travelling with a collegue) actually arrived yesterday after a murderous long flight from Stockholm. First 2.5 hours from Stockholm to London, 3 hours at Heathrow (which was actually quite nice, we hade plenty time to walk around the taxfree stores and have some lunch). Then an 11-hours flight to San Francisco, and as if that wasn't enough we decided to take public transport to the hotel. Let's call that idea "less than brilliant". Sufficient to say, it took us around 4.5 hours before we could finally get some sleep.&lt;br /&gt;&lt;br /&gt;Anyway, today was much better. What could be a better way to wash off the jet-lag (SF is 8 hours behind Stockholm) than spending a day at &lt;a href="http://en.wikipedia.org/wiki/California%27s_Great_America"&gt;Great America&lt;/a&gt;? Luckily enough, they opened for the season today and the weather was sunny and not too windy, even if the temperature could've been a little higher.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-31500444220855013?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/31500444220855013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=31500444220855013' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/31500444220855013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/31500444220855013'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/03/eclipsecon-2008-day-0.html' title='EclipseCon 2008, day 0'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-4874559521064059424</id><published>2008-03-07T20:05:00.002+01:00</published><updated>2008-03-07T20:06:08.868+01:00</updated><title type='text'>3D Excel</title><content type='html'>&lt;a href="http://www.gamasutra.com/view/feature/3563/microsoft_excel_revolutionary_3d_.php?page=3"&gt;Excel as a 3D engine&lt;/a&gt;. Yet another proof that some people have way too much time on their hands.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-4874559521064059424?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/4874559521064059424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=4874559521064059424' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/4874559521064059424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/4874559521064059424'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/03/3d-excel.html' title='3D Excel'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-3737512298475354524</id><published>2008-03-04T08:21:00.002+01:00</published><updated>2008-03-04T08:26:42.328+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='build system'/><title type='text'>SCons and VMWare</title><content type='html'>&lt;a href="http://www.vmware.com/"&gt;VMWare&lt;/a&gt; has been using &lt;a href="http://scons.org/"&gt;SCons&lt;/a&gt; for a year now and are actually &lt;a href="http://www.nabble.com/SCons-Future-Directions-and-Thoughts-td15176258.html"&gt;pretty happy about it&lt;/a&gt;. I would have thought that they would complain more about performance, though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-3737512298475354524?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/3737512298475354524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=3737512298475354524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3737512298475354524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/3737512298475354524'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/03/scons-and-vmware.html' title='SCons and VMWare'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-2771047762983960898</id><published>2008-01-17T07:47:00.000+01:00</published><updated>2008-01-17T08:22:37.365+01:00</updated><title type='text'>ZFS</title><content type='html'>A friend of mine gave me a link to a set of &lt;a href="http://opensolaris.org/os/community/zfs/docs/zfs_last.pdf"&gt;slides&lt;/a&gt; about &lt;a href="http://en.wikipedia.org/wiki/ZFS"&gt;ZFS&lt;/a&gt; the other day. ZFS is a radical different approach to filesystems, with a lot of cool features. It leaves the WinFS vaporware gasping for air. Some of the cool features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Constant-time snapshots: takes no additional space&lt;/li&gt;&lt;li&gt;Clones: writable snapshots&lt;/li&gt;&lt;li&gt;Backup/restore: incremental backups take time proportional to data changed&lt;br /&gt;&lt;/li&gt;&lt;li&gt;End-to-end data integrity&lt;/li&gt;&lt;li&gt;Dynamic striping: automatically distribute load across all devices&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Multiple independent prefetch streams, automatic length and stride detection&lt;/li&gt;&lt;/ul&gt;For personal use I find the backup/restore functionality especially cool. An incremental backup is done by &lt;pre&gt;# zfs send -i tank/fs@A tank/fs@B &gt; /backup/B-A&lt;/pre&gt; The time it takes to do a incremental backup is proportional to the amount of data changed, so you can easily use it to drive remote duplication. The following command sends a incremental once per minute to a remote host. &lt;pre&gt;# zfs send -i tank/fs@11:31 tank/fs@11:32 | ssh host zfs receive -d /tank/fs&lt;/pre&gt; (The examples are taken from the slides.)&lt;br /&gt;&lt;br /&gt;The only drawback is that there is no ZFS support for Windows. Hopefully that will change in the not-too-distant-future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-2771047762983960898?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/2771047762983960898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=2771047762983960898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2771047762983960898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/2771047762983960898'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2008/01/zfs.html' title='ZFS'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-1999480888390659768</id><published>2007-11-23T12:39:00.000+01:00</published><updated>2007-11-23T13:07:53.766+01:00</updated><title type='text'>InstallShield</title><content type='html'>I'm starting to regret that I recommended to my manager that we use &lt;span style="font-weight: bold;"&gt;InstallShield &lt;/span&gt;to build our installers. InstallShield does have a few nice features, such as allowing side-by-side installations of the same product, but from a developers point of view, it is so awkward to work with that I get frustrated each time I try to do something. The list of annoyances is getting rather long:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The &lt;span style="font-weight: bold;"&gt;COM automation interface&lt;/span&gt; is not complete: there is no way to create a new InstallShield project, certain attributes on components are not accessible, and you can add "previous media" in order to create an update installer. This forced me to manually patch the XML project file.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Silent operation&lt;/span&gt; is clunky at best, and just non-functional at worst. You need to twiddle around with response files, non-existing error reporting, weird command line flags, and there is no guarantee that it works. Why not have one single flag which runs the installation using all default values? And why do I need to supply a response file for &lt;span style="font-style: italic;"&gt;uninstalling?&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;Just remove the damn product!&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;InstallScript&lt;/span&gt;: this is a Pascal-ish language which just makes my brain hurt. There is no design behind it, data-structures have been added in an ad-hoc manner, and it's just painful to use. At least to people like me who are used to more modern programming languages such as Ruby and Python. (Actually, I'd choose just about any language before InstallScript: Perl, Java, Delphi, C, C++, Lisp, Smalltalk, you name it. Well, maybe not Cobol.)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;There are &lt;span style="font-weight: bold;"&gt;several types of installers&lt;/span&gt; you can create: InstallScript-based, MSI-based, and a mixture of them. (And a bunch of others as well.) I would like to have different user manuals depending on which installer type you're using. The current manual is one monolith which is unclear all over the place about which options, functions, methods, etc. that applicable to each project type.&lt;/li&gt;&lt;/ul&gt;Oh, well. Now I'll stop whining and get back to work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-1999480888390659768?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/1999480888390659768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=1999480888390659768' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1999480888390659768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1999480888390659768'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2007/11/installshield.html' title='InstallShield'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-5500718679972606318</id><published>2007-11-15T08:27:00.000+01:00</published><updated>2007-11-15T09:00:41.285+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>CruiseControl</title><content type='html'>Sometimes you stumble across a tool you wish you had started to use several years ago. A tool which solves (or at least simplifies) a lot of the problems you have when you're developing software. &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt; is such a tool; and I had had it on my radar for a couple of years but never gotten around to actually start using it until a few weeks ago.&lt;br /&gt;&lt;br /&gt;CruiseControl (or one of its cousins: &lt;a href="http://ccnet.thoughtworks.com/"&gt;CruiseControl.NET&lt;/a&gt;, &lt;a href="http://cruisecontrolrb.thoughtworks.com/"&gt;CruiseControl.rb&lt;/a&gt;) is a tool used to support &lt;a href="http://www.martinfowler.com/articles/continuousIntegration.html"&gt;Continuous Integration&lt;/a&gt;, a software development practice which is characterized by frequent commits (usually at least once a day), and regular automated builds several times per day. We haven't gotten around to adopting CI completely, but CC is still a great framework to take care of your automatic build. Here are some highlights:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It has nice web dashboard for monitoring the state of the builds. It tracks the time each build takes, and when a build is in progress it estimates time left based on the previous build.&lt;/li&gt;&lt;li&gt;It is easy to configure.&lt;/li&gt;&lt;li&gt;It can automatically trigger builds when commits are made to the source repository.&lt;/li&gt;&lt;li&gt;It can automatically send mails to all users which have participated in the last build (i.e. have commited code since the last successful build). If you want it to it can send mail to everyone for every build, but with several builds per day that quickly becomes annoying.&lt;/li&gt;&lt;/ul&gt;If you aren't using CruiseControl for your automatic building, you should do so. &lt;span style="font-weight: bold;"&gt;Now&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-5500718679972606318?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/5500718679972606318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=5500718679972606318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5500718679972606318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5500718679972606318'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2007/11/cruisecontrol.html' title='CruiseControl'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-788778159064256931</id><published>2007-10-27T21:44:00.000+02:00</published><updated>2007-10-27T22:00:27.938+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><title type='text'>GMail and IMAP</title><content type='html'>Finally the people at Google have gotten around to letting people access their &lt;a href="https://mail.google.com/support/bin/answer.py?hl=en&amp;amp;answer=75725"&gt;GMail accounts via IMAP&lt;/a&gt;, and finally my account has been enabled too (it took a few days). I've wanted this almost since the very beginning (for some 2 years ago), and I gather from the reactions around the web that I'm not alone. Google on "gmail imap" and you get some 6 million hits, many (of course) referring to GMail now getting IMAP support, but a sizable amount of hits are from before this and talk about how to get IMAP support for GMail in other ways.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-788778159064256931?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/788778159064256931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=788778159064256931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/788778159064256931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/788778159064256931'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2007/10/gmail-and-imap.html' title='GMail and IMAP'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-1153601347031837323</id><published>2007-10-20T12:56:00.000+02:00</published><updated>2007-10-20T13:34:22.156+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gaming'/><title type='text'>Half-Life 2: Episode Two</title><content type='html'>I finally finished &lt;a href="http://en.wikipedia.org/wiki/Half-Life_2:_Episode_Two"&gt;Episode Two&lt;/a&gt; yesterday. This time, I set the difficulty level to "hard" directly. When I've played the other Half-Life games, I've always started on "medium" (or even "easy", I think), but this time I decided to take the difficult route the first time through. And Valve really makes you earn your kills.&lt;br /&gt;&lt;br /&gt;A fun thing about Episode Two (and &lt;a href="http://en.wikipedia.org/wiki/Tf2"&gt;Team Fortress 2&lt;/a&gt;) is there is a set of "achievements" (or sub-missions); such as breaking every web cache in the caves, killing all the antlion grubs, etc. There is also a fun achievement involving the &lt;a href="http://www.kfj.f2s.com/index.php/2007-10-15-gnome-quest"&gt;gnome&lt;/a&gt; you find at the very beginning of the game.&lt;br /&gt;&lt;br /&gt;The first really tough part was trying to kill two &lt;a href="http://en.wikipedia.org/wiki/Antlion_%28Half-Life_2%29#Antlion_Guards"&gt;Antlion Guards&lt;/a&gt;. You don't have enough ammo (even if you've fully stocked on the shotgun and the MP5) to take them out, so you'll have to be a little creative with explosive barrels and other things you can shoot at them. To make things more fun you have the antlions to worry about too.&lt;br /&gt;&lt;br /&gt;The second fun part was the helicopter battle where you desperately try to find a rocket launcher just to realize that there isn't any. The point is to take it out by taking the mines it drops and throw them back at the helicopter. Ah, the joy of crawling around and being shot at by helicopters!&lt;br /&gt;&lt;br /&gt;Then there is the &lt;a href="http://en.wikipedia.org/wiki/List_of_humanoid_and_synthetic_Combine_in_Half-Life_2#Hunter"&gt;Hunters&lt;/a&gt;. The first time you encounter them is when Alyx is injured, but the first time you have to take one out is later on when you and Alyx are attacked by a pack of them in a farm house. Also a fun scene, where you have to be a little creative with the gravity gun.&lt;br /&gt;&lt;br /&gt;Then there is the final battle. You've reached the White Forest rocket base, but it's being attacked by &lt;a href="http://en.wikipedia.org/wiki/List_of_humanoid_and_synthetic_Combine_in_Half-Life_2#Strider"&gt;Striders&lt;/a&gt;. And not one, two, or three, but at least 8 or 9. I didn't keep count. This is where the real fun begins. And to make it even more challenging, each Strider is escorted by 2 or even 3 &lt;a href="http://en.wikipedia.org/wiki/List_of_humanoid_and_synthetic_Combine_in_Half-Life_2#Hunter"&gt;Hunters&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This game is nothing less than a masterpiece. And you haven't really played it until you've played it with the difficulty set to "hard".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-1153601347031837323?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/1153601347031837323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=1153601347031837323' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1153601347031837323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/1153601347031837323'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2007/10/half-life-2-episode-two.html' title='Half-Life 2: Episode Two'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-8476446658258395219</id><published>2007-10-11T11:16:00.000+02:00</published><updated>2007-10-11T12:30:25.351+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Xcerion</title><content type='html'>&lt;a href="http://xcerion.com/"&gt;Xcerion&lt;/a&gt; is a &lt;a href="http://www.idg.se/2.1085/1.94895"&gt;new&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Xcerion_XIOS"&gt;Swedish&lt;/a&gt; &lt;a href="http://developers.slashdot.org/developers/07/03/03/0830233.shtml"&gt;startup&lt;/a&gt; which is working on a "internet operating system", something which runs entirely inside your webbrowser. The market-speak on their website gives the impression that it will revolutionize the computer industry and bring down Google and Microsoft and the same time. That is, of course, not true. They will be absorbed by either long before that happens.&lt;br /&gt;&lt;br /&gt;I tried to get some hard details about what they're actually doing, but details are scarce, and any information I could get hold of is full of market-speak. Things like the following sounds like something Dilbert's boss would say:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Given that everything is defined in XML creates enormous synergies and unleashes the innate power of XML,"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I'm not sure why they push XML so hard. XML is an underlying code/data representation, and will not cause any magic to happen by itself. XML may very well be the best choice of a representation, but&lt;span style="font-weight: bold;"&gt; it is not a silver bulle&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;t.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;The fact that all applications are written in XML rings a big, fat, warning in my head. We've heard several claims over the last 20 years about new technologies which will render "traditional programming" obsolete, but we're still here writing code in C++, Java, Erlang, Ruby, Python, etc. What's the common denominator of the 20 most popular programming languages today? &lt;span style="font-style: italic;"&gt;Their source code is written using text editors&lt;/span&gt;. Yes, some text-editors are most advanced than others, but we're still &lt;span style="font-weight: bold;"&gt;writing&lt;/span&gt; code. Practical, general purpose point-and-click programming won't be here for years. &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;XML is not designed to be human-editable.&lt;/span&gt; This forces you to have top-notch graphical editors on top of everthing, and that is not an easy task. Many have tried and failed (the Eclipse plugin.xml editor is a good example; it is not a bad editor, but it doesn't scale very well for non-trivial XML).&lt;br /&gt;&lt;br /&gt;But then again, if Xcerion can deliver on their promises and replace the traditional desktop OS with a system which is light-weight, fast, runs everywhere, and fun to program (sort of like on the old Amiga days), I'm all for it. But I can't help but feeling sceptical about the whole thing.&lt;br /&gt;&lt;br /&gt;Xcerion, please prove me wrong.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-8476446658258395219?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/8476446658258395219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=8476446658258395219' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8476446658258395219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8476446658258395219'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2007/10/xcerion.html' title='Xcerion'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-189532008732429965</id><published>2007-10-04T23:40:00.000+02:00</published><updated>2007-10-04T23:52:12.249+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gta'/><category scheme='http://www.blogger.com/atom/ns#' term='gaming'/><title type='text'>San Andreas</title><content type='html'>What do you play when you're waiting for Half-Life 2: Episode Two to be released, when Team Fortress 2 takes &lt;span style="font-weight: bold;"&gt;forever &lt;/span&gt;to load, and when you've completed Half-Life 2 with difficulty level set to "hard"? Well, you can always dig up Grand Theft Auto: San Andreas, and try to get a little closer to those 100%. After cruising around in San Fierro for a while and destroying a motorcycle I found my way to the &lt;a href="http://strategywiki.org/wiki/Grand_Theft_Auto:_San_Andreas/Missions/Blood_Bowl"&gt;Blood Bowl&lt;/a&gt; race, and decided to give it a try. It's quite hard, and after 20 attempts or so I managed to hold on long enough for the other cars to destroy themselves, making it a little easier to get to the checkpoints.&lt;br /&gt;&lt;br /&gt;The lesson here is: &lt;span style="font-style: italic;"&gt;there is always something to do in San Andreas.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-189532008732429965?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/189532008732429965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=189532008732429965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/189532008732429965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/189532008732429965'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2007/10/san-andreas.html' title='San Andreas'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-7186971737524417695</id><published>2007-10-04T15:51:00.000+02:00</published><updated>2007-10-04T16:01:57.170+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Writing a toolchain plugin for CDT (or: things not to use XML for)</title><content type='html'>I'm currently in the process of implementing support for a compiler toolchain for Eclipse/CDT. This means writing a large chunk of XML code describing how the toolchain works (what tools there are, what kind of inputs they take, what options they take, what build configurations are available, and so on). A typical standard thing to do when you want to use CDT with a compiler other than GCC.&lt;br /&gt;&lt;br /&gt;Eclipse/CDT is very flexible when it comes to supporting other kind of toolchains; anything which can be broken down to a series of external programs which which interact to produce output from a given set of inputs. You can implement a toolchain for creating PDF files from LaTeX input, although this has little to do with C/C++ development. This great flexibility is actually the first warning flag. Yes, flexibility is a good thing, but the user's have to be able to wield it as well.&lt;br /&gt;&lt;br /&gt;Most of the toolchain is defined in the plugin.xml. This is where all tools, configuration, projects type, options, etc. are defined. This is actually the second warning flag. My plugin.xml is at 2000 lines and counting, and I haven't really done anything complicated. A bunch of options, two different project types, two build configurations, and 4 tools (c-compiler, c++-compiler, linker, assembler). Yes, I could probably break out much of this in separate plugins, but that seems a little overkill.&lt;br /&gt;&lt;p&gt;CDT has a system for inheritance among elements in the toolchain definition file. I can define a common base class for my C and C++ compilers, and define C++-specific options in a subclass. What CDT does is basically to paste a primitive inheritance system on top of XML. It works like this:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;option&lt;br /&gt;  id="com.foo.bar.option.parentOption"&lt;br /&gt;  isAbstract="true"/&gt;&lt;br /&gt;&amp;lt;option&lt;br /&gt;  id="com.foo.bar.option.subOption"&lt;br /&gt;  superClass="com.foo.bar.option.parentOption"&lt;br /&gt;  ... /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This may sound great at a first look, but it quickly turns out to be hopelessly inadequate. It's ok to do small things this way, but when you have three different tools with similar set of options you need a way to be able to share these in a more flexible manner.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;One of my favorite programming principles is DRY: Don't Repeat Yourself. While writing CDT toolchain definitions you have to break this rule so many times, it's almost physically painful. For example: each XML element has to have a globally unique identifier, and it has to be specified in full in the element itself. In the plugin.xml file which contains my toolchain definition, 25% of the lines includes the reverse-DNS name ("com.foo.bar.plugin", for example) used to make sure that the identifier are globally unique.&lt;br /&gt;&lt;br /&gt;There is an option for my compiler which takes 20-30 enumerable values (the target cpu type). To specify this, I have to write an XML element for each of these values:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;enumeratedOptionValue&lt;br /&gt;  command="--cpu FOOBAR1"&lt;br /&gt;  id="com.foo.bar.plugin.toolchain.compiler.generic.option.cpu.FOOBAR1"&lt;br /&gt;  name="FOOBAR1"/&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Instead of allowing me to have a simple list of all cpu types and generate each option, I have to manually (cut-n-paste) expand the enumeration value definitions.&lt;br /&gt;&lt;br /&gt;I think it would be better to write the toolchain definition in Java instead. The idea of defining things in the plugin's plugin.xml file is to let Eclipse know things about plugins without having to load the plugin itself, but does this include details about which options my compiler takes? If plugin.xml just defined the entry point classes for my toolchain in the plugin.xml file, I could define the toolchain by creating the appropriate Java objects. This would allow me to use the full power of Java's inheritance system and I can store option metadata (such as the number of available cpu types) in a way most suitable for my needs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-7186971737524417695?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/7186971737524417695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=7186971737524417695' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7186971737524417695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7186971737524417695'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2007/10/writing-toolchain-plugin-for-cdt-or.html' title='Writing a toolchain plugin for CDT (or: things not to use XML for)'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-4603186550953441782</id><published>2007-10-01T08:20:00.000+02:00</published><updated>2007-10-01T08:46:26.005+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tv'/><category scheme='http://www.blogger.com/atom/ns#' term='heroes'/><title type='text'>Heroes</title><content type='html'>I've been catching up on the first season of Heroes (the first seasons&lt;br /&gt;airs here in Sweden on TV4 twice a week), and I must say that it is&lt;br /&gt;the most intriguing TV-series I've watched since the first season of&lt;br /&gt;24. The combination of a compelling story arc and superheroes (without&lt;br /&gt;tights!) makes for very enjoyable TV, especially when most other&lt;br /&gt;programs are some form of reality-tv (home makeover shows, American&lt;br /&gt;Idol (or the swedish equivalent), etc.) which I really can't stand.&lt;br /&gt;&lt;br /&gt;And I like the more or less subtle references to Star Trek (there are&lt;br /&gt;more than just Hiro doing the Vulcan salute).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-4603186550953441782?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/4603186550953441782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=4603186550953441782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/4603186550953441782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/4603186550953441782'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2007/10/heroes.html' title='Heroes'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-5905561678686467422</id><published>2007-08-07T16:33:00.000+02:00</published><updated>2007-10-01T08:18:37.892+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photo'/><title type='text'>In his father's footsteps</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gIwnv8AsteU/RrsI1Es8bfI/AAAAAAAAAAw/Tf2J2eBUar4/s1600-h/01337_inhisfathersfootsteps_1600x1200.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_gIwnv8AsteU/RrsI1Es8bfI/AAAAAAAAAAw/Tf2J2eBUar4/s320/01337_inhisfathersfootsteps_1600x1200.jpg" alt="" id="BLOGGER_PHOTO_ID_5096677111188188658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Fantastic photo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-5905561678686467422?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/5905561678686467422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=5905561678686467422' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5905561678686467422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/5905561678686467422'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2007/08/in-his-fathers-footsteps.html' title='In his father&apos;s footsteps'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_gIwnv8AsteU/RrsI1Es8bfI/AAAAAAAAAAw/Tf2J2eBUar4/s72-c/01337_inhisfathersfootsteps_1600x1200.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-8720877703788357439</id><published>2007-05-30T11:22:00.000+02:00</published><updated>2007-10-01T08:16:27.297+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='whining'/><category scheme='http://www.blogger.com/atom/ns#' term='gui'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>MFC Sucks. Badly.</title><content type='html'>I've done a fair amount of GUI-programming over the last 10 years, and there are a lot of toolkits out there of varying quality. None of them stand out as "excellent" in my eyes, but there is one which stands out as particularly lousy. MFC.&lt;br /&gt;&lt;br /&gt;MFC is a patchwork of old (and in many cases non-existing) design, backward-compatibility fixes, API limitations, bad documentation, and bugfixes. Just to take a few examples:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;The &lt;tt&gt;OnVScroll()&lt;/tt&gt; method which is called when a window's vertical scrollbar changes only gets the position as a 16-bit integer. 32-bit integers are supported, but you need to call &lt;tt&gt;GetScrollInfo()&lt;/tt&gt; to get it.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;tt&gt;OnVScroll()&lt;/tt&gt; gets a pointer to a &lt;tt&gt;CScrollBar&lt;/tt&gt; control, but this pointer is unusable (and in most cases &lt;tt&gt;NULL&lt;/tt&gt;). Instead, you need to call &lt;tt&gt;GetScrollInfo()&lt;/tt&gt; to get a reference to the scrollbar.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;tt&gt;CListCtrl&lt;/tt&gt; can be used as a "virtual listview", i.e. you specify the number of lines and a callback which is invoked each time the view needs the data for a given row. Useful when you need a large number of rows and fetch data on demand (such as displaying memory contents). However, it refuses to use more than 100 million elements. And, yes, this is then power-of-ten kind of million, not the power-of-two you might have expected in case the widget uses a part of the 32 bit index integer for tagging or such. And all documentation on this, including web articles and code samples consider 100 million to be "huge" and "enormous". If you have a 32-bit integer as index, why can't I have 2^32 entries in the view.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You can't set &lt;tt&gt;CListCtrl&lt;/tt&gt;'s vertical position by setting the position on the scrollbar.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you want to change colors in individual cells in a &lt;tt&gt;CListCtrl()&lt;/tt&gt;, you must implement your own drawing function &lt;i&gt;from scratch&lt;/i&gt;. There is no way to enhance the list control's own implementation. You might as well reimplement the entire list control from scratch (which many people seem to have done.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There is no way (short of black magic and sacrificing green goats) to get &lt;tt&gt;CListView&lt;/tt&gt; to use another implementation of &lt;tt&gt;CListCtrl&lt;/tt&gt;. There are lots of variants of &lt;tt&gt;CListCtrl&lt;/tt&gt; on the web, but exchanging the one &lt;tt&gt;ClistView&lt;/tt&gt; uses is easier said than done.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I needed to add a text-display window below my &lt;tt&gt;CListView&lt;/tt&gt; which was to display details about the selected row. This required 4 (!) extra classes with ~500 LOC. Compare this to &lt;a href="http://xmonad.org/"&gt;XMonad&lt;/a&gt;, a tiling X11 window manager implemented in about the same amount of code. But they used Haskell, not MFC. ;-)&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/7012742729372608936-8720877703788357439?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/8720877703788357439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=8720877703788357439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8720877703788357439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8720877703788357439'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2007/05/mfc-sucks-badly.html' title='MFC Sucks. Badly.'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-7328561825249657999</id><published>2007-05-16T16:54:00.000+02:00</published><updated>2007-10-01T08:17:21.052+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='whining'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Yet Another Annoying Thing About Visual Studio</title><content type='html'>I'm getting more and more annoyed by Visual Studio for every day I use it. Today's annoying thing is &lt;b&gt;broken &lt;tt&gt;.sbr&lt;/tt&gt; files&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Visual Studio has the annoying habit of leaving broken &lt;tt&gt;.sbr&lt;/tt&gt; files around. I'm not sure when or why they appear, possibly when a build is interrupted. When &lt;tt&gt;bscmake&lt;/tt&gt; at a later point tries to read these broken files, it croaks and causes the entire build to fail.&lt;br /&gt;&lt;br /&gt;Every single other compiler in the world has the good sense of not leaving incomplete files on disk when exiting. But not Microsoft's. And it's not like this is a new bug; a quick check on google &lt;a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=12108"&gt;showed&lt;/a&gt; that this bug has been there at least since 2000.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-7328561825249657999?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/7328561825249657999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=7328561825249657999' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7328561825249657999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/7328561825249657999'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2007/05/yet-another-annoying-thing-about-visual.html' title='Yet Another Annoying Thing About Visual Studio'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-8416027516518141030</id><published>2007-05-09T11:58:00.000+02:00</published><updated>2007-10-01T08:18:22.364+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Redirecting output from compiler/linker in Visual Studio 2005</title><content type='html'>I ran into an "interesting" (i.e. very annoying) problem today. I was in the process of figuring out a way to know if two Windows executables or DLLs are different. Just comparing them byte-for-byte does not work; the output &lt;tt&gt;cl.exe&lt;/tt&gt; is not identical even if the incoming source code is.&lt;br /&gt;&lt;br /&gt;So I tried to use &lt;tt&gt;dumpbin /disasm&lt;/tt&gt; and compare the two disassembly listing, which worked nicely. I then wrote a little Ruby script to add as a post-build step in Visual Studio:&lt;br /&gt;&lt;pre&gt;require 'digest/sha1'&lt;br /&gt;require 'tempfile'&lt;br /&gt;&lt;br /&gt;inputfile = ARGV.shift&lt;br /&gt;IO.popen("dumpbin /disasm #{inputfile}") do |io|&lt;br /&gt;Tempfile.open(File.basename(inputfile)) do |tempio|&lt;br /&gt; while io.gets&lt;br /&gt;   if $_ =~ /.*Dump of file.*/&lt;br /&gt;     next&lt;br /&gt;   else&lt;br /&gt;     tempio.write($_)&lt;br /&gt;   end&lt;br /&gt; end&lt;br /&gt; tempio.rewind&lt;br /&gt; File.open(inputfile + ".sha1", "w") do |outio|&lt;br /&gt;   outio.puts Digest::SHA1.hexdigest(tempio.read)&lt;br /&gt;   puts "Wrote SHA1 signature to #{outio.path}"&lt;br /&gt; end&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;but to my surprise, &lt;tt&gt;dumpbin&lt;/tt&gt; insisted on passing its output to the Visual Studio output window instead of through stdout and into my Ruby program. WTF?!&lt;br /&gt;&lt;br /&gt;I started to dig. What could possibly cause &lt;tt&gt;dumpbin.exe&lt;/tt&gt; to bypass stdout/stderr when run from inside Visual Studio? I fired up Process Explorer during build and studied the environment variables of &lt;tt&gt;cl.exe&lt;/tt&gt;. Is there any magic going on here? The following environment variables caught my eye:&lt;pre&gt;VCBuildHelper_CancelEvent&lt;br /&gt;VCBuildHelper_Command&lt;br /&gt;VS_UNICODE_OUTPUT&lt;br /&gt;&lt;/pre&gt;Knowing that &lt;a href="http://justfuckinggoogleit.com/"&gt;Google Is Your Friend&lt;/a&gt;, I got a few &lt;a href="http://www.tutorials-xe.com/WINKERNEL/build-issue/"&gt;hits&lt;/a&gt;, which gave me a hint about Unicode output being handled differently depending &lt;tt&gt;cl.exe&lt;/tt&gt; is executed outside or inside Visual Studio. It turns out that people has compiler &lt;a href="http://blogs.msdn.com/freik/archive/2006/04/05/569025.aspx"&gt;wrappers&lt;/a&gt; such as &lt;a href="http://www.bdsoft.com/tools/stlfilt.html"&gt;STLFILT&lt;/a&gt; which went mad when the output from the compiler disappeared.&lt;br /&gt;&lt;br /&gt;Was it really so difficult for Microsoft to anticipate this problem? Piping output from a compiler or linker isn't a very odd thing to do. And how necessary is it to be able to have Unicode error messages? And why didn't they fix stdout/stderr to be able to handle Unicode? -- which would have been The Right Solution to the problem in the first place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-8416027516518141030?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/8416027516518141030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=8416027516518141030' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8416027516518141030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8416027516518141030'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2007/05/redirecting-output-from-compilerlinker.html' title='Redirecting output from compiler/linker in Visual Studio 2005'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-6176398181812445467</id><published>2007-05-07T11:22:00.000+02:00</published><updated>2007-10-01T08:19:38.391+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>What happens during ExitProcess()</title><content type='html'>"The Old New Thing" is an excellent blog if you want to know things about Windows which is &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; in the documentation. Such as how  &lt;a href="http://blogs.msdn.com/oldnewthing/archive/2007/05/03/2383346.aspx"&gt;ExitProcess&lt;/a&gt; works:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"Exiting is one of the scariest moments in the lifetime of a process. (Sort of how landing is one of the scariest moments of air travel.)"&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-6176398181812445467?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/6176398181812445467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=6176398181812445467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/6176398181812445467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/6176398181812445467'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2007/05/what-happens-during-exitprocess.html' title='What happens during ExitProcess()'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7012742729372608936.post-8706326157555095178</id><published>2007-05-03T15:01:00.000+02:00</published><updated>2007-10-01T08:19:04.005+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='build system'/><title type='text'>The quest for a real build system, part 1</title><content type='html'>I've been looking for a "real" build system for quite some time, something which allows me to correctly and completely specify the relationsships between all elements of my program in a compact and easy-to-maintain sort of way. I didn't think it would be so hard, but apparently it is.&lt;br /&gt;&lt;br /&gt;Take Visual Studio, for an example. If I build an executable in directory A and also want to copy it to B, the only way to do that (except for possibly creating a special project for the task) is to add a post-build step which copies the executable from A to B. However, there is no way to make Visual Studio guarantee that the executables actually is copied. If the copy-step fails, it will never be executed again unless the executable itself is rebuilt. Since Visual Studio does not know (or care) about what happens in a post-build step, it is &lt;span style="font-weight: bold;"&gt;impossible&lt;/span&gt; to know if all post-build steps in a project actually succeeded. In other words, &lt;span style="font-weight: bold;"&gt;post-build steps are useless&lt;/span&gt; for anything related to the actual build process.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://scons.org/"&gt;SCons&lt;/a&gt; does this right. Its specification files are Python programs and you can manipulate nodes in the dependency graph exactly as you wish. Given that you've specified your dependency graph correctly, you can actually run &lt;tt&gt;scons&lt;/tt&gt; and it will rerun exactly those commands necessary to bring your targets up-to-date. As a result, you really don't need a "clean" command (even if there is one).&lt;br /&gt;&lt;br /&gt;Unfortunately, SCons has &lt;span style="font-weight: bold;"&gt;serious performance issues&lt;/span&gt; and does not scale well for very large systems. But sometimes I'm willing to pay a lot of performance for actually doing correct builds.&lt;br /&gt;&lt;br /&gt;I've been using &lt;a href="http://cmake.org/"&gt;CMake&lt;/a&gt; at work for some time, and it has some nice features which makes it the best there is at the moment. The fact that it can generate Visual Studio project files, while still giving command-line people like me a Makefile is a big plus.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7012742729372608936-8706326157555095178?l=thisisnotaprogrammersblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thisisnotaprogrammersblog.blogspot.com/feeds/8706326157555095178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7012742729372608936&amp;postID=8706326157555095178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8706326157555095178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7012742729372608936/posts/default/8706326157555095178'/><link rel='alternate' type='text/html' href='http://thisisnotaprogrammersblog.blogspot.com/2007/05/quest-for-real-build-system-part-1.html' title='The quest for a real build system, part 1'/><author><name>JesperE</name><uri>http://www.blogger.com/profile/00034116782690900048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_gIwnv8AsteU/SVf_l-C91DI/AAAAAAAAACY/UQPZzOC6C7w/S220/profil.jpg'/></author><thr:total>0</thr:total></entry></feed>
