<?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-8124028403626039195</id><updated>2012-02-01T15:04:44.771+01:00</updated><category term='Tomcat'/><category term='Fedora'/><category term='VMWare'/><category term='CentraSite'/><category term='Git'/><category term='XML-RPC'/><category term='Labs'/><category term='Maven'/><category term='httpd'/><category term='Linux'/><category term='JAXR'/><category term='VirtualBox'/><category term='Sysdeo'/><category term='Eclipse'/><category term='Derby'/><category term='JaxMas'/><category term='Authentication'/><category term='n'/><category term='Bugzilla'/><category term='Apache'/><category term='EclipseTotale'/><category term='st'/><category term='data binding'/><title type='text'>Grumpy Apache</title><subtitle type='html'>Rantings of an aging, notorious coder.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>44</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-4274673377813076730</id><published>2011-11-05T19:36:00.015+01:00</published><updated>2011-11-06T19:44:14.894+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='n'/><title type='text'>ICU</title><content type='html'>Last weekend, I had the unexpected opportunity to participate in the nightly snoring contest held at the &lt;a href="http://www.medizin.uni-tuebingen.de/index.php?id=21364&amp;amp;site=ukt&amp;amp;lang=de"&gt;intensive care unit (ICU) of the neurological clinic, university of Tübingen&lt;/a&gt;. Such a chance comes once in a lifetime, so I could not miss it. Here's how it went:&lt;br /&gt;&lt;br /&gt;My wife certainly considered me to be the odds-on favorite. But, alas, even wifes can overestimate their husband: Bed 1 (the contents of which have been yours truly) lost by far. At aboUT 21:00, bed 3 opened with a sonorous snore of about 80 decibel (about enough to be heard in a disco) and immediately took the lead. But even such an awesome competitor had to give in: During the night, bed 2 never ceased to impress with staccati of four to five 70-decibel-snores in a row, taking the first price with him.&lt;br /&gt;&lt;br /&gt;Every morning there a friendly female woke me, one of the doctors, who asked to take my blood and apologized in so many words for waking me. When that was done, she continued to do the same at the other beds, effectively waking all of us.&lt;br /&gt;&lt;br /&gt;On the last morning there (sunday) I prepared a little speech for her, which I could never hold, because I was moved from the ICU to a normal bed in the night. So, I am trying to do it here and now:&lt;br /&gt;&lt;br /&gt;I don't know whether any of my readers has ever spent a night in an ICU bed. It's deeply depressing. The only thing to look at are the bubbles in the bottles over you, which are pooring liquids in your veins, or the monitor, which is showing your blood pressure, heart beat, and stuff like that. With three apoplectic strokes in a row behind you (I promise to stop counting in public now. My inner self is a different matter.) there isn't much to expect or even hope for. Forget about sleep: There is a continuous background noise. Light is never completely lit and every five minutes some machine is beeping alarm, ideally on another bed, but from time to time it's at your own. (Usually, because you turned yourself to the other side.) Think of a Jura coffee machine that requests service to imagine the sound. In my worst moment, the nurse saw fit to blow oxygene in my nose because I seemed to be loosing. (Usually an indication of a heart that no longer works properly, fortunately not in this case.)&lt;br /&gt;&lt;br /&gt;After such a night, waking up is a gift! I'm still alive! I can kiss my wife today. With a bit of luck, I can hod our daughter. I can enjoy the smell of coffee. (Something, I couldn't do in the last months even if&lt;br /&gt;I had coffee. But, it works again!) So, don't apologize, Dr., you're more than welcome. I can't tell, whether the other gentlemen share my feelings, but I'll be glad to give a few centiliters of blood, if I can have this day in exchange!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-4274673377813076730?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/4274673377813076730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=4274673377813076730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4274673377813076730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4274673377813076730'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2011/11/icu.html' title='ICU'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-3110356422046612944</id><published>2011-11-05T19:19:00.004+01:00</published><updated>2011-11-05T19:32:02.335+01:00</updated><title type='text'>Still there, world!</title><content type='html'>This is not the end. But, let's face it: This (or any future post) might very well be my last. (In fact, last saturday I'd have been surprised about the additional week that I had since then. So, it seems to be ino order to prepare. So, how can a coder like me leave the world in grace? Like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;printf("Good Bye, World \n");&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Sadly, I'm no wizard. For Dennis Ritchie, this would have been&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;printf("GOOD BYE, WORLD!\n");&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;(One of &lt;a href="http://en.wikipedia.org/wiki/Death_%28Discworld%29"&gt;deaths&lt;/a&gt; silly jokes. That'd be style!)&lt;br /&gt;&lt;br /&gt;But, for now and me, the only proper thing seems to be:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;printf("Still there, World \n");&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-3110356422046612944?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/3110356422046612944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=3110356422046612944' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/3110356422046612944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/3110356422046612944'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2011/11/still-there-world.html' title='Still there, world!'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-4958649381033874194</id><published>2011-09-19T17:04:00.005+02:00</published><updated>2011-09-19T17:42:57.560+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='st'/><title type='text'>A clash of generations</title><content type='html'>Yesterday was a relatively minor election in Germany, more precisely in Berlin, in its roles as german capital and as one of the german federal states. The most remarkable thing about that election was this: The german &lt;a href="http://en.wikipedia.org/wiki/Pirate_party"&gt;pirate party&lt;/a&gt; (&lt;a href="http://en.wikipedia.org/wiki/Piratenpartei_Deutschland"&gt;direct link in german&lt;/a&gt;) got no less than 9% of the votes and  15 seats in Berlins state parliament. (Luckily, they didn't get more because they didn't have more candidates. In other words, additional votes would likely have been lost....)&lt;br /&gt;&lt;br /&gt;The reactions fro the mainstream media are remarkably similar to those responding to the first successes of the &lt;a href="http://en.wikipedia.org/wiki/Green_party"&gt;german green party&lt;/a&gt; a (&lt;a href="http://de.wikipedia.org/wiki/B%C3%BCndnis_90/Die_Gr%C3%BCnen"&gt;direct link in german&lt;/a&gt;) about 35 years ago, along the lines of "This could only happen in a city-state, like Berlin, not in a territorial state." (I should mention that just this year Germany got its first greeen prime minister in a federal state, &lt;a href="http://de.wikipedia.org/wiki/Baden-W%C3%BCrttemberg"&gt;Baden Württemberg&lt;/a&gt;, which is a territorial state. Another typical reaction: "The accountability of being in parliament will quickly dissolve voters illusions.", expecting that the result will be quite different after the next election."&lt;br /&gt;&lt;br /&gt;I believe, what most of these responders don't get is that the pirate party is driven by a &lt;span style="font-weight:bold;"&gt;clash of generations&lt;/span&gt;. They won't go away so quickly, if at all.&lt;br /&gt;&lt;br /&gt;The pirates voters are mostly people below 40 years. That's exactly the generation that was raised with, or even in, the Internet. To them, the the Internet provides value. It's important. Things like "Vorratsdatenspeicherung" (&lt;a href="http://en.wikipedia.org/wiki/Telecommunications_data_retention"&gt;telecommunications data retention&lt;/a&gt;) real name policies, various degrees of censorahip (regardless of the alleged reason: terroriam, child pornography, nazism, not to mention political grounds (Iran, China, Northern Korea) orcopyright violations) are threatening this value. Threatening something important that is.&lt;br /&gt;&lt;br /&gt;Take, on the other hand, the elder generation. The internet isn't important to them. It's a toy, that their children or grandchildren are playing with. A real lot of them are even considering a threat. (I remember some politicians assuming that the recent terror attacks in Norway wouldn't have happened withut the Internet. Similar voices can be heard after each and any amok run. Guess the age of such politicians.) They are quixk to call for exactly those things that the younger generation perceives as a threat. To the elders, it's the cure.&lt;br /&gt;&lt;br /&gt;To me, that's the same situation that we had when the green party was founded. Our generation considered the protection of the environment as important, our parents and grandparents considered it as a thread (mostly economical). The greens didn't go away. There time came when our generations and those of our children outnumbered our anchestors. I believe the time of the piraztes (or whoever follows them, should they break apart) Perhaps we'll have the first pirate prime minister in another 30 years?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-4958649381033874194?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/4958649381033874194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=4958649381033874194' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4958649381033874194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4958649381033874194'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2011/09/clash-of-generations.html' title='A clash of generations'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-5525305362556807472</id><published>2011-08-28T00:27:00.009+02:00</published><updated>2011-08-29T12:19:13.688+02:00</updated><title type='text'>The mess that is m2e connectors</title><content type='html'>&lt;ul&gt;&lt;li&gt;Warning: The following is most likely stubborn, unreasonable,one-sided, and ignores a lot of facts, of which I am unaware.&lt;/li&gt;&lt;/ul&gt;I am an &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; user since approximately 10 years. I am also a user of &lt;a href="http://maven.apache.org/"&gt;Maven 2&lt;/a&gt; since may be 4-5 years. As a consequence I am also using the former &lt;a href="http://m2eclipse.sonatype.org/"&gt;M2Eclipse&lt;/a&gt; (an Eclipse Plugin for using Maven as the &lt;a href="http://http//www.eclipse.org/articles/Article-Builders/builders.html"&gt;Eclipse Builder&lt;/a&gt;) since its early days. While I am quite happy with Eclipse and Maven, the experience with M2Eclipse has never been free from annoyance and fights. To be honest, it has always been hard to convince my colleagues to use it. And I fear that battle is lost now. I wasn't the one loosing it: The decisive strike was administrated by M2E itself...&lt;br /&gt;&lt;br /&gt;M2Eclipse has recently been moved to the Eclipse Foundation. It is now called M2E, &lt;a href="http://wiki.eclipse.org/M2E_Extension_Development"&gt;lives at eclipse.org&lt;/a&gt; and can be installed from within Eclipse Indigo as a standard plugin, just like CDT, or WTP, which is, of course, a good thing.&lt;br /&gt;&lt;br /&gt;So, when Indigo was published (together with M2E 1.0 as a simultaneous release), I rushed to load it down in the hope of a better user experience. But the first thing I noted was: M2E was showing errors in practically every POM I have ever written, and there are quite a few of them, including those of several Apache projects and those at work. So,as  a first warning:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;M2E 1.0 is incompatible with its predecessors. If you want to carry on using it without problems, don't upgrade to Indigo, or try using an older version of M2Eclipse with it (I haven't tried, whether that works.&lt;/span&gt; The reason for this intentional incompatibility (!) are the so-calles M2E connectors, which, I am sure, have driven a lot of people to madness since their invention. In what follows I'll try to outline my understanding of what the connectors are and why I do consider them a real, bloody mess.&lt;br /&gt;&lt;br /&gt;I am still not completely sure, what problem the connectors ought to solve, but from my past experiences I guess something like this:&lt;br /&gt;&lt;br /&gt;M2E allows you to run Maven manually. You can invoke a goal like "mvn install" from within Eclipse just as you would do it from the command line. That works (and always worked) just fine. Unfortunately, Maven is also invoked automagically from M2E whenever Eclipse builds the project, for example after a clean. In such cases M2E acts as an "Eclipse Builder". It is these latter invocations that people have always had problems with and that the connectors should handle better. First of all, what are these problems?&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Builders can be invoked quite frequently. If automatic builds are enabled and you are saving after every 10 keys pressed, the builders can be invoked every 20 seconds or so.&lt;/li&gt;&lt;li&gt;The UI is mainly locked while a builder is running. In conjunction with the frequent invocation that means that the UI can be locked 80% of the time, which a human developer considers extremely painful, in particular, if the builder invokes Maven, which can take quite some time.&lt;/li&gt;&lt;li&gt;Some Maven (I am unaware of any in reality, but the M2E developers are mentioning this quite frequently)plugins assume that they are invoked from the command line. That means, in particular, that System.exit is called once Maven is done. Consequently, they consider use of resources as unproblematic: They acquire a lot, including memory and don't release it properly. The resources are released automatically by System.exit. But that doesn't work in M2E which runs as long as Eclipse does (meaning the whole day for Joe Average Developer) and invokes Maven (and the plugin with it) again and again.&lt;/li&gt;&lt;li&gt;M2E doesn't know whether a plugin (or, more precisely, a plugins goal) should run as part of an automatic build. For example, source and resource generators typicallyshould, artifact generetors typically should not. Consequently, a lot of unnnecessary plugins are invoked by the automatic build, slowing bdown the builder even more, while necessary goals are not. This is not what people expect and leads to invalid behaviour on the side of the developer. For exsmple, I keep telling my colleagues again and again that they shouldd invoke Maven manually, if the test suite depends on a generated property file.&lt;/li&gt;&lt;/ol&gt;But how should connectors fix this: I am partially speculating here, but my impression is this: &lt;span style="font-weight: bold;"&gt;When Maven is invoked as a builder, then it is modified by M2E to no longer invoke plugins directly. Instead, Maven invokes the plugins connector, which in turn invokes the plugin.&lt;/span&gt; The connector ought to  know the plugin and decide, whether a goal must be invoked as part of the automatic build process or not. But that means, in particular:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;M2E can invoke a plugin as part of the automatic build process if, and only if, there is a connector for the plugin, or you specially configure the plugin.&lt;/span&gt; (More on that configuration later on.)&lt;br /&gt;&lt;br /&gt;And that is the main problem we are currently facing: Connectors are missing for a lot of important plugins, for example the JAXB plugins, the JavaCC plugins, the antrun plugin, and so on. The philosophy of the M2E developers seems to be that time will cure this problem, which is why they are mainly ignoring it.See, for example,&lt;br /&gt;bug 350414, bug 347521, bug 350810, bug 350811, bug 352494, bug 350299, and so on. Since my first attempts with Indigo, I am unaware of any new connectors, although the lack of them is currently the biggest issue that most people have with M2E. Try a Google search for "m2e mailing list connector", if you don't believe me.&lt;br /&gt;&lt;br /&gt;But even, if the developers were right, they choose to completely ignore another problem: &lt;span style="font-weight:bold;"&gt;You can no longer use your own plugins in the Eclipse automatic builds, unless you create a connector for the plugin, or create a project-specific configuration.&lt;/span&gt; (Again, more on that confuguration in due time.)&lt;br /&gt;&lt;br /&gt;At this point, one might argue: If you have written a plugin, it shouldn't be too difficult or too much work to write a connector as well. I'LL handle that aspect below.&lt;br /&gt;&lt;br /&gt;First of all, regarding the configuration: Absent a suitable connector, there is currently only one possibility to use a plugin as part of the automatic build: You need to add a plugin-specific configuration snippet ike the following to your POM:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; &amp;lt;plugin&amp;gt;&lt;br /&gt;   &amp;lt;groupid&amp;gt;org.eclipse.m2e&amp;lt;/groupid&amp;gt;&lt;br /&gt;   &amp;lt;artifactid&amp;gt;lifecycle-mapping&amp;lt;/artifactid&amp;gt;&lt;br /&gt;   &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;   &amp;lt;configuration&amp;gt;&lt;br /&gt;     &amp;lt;ifecyclemappingmetadata&amp;gt;&lt;br /&gt;       &amp;lt;pluginexecutions&amp;gt;&lt;br /&gt;         &amp;lt;pluginexecution&amp;gt;&lt;br /&gt;           &amp;lt;pluginexecutionfilter&amp;gt;&lt;br /&gt;             &amp;lt;groupid&amp;gt;org.codehaus.mojo&amp;lt;/groupid&amp;gt;&lt;br /&gt;             &amp;lt;artifactid&amp;gt;javacc-maven-plugin&amp;lt;/artifactid&amp;gt;&lt;br /&gt;             &amp;lt;versionrange&amp;gt;[2.6,)&amp;lt;/versionrange&amp;gt;&lt;br /&gt;             &amp;lt;goals&amp;gt;&lt;br /&gt;               &amp;lt;goal&amp;gt;javacc&amp;lt;/goal&amp;gt;&lt;br /&gt;             &amp;lt;/goals&amp;gt;&lt;br /&gt;           &amp;lt;/pluginexecutionfilter&amp;gt;&lt;br /&gt;           &amp;lt;action&amp;gt;&lt;br /&gt;             &amp;lt;execute&amp;gt;&amp;lt;/execute&amp;gt;&lt;br /&gt;           &amp;lt;/action&amp;gt;&lt;br /&gt;         &amp;lt;/pluginexecution&amp;gt;&lt;br /&gt;       &amp;lt;/pluginexecutions&amp;gt;&lt;br /&gt;     &amp;lt;/lifecyclemappingmetadata&amp;gt;&lt;br /&gt;   &amp;lt;/configuration&amp;gt;&lt;br /&gt; &amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Neat, isn't it? And so short! This would advice M2E that I want the javacc-maven-plugin to run as a part of the automatic M2E build.&lt;br /&gt;&lt;br /&gt;So far, I have tried to be as unbiased as posssible, but now to the points that drive me sick. (As if that were currently required...)&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The space required for the M2E configuration typically exceeds the actual plugin configuration by far! If there ever was   a good example of POM pollution, here's a better one.&lt;/li&gt;&lt;li&gt;M2E insists in the presence of such configuration, regardless of whether I want the plugin to run or not.If it is missing, then the automatic builder won't work at all. There is no default handling, as was present in previous versions of M2E. (I won't discuss what the default should be, I'd just like to have any.)&lt;/li&gt;&lt;li&gt;The M2E configuration must be stored in the POM, or any parent POM. There is no other possibility, like the Eclipse preferences or some file in .settings. In other words, if you are using IDEA or NetBeans, but there is  a single project member using Eclipse, you still have to enjoy the M2E configuration in the POM. As bug 350414 shows, there are a real lot of people who consider this, at best, ugly.&lt;/li&gt;&lt;li&gt;I tried to play nice and start creating connectors. But this simply didn't work: I am a Maven developer, not an Eclipse developer. And a connector is an Eclipse plugin. I'm not interested in writing Eclipse plugins. (Which Maven developer is?) But there is nothing like a template peoject or the like, only &lt;a href="http://http://wiki.eclipse.org/M2E_Extension_Development"&gt;this&lt;/a&gt; well meant Wiki article, which doesn't help too much. For example, it assumes the use of &lt;a href="http://http//tycho.sonatype.org/"&gt;Tycho&lt;/a&gt;, which only serves to make Eclipse programming even more complicated.&lt;/li&gt;&lt;li&gt;The design of the connectors looks broken to me. Have a look at  the &lt;a href="http://http//git.eclipse.org/c/m2e/m2e-core.git/tree/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/AbstractJavaProjectConfigurator.java"&gt;AbstractJavaProjectConfigurator&lt;/a&gt;, which seems to be the typical superclass of a connector: It contains methods for configuring the Maven classpath, for adding source folders, for creating a list of files that have been created (or must be refreshed): &lt;span style="font-weight: bold;"&gt;These are all things that are directly duplicating the work of the Maven plugin and should be left to the Maven plugin, or Maven, alone.&lt;/span&gt; In other words:&lt;/li&gt;&lt;li&gt;Circumventing the Maven plugin is bad. Deciding whether to run or not should be left to the plugin, or Maven. (See, for example, the comment on "short-cutting" code generation on the &lt;a href="http://short-cuts%20code%20generation/"&gt;Wiki page on writing connectors&lt;/a&gt;&lt;br /&gt;.)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;To sum it all up:&lt;br /&gt;&lt;br /&gt;I fail to see why we can't throw away the whole connector mess and replace it with a configurable Maven goal that should be run by the automatic build ? There is even a reasoable default: "mvn generate-resources". Let's reiterate the reasons for inventing connectors from above and compare it with this solution:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Maven wouldn 't be invoked more frequently&lt;/li&gt;&lt;li&gt;If a single Maven execution takes too long, fix the plugins that don't do a good job at detecting whether they can short-cut. Ant still does a better job here, years after the invention of Maven 2.&lt;/li&gt;&lt;li&gt;If some plugins don't behave well with regard to resources, fix'em. If we can wait months or years for connectors, we might as well wait for bug fixes in plugins.&lt;/li&gt;&lt;li&gt;The question whether to run a plugin or not can be left to the Maven lifecycle, if we choose a lifecycle goal like  "generate-resources" Maven knows perfectly well the plugins and goals to include or exclude.&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-5525305362556807472?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/5525305362556807472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=5525305362556807472' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5525305362556807472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5525305362556807472'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2011/08/mess-that-is-m2e-connectors.html' title='The mess that is m2e connectors'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-5054485807035374636</id><published>2011-08-19T22:54:00.003+02:00</published><updated>2011-08-19T23:04:26.510+02:00</updated><title type='text'>Alive - and kicking</title><content type='html'>For more serious matters: Last tuesday I was struck by a left sided apoplexy. The good news: I am alive. (Obviously) I am at home, having left the hospital today. Using the keyboard is still very difficult, though (Excuse for any typos ...) Need to get this better over the next weeks to become ready for the job ...&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-5054485807035374636?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/5054485807035374636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=5054485807035374636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5054485807035374636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5054485807035374636'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2011/08/alive-and-kicking.html' title='Alive - and kicking'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-2105872753759516358</id><published>2011-07-25T08:36:00.001+02:00</published><updated>2011-07-25T08:40:05.610+02:00</updated><title type='text'>Closing the ticket</title><content type='html'>Quoting from a support ticket:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;As we are still reducing the cost of operations in the IT department, we are currently working on a limited number of service requests. As a consequence, we are unable to work on your ticket. Thanks very much for your understanding.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I won't name the company. (And, just to make sure: No, it wasn't my employer.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-2105872753759516358?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/2105872753759516358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=2105872753759516358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/2105872753759516358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/2105872753759516358'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2011/07/closing-ticket.html' title='Closing the ticket'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-4619334828586769208</id><published>2011-05-22T15:42:00.005+02:00</published><updated>2011-05-22T16:59:49.271+02:00</updated><title type='text'>Why Jenkins is better off as an independent organization</title><content type='html'>One thing that has definitely moved me this year is the development around &lt;a href="http://jenkins-ci.org/"&gt;Jenkins&lt;/a&gt; / &lt;a href="http://java.net/projects/hudshttp://www.blogger.com/img/blank.gifon/"&gt;Hudson&lt;/a&gt;. I never even used either (although I am quite sure that I will during the 20 years of my remaining professional live), so I cannot even tell why it was moving me, but I definitely followed with real concern. May be, that it was due to the well known persons that are involved, including &lt;a href="http://www.kohsuke.org/"&gt;Kohsuke Kawaguchi&lt;/a&gt; (the guy who drove &lt;a href="http://jaxb.java.net/"&gt;JAXB 2&lt;/a&gt;) as well as the founders of &lt;a href="http://www.sonatype.com/"&gt;Sonatype&lt;/a&gt;http://www.blogger.com/img/blank.gif, &lt;a href="http://tasktop.com/"&gt;Tasktop&lt;/a&gt;, and &lt;a href="http://www.cloudbees.com/"&gt;Cloudbees&lt;/a&gt;. May be that it was caused by the front built between the opponents, consisting of an open source community and Oracle, a corporation that nowadays enjoys much more weight than it requires. Whatever.&lt;br /&gt;&lt;br /&gt;One point that definitely interested me has been whether the respective projects would join a larger organization or not. As it currently looks, Jenkins has decided to stay independently and not join, for example, &lt;a href="http://www.apache.org"&gt;Apache&lt;/a&gt;. OTOH, Hudson will be moved to &lt;a href="http://www.eclipse.org"&gt;Eclipse&lt;/a&gt;. My expectation is that Jenkins will be better off with it's decision.&lt;br /&gt;&lt;br /&gt;It's not that I'd vote against big organizations in general. For example, I believe that &lt;a href="http://subversion.apache.org/"&gt;Subversion&lt;/a&gt;'s move to Apache has been&lt;br /&gt;a good choice. In that case, the benefits of having a big daddy will outweigh the disadvantages like the need to following certain policies that are largely driven by a bigger community and close-to-corporate culture. I haven't got any personal experiences with Eclipse, but I'd expect that both the benefits and the weak points will be comparable for Hudson.&lt;br /&gt;&lt;br /&gt;From my point of view, the power of Hudson/Jenkins is the unusual multitude of plugins. Name any source control or build system, programming language, repository or CMS: Chances are excellent that you'll find one or even more plugins that support it. This is most likely due to the &lt;a href="https://wiki.jenkins-ci.org/display/JENKINS/Extension+points"&gt;architecture&lt;/a&gt;, most likely borrowed from Eclipse, which has had a phenomenal success in this regard. Consequently, the more attractive Hudson or Jenkins can be for plugin developers, the more successful they will be.&lt;br /&gt;&lt;br /&gt;But fine grained access rights, tight control over legal aspects of code that enters and well defined policies aren't exactly what a bunch of completely different plugin developers requires. In contrary, the lower the hurdles are for adding a new plugin or publishing a new plugin release, the more attractive.&lt;br /&gt;&lt;br /&gt;I can very well imagine that Sonatype, in particular, will do an excellent Job in driving Hudson at Eclipse. They have demonstrated their exceptional abilities with &lt;a href="http://maven.apache.org"&gt;Maven&lt;/a&gt;, &lt;a href="http://tycho.sonatype.org/"&gt;Tycho&lt;/a&gt;, or &lt;a href="http://nexus.sonatype.org/"&gt;Nexus&lt;/a&gt;. In the medium term, I'd expect Hudson to be more visually attractive, perhaps easier to use and possibly will have a cleaner and mroe agile core. (That's some things they are doing really well.) But they won't be able to create and maintain plugins for just everything. My guess is that Jenkins will take the lead in terms of extension points (that's the part of the core that's driven by plugin developers), number of plugins and hence applicability in different situations. May very well be that Hudson can be the bigger commercial success, but Jenkin's big enough to counter.&lt;br /&gt;&lt;br /&gt;Whatever the outcome, it will be interesting to follow. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-4619334828586769208?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/4619334828586769208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=4619334828586769208' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4619334828586769208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4619334828586769208'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2011/05/why-jenkins-is-better-off-as.html' title='Why Jenkins is better off as an independent organization'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-3268600229473308784</id><published>2011-03-31T08:53:00.005+02:00</published><updated>2011-05-22T15:42:48.473+02:00</updated><title type='text'>Standing on the shoulders of giants</title><content type='html'>&lt;blockquote&gt;In building our homegrown basic, we borrowed bits and pieces of our design from previous versions, a long-standing software tradition. Languages evolve; ideas blend together; in computer technology, we all stand on others’ shoulders.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Paul Allen, Microsoft co-founder, in &lt;a href="http://www.vanityfair.com/business/features/2011/05/paul-allen-201105?currentPage=2"&gt;Microsoft's Odd Couple&lt;/a&gt;, 2011&lt;br /&gt;&lt;br /&gt;Paul Allen is also the owner of Interval Licensing, LLC, a company that is &lt;a href="http://en.wikipedia.org/wiki/Interval_Research_Corporation"&gt;currently accusing&lt;/a&gt; AOL, Apple, eBay, Facebook, Google, Netflix, Office Depot, OfficeMax, Staples, Yahoo!, and YouTube (but not Microsoft) for violation of four almost ridiculous patents.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-3268600229473308784?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/3268600229473308784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=3268600229473308784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/3268600229473308784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/3268600229473308784'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2011/03/in-building-our-homegrown-basic-we.html' title='Standing on the shoulders of giants'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-1479445679904199385</id><published>2011-03-18T09:28:00.002+01:00</published><updated>2011-03-18T11:29:00.395+01:00</updated><title type='text'>How to develop a project</title><content type='html'>I don't know how others do this, but having just experienced this for the n-th time in another different company (it feels the same in all big companies), it seems to deserve some notes.&lt;br /&gt;&lt;br /&gt;In my experience, project development typically works like this:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A general target is set. ("Wouldn't it be cool, if we could do this and that automatically? Currently it involves a manual process, which goes over weeks. It could save a lot of work and we'd possibly have it done in minutes, or at least days?") The target is agreed upon, a sponsor is found who agrees to spend some money.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A project team is built. The project team usually involves a project manager, business people from all affected departments, including operations (which will usually have nothing to do with the thing until and possibly even after the first months of productive use). Finally, there are the people who will actually be writing the documents on requirements, architecture, and whatever else seems to be required. Let's call them the consultants.&lt;/li&gt;&lt;li&gt;The consultants are usually very clever people, or at least some of them are. In most cases there even is at least one so-called "software architect". As the term indicates, consultants are rarely internal staff. And if they are, they are rarely bound to a particular department, but hopping from project to project. Very cleaver people are rare and sought after everywhere. The sooner they can start a new project, the better. OTOH, this means that they don't have a deep knowledge of the business topics involved. In other words, a lot of discussion between the consultants and the business people will be required. The consultants have to learn to translate the different languages of the business people into their own terms and, not less important, they must translate their own terms back into a language that the business people understand. (The last 2 years, I have been working in a project, where the word "order" has at least 4 completely different technical and semantical meanings, depending on the context.)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The specification evolves over time. Initially, it was expected that fixing the specification (including agreement from all affected departments) will take 6 months and another 6 months was expected for implementation. That means go-live in one year. Of course, given all the required discussions, changes, additions, and whatever, the specification won't take 6 months, but 9 months, one year, or even more. You're lucky, if the estimated time for implementation remains at 6 months: I've seen it happening that the additional time for specification was cat from the implementation time frame. No problem, because the specs are now so good, thanks to the additional time, that the implementors can save the same amount of time.&lt;/li&gt;&lt;li&gt;Finally the specs are done. Let's assume that the estimated amount of work for implementation is 2 man-years. Now we can estimate the time that it takes quite easily: With 4 team members, it will take 6 months. But we don't have time. We'll have 6 team members, hence only 4 months, so we can keep our targets.&lt;br /&gt;You think, this is funny? Just ask yourself: When did you see it the last time, that one or more additional team members were hired, if the project wasn't on schedule.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If we are lucky, the six team members are at least average programmers. It is rare, that a "very clever" one is included. Very clever people are too rare to stay in the implementation teams. They are pulled off to work at presales, as "software architects", or "business consultants". In bad cases, two or three of the team members are clearly below. Either that, or they come from a less technical world (main frame), have been working in a simpler environment for 20 years and are now exposed to a world where you work with 7 servers or worse, including frontend, backend, database, LDAP, and at least three different queues or other external services.&lt;br /&gt;The team members have "clear assignments". After all, there are business requirements, formal specifications, and whatever you might ask for. But, of course, they are also external staff, or at least members of a different (IT) department. In other words, just as the consultants before, they need to learn and understand the business topics. In theory, you *can* read, understand, and memorize those thousand (or even more) pages of specs. In practice, you are expected to do this while already implementing. At least, I can't remember a projects GANTT diagram, where the first two weeks have been reserved for "reading".&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;In other words, let's face it: In particular in the first weeks, implementors are clearly overstrained. And there is few guidance: The consultants who wrote the specs, or at least most of them, have already been assigned to another project. I can't remember a case, where a specification writer has been part of the implementation team, with the exception of yours truly. Of course, they are available for questions. But the first technical decisions, apart from "we will have those 8 different modules running on 3 servers with application server X and OS Y (all choosen by the big companies inquisitio..., pardon, central IT department, except the third server, where we are forced to use application server, or OS Z)" (Usually written down in a document called "software architecture", together with the promise that the application will scale well, by "simply" using more than one instance of X and Y per server...) are usually made&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;at a time where the schedule is already heavily pressing&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;by people who haven't yet a deeper understanding of the project&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;by people who aren't considered excellent&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Take that together with the fact that these first decisions will have heavy impact on the projects future.&lt;br /&gt;&lt;br /&gt;Another matter is the teams structure. Ideally, a project would start with one or two, preferably good, programmers who lay the general architecture. In time, other programmers would come in, taking up what's there and with the possibility to learn quick by asking the initial. After some weeks, it would be possible to assign a dedicated field of work to a new programmer: Most API's basically fixed, at least dummy implementations of interfaces to other services, and so on. In other words, an environment where even an under-average programmer has a chance to do good work. Perhaps the specs might even be helpful at that time, because one of the initial programmers can tell you know exactly where to implement the stuff, which API's to use, and so on. The specs have become applicable.&lt;br /&gt;&lt;br /&gt;I really wonder, whether things couldn't be different. Suggest the following:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Let's add one, or even two, very clever consultants to the specification team. Of course, that means that the sponsor's initial costs become bigger.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;The task of the additional people would be two-fold: 75% implementation, 25% following the specs. The latter means that they should participate in the most important meatings, follow the communications via mail, or whatever, and read the documents.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Implementation means, at this time, to develop something that is as good as possible between a click-dummy, or PoC, and the real target.&lt;/li&gt; &lt;br /&gt;  &lt;li&gt;In case of a real implementation, the initial implementors ought to stay&lt;br /&gt;    in the project for at least 6 months.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Of course, the chances are, that a good part of this initial implementation will be thrown away later on. But, I'd bet that a good part of work could be taken over. Not to underestimate the amount of input&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;from the technical side (the implementors) on the spec writers and&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;from both spec writers and business team on the implementors&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;the much greater momentum that the real implementation will have&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;the better chance to have a good estimation of the implementations costs and schedule&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;I believe, it is because they are much closer to my idea of a project when companies like Google, or Apple, can be innovative, and more innovative than others. Doing things is never the same than planning. Most likely, I'll never see that happening...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-1479445679904199385?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/1479445679904199385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=1479445679904199385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/1479445679904199385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/1479445679904199385'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2011/03/how-to-develop-project.html' title='How to develop a project'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-8228123051639251996</id><published>2011-03-05T13:05:00.001+01:00</published><updated>2011-03-05T13:07:56.629+01:00</updated><title type='text'>Join the Microsoft campaign ...</title><content type='html'>to &lt;a href="http://ie6countdown.com/"&gt;move off Internet Epxlorer 6&lt;/a&gt;! Use &lt;a href="http://www.mozilla.com/en-US/firefox/"&gt;Firefox&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-8228123051639251996?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/8228123051639251996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=8228123051639251996' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/8228123051639251996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/8228123051639251996'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2011/03/join-microsoft-campaign.html' title='Join the Microsoft campaign ...'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-5668182589714869244</id><published>2011-02-13T03:49:00.001+01:00</published><updated>2011-02-13T03:50:37.273+01:00</updated><title type='text'>Neill Gaiman on copyright and piracy</title><content type='html'>Good thing to note that one of your favourite authors gets it: &lt;a href="http://www.youtube.com/watch?v=0Qkyt1wXNlI"&gt;http://www.youtube.com/watch?v=0Qkyt1wXNlI&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-5668182589714869244?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/5668182589714869244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=5668182589714869244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5668182589714869244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5668182589714869244'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2011/02/neill-gaiman-on-copyright-and-piracy.html' title='Neill Gaiman on copyright and piracy'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-2653080332371583559</id><published>2010-08-19T17:56:00.003+02:00</published><updated>2010-08-19T18:36:31.911+02:00</updated><title type='text'>Certificate conversion</title><content type='html'>Quite a useful tool for conversion between the various certificate/keystore formats: The &lt;a href="https://www.sslshopper.com/ssl-converter.html"&gt;SSL Converter&lt;/a&gt; is a small web interface which allows you to upload a file from your hard drive. The format is usually detected automatically from the file extension. You select the target format and press "Convert Certificate" - that's it!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_-Usy_X0vTUM/TG1amvMJhDI/AAAAAAAAAvI/Q5sSVljjX4A/s1600/ssl-converter.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 187px;" src="http://3.bp.blogspot.com/_-Usy_X0vTUM/TG1amvMJhDI/AAAAAAAAAvI/Q5sSVljjX4A/s400/ssl-converter.png" alt="" id="BLOGGER_PHOTO_ID_5507157540892935218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you'd like to automate your further conversions, the site is even nice enough to mention the equivalent openssl commands.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-2653080332371583559?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/2653080332371583559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=2653080332371583559' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/2653080332371583559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/2653080332371583559'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2010/08/certificate-conversion.html' title='Certificate conversion'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_-Usy_X0vTUM/TG1amvMJhDI/AAAAAAAAAvI/Q5sSVljjX4A/s72-c/ssl-converter.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-4079749978267059743</id><published>2010-08-14T17:22:00.002+02:00</published><updated>2010-08-14T17:34:42.501+02:00</updated><title type='text'>Bad news for Oracle</title><content type='html'>I think this is bad news for Oracle: &lt;a href="http://www.groklaw.net/article.php?story=20100813112425821"&gt;Groklaw will cover&lt;/a&gt; the Oracle-Google litigation on Java patents allegedly violated by Android's Dalvik JVM.&lt;br /&gt;&lt;br /&gt;Well deserved. If big companies believe that software patents are a good thing, then only because there is a balance between 'em. Assuming that Oracle is not by itself violating one patent or the other is ridiculous. Now Oracle has annihilated this balance. Just at the same time when they &lt;a href="http://opensolaris.org/jive/thread.jspa?messageID=496203&amp;amp;tstart=0"&gt;announced to drop OpenSolaris&lt;/a&gt;. I think they'll soon learn that Google is not the only opponent they have acquired. &lt;a href="http://bugzilla.org/cgi-bin/mj_wwwusr?user=jochen.wiedmann%40gmail.com&amp;amp;passw=&amp;amp;list=developers&amp;amp;brief=on&amp;amp;func=archive-get-part&amp;amp;extra=201008/8"&gt;A pinprick&lt;/a&gt; (Bugzilla's main developer requests dropping Oracle support as a consequence of the patent litigation.) is only a pinprick, but we'll see how many of them will follow.&lt;br /&gt;&lt;br /&gt;If I were a Google lawyer, I'd definitely follow Groklaw in the months and possibly years to come: Groklaw's much more than a pinprick.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-4079749978267059743?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/4079749978267059743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=4079749978267059743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4079749978267059743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4079749978267059743'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2010/08/bad-news-for-oracle.html' title='Bad news for Oracle'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-5457073443198235872</id><published>2010-05-21T09:44:00.003+02:00</published><updated>2010-05-22T03:53:01.671+02:00</updated><title type='text'>Creating a self signed certificate</title><content type='html'>On development and test systems, you are ususally using a self-signed certificate. Why the SSL servers key needs any certificate at all, and cannot simply use its key pair, is beyond my imagination, but be that as it may: It wouldn't be a problem, if there would be a really simple way to create a self signed certificate. What is the problem with writing a simple program that asks me a few questions like "fully qualified host name of the SSL server", or "organization name" and in reply creates a private key and a self certified public key? My personal guess is that openssl's command line interface is so darned complex that it's hard to dare to make it simple...&lt;br /&gt;&lt;br /&gt;But obviously, I am not the only one asking for such a solution. There is help: Red Hat Linux, Fedora, or CentOS are shipped with a really simple tool called "genkey". See&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linuxtopia.org/online_books/centos5/centos5_administration_guide/centos5_s1-httpd-secure-server.html"&gt;http://www.linuxtopia.org/online_books/centos5/centos5_administration_guide/centos5_s1-httpd-secure-server.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thanks, guys!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-5457073443198235872?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/5457073443198235872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=5457073443198235872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5457073443198235872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5457073443198235872'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2010/05/creating-self-signed-certificate.html' title='Creating a self signed certificate'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-5032275991841003086</id><published>2010-05-01T16:26:00.003+02:00</published><updated>2010-05-01T17:14:55.383+02:00</updated><title type='text'>The future of cinema?</title><content type='html'>Last friday, Marie was celebrating her 6th birthday. Having successfully managed the celebrations with family and her friends, we felt that the three of us have earnt an after-birthday gratification. So we went to the next movie and into &lt;a href="http://www.imdb.com/title/tt0892769/"&gt;How to train your dragon&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's the first time I was visiting a 3d movie. I remember that I've seen 3D films before on fairgrounds and more than 30 years ago, but the experience had been a little bit disappointing. Nevertheless, I was really curious.&lt;br /&gt;&lt;br /&gt;Sitting in the cinema chair and looking at each other wearing the spectacles was fun, of course and a good opportunity to remember the blues brothers. Then the movie began.&lt;br /&gt;&lt;br /&gt;Excuse me? This is it? The movie industries big hope, the style of already 25% of all movies in the cinema? (Apart from How to train your dragon, no less than 3 other of the movies offered that day have been in 3D.)&lt;br /&gt;&lt;br /&gt;Honestly, there were some scenes when the 3D effect was really great. For example, riding on the night fury with Hiccup was pure joy. But that feeling went about 5 out of 95 minutes of the film. And what about the other 90?&lt;br /&gt;&lt;br /&gt;Basically, the visual quality was really bad. I can't count the number of times when I've seen the horns on a vikings helm twice. Quite frequently, the picture was fuzzy and I had to strain my eyes. Compare that to the experience of a 2D movie when you just forget to think about the pictures, because there's no reason to consider the visual quality: You're concentrated on what happens, on what you came for.&lt;br /&gt;&lt;br /&gt;I have to admit that I am not overly gracious to new stuff, if not adverse. But to me, visiting a 3D movie is like sending an SMS, rather than having a phone call: There is a much more comfortable, and enjoyable version of doing basically the same thing, which you are expected to intentionally forfeit.&lt;br /&gt;&lt;br /&gt;I'm ready to try again in another 30 years. But, as far as I'm concerned, I'd rather stay at home than visiting another 3D movie. (And I'd be gladly watching How to train your dragon in 2D again, because I liked the film, apart from the 3D effect.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-5032275991841003086?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/5032275991841003086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=5032275991841003086' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5032275991841003086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5032275991841003086'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2010/05/future-of-cinema.html' title='The future of cinema?'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-5485453185968722504</id><published>2010-04-14T10:12:00.004+02:00</published><updated>2010-04-14T12:17:44.362+02:00</updated><title type='text'>My Nerd Score</title><content type='html'>... is surprisingly low:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nerdtests.com/ft_nq.php"&gt;&lt;div style="text-align: center;"&gt; &lt;img src="http://www.nerdtests.com/images/ft/nq/a84163b352.gif" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/a&gt;&lt;br /&gt;Comes with the age, I believe. I'm getting lazier. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-5485453185968722504?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/5485453185968722504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=5485453185968722504' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5485453185968722504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5485453185968722504'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2010/04/my-nerd-score.html' title='My Nerd Score'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-6238980302292829934</id><published>2010-02-15T23:06:00.002+01:00</published><updated>2010-02-15T23:22:44.083+01:00</updated><title type='text'>Apache XML-RPC 3.1.3</title><content type='html'>Didn't expect another release of Apache XML-RPC this year. We had one last year and that should do for some time, shouldn't it? At least for such a relatively stable (read: boring) piece of code.&lt;br /&gt;&lt;br /&gt;Unexpectedly, Johan Hägre detected a security issue: Due to the XML parsers standard configuration, it has been possible to include server side files as entities to the clients request. Vice versa, the server could add client side files to the response. Better fix that soon...&lt;br /&gt;&lt;br /&gt;The new distribution is available from any Apache mirror at &lt;a href="http://www.apache.org/dyn/closer.cgi/ws/xmlrpc/"&gt;http://www.apache.org/dyn/closer.cgi/ws/xmlrpc/&lt;/a&gt;. If the mirrors don't catch up fast enough, try &lt;a href="http://www.apache.org/dist/ws/xmlrpc/"&gt;http://www.apache.org/dist/ws/xmlrpc/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-6238980302292829934?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/6238980302292829934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=6238980302292829934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/6238980302292829934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/6238980302292829934'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2010/02/apache-xml-rpc-313.html' title='Apache XML-RPC 3.1.3'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-5674159505709520048</id><published>2009-08-08T12:16:00.003+02:00</published><updated>2009-08-08T12:27:19.519+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Fedora'/><title type='text'>Fedora - the name</title><content type='html'>I am a &lt;a href="http://www.fedoraproject.org/"&gt;Fedora Linux&lt;/a&gt; (initially Fedora Core Linux) user since version 1. Ever since, I wondered about the name Fedora from time to time. Sounded much like a russian princess. Didn't seem to fit, though.&lt;br /&gt;&lt;br /&gt;Today, I was looking for a birthday present to my father. Unlike me, he's an avid walker. So I though, a hat might be a good idea. (He used to wear one in the past.) And while searching, I stumbled about &lt;a href="http://en.wikipedia.org/wiki/Fedora"&gt;this entry&lt;/a&gt; in Wikipedia: A Fedora is a hat! And, if you look at the picture, it very much resembles the famous &lt;a href="http://en.wikipedia.org/wiki/Red_Hat"&gt;Red Hat&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;A name well choosen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-5674159505709520048?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/5674159505709520048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=5674159505709520048' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5674159505709520048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5674159505709520048'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2009/08/fedora-name.html' title='Fedora - the name'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-5665472440977667012</id><published>2009-06-18T12:31:00.004+02:00</published><updated>2009-06-23T14:41:48.468+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='VirtualBox'/><title type='text'>The new kid on the virtualization block</title><content type='html'>Last week, I happily upgraded my Linux installation to Fedora 11. As usual, this wasn't driven by any requirements, just by the fun to have the latest and greatest. (Do I hear Anjas "MEN!" :-) On the whole, things have improved. For example, &lt;a href="http://grumpyapache.blogspot.com/2009/05/mobile-internet-with-fedora-10-and.html"&gt;my UMTS stick&lt;/a&gt; is now working out of the box. Monitor switching at work is now working nicely.&lt;br /&gt;&lt;br /&gt;An obvious minus, however, is the integration of VMware. I am using VMware server 1, which is almost unsupported on Fedora in general. In particular, it it unsupported for Fedora 11. As usual, it was no problem to find a &lt;a href="http://www.insecure.ws/2009/04/21/vmware-specific-specific-55x-and-kernel-2629"&gt;matching kernel patch&lt;/a&gt;. But, what a surprise, it is no longer sufficient to patch the VMware modules: You need to patch the kernel as well. Ok, I detected the procedure within one hour. But that means, that I will have to compile my own kernel with any kernel upgrade. Given the frequency of kernel updates on Fedora, I'll likely recompile every two weeks or so.&lt;br /&gt;&lt;br /&gt;Brings up the question for alternatives. I have tried VMware server 2 in the past, but was definitely disappointed, because it is both a resource hog (for example, more than 400MB on disk!) and the lack of the former vmware-console just adds on. Nevertheless, I tried again. Just to detect that the same problem seems to be present: The kernel modules fail to load with the same error message of a missing symbol.&lt;br /&gt;&lt;br /&gt;I never tried VirtualBox before, but this seemed to be a good enough reason to do it now. First impressions have been quite positive, until I tried to start a VM with a windows guest system. Obviously, that's &lt;a href="http://www.virtualbox.org/wiki/Migrate_Windows"&gt;not so easy&lt;/a&gt;: To get it work, you have to change some settings, fiddle with the windows registry (of course, &lt;span style="FONT-WEIGHT: bold"&gt;before&lt;/span&gt; starting Windows ...) and similar niceties. Again, that's not what I'd like to have as a standard procedure. VM's should be easily adoptable from or given to colleagues.&lt;br /&gt;&lt;br /&gt;So far, I was sticking to VMware server 1. But today, I detected &lt;a href="http://vbox.innotek.de/pipermail/vbox-announce/2009-June/000018.html"&gt;the announcement&lt;/a&gt; of &lt;a href="http://download.virtualbox.org/virtualbox/3.0.0_BETA1/"&gt;VirtualBox 3 beta&lt;/a&gt;. And, hard to believe, it just works, even with Windows guests imported from VMware. I think, VMware lost a user...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-5665472440977667012?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/5665472440977667012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=5665472440977667012' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5665472440977667012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5665472440977667012'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2009/06/new-kid-on-virtualization-block.html' title='The new kid on the virtualization block'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-1705513257231148690</id><published>2009-06-08T21:49:00.004+02:00</published><updated>2009-06-23T14:42:01.833+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Fedora'/><title type='text'>Automatically compiling VMWare modules</title><content type='html'>&lt;a href="http://www.vmware.com/"&gt;VMWare&lt;/a&gt; does, in general, an excellent job. It runs smoothless on my machine, generally being one of my best work horses. In particular, with &lt;a href="http://www.vmware.com/products/server/"&gt;VMWare Server&lt;/a&gt; coming at no cost.&lt;br /&gt;&lt;br /&gt;There's an exception, though: The kernel modules. As usual, the problem doesn't exist on a Windows host (or guest, for that matter), but you've got to know how to deal with it on a Linux host. VMWare depends on a number of kernel modules, for example vmnet.o, which creates the virtual network interfaces. In theory, these modules are delivered as part of the VMWare distribution for a variety of Linux distributions. In practice, I am unaware of any example, where these precompiled modules could been used: I always needed to compile them for myself.&lt;br /&gt;&lt;br /&gt;Ok, that's not too much trouble (at least not, if you've been able to obtain the right patch for your system, typically after a lot of Googling), basically all you need to do is to run vmware-config.pl (on the host) or vmware-config-tools.pl. However, one problem is still left: The procedure of recompiling the modules needs to happen after any Kernel upgrade again.&lt;br /&gt;&lt;br /&gt;But here's a solution: An init-script, which is invoked before VMWare starts upon every reboot. The script checks, whether there are modules matching the running kernel. If not, vmware-config.pl is invoked with the necessary options for batch mode.&lt;br /&gt;&lt;br /&gt;To install it, download the script &lt;a href="http://people.apache.org/~jochen/scripts/vmware-kernel-modules"&gt;here&lt;/a&gt;. Store it as &lt;code&gt;/etc/init.d/vmware-kernel-modules&lt;/code&gt;. On Fedora-Linux, create the necessary links by running &lt;code&gt;/sbin/chkconfig --add vmware-kernel-modules&lt;/code&gt;. On other distributions, this must be done manually.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-1705513257231148690?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/1705513257231148690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=1705513257231148690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/1705513257231148690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/1705513257231148690'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2009/06/automatically-compiling-vmware-modules.html' title='Automatically compiling VMWare modules'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-4327398046287711581</id><published>2009-05-11T00:58:00.008+02:00</published><updated>2009-06-23T14:42:12.933+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Fedora'/><title type='text'>Mobile Internet with Fedora 10 and Simply (T-Mobile)</title><content type='html'>I think, any experienced Linux user knows that feeling: Even while you generally feel fine with your OS, there are these moments when you ask yourself whether you should switch to Windows. Typically, these moments come whenever you've got some new hardware gadget.&lt;br /&gt;&lt;br /&gt;In my case, this has been a so-called &lt;a href="http://www.t-mobile.de/webnwalk/laptops/0,18548,19899-_,00.html"&gt;web'n'walk Stick&lt;/a&gt; from Germany's &lt;a href="http://www.t-mobile.de/"&gt;T-Mobile&lt;/a&gt;, which I intend to use for connecting to the Internet on travel. Unfortunately, I am quite frequently on the road, or visiting customers, where I cannot connect my Laptop to the network, so this thing will come in quite handy.&lt;br /&gt;&lt;br /&gt;Would I be a Windows user (or perhaps a Mac fanatic), this wouldn't be worth posting: Of course, the device is neatly trimmed for Windows, making almost everything automatic. Basically, you plug it in, enter your PIN, and that's it. Not so with Linux, or (to be fair), at least not with Fedora Linux. I've got it running now (in fact, this post is written with the Ethernet disconnected), but that's after several hours of recherche, postings in mailing lists and in the &lt;a href="http://forums.fedoraforum.org/"&gt;Fedora Forum&lt;/a&gt; (not that these had any results). As usual, you need to understand what's going on, making yourself known to technical concepts, command line utilities and configuration files, which you never intended to know. And that's the reason for writing this: Perhaps I can save some other persons time.&lt;br /&gt;&lt;br /&gt;The first thing to understand is this: In order to make life easier for Windows and Mac users, the device is running in one of two quite different operation modes. The first mode is the default mode: The stick acts as a very small USB drive. On Windows, this allows to automatically install software from it. Needless to say, there are no Linux drivers. (The good news: All drivers came as part of Fedora. :-) Also needless to say: This default mode is not what you want. You must deactivate it and switch to the other mode, where you can actually use the stick. (I assume that the installed software does that automatically on Windows.)&lt;br /&gt;&lt;br /&gt;There are several tools and utilities for doing this switch: &lt;a href="http://www.draisberghof.de/usb_modeswitch/"&gt;usb_modeswitch&lt;/a&gt; (which I choosed, because it comes with Fedora), &lt;a href="http://www.pharscape.org/rezero.html"&gt;rezero&lt;/a&gt;, &lt;a href="http://www.pharscape.org/ozerocdoff.html"&gt;ozerocdoff&lt;/a&gt;, and perhaps a multitude of others. (My guess is, it would help, if distributions could agree on a common choice here.) These tools typically need some configuration. To obtain this configuration, start looking at the output of&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[jwi@mcjwi ~]$ /sbin/lsusb&lt;br /&gt;Bus 001 Device 005: ID 413c:8103 Dell Computer Corp. Wireless 350 Bluetooth&lt;br /&gt;Bus 001 Device 006: ID 0b97:7762 O2 Micro, Inc. Oz776 SmartCard Reader&lt;br /&gt;Bus 001 Device 004: ID 0b97:7761 O2 Micro, Inc. Oz776 1.1 Hub&lt;br /&gt;Bus 001 Device 002: ID 413c:a005 Dell Computer Corp. Internal 2.0 Hub&lt;br /&gt;Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;Bus 003 Device 004: ID 0af0:6971 Option&lt;br /&gt;Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you don't know, which line belongs to your stick: Just remove it, run the program again, and see what changes. In my case, the interesting part is&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;  Bus 003 Device 004: ID 0af0:6971 Option&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The ID consists of two parts: The so-called vendor ID (0af0) and the product ID (6971).&lt;br /&gt;&lt;br /&gt;If you have usb_modeswitch, you might inspect a file called usb_modeswitch.conf (in my case /etc/usb_modeswitch.conf) and search for the above ID's. There's a good chance that you find them there. If not, enter them into Google, together with usb_modeswitch as an additional search term. Again, there's a good chance to find something. If not: Bad luck. I don't know what to do in that case, but I guess consulting the above tools mailing lists, forums, or whatever.&lt;br /&gt;&lt;br /&gt;In my case, I've learned from the configuration file and some Internet pages that I've got to enter the command&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo usb_modeswitch -v 0af0 -p 6971 -P 6971 -m 0x05 -M 55534243785634120100000080000601000000000000000000000000000000&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;to change the mode. First step done. If everything's fine, the following command should now provide some meaningful output:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;  [jwi@mcjwi ~]$ hal-find-by-capability --capability=modem&lt;br /&gt;/org/freedesktop/Hal/devices/usb_device_af0_6971_Serial_Number_if0_serial_unknown_1&lt;br /&gt;/org/freedesktop/Hal/devices/usb_device_af0_6971_Serial_Number_if0_serial_unknown_0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now enter NetworkManager (aka nm-connection-editor) and switch to "Mobile Broadband". Press "Add" to create a new connection. If you're lucky, you will find a popup like the following:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-Usy_X0vTUM/SgdlFl2q6VI/AAAAAAAAAuo/0qkMaay8gjk/s1600-h/AddMobileBroadbandConnection.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5334343430378809682" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: pointer; HEIGHT: 172px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_-Usy_X0vTUM/SgdlFl2q6VI/AAAAAAAAAuo/0qkMaay8gjk/s320/AddMobileBroadbandConnection.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The second and third entry are default entries. The presence of the first entry shows you that NetworkManager recognized your stick. Needless to say: In my case, it didn't. After consulting the home page of usb_modeswitch I found out, that I need to load some other driver explicitly:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/sbin/modprobe option&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In your case, this might be usbserial, rather than option. Sorry, can't help you here.&lt;br /&gt;&lt;br /&gt;But if you can choose your "modem": Almost there! (Not yet, of course.) NetworkManager will open a window like the following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-Usy_X0vTUM/SgdmqvytCDI/AAAAAAAAAuw/z1m5nX0D5Gs/s1600-h/NmConnection.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5334345168213313586" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 308px; CURSOR: pointer; HEIGHT: 320px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_-Usy_X0vTUM/SgdmqvytCDI/AAAAAAAAAuw/z1m5nX0D5Gs/s320/NmConnection.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(In the US, or to be precise, with CDMA this might look quite different.) The PIN and the PUK are what you get from your mobile broadband provider. If you're even luckier, the provider will tell you the other data as well, in the written data sheet, or at least on the hotline. Perhaps, you already guessed it: My provider didn't. ("We aren't supporting Linux.")&lt;br /&gt;&lt;br /&gt;To find the remaining data, use Google again. In my case, the relevant search terms have been "T-Mobile APN PIN". (Simply is a reseller of T-Mobile) Another choice might be to consult the &lt;a href="http://live.gnome.org/NetworkManager/MobileBroadband/ServiceProviders?action=AttachFile&amp;amp;do=view&amp;amp;target=operators.xml"&gt;list of operators&lt;/a&gt; on the Gnome site. I've found the following entry there:&lt;dns-servers&gt;&lt;/DNS-SERVERS&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;        &lt;operator&gt;&lt;br /&gt;              &lt;id&gt;147&lt;/id&gt;&lt;br /&gt;              &lt;name&gt;T-mobile&lt;/name&gt;&lt;br /&gt;              &lt;country&gt;de&lt;/country&gt;&lt;br /&gt;              &lt;type&gt;D1&lt;/type&gt;&lt;br /&gt;              &lt;apn&gt;internet.t-d1.de&lt;/apn&gt;&lt;br /&gt;              &lt;password&gt;t-d1&lt;/password&gt;&lt;br /&gt;              &lt;dns-servers&gt;&lt;br /&gt;                      &lt;dns&gt;193.254.160.1 &lt;/dns&gt;&lt;br /&gt;                      &lt;dns&gt;193.254.160.130&lt;/dns&gt;&lt;br /&gt;              &lt;/DNS-SERVERS&gt;&lt;br /&gt;      &lt;/operator&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Tells me the APN (might be some servers host name?), and the password. (You should be able to ignore the DNS servers, as they are configured automatically.) In my case the user name was missing, but some more googling revealed the user name "Internet".&lt;br /&gt;&lt;br /&gt;Believe it or not, but now it's working! (Might be, that you need to click on the NetworkManager's applet, if you didn't choose "Automatic Connect" and activate the connection.)&lt;br /&gt;&lt;br /&gt;And now you know, why I clearly prefer a lot of Linux experience in profiles or curriculum vitae, when my employer hires: People who deal with that stuff should be ready for the problems we provide them with...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;operator&gt;  &lt;br /&gt;&lt;/operator&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-4327398046287711581?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/4327398046287711581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=4327398046287711581' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4327398046287711581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4327398046287711581'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2009/05/mobile-internet-with-fedora-10-and.html' title='Mobile Internet with Fedora 10 and Simply (T-Mobile)'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-Usy_X0vTUM/SgdlFl2q6VI/AAAAAAAAAuo/0qkMaay8gjk/s72-c/AddMobileBroadbandConnection.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-7687620222010137729</id><published>2009-04-27T00:17:00.003+02:00</published><updated>2009-04-27T00:24:21.541+02:00</updated><title type='text'>Awesome Coldplay video</title><content type='html'>A video I find myself watching over and over again is &lt;a href="http://www.youtube.com/watch?v=fXSovfzyx28&amp;amp;feature=related"&gt;Live in Technicolor ii&lt;/a&gt; from Coldplay. Not only is it good music, it is also hilariously funny. I can so imagine standing with the other parents at Marie's Kindergarden party, looking absolutely blank at what's going on while the kids are celebrating. (I gather it's better to get used to that feeling.) My personal highlights are the crew members and the bikers crossing the stage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-7687620222010137729?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/7687620222010137729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=7687620222010137729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/7687620222010137729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/7687620222010137729'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2009/04/awesome-coldplay-video.html' title='Awesome Coldplay video'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-5941719696468887138</id><published>2009-04-27T00:04:00.003+02:00</published><updated>2009-06-23T14:42:45.847+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><category scheme='http://www.blogger.com/atom/ns#' term='XML-RPC'/><title type='text'>Apache XML-RPC 3.1.2</title><content type='html'>Glad to announce the new version of Apache XML-RPC, available from the &lt;a href="http://www.apache.org/dyn/closer.cgi/ws/xmlrpc/"&gt;Apache Mirrors&lt;/a&gt;. As usual with this project, the bad olds are that the developers (including myself, of course) are almost gone. The project would be ready for archiving, unless (and that is the good news) it were for the contributors: This release was completely driven by users of Apache XML-RPC. Not a single bug fix or patch was created by the committers: Everything came from contributors through &lt;a href="https://issues.apache.org/jira/browse/XMLRPC"&gt;Jira&lt;/a&gt; or the &lt;a href="http://www.nabble.com/Apache-Xml-RPC---Dev-f250.html"&gt;mailing list&lt;/a&gt;. You can view it for yourself by looking on the &lt;a href="http://ws.apache.org/xmlrpc/changes-report.html#a3.1.2"&gt;changes&lt;/a&gt;. (And that list doesn't even include &lt;a href="https://issues.apache.org/jira/browse/XMLRPC-163"&gt;XMLRPC-163&lt;/a&gt;.) Imagine that with a closed source product.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-5941719696468887138?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/5941719696468887138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=5941719696468887138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5941719696468887138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5941719696468887138'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2009/04/apache-xml-rpc-312.html' title='Apache XML-RPC 3.1.2'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-3892859262138548303</id><published>2009-04-20T22:39:00.004+02:00</published><updated>2009-06-23T14:43:00.734+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>NonApache.Org</title><content type='html'>It is now more than 5 years that I enjoy my status as an Apache committer. I still believe it is something to enjoy, although I am getting older and less active. I have learned to live with the realities that must be accepted: This applies, in particular, to the legal straitjacket, but also to the considerations that a community applies. A community? There are plenty of them, each of which very different: For example, the &lt;a href="http://ws.apache.org/"&gt;Webservices&lt;/a&gt; project tends to take things rather easy, whereas Commons, or &lt;a href="http://incubator.apache.org/"&gt;Incubator&lt;/a&gt; can be quite formal: Javadoc jar file with or without META-INF/NOTICE.TXT? Good enough reason for hours and hours of discussion. Then, &lt;a href="http://www.apache.org/foundation/mailinglists.html#foundation-legal"&gt;legal-discuss&lt;/a&gt; can be quite interesting. And the &lt;a href="http://www.apache.org/dev/infra-mail.html"&gt;infrastructure mailing list&lt;/a&gt; is always a good place for listening what's going on. Sadly, it never paid for me to listen to jobs@apache.org. :-)&lt;br /&gt;&lt;br /&gt;That said, there always are cases when I am not sure whether it's worth the hazzle. Running a project (effectively) on your own within the ASF basically means that you have the actual project work plus ASF related burdens. For example, pushing a Apache projects release can be quite some work: I honestly marvel at people like &lt;a href="http://www.mail-archive.com/users@maven.apache.org/msg88591.html"&gt;John Casey&lt;/a&gt; who has the patience to deliver 10 release candidates in a row. (I feel exhausted after three or four release candidates.) Compare that to the times of JaxMe 1 when I published a new release after almost any commit. Of course, that won't be possible for projects like Maven, or Axis. But there's something to the &lt;a href="http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html"&gt;"Release early, release often"&lt;/a&gt; mantra.&lt;br /&gt;&lt;br /&gt;I always thought that this uneasiness with the ASF procedures and the responsibility to the community would be my personal problem, (Let's face it: I'm much more of a Maverick than a team player.) until I read &lt;a href="http://www.jroller.com/robertburrelldonkin/"&gt;Robert Burell Donkin&lt;/a&gt; express similar feelings as the reason for starting &lt;a href="http://incubator.apache.org/rat/"&gt;RAT&lt;/a&gt; at &lt;a href="http://code.google.com/p/arat/"&gt;Google Code&lt;/a&gt;. But what made me think even more was the recent discussion on a proposed &lt;a href="http://www.nabble.com/-PROPOSAL--Commons-Incubator-td22974529.html#a23017171"&gt;Commons Incubator&lt;/a&gt; project: Obviously, there are a lot of projects, which are small and expect to remain small, would like to enter the ASF, but don't manage to overcome hurdles like the rule of at least three committers. Are they doing themselves something good?&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.fsf.org/"&gt;FSF&lt;/a&gt; is hosting a server called &lt;a href="http://nongnu.org/"&gt;nongnu.org&lt;/a&gt;: It contains a lot of (mostly smaller) projects which manage themselves, which most likely feel attracted by or even close to the FSF and it's ideals. These projects don't have the FSF's holy endorsement (sorry, Incubator members, but that's what "endorse" reads to me sometimes), but they are able to work, to publish releases, to attract a community, almost everything an Apache project does.&lt;br /&gt;&lt;br /&gt;I'd like to ask you to think whether it wouldn't it be a good idea to have something similar in the grey area of the ASF. For example, Apache Labs could almost immediately move - and finally start publishing releases. The sandbox projects - what could be a better place for living? I have no suggestions for the organizational details, but I think it's worth considering.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="formatbar_Buttons" style="DISPLAY: block"&gt;&lt;span onmouseup="" class=" on down" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);" id="formatbar_CreateLink" onmouseover="ButtonHoverOn(this);" title="Link" style="DISPLAY: block" onmouseout="ButtonHoverOff(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/8124028403626039195-3892859262138548303?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/3892859262138548303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=3892859262138548303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/3892859262138548303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/3892859262138548303'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2009/04/nonapacheorg.html' title='NonApache.Org'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-668420731094466412</id><published>2009-04-08T21:51:00.002+02:00</published><updated>2009-04-08T22:14:51.462+02:00</updated><title type='text'>10 years no clue</title><content type='html'>Exactly 10 years ago, early in the morning of the April-08-1999 (according to my perception at that time, it's been 8:30 AM), I entered a room with some 25 or so boys and girls, most of them between 20 and 30 years. My task was to act as a &lt;a href="http://en.wikipedia.org/wiki/Unix"&gt;Unix&lt;/a&gt; trainer for a professional development class. I didn't know any of them. In particular, I had no idea that, just 7 months later, I'd be married to the girl sitting on the 6th chair in the left row.&lt;br /&gt;&lt;br /&gt;It wasn't exactly love at first sight. As for my side, I thought "nice girl" immediately. But, to be honest, there's been more than one nice girl. As for Anja ..., well, read on.&lt;br /&gt;&lt;br /&gt;Being a Linux and Unix devotee, my intention was to start with a little Unix history, with the exciting times of people like &lt;a href="http://en.wikipedia.org/wiki/Ken_Thompson_%28computer_programmer%29"&gt;Ken Thompson&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Dennis_Ritchie"&gt;Dennis Ritchie&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Brian_Kernighan"&gt;Brian Kernighan&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Alfred_Aho"&gt;Alfred Aho&lt;/a&gt;, or &lt;a href="http://en.wikipedia.org/wiki/Peter_J._Weinberger"&gt;Peter Weinberger&lt;/a&gt; at &lt;a href="http://en.wikipedia.org/wiki/Bell_Labs"&gt;Bell Labs&lt;/a&gt; who managed to contribute both  operating systems, programming languages, and other practical tools as well as new and exciting ideas and theories in the field of computer science.&lt;br /&gt;&lt;br /&gt;I do not know, whether I managed to share some of my feelings with the other boys and girls. As for Anja, I failed completely: At some point, I managed to confuse Ritchie and Kernighan, naming the latter as one of the Unix inventors. With the experience of lousy trainers before me, she settled on her opinion about me and wrote, after one or two hours, to a friend that I had "absolutely no clue of Unix".&lt;br /&gt;&lt;br /&gt;With my experience of 10 years or so of Unix administration and programming before, I can only assume that this hasn't changed in this following 10 years. So, todays my anniversary of having no clue.&lt;br /&gt;&lt;br /&gt;To Anja with love,&lt;br /&gt;&lt;br /&gt;Jochen&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-668420731094466412?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/668420731094466412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=668420731094466412' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/668420731094466412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/668420731094466412'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2009/04/10-years-no-clue.html' title='10 years no clue'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-710566613768298948</id><published>2009-03-26T22:39:00.003+01:00</published><updated>2009-06-23T14:43:18.874+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>Git takes the lead</title><content type='html'>So far, I have been reluctant to use a &lt;a href="http://en.wikipedia.org/wiki/Distributed_revision_control"&gt;DVCS&lt;/a&gt;. We have got &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; and it does an excellent job, at least for me. Ok, the idea of local commits while travelling in the train is compelling, but we might as well have inexpensive UMTS flat rates in the future. Maintaining a local branch over a long time is not what I usually do.&lt;br /&gt;&lt;br /&gt;But that's not the overall point, if you are curious to try something new (which I still am, at least from time to time). The killer argument against DVCS has been, IMO, that there isn't &lt;span style="FONT-WEIGHT: bold"&gt;the&lt;/span&gt; DVCS: We've got &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt;, &lt;a href="http://bazaar-vcs.org/"&gt;Bazaar&lt;/a&gt;, &lt;a href="http://www.selenic.com/mercurial/"&gt;Mercurial&lt;/a&gt;, to name just the most important ones, not to mention &lt;a href="http://www.gnu.org/software/gnu-arch/"&gt;Arch&lt;/a&gt;, &lt;a href="http://monotone.ca/"&gt;Monotone&lt;/a&gt;, or &lt;a href="http://darcs.net/"&gt;Darcs&lt;/a&gt;. I'd be ready to learn using either, but definitely two or even three. And, until now, I never had the impression that learning one of them would be sufficient. For example, &lt;a href="http://sf.net/"&gt;SourceForge&lt;/a&gt; does support no less than &lt;a href="http://apps.sourceforge.net/wordpress/sourceforge/2009/03/11/bazaar-and-mercurial-scm-services-launched/"&gt;three different DVCS&lt;/a&gt; (as well as grandpa &lt;a href="http://www.nongnu.org/cvs/"&gt;CVS&lt;/a&gt; and &lt;a href="http://subversion.tigris.org/"&gt;SVN&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;That has changed: The &lt;a href="http://www.apache.org/"&gt;ASF&lt;/a&gt; has now a read-only &lt;a href="http://git.apache.org/"&gt;Git repository&lt;/a&gt;. Ok, currently it seems to be a one man effort by &lt;a href="http://jukkaz.wordpress.com/"&gt;Jukka Zitting&lt;/a&gt; (while writing this, it just came to my mind that I owed him a &lt;a href="https://www.ohloh.net/accounts/jukka"&gt;Kudo&lt;/a&gt; on &lt;a href="http://www.ohloh.net/"&gt;Ohloh&lt;/a&gt;), but the interest is obvious, as projects are already requesting to be added. &lt;a href="http://www.gnome.org/"&gt;Gnome&lt;/a&gt; has recently decided to &lt;a href="http://lwn.net/Articles/324432/"&gt;move to Git&lt;/a&gt; completely. If you look into &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=257706"&gt;Bug 257706&lt;/a&gt; on the Eclipse bug tracker, then you can't fail to notice that it sounds like Eclipse will have it's first Git repositories soon. (Also note the &lt;a href="http://www.eclipsecon.org/2009/sessions?id=776"&gt;Git BoF&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;Similar news from &lt;a href="http://bazaar-vcs.org/"&gt;Bzr&lt;/a&gt; or &lt;a href="http://www.selenic.com/mercurial/"&gt;Hg&lt;/a&gt; are missing. Ok, &lt;a href="http://max.kanat.us/"&gt;Max Kanat-Alexander&lt;/a&gt; is &lt;a href="http://www.nabble.com/Switching-to-Bazaar-%28bzr%29-td21107902.html"&gt;pressing&lt;/a&gt; &lt;a href="http://www.bugzilla.org/"&gt;Bugzilla&lt;/a&gt; to Bzr (he deserved yet another &lt;a href="https://www.ohloh.net/accounts/avatraxiom"&gt;Kudo&lt;/a&gt;, btw), &lt;a href="http://wl.widelands.org/"&gt;Widelands&lt;/a&gt; has moved at least its &lt;a href="https://launchpad.net/widelands-website"&gt;web site&lt;/a&gt; to &lt;a href="http://launchpad.net/"&gt;Launchpad&lt;/a&gt;, but the list of projects using Git (including &lt;a href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary"&gt;Linux Kernel&lt;/a&gt;, &lt;a href="http://perl5.git.perl.org/perl.git"&gt;Perl&lt;/a&gt;, &lt;a href="http://github.com/rails/rails/tree/master"&gt;Rails&lt;/a&gt;, &lt;a href="http://git.fedoraproject.org/git/"&gt;Fedora&lt;/a&gt;, or &lt;a href="http://www.x.org/wiki/Development/git"&gt;X.org&lt;/a&gt;) tends to become more and more impressive.&lt;br /&gt;&lt;br /&gt;Nough said, I'll give it a try. My main reservation will be the quality of &lt;a href="http://www.jgit.org/"&gt;JGit&lt;/a&gt; and &lt;a href="http://git.or.cz/gitwiki/EclipsePlugin"&gt;EGit&lt;/a&gt; (in fact, these will be the most likely candidates for reasons to withdraw), but I should keep in mind that I refused to use Subversion because of the &lt;a href="http://subclipse.tigris.org/"&gt;Subclipse&lt;/a&gt; quality as late as 2004. Let's see what the future brings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-710566613768298948?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/710566613768298948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=710566613768298948' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/710566613768298948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/710566613768298948'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2009/03/git-takes-lead.html' title='Git takes the lead'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-4691463445436135902</id><published>2009-03-14T21:29:00.002+01:00</published><updated>2009-03-14T21:32:33.060+01:00</updated><title type='text'>As fast as it can get</title><content type='html'>It's sometimes surprising to find your own name at a place where you really didn't expect it. But in &lt;a href="http://yoavs.blogspot.com/2009/03/small-things-that-make-product.html"&gt;this case&lt;/a&gt; it is even more surprising, because I wrote the mail in question not even three hours before a) Yoav wrote his article and b) I detected it on &lt;a href="http://www.planetapache.org/"&gt;Planet Apache&lt;/a&gt;. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-4691463445436135902?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/4691463445436135902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=4691463445436135902' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4691463445436135902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4691463445436135902'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2009/03/as-fast-as-it-can-get.html' title='As fast as it can get'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-8201893193705721212</id><published>2009-02-11T03:49:00.003+01:00</published><updated>2009-06-23T14:43:37.693+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>When dog food isn't good enough</title><content type='html'>Recently a proposal came up on the Apache infrastructure list (Sorry, AFAIK, the list isn't archived, thus no pointers from here.) to install &lt;a href="http://www.sonatype.com/products/nexus/professional"&gt;Nexus Professional&lt;/a&gt; on one of the Apache servers as a repository server. The idea was, in particular, to use Nexus' staging facilities for pushing Apache software releases.&lt;br /&gt;&lt;br /&gt;The proposal was posted by &lt;a href="http://www.sonatype.com/people/author/brian/"&gt;Brian Fox&lt;/a&gt;, with support by &lt;a href="http://www.sonatype.com/people/author/jason/"&gt;Jason van Zyl&lt;/a&gt;. As you can see from my links, both are employed by &lt;a href="http://www.sonatype.com/"&gt;Sonatype&lt;/a&gt;, the company producing Nexus. (Jason is founder and CTO). Obviously, the &lt;a href="http://www.apache.org/"&gt;ASF&lt;/a&gt; won't be a bad reference for them. The proposal seems to be rapidly acceptet, almost without objection. (There was some discussion, but mostly about technical details or Maven at all.) As a result, you can view the &lt;a href="https://repository.apache.org/"&gt;installed Nexus&lt;/a&gt; live today, which is what I did.&lt;br /&gt;&lt;br /&gt;In all honesty, I'm going to like it. Having had my share of release management and the related trouble, this is going to help: Pushing some 30 or 40 files to people.apache.org (the number seems big, but you have to consider various signatures, like .md5 and/or .sha1 files as well as GPG signatures, aka .asc files) via SSH to a common place and later distributing it manually to various places is error-prone. But that is like it is: Placement in the common place (typically a users public_html directory) allows the review and vote by fellow developers. Once the release is accepted, the files are being moved to the final target locations. Nexus can help with that and the UI is, of course, very neat.&lt;br /&gt;&lt;br /&gt;But that is not the reason for todays entry. What strikes me as rather odd is the fact, how easy a commercial product can make its way into the Apache server park. This is not the first such product: Apache is hosting a &lt;a href="https://issues.apache.org/jira/"&gt;Jira&lt;/a&gt; server for issue tracking as well as a &lt;a href="http://cwiki.apache.org/"&gt;Confluence Wiki&lt;/a&gt;. I observed the discussions when these have been introduced. Jira is basically the successor to the &lt;a href="https://issues.apache.org/bugzilla/"&gt;Apache Bugzilla&lt;/a&gt; (at least more and more Apache projects leave Bugzilla in favour of Jira) just as well as Confluence is quickly replacing the &lt;a href="http://wiki.apache.org/"&gt;Apache MoinMoin wiki&lt;/a&gt;. In both cases the question was raised, whether an open source product wouldn't be preferrable. Ideally, whether there couldn't be an Apache project to use: &lt;a href="http://en.wikipedia.org/wiki/Eat_one%27s_own_dog_food"&gt;"Eat your own dog food"&lt;/a&gt; has some tradition within the ASF. The Apache web servers are frequently relatively stable development versions. In both cases there have been no such projects, and the open source alternatives had their share of problems. So I understood the decision.&lt;br /&gt;&lt;br /&gt;Which is what I don't do in the case of Nexus as an Apache repository server. There is &lt;a href="http://archiva.apache.org/"&gt;Archiva&lt;/a&gt;, an Apache project, which could do the job. Ok, it doesn't have the bells and whistles, but it does its job. I can tell, because I am using it in my daily work. It is a &lt;a href="http://archiva.apache.org/download.html"&gt;mature project&lt;/a&gt; in &lt;a href="http://www.nabble.com/archiva-dev-f16427.html"&gt;active development&lt;/a&gt;, obviously &lt;a href="http://www.nabble.com/Remove-support-for-webdav--td21946035.html"&gt;also sponsored&lt;/a&gt; by &lt;a href="http://blogs.exist.com/oching/"&gt;commercial companies&lt;/a&gt;. Ok, it can't support staging right now, but that wouldn't be overly difficult (Brett Porter has offered to add it, should the ASF require) and within a reasonable time frame. Should be enough at least to consider it as decent dog food.&lt;br /&gt;&lt;br /&gt;Alas, noone seemed to be interested in the Nexus discussion. So its Nexus. I can live with it. Understanding is a different matter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-8201893193705721212?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/8201893193705721212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=8201893193705721212' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/8201893193705721212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/8201893193705721212'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2009/02/when-dog-food-isnt-good-enough.html' title='When dog food isn&apos;t good enough'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-6070057417016263767</id><published>2008-12-09T07:51:00.005+01:00</published><updated>2009-06-23T14:43:50.433+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Fedora'/><title type='text'>VMWare and key maps on Fedora 10</title><content type='html'>I am one of those poor souls who require Windows for some tasks. I wish, this weren't the case, but that's how things are. Fortunately, &lt;a href="http://www.vmware.com/products/server/"&gt;VMware Server&lt;/a&gt; comes to my rescue: A comparatively small VM of about 15GB is sufficient.&lt;br /&gt;&lt;br /&gt;However, after my recent &lt;a href="http://grumpyapache.blogspot.com/2008/11/fedora-preupgrade.html"&gt;upgrade to Fedora 10&lt;/a&gt;, I suddenly noticed that some of my keys were no longer working in the VM: This included the arrow keys, but also some keys, which have been reachable via "Alt Gr" only, like '@', or '\'.&lt;br /&gt;&lt;br /&gt;A quick search on Google revealed that I am far from being the only one bothered with that problem. In fact, the difficulties are more likely related to a Kernel upgrade. Users of Ubuntu 8.10 with a similar new kernel seem to suffer the same trouble. Fortunately, solutions were always at hand. For example, the &lt;a href="http://www.vmware.com/support/ws55/doc/ws_devices_keymap_linux_quick.html"&gt;VMware support suggests&lt;/a&gt; to use&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;xkeymap.usekeycodeMapIfXFree86 = true&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;xkeymap.usekeycodeMap = true&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;in ~/.vmware/config. &lt;a href="http://communities.vmware.com/message/508070#508070"&gt;Other sources&lt;/a&gt; proposed a list of explicit code settings instead, like&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;xkeymap.keycode.108 = 0x138 # Alt_R&lt;br /&gt;xkeymap.keycode.106 = 0x135 # KP_Divide&lt;br /&gt;xkeymap.keycode.104 = 0x11c # KP_Enter&lt;br /&gt;xkeymap.keycode.111 = 0x148 # Up&lt;br /&gt;xkeymap.keycode.116 = 0x150 # Down&lt;br /&gt;xkeymap.keycode.113 = 0x14b # Left&lt;br /&gt;xkeymap.keycode.114 = 0x14d # Right&lt;br /&gt;xkeymap.keycode.105 = 0x11d # Control_R&lt;br /&gt;xkeymap.keycode.118 = 0x152 # Insert&lt;br /&gt;xkeymap.keycode.119 = 0x153 # Delete&lt;br /&gt;xkeymap.keycode.110 = 0x147 # Home&lt;br /&gt;xkeymap.keycode.115 = 0x14f # End&lt;br /&gt;xkeymap.keycode.112 = 0x149 # Prior&lt;br /&gt;xkeymap.keycode.117 = 0x151 # Next&lt;br /&gt;xkeymap.keycode.78 = 0x46 # Scroll_Lock&lt;br /&gt;xkeymap.keycode.127 = 0x100 # Pause&lt;br /&gt;xkeymap.keycode.133 = 0x15b # Meta_L&lt;br /&gt;xkeymap.keycode.134 = 0x15c # Meta_R&lt;br /&gt;xkeymap.keycode.135 = 0x15d # Menu&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In my case, none of these solutions worked completely. The hex codes were refused by VMware Server and the usekeycodemap stuff was fixing some keys, but not all. It turned out, that I had to convert the hex key codes to decimal in order to get it working. For the convenience of those who share my trouble, I post my settings here:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;xkeymap.keycode.108 = 312 # Alt_R&lt;br /&gt;xkeymap.keycode.106 = 309 # KP_Divide&lt;br /&gt;xkeymap.keycode.104 = 284 # KP_Enter&lt;br /&gt;xkeymap.keycode.111 = 328 # Up&lt;br /&gt;xkeymap.keycode.116 = 336 # Down&lt;br /&gt;xkeymap.keycode.113 = 331 # Left&lt;br /&gt;xkeymap.keycode.114 = 333 # Right&lt;br /&gt;xkeymap.keycode.105 = 285 # Control_R&lt;br /&gt;xkeymap.keycode.118 = 338 # Insert&lt;br /&gt;xkeymap.keycode.119 = 339 # Delete&lt;br /&gt;xkeymap.keycode.110 = 327 # Home&lt;br /&gt;xkeymap.keycode.115 = 335 # End&lt;br /&gt;xkeymap.keycode.112 = 329 # Prior&lt;br /&gt;xkeymap.keycode.117 = 337 # Next&lt;br /&gt;xkeymap.keycode.78 =   70 # Scroll_Lock&lt;br /&gt;xkeymap.keycode.127 = 256 # Pause&lt;br /&gt;xkeymap.keycode.133 = 347 # Meta_L&lt;br /&gt;xkeymap.keycode.134 = 348 # Meta_R&lt;br /&gt;xkeymap.keycode.135 = 349 # Menu&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/8124028403626039195-6070057417016263767?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/6070057417016263767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=6070057417016263767' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/6070057417016263767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/6070057417016263767'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2008/12/vmware-and-key-maps-on-fedora-10.html' title='VMWare and key maps on Fedora 10'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-2793492483958067525</id><published>2008-11-27T12:08:00.006+01:00</published><updated>2009-06-23T14:44:00.908+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Fedora'/><title type='text'>Fedora PreUpgrade</title><content type='html'>You've got to learn every day, that's for sure. Sometimes it's tedious (yes, I admit to being so old as no longer love learning for its own sake), but sometimes it's nice. An example of the latter was today when I read about &lt;a href="http://fedoraproject.org/wiki/Features/PreUpgrade"&gt;Fedora PreUpgrade&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A while ago, I wrote about &lt;a href="http://grumpyapache.blogspot.com/2007/11/linux-installation-simpler-than-ever.html"&gt;UNetbootin&lt;/a&gt;, a very nice utility for starting Linux installation or live cd's like GPartEd from a running system without burning a CD or DVD. I've been using it since then and will do so in the future. However, in the case of &lt;a href="http://fedoraproject.org/"&gt;Fedora&lt;/a&gt;, &lt;a href="http://centos.org/"&gt;CentOS&lt;/a&gt; or &lt;a href="http://www.redhat.com/"&gt;Red Hat Enterprise Linux&lt;/a&gt; upgrades, using UNetbootin has its limitation. (Which is, of course, not the fault of UNetbootin, but a limitation of these distributions, in the latter simply referenced as Fedora.)&lt;br /&gt;&lt;br /&gt;For upgrade of Fedora, there are basically two options:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The officially supported way is using the &lt;a href="http://fedoraproject.org/wiki/Anaconda"&gt;Anaconda Installer&lt;/a&gt;. That means booting from a CD, DVD (or via UNetbootin :-). That's nice, if you have a DVD ready and also have direct access to the system.&lt;/li&gt;&lt;li&gt;The officially unsupported way is using &lt;a href="http://fedoraproject.org/wiki/Tools/yum"&gt;Yum&lt;/a&gt;. Much better in some aspects: You can do it from within a running system, even remotely. However, if you are reading the &lt;a href="http://fedoraproject.org/wiki/YumUpgradeFaq"&gt;Yum Upgrade FAQ&lt;/a&gt;, then you cannot fail to notice that there seem to be a lot of traps and possible problems. I have had my share of these in the past, for example when the IDE devices have been renamed from /dev/hdx to /dev/sdx: At that point you could bet your house on Yum upgrades failing.&lt;br /&gt;For similar reasons, the Yum upgrade should not happen with a UI running. If you are actually using the machine (for example on your own desktop), then that means a lot of more downtime than you want. (Ok, you might use the &lt;a href="http://yum.baseurl.org/wiki/YumUtils/Plugins/Downloadonly"&gt;download-only&lt;/a&gt; plugin... I am ranting, but there's a reason for this Blog's title...)&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;In other words, you either got to do it safe (Anaconda) or nice (Yum). No longer: Use PreUpgrade.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-Usy_X0vTUM/SS6F7xyCbaI/AAAAAAAAAug/OGJpoF1sKPs/s1600-h/Fedora+Upgrade.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5273299475719417250" style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; WIDTH: 320px; CURSOR: pointer; HEIGHT: 261px" alt="" src="http://2.bp.blogspot.com/_-Usy_X0vTUM/SS6F7xyCbaI/AAAAAAAAAug/OGJpoF1sKPs/s320/Fedora+Upgrade.png" border="0" /&gt;&lt;/a&gt; It's a small python utility with a UI. You start it. It connects to the Fedora server and gathers a list of releases, which are available for an upgrade. (This might include alpha and/or beta releases, if you like.) Proxy servers are supported, btw., I did not check, whether it uses http_proxy, yum.conf, or both. You select a release and click on "Apply". After that, it automatically calculates dependencies and loads the required RPM's to your hard drive. So far, you' ve got the advantages and the comfort of Yum.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But that's not all. In the next step, PreUpgrade is loading a kernel image, a ram disk and similar stuff to your hard drive and configures your system for using them at the next reboot: In other words, it does what UNetbootin would, for you.&lt;br /&gt;&lt;br /&gt;All this is happening in the background. You can continue your work, no downtime so far. Finally, when PreUpgrade is finished, you may click on Reboot: Anaconda comes up, performing a safe installation without downloading anything or using a slow CDROM drive.&lt;br /&gt;&lt;br /&gt;By using PreUpgrade, I have just upgraded from Fedora 9 to Fedora 10. My downtime was about 10 minutes. (Excellent possibility to get some &lt;a href="http://grumpyapache.blogspot.com/2008/07/when-human-mind-blocks-itself.html"&gt;coffee&lt;/a&gt;!) Aint this magic?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-2793492483958067525?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/2793492483958067525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=2793492483958067525' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/2793492483958067525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/2793492483958067525'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2008/11/fedora-preupgrade.html' title='Fedora PreUpgrade'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-Usy_X0vTUM/SS6F7xyCbaI/AAAAAAAAAug/OGJpoF1sKPs/s72-c/Fedora+Upgrade.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-3012044994363745484</id><published>2008-11-16T22:30:00.001+01:00</published><updated>2008-11-17T00:04:00.192+01:00</updated><title type='text'>Authors to remember: Robert Sheckley</title><content type='html'>In the last years, I tend to find that books I'd like to obtain are out of print or generally unavailable. No surprise: With 45, you and the time of your youth definitely tend to become part of the scrap heap. In some cases, thats simply sad, because these authors did an excellent job at their time and absolutely deserve being read nowadays. We should not forget them. Don't know whether I'll be able to start a series here, but let's begin with &lt;a href="http://en.wikipedia.org/wiki/Robert_Sheckley"&gt;Robert Sheckley&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Robert Sheckley had his best times in the fifties, when he wrote, in particular, a series of short story collections. These short stories were usually published in science fiction magazines. When reading his books, you'll find everything that makes science fiction: Space ships, as much as you like, roboters of all kinds, and so on. (I don't want to reduce him to that: He wrote detective stories, fantasy, or adventure stories as well as scripts for TV and films, but let's forget about that today.) At that time, SF was quite popular.&lt;br /&gt;&lt;br /&gt;But his stories were different: Witty, surprising, absurd, and sometime hilariously funny. They were not so much about predictions, but about humans and how they are. For example, in "A ticket to Tranai" a young man receives the chance of his live: He's able to rule a world, an Utopia. Surprisingly, things &lt;span style="font-weight: bold;"&gt;are&lt;/span&gt; not as they &lt;span style="font-weight: bold;"&gt;should&lt;/span&gt; be and in the end he hardly manages to escape back to earth. The story ends with him visiting the same bar where the story began, void of all illusions and proposing Tranai to others. Why should they be better off than him?&lt;br /&gt;&lt;br /&gt;In &lt;a href="http://www.scifi.com/scifiction/classics/classics_archive/sheckley2/sheckley21.html"&gt;"Bad Medicine"&lt;/a&gt; a man is "cured" by a mechanic psychiatrist. It turns out, the "mechanotherapist" wasn't made for human minds, but martians. Of course, the result is not the expected.&lt;br /&gt;&lt;br /&gt;An almost prophetic example is &lt;a href="http://www.scifi.com/scifiction/classics/classics_archive/sheckley5/sheckley51.html"&gt;"Price of Peril"&lt;/a&gt;: A TV show proposes a high sum of money to a man, if he can manage to survive the next week. His opponents are a bunch of (also hired) criminals. Of course, the TV cameras are watching him 24 hours a day. And of course, they have their own view how the game should end...&lt;br /&gt;&lt;br /&gt;To quote Douglas Adams (from the cover of Hunter/Victim): "I had no idea the competition was so terrifyingly good."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-3012044994363745484?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/3012044994363745484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=3012044994363745484' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/3012044994363745484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/3012044994363745484'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2008/11/authors-to-remember-robert-sheckley.html' title='Authors to remember: Robert Sheckley'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-4736434139737890988</id><published>2008-10-05T18:03:00.002+02:00</published><updated>2008-10-05T19:33:43.899+02:00</updated><title type='text'>How to skip a test with JUnit</title><content type='html'>In my past, about 10 years, ago, I've been a very committed Perl programmer. This meant, in particular, that I have written my share of &lt;a href="http://perldoc.perl.org/Test/Harness.html"&gt;test cases&lt;/a&gt;. One of the nicer features of the testing framework is the possibility to skip tests at runtime. One can use this for all kind of things like suppressing slower tests in every days work, for restricting tests to certain operating systems, and so on. The test suite runner recognizes skipped tests and reports them as skipped (as opposed to failed, or successfull).&lt;br /&gt;&lt;br /&gt;On the other hand, I have always missed this feature in JUnit. But, from what I can tell, it's finally there in JUnit 4.4. Suggest the following example, which runs a test only, if the system property "run.slow.tests" is set.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    import static org.junit.Assume.*;&lt;br /&gt;&lt;br /&gt;    public class ConditionalTest {&lt;br /&gt;        @Test fastTest() { // Performed always&lt;br /&gt;            ...&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        @Test slowTest() { // Performed always&lt;br /&gt;            assumeTrue(Boolean.getBoolean("run.slow.tests"));&lt;br /&gt;            ...&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Internally, the feature works by throwing an AssumptionViolationException.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-4736434139737890988?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/4736434139737890988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=4736434139737890988' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4736434139737890988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4736434139737890988'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2008/10/how-to-skip-test-with-junit.html' title='How to skip a test with JUnit'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-7445818156160454863</id><published>2008-07-31T04:21:00.005+02:00</published><updated>2009-06-23T14:45:11.571+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAXR'/><category scheme='http://www.blogger.com/atom/ns#' term='JaxMas'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>Announce: Apache JaxMas</title><content type='html'>I'm glad to announce that the world has got yet another (tiny!) open source project, &lt;a href="http://svn.apache.org/repos/asf/labs/jaxmas/"&gt;Apache JaxMas&lt;/a&gt;. JaxMas is basically a very, very incomplete JAXR implementation.&lt;br /&gt;&lt;br /&gt;Why another JAXR implementation? The world has already got plenty of them, for example &lt;a href="http://ws.apache.org/scout/"&gt;Apache Scout&lt;/a&gt;. My job is mainly about &lt;a href="http://www.centrasite.com/"&gt;CentraSite&lt;/a&gt;, my employers implementation (there's more to it than a simple JAXR implementation, of course). But they all share a common problem: It is basically impossible to use them for unit testing and non-trivial, to use them within integration tests.&lt;br /&gt;&lt;br /&gt;The problem is that they all require a running server. And, what's more, it is difficult to start from a predefined set. That's where JaxMas comes into play. JaxMas is running on HSQLDB. The embedded mode of &lt;a href="http://www.hsqldb.org/"&gt;HSQLDB&lt;/a&gt; is obviously ideal for unit tests. JaxMas is based on the assumption of an initial schema, that is created by the unit test. The schema is basically a set of SQL commands, but a macro processor allows to create taxononmies and other registry objects relatively easily.&lt;br /&gt;&lt;br /&gt;Btw, you might ask me why I didn't choose &lt;a href="http://db.apache.org/derby"&gt;Apache Derby&lt;/a&gt; as the engine. Well, I did initially, but &lt;a href="https://issues.apache.org/jira/browse/DERBY-338"&gt;DERBY-338&lt;/a&gt; was blocking me. This issue prevents that two foreign key references exist between the same tables with different ON DELETE clauses. However, I need that feature for deleting even complex registry objects with a simple DELETE statement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-7445818156160454863?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/7445818156160454863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=7445818156160454863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/7445818156160454863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/7445818156160454863'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2008/07/announce-apache-jaxmas.html' title='Announce: Apache JaxMas'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-7042491472985427986</id><published>2008-07-18T22:49:00.005+02:00</published><updated>2009-06-23T14:44:57.519+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Labs'/><category scheme='http://www.blogger.com/atom/ns#' term='Derby'/><category scheme='http://www.blogger.com/atom/ns#' term='JAXR'/><category scheme='http://www.blogger.com/atom/ns#' term='CentraSite'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>JaxMas?</title><content type='html'>I am currently preparing a proposal for the &lt;a href="http://labs.apache.org/"&gt;Apache Labs&lt;/a&gt;. It will be something like an absolute minimal registry for writing JAXR based unit tests, running on &lt;a href="http://db.apache.org/derby/"&gt;Apache Derby&lt;/a&gt;. The idea is, that with existing registries (in my case &lt;a href="http://www.centrasite.org/"&gt;CentraSite&lt;/a&gt;) you'll rarely be writing unit tests, because the overhead is so high, that nothing below integration tests makes sense.&lt;br /&gt;&lt;br /&gt;Like any child, this one needs a name. With names, however, I am as inventive as the former federal german phone company. (The companies current successor &lt;span style="FONT-WEIGHT: bold"&gt;is&lt;/span&gt; inventive, in particular with new ways to bill you for things that have been free in the past.) Usually, a projects name would be discussed on the corresponding mailing list.&lt;br /&gt;&lt;br /&gt;In this case, however, it is more than likely, that I'll be the only user. So I though to ask here: As far as I know, this blog has at least two users and thats more than one, isn't it? So far my only idea was JaxMas, in honour of my former child &lt;a href="http://ws.apache.org/jaxme/"&gt;JaxMe&lt;/a&gt; and due to the fact, that I had the idea on christmas. Better suggestions more than welcome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-7042491472985427986?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/7042491472985427986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=7042491472985427986' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/7042491472985427986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/7042491472985427986'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2008/07/jaxmas.html' title='JaxMas?'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-6453169244784678442</id><published>2008-07-04T11:38:00.002+02:00</published><updated>2008-07-04T12:09:12.552+02:00</updated><title type='text'>When the human mind blocks itself</title><content type='html'>I am usually working in an office with some 40 other colleagues. The best piece of the office is (at least IMO), the espresso machine. It is one of these machines, which does everything for you by putting a cup on it and pressing a button: Coffee beans are grinded (wonderful flavour), pouring water, and finally pressing the coffee into your cup. That's it and the result has something you could actually call crema. (That is, it doesn't taste as well as in your favourite restaurant, but much better than what the traditional coffee machines gave you.) I like it and visit the place several times a day.&lt;br /&gt;&lt;br /&gt;Of course, the "does everything" part ends for you. The water is empty? Got to refill it. No more beans? Got to fetch a bag from the rack. Other tasks include cleaning the machine, decalcify it, and the like. In german, the word user is frequently translated to "Bediener", which could as well mean servant. But that's as it is, you simply do it and are well of not to spend too many thoughts about it. (And, in particular, not writing silly blog entries like this ... :-)&lt;br /&gt;&lt;br /&gt;The only question arising: When is the right time to perform these tasks? If you got your coffee and the machine informs you that it needs water, should you do this immediately, or leave it to the next coffee drinker?&lt;br /&gt;&lt;br /&gt;Of course, it is polite to do it immediately. And, because it is polite, you are expected to do it. But, for whatever reason, you tend to visit the machine and find it announcing that it needs water or beans. May be, its people like me who honestly wish to be polite, but are simply too absorbed in their thoughts to notice the message when leaving. May be, there actually are (as some of us believe) undecent parasites, which leave the work to others. "It's always me" is a typical phrase near the coffee machine.&lt;br /&gt;&lt;br /&gt;Now, let's try to consider the unimaginable: What if we all would decide to leave the job for the next one? Would it mean more work for anyone? Yes, it would, for the parasites (I personally doubt that they exist.) and for thoughtless people like me, who would actually need to do the job themselves. It would reduce the work of the honest, upright people who get never tired to encourage us not to leave the work to them. Noone would need to feel disadvantaged. It could simply work.&lt;br /&gt;&lt;br /&gt;Of course, it doesn't. Because, at some point, someone would wish to be polite again. And then we'd have the circle. The human mind blocks itself ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-6453169244784678442?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/6453169244784678442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=6453169244784678442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/6453169244784678442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/6453169244784678442'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2008/07/when-human-mind-blocks-itself.html' title='When the human mind blocks itself'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-6214453242013256142</id><published>2008-03-06T21:31:00.005+01:00</published><updated>2009-06-23T14:45:48.942+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sysdeo'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='EclipseTotale'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><title type='text'>Native libraries with the EclipseTotale Tomcat Plugin</title><content type='html'>I am a happy user of the &lt;a href="http://www.eclipsetotale.com/tomcatPlugin.html"&gt;EclipseTotale Tomcat Plugin&lt;/a&gt;: It is so much faster, more lightweight and convenient and generally easier to use than the server stuff of Eclipse WTP. (Of course, it cannot run JBoss, but I don't expect that it does. :-) It is one of the tools that I use every day.&lt;br /&gt;&lt;br /&gt;Unfortunately, I am also one of the poor souls who are forced to work with native libraries. (In my case the authentication libraries of &lt;a href="http://www.centrasite.org/"&gt;CentraSite&lt;/a&gt;.) Native libraries are generally a pain and one of the devils more successful inventions. In the case of the Tomcat plugin they have prevented me from using it for quite some time. Instead I was typically starting Tomcat from a shell script: The shell script has been setting the necessary environment variables like PATH under Windows or LD_LIBRARY_PATH under Linux/Unix, which indicate the location of shared libraries aka DLL's.&lt;br /&gt;&lt;br /&gt;I wondered for some time, whether it wouldn't be quite easy to add support for setting these variables to the plugin. At some point, I contacted the plugins author and asked for the sources in order to add the missing feature myself. He never responded. However, recently I found that he did something much better: If you open the plugins zip file, then you'll notice, that it contains a file called tomcatsrc.zip. Yes, these are the plugins sources. And, even better, there also is a file called license.txt, which tells you that the plugin is licensed under the &lt;a href="http://www.opensource.org/licenses/mit-license.php"&gt;MIT license&lt;/a&gt;, a very liberal license, that allows me to change the sources. I could even distribute an updated plugin.&lt;br /&gt;&lt;br /&gt;It turned out, that the work was even quite easy. Adding a control to the preferences page, some resource strings and a piece of configuration to an Eclipse configuration object for launching external programs, that's basically it.&lt;br /&gt;&lt;br /&gt;If you're interested, I'll post the patch below. Let's hope, that this patch, which I have submitted to the plugins author will appear in the next version.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;diff -ubr --exclude='*.class' ./src/com/sysdeo/eclipse/tomcat/editors/ListFieldEditor.java /home/jwi/workspace/com.sysdeo.eclipse.tomcat/src/com/sysdeo/eclipse/tomcat/editors/ListFieldEditor.java&lt;br /&gt;--- ./src/com/sysdeo/eclipse/tomcat/editors/ListFieldEditor.java 2005-04-11 12:04:10.000000000 +0200&lt;br /&gt;+++ /home/jwi/workspace/com.sysdeo.eclipse.tomcat/src/com/sysdeo/eclipse/tomcat/editors/ListFieldEditor.java 2008-03-06 21:14:19.000000000 +0100&lt;br /&gt;@@ -6,9 +6,9 @@&lt;br /&gt; import java.util.StringTokenizer;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; import org.eclipse.jface.dialogs.IDialogConstants;&lt;br /&gt;&lt;br /&gt;+import org.eclipse.jface.dialogs.IInputValidator;&lt;br /&gt;&lt;br /&gt; import org.eclipse.jface.dialogs.InputDialog;&lt;br /&gt;&lt;br /&gt; import org.eclipse.jface.preference.ListEditor;&lt;br /&gt;&lt;br /&gt;-import org.eclipse.jface.util.Assert;&lt;br /&gt;&lt;br /&gt; import org.eclipse.swt.SWT;&lt;br /&gt;&lt;br /&gt; import org.eclipse.swt.events.DisposeEvent;&lt;br /&gt;&lt;br /&gt; import org.eclipse.swt.events.DisposeListener;&lt;br /&gt;&lt;br /&gt;@@ -55,10 +55,13 @@&lt;br /&gt;   */&lt;br /&gt;&lt;br /&gt;  protected SelectionListener selectionListener;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;+ private final IInputValidator validator;&lt;br /&gt;&lt;br /&gt;+&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;&lt;br /&gt;   * Creates a new list field editor&lt;br /&gt;&lt;br /&gt;   */&lt;br /&gt;&lt;br /&gt;  public ListFieldEditor() {&lt;br /&gt;&lt;br /&gt;+  validator = null;&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;&lt;br /&gt;@@ -70,10 +73,13 @@&lt;br /&gt;   *            the label text of the field editor&lt;br /&gt;&lt;br /&gt;   * @param parent&lt;br /&gt;&lt;br /&gt;   *            the parent of the field editor's control&lt;br /&gt;&lt;br /&gt;+  * @param validator&lt;br /&gt;&lt;br /&gt;+  *            A validator for validating the users input&lt;br /&gt;&lt;br /&gt;   */&lt;br /&gt;&lt;br /&gt;- public ListFieldEditor(String name, String labelText, Composite parent) {&lt;br /&gt;&lt;br /&gt;+ public ListFieldEditor(String name, String labelText, Composite parent, IInputValidator validator) {&lt;br /&gt;&lt;br /&gt;   init(name, labelText);&lt;br /&gt;&lt;br /&gt;   createControl(parent);&lt;br /&gt;&lt;br /&gt;+  this.validator = validator;&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;&lt;br /&gt;@@ -440,7 +446,7 @@&lt;br /&gt;    defaultValue = list.getSelection()[0];&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-  InputDialog dialog = new InputDialog(getShell(), "New Tomcat JVM paramater", "Enter a JVM parameter", defaultValue, null);&lt;br /&gt;&lt;br /&gt;+  InputDialog dialog = new InputDialog(getShell(), "New Tomcat JVM paramater", "Enter a JVM parameter", defaultValue, validator);&lt;br /&gt;&lt;br /&gt;   String param = null;&lt;br /&gt;&lt;br /&gt;   int dialogCode = dialog.open();&lt;br /&gt;&lt;br /&gt;   if (dialogCode == InputDialog.OK) {&lt;br /&gt;&lt;br /&gt;diff -ubr --exclude='*.class' ./src/com/sysdeo/eclipse/tomcat/TomcatBootstrap.java /home/jwi/workspace/com.sysdeo.eclipse.tomcat/src/com/sysdeo/eclipse/tomcat/TomcatBootstrap.java&lt;br /&gt;--- ./src/com/sysdeo/eclipse/tomcat/TomcatBootstrap.java 2007-03-28 20:58:58.000000000 +0200&lt;br /&gt;+++ /home/jwi/workspace/com.sysdeo.eclipse.tomcat/src/com/sysdeo/eclipse/tomcat/TomcatBootstrap.java 2008-03-06 20:49:44.000000000 +0100&lt;br /&gt;@@ -11,8 +11,10 @@&lt;br /&gt; import java.io.PrintWriter;&lt;br /&gt;&lt;br /&gt; import java.util.ArrayList;&lt;br /&gt;&lt;br /&gt; import java.util.Collection;&lt;br /&gt;&lt;br /&gt;+import java.util.HashMap;&lt;br /&gt;&lt;br /&gt; import java.util.Iterator;&lt;br /&gt;&lt;br /&gt; import java.util.List;&lt;br /&gt;&lt;br /&gt;+import java.util.Map;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; import org.eclipse.core.resources.IFile;&lt;br /&gt;&lt;br /&gt; import org.eclipse.core.resources.IProject;&lt;br /&gt;&lt;br /&gt;@@ -198,14 +200,16 @@&lt;br /&gt;    jvmArguments.append(" " + vmArgs[i]);&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;+  Map envVariables = getEnvVariables();&lt;br /&gt;&lt;br /&gt;+&lt;br /&gt;&lt;br /&gt;   if(action == RUN) {&lt;br /&gt;&lt;br /&gt;-   VMLauncherUtility.runVM(getLabel(), getMainClass(), classpath, bootClasspath, jvmArguments.toString(), programArguments.toString(), isDebugMode(), showInDebugger, saveConfig);&lt;br /&gt;&lt;br /&gt;+   VMLauncherUtility.runVM(getLabel(), getMainClass(), classpath, bootClasspath, jvmArguments.toString(), programArguments.toString(), isDebugMode(), showInDebugger, saveConfig, envVariables);&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   if(action == LOG) {&lt;br /&gt;&lt;br /&gt;-   VMLauncherUtility.log(getLabel(), getMainClass(), classpath, bootClasspath, jvmArguments.toString(), programArguments.toString(), isDebugMode(), showInDebugger);&lt;br /&gt;&lt;br /&gt;+   VMLauncherUtility.log(getLabel(), getMainClass(), classpath, bootClasspath, jvmArguments.toString(), programArguments.toString(), isDebugMode(), showInDebugger, envVariables);&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   if(action == ADD_LAUNCH) {&lt;br /&gt;&lt;br /&gt;-   VMLauncherUtility.createConfig(getLabel(), getMainClass(), classpath, bootClasspath, jvmArguments.toString(), programArguments.toString(), isDebugMode(), showInDebugger, true);&lt;br /&gt;&lt;br /&gt;+   VMLauncherUtility.createConfig(getLabel(), getMainClass(), classpath, bootClasspath, jvmArguments.toString(), programArguments.toString(), isDebugMode(), showInDebugger, true, envVariables);&lt;br /&gt;&lt;br /&gt;   } &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;@@ -375,4 +379,17 @@&lt;br /&gt;   return StringUtil.concatUniq(previous, prefBootClasspath);&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;+ private Map getEnvVariables() {&lt;br /&gt;&lt;br /&gt;+  final String[] envVariables = StringUtil.cutString(TomcatLauncherPlugin.getDefault().getEnvVariables(), TomcatPluginResources.PREF_PAGE_LIST_SEPARATOR);&lt;br /&gt;&lt;br /&gt;+  final Map result = new HashMap();&lt;br /&gt;&lt;br /&gt;+  if (envVariables != null) {&lt;br /&gt;&lt;br /&gt;+   for (int i = 0;  i &lt; envvariable =" envVariables[i];" key =" TomcatLauncherPlugin.getEnvVariableKey(envVariable);" value =" TomcatLauncherPlugin.getEnvVariableValue(envVariable);" exclude="'*.class'" field_width =" 50;" jvmparamaters =" new" jvmparamaters =" new" jvmclasspath =" new" jvmbootclasspath =" new" envvariables =" new" exclude="'*.class'" tomcat_pref_jvm_parameters_key = "jvmParameters" tomcat_pref_jvm_classpath_key = "jvmClasspath" tomcat_pref_jvm_bootclasspath_key = "jvmBootClasspath" tomcat_pref_env_variables_key = "envVariables" tomcat_pref_projectsincp_key = "projectsInCp" tomcat_pref_projectsinsourcepath_key = "projectsInSourcePath" tomcat_pref_computesourcepath_key = "computeSourcePath" pref =" TomcatLauncherPlugin.getDefault().getPreferenceStore();" pref =" TomcatLauncherPlugin.getDefault().getPreferenceStore();" offset =" envVariable.indexOf('="');" offset ="="" s =" envVariable.substring(0," offset =" envVariable.indexOf('="');" offset ="="" exclude="'*.class'" pref_page_parameters_label ="     TomcatLauncherPlugin.getResourceString(" pref_page_env_variables_label ="  +" pref_page_env_variable_invalid_msg ="  +" pref_page_dump_config_label ="     TomcatLauncherPlugin.getResourceString(" exclude="'*.class'" vminstall =" getVMInstall();" mode =" ILaunchManager.RUN_MODE;" vmrunner =" vmInstall.getVMRunner(mode);" config =" createConfig(label," config =" createConfig(label," sourcelocator =" getSourceLocator(config," trace =" new"&gt; Label : " + label);&lt;br /&gt;&lt;br /&gt;   trace.append("\n-&gt; ClassToLaunch : " + classToLaunch);&lt;br /&gt;&lt;br /&gt;@@ -138,7 +140,7 @@&lt;br /&gt;   TomcatLauncherPlugin.log(trace.toString()); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   try {&lt;br /&gt;&lt;br /&gt;-   ILaunchConfigurationWorkingCopy config = createConfig(label, classToLaunch, classpath, bootClasspath, vmArgs, prgArgs, debug, showInDebugger, false);&lt;br /&gt;&lt;br /&gt;+   ILaunchConfigurationWorkingCopy config = createConfig(label, classToLaunch, classpath, bootClasspath, vmArgs, prgArgs, debug, showInDebugger, false, envVariables);&lt;br /&gt;&lt;br /&gt;    getSourceLocator(config, true);&lt;br /&gt;&lt;br /&gt;   } catch (CoreException e) {&lt;br /&gt;&lt;br /&gt;    TomcatLauncherPlugin.log("getSourceLocator failed");&lt;br /&gt;&lt;br /&gt;@@ -148,7 +150,7 @@&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- static public ILaunchConfigurationWorkingCopy createConfig(String label, String classToLaunch, String[] classpath, String[] bootClasspath, String vmArgs, String prgArgs, boolean debug, boolean showInDebugger, boolean saveConfig) throws CoreException {&lt;br /&gt;&lt;br /&gt;+ static public ILaunchConfigurationWorkingCopy createConfig(String label, String classToLaunch, String[] classpath, String[] bootClasspath, String vmArgs, String prgArgs, boolean debug, boolean showInDebugger, boolean saveConfig, Map envVariables) throws CoreException {&lt;br /&gt;&lt;br /&gt;   IVMInstall vmInstall = getVMInstall();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   ILaunchConfigurationType launchType = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurationType("org.eclipse.jdt.launching.localJavaApplication");&lt;br /&gt;&lt;br /&gt;@@ -218,6 +220,8 @@&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, catalinaBase);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;+  config.setAttribute(LaunchManager.ATTR_ENVIRONMENT_VARIABLES, envVariables);&lt;br /&gt;&lt;br /&gt;+ &lt;br /&gt;&lt;br /&gt;   if(saveConfig) {&lt;br /&gt;&lt;br /&gt;    getSourceLocator(config, false);&lt;br /&gt;&lt;br /&gt;    config.doSave();&lt;br /&gt;&lt;br /&gt;diff -ubr --exclude='*.class' ./src/resources_de.properties /home/jwi/workspace/com.sysdeo.eclipse.tomcat/src/resources_de.properties&lt;br /&gt;--- ./src/resources_de.properties 2004-06-17 19:06:12.000000000 +0200&lt;br /&gt;+++ /home/jwi/workspace/com.sysdeo.eclipse.tomcat/src/resources_de.properties 2008-03-06 21:20:48.000000000 +0100&lt;br /&gt;@@ -32,6 +32,8 @@&lt;br /&gt; pref.page.unselectAll.label=Alles abw\u00E4hlen&lt;br /&gt;&lt;br /&gt; pref.page.jvmSettings.label=Setzen Sie die folgenden Felder nur im Falle der bestimmten Anforderungen&lt;br /&gt;&lt;br /&gt; pref.page.parameters.label=Zu JVM Parametern hinzuf\u00FCgen&lt;br /&gt;&lt;br /&gt;+pref.page.env.variables.label=Umgebungsvariablen&lt;br /&gt;&lt;br /&gt;+pref.page.env.variable.invalid.msg=Eine Umgebungsvariable muss in der Form NAME=WERT angegeben werden.&lt;br /&gt;&lt;br /&gt; pref.page.bootclasspath.label=Boot Classpath&lt;br /&gt;&lt;br /&gt; pref.page.classpath.label=Classpath (Vor dem erstellten Classpath)&lt;br /&gt;&lt;br /&gt; pref.page.chooseversion.label=Tomcat Version&lt;br /&gt;&lt;br /&gt;diff -ubr --exclude='*.class' ./src/resources.properties /home/jwi/workspace/com.sysdeo.eclipse.tomcat/src/resources.properties&lt;br /&gt;--- ./src/resources.properties 2006-10-23 22:01:18.000000000 +0200&lt;br /&gt;+++ /home/jwi/workspace/com.sysdeo.eclipse.tomcat/src/resources.properties 2008-03-06 21:19:57.000000000 +0100&lt;br /&gt;@@ -35,6 +35,8 @@&lt;br /&gt; pref.page.unselectAll.label = Unselect All&lt;br /&gt;&lt;br /&gt; pref.page.jvmSettings.label = Set following fields only if you have particular requirements&lt;br /&gt;&lt;br /&gt; pref.page.parameters.label = Append to JVM Parameters&lt;br /&gt;&lt;br /&gt;+pref.page.env.variables.label = Environment variables&lt;br /&gt;&lt;br /&gt;+pref.page.env.variable.invalid.msg = An environment variable must be specified in the form NAME=VALUE.&lt;br /&gt;&lt;br /&gt; pref.page.jre.label = JRE&lt;br /&gt;&lt;br /&gt; pref.page.bootclasspath.label = Boot Classpath (rt.jar required)&lt;br /&gt;&lt;br /&gt; pref.page.classpath.label = Classpath (Before generated classpath)&lt;br /&gt;&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/8124028403626039195-6214453242013256142?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/6214453242013256142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=6214453242013256142' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/6214453242013256142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/6214453242013256142'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2008/03/native-libraries-with-eclipsetotale.html' title='Native libraries with the EclipseTotale Tomcat Plugin'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-3234318847098182658</id><published>2007-11-13T08:35:00.002+01:00</published><updated>2009-06-08T22:24:32.622+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux Installation - Simpler than ever</title><content type='html'>I had my share of Linux installation in the past, starting with floppy disk based 15 years ago, and used various installation methods, including CD, DVD, bootp based network, local file system, and so on. I am used to things breaking, but of course, I enjoy if everything works well.&lt;br /&gt;&lt;br /&gt;This week, I stumbled over a package called &lt;a href="http://lubi.sourceforge.net/unetbootin.html"&gt;UNetbootin&lt;/a&gt;. Think of it as a Windows setup.exe for installing Linux. It is actually that simple. You may choose between &lt;a href="http://fedoraproject.org/"&gt;Fedora 8&lt;/a&gt; (as of this writing, less than one week old), &lt;a href="http://www.opensuse.org/"&gt;OpenSUSE 10.3&lt;/a&gt;, &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu 7.10&lt;/a&gt;, &lt;a href="http://www.debian.org/"&gt;Debian Etch&lt;/a&gt;, and even a simple &lt;a href="http://gparted.sourceforge.net/"&gt;partition manager&lt;/a&gt;. If you do not have Windows installed, you can choose a different host system: There also are .rpm, and .deb files, as well as a simple shell script.&lt;br /&gt;&lt;br /&gt;I am definitely impressed. Most possibly, I will use it for my future installations as well. It's worth spreading the news.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-3234318847098182658?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/3234318847098182658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=3234318847098182658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/3234318847098182658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/3234318847098182658'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2007/11/linux-installation-simpler-than-ever.html' title='Linux Installation - Simpler than ever'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-2362641693859817252</id><published>2007-11-04T22:27:00.001+01:00</published><updated>2007-11-04T22:51:16.886+01:00</updated><title type='text'>Crunchy at the outside and a sweet inlet</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-Usy_X0vTUM/Ry4572OdNuI/AAAAAAAAAec/XjB_lnJQmq4/s1600-h/creme-brullee-1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_-Usy_X0vTUM/Ry4572OdNuI/AAAAAAAAAec/XjB_lnJQmq4/s320/creme-brullee-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5129100725952788194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is Anjas and Maries preferred dessert: It's a french treat called &lt;a href="http://en.wikipedia.org/wiki/Cr%C3%A8me_br%C3%BBl%C3%A9e"&gt;Crème Brûlée&lt;/a&gt;. It's crunchy at the upper side (due to the burnt sugar).  (In the case of &lt;a href="http://en.wikipedia.org/wiki/The_Daltons_%28Lucky_Luke%29#Averell_Dalton"&gt;Averell Dalton&lt;/a&gt;, the crunchy thing would most possibly be the bottom.) Don't ask for the inlet. (Cream, eggs yolk, more sugar)&lt;br /&gt;&lt;br /&gt;I definitely prefer a double espresso, but I like the fun to use the burner. :-) If you are in company, it's quite likely that the men will sooner or later be scaffling over its ownership.&lt;br /&gt;&lt;br /&gt;Why I am writing this? It reminds me of one of my favourite &lt;a href="http://en.wikipedia.org/wiki/Gary_Larson"&gt;Gary Larson&lt;/a&gt; strips: An igloo and two ice bears, one of them saying "Oh, I like these things. Crunchy at the outside and a sweet inlet."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-2362641693859817252?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/2362641693859817252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=2362641693859817252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/2362641693859817252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/2362641693859817252'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2007/11/crunchy-at-outside-and-sweet-inlet.html' title='Crunchy at the outside and a sweet inlet'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-Usy_X0vTUM/Ry4572OdNuI/AAAAAAAAAec/XjB_lnJQmq4/s72-c/creme-brullee-1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-5779483048854884709</id><published>2007-10-26T21:49:00.000+02:00</published><updated>2007-10-26T22:11:24.408+02:00</updated><title type='text'>How to become an Apache committer</title><content type='html'>I knew there are different possibilities to become an Apache projects committer. In some cases, you've got to earn it hard, in other cases its easier.&lt;br /&gt;&lt;br /&gt;Recently I have learned the easiest way, though: You simply have to be the member of the right project. In my case this would be &lt;a href="http://wiki.apache.org/incubator/RatProposal"&gt;RAT&lt;/a&gt; or &lt;a href="http://wiki.apache.org/incubator/ComposerProposal"&gt;Plexus&lt;/a&gt;. Done nothing, and having two more entries on the &lt;a href="http://people.apache.org/%7Ejim/committers.html"&gt;profile&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But while we are at it, in it's extremely good that these are joining the ASF. Or should I say "coming home"? I never understood Roberts decision to build RAT at &lt;a href="http://code.google.com/p/arat/"&gt;Google&lt;/a&gt;. At least, I was unable to see any advantages. Yet another bug tracker to learn, another code repository to maintain, and a completely different way of releasing distributables. Same goes for Plexus at &lt;a href="http://plexus.codehaus.org/"&gt;Codehaus&lt;/a&gt;. I agree that it makes sense to host the &lt;a href="http://mojo.codehaus.org"&gt;Mojo&lt;/a&gt; project at Codehaus: In that case it is most possibly more important that new developers can easily be added.&lt;br /&gt;&lt;br /&gt;In both cases, I am personally happy about the decision. In the case of RAT, this will make it much easier to integrate the RAT core and the &lt;a href="http://mojo.codehaus.org/rat-maven-plugin"&gt;rat-maven-plugin&lt;/a&gt;. And if Plexus will be called Apache Composer, then I'll possibly be able to use it in projects at work as a lightweight alternative to Spring. (It is always easier to ask for use of "Apache Something", compared to "sf.net/projects/foo", or "bar.codehaus.org".&lt;br /&gt;&lt;br /&gt;While we are at it: How about moving the Maven issue tracker to issues.apache.org, where it belongs?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-5779483048854884709?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/5779483048854884709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=5779483048854884709' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5779483048854884709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/5779483048854884709'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2007/10/how-to-become-apache-committer.html' title='How to become an Apache committer'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-4721167870707584379</id><published>2007-10-19T21:50:00.000+02:00</published><updated>2007-10-19T22:14:43.645+02:00</updated><title type='text'>A cobbler should stick to his last.</title><content type='html'>Yesterday I felt really sick and decided to stay in bed. It turned out to be an excellent idea and I could really use some hours of additional sleep below two blankets. (Initially, I had three, but when &lt;a href="http://www.kiwi-station.de/gallery/Cats/cats.html"&gt;Hobbesy&lt;/a&gt; joined me, she demanded her usual underlay.)&lt;br /&gt;&lt;br /&gt;Inevitably, after some hours I felt much better and started to get bored. So I picked up the &lt;a href="http://en.wikipedia.org/wiki/Digital_Fortress"&gt;Digital Fortress&lt;/a&gt; by Dan Brown and started to read. I quite liked his previous books. I understand that a novel author has got a poetic license and didn't mind when I found him using his before.&lt;br /&gt;&lt;br /&gt;This wasn't the case in the digital fortress. It may be that he was covering an area of my expertise, but my impression is that he simply understands much more of history (&lt;a href="http://en.wikipedia.org/wiki/Angels_and_Demons"&gt;Angels &amp;amp; Demons&lt;/a&gt;, and the &lt;a href="http://en.wikipedia.org/wiki/The_Da_Vinci_Code"&gt;Da Vinci Code&lt;/a&gt;), or natural science (&lt;a href="http://en.wikipedia.org/wiki/Deception_Point"&gt;Deception Point&lt;/a&gt;) than of computer science and mathematics. In fact, the reading was amusing at best. The idea that you can catch the exponential powers of a "million bit key" by a linear increased number of CPU's. The impression that a firewall can be "weakened" by consecutive attacks like a true wall. But the best one was most possibly the "X Eleven transport protocol".&lt;br /&gt;&lt;br /&gt;Well, I hope that Mr. Brown returns to his last when the &lt;a href="http://en.wikipedia.org/wiki/The_Solomon_Key"&gt;Solomon Key&lt;/a&gt; is published. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-4721167870707584379?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/4721167870707584379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=4721167870707584379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4721167870707584379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4721167870707584379'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2007/10/cobbler-should-stick-to-his-last.html' title='A cobbler should stick to his last.'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-8441277540787214467</id><published>2007-09-08T11:28:00.000+02:00</published><updated>2007-09-08T11:49:37.478+02:00</updated><title type='text'>What a difference ten days make ...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-Usy_X0vTUM/RuJryz1mkvI/AAAAAAAAAAU/FDonp_ALC6c/s1600-h/038_35.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_-Usy_X0vTUM/RuJryz1mkvI/AAAAAAAAAAU/FDonp_ALC6c/s320/038_35.JPG" alt="" id="BLOGGER_PHOTO_ID_5107763448044229362" border="0" /&gt;&lt;/a&gt;Here they are again: Frodo, Sam, Merry and Pippin are the preliminary names that I prefer. Anja sticks to Nicki, Nacki, Nucki, and Necki. We both agree to consider the other's names as silly. :-)&lt;br /&gt;&lt;br /&gt;Initially, they have been as thin as their mothers legs. The length was about the half. Nowadays, the four little mothersuckers have doubled both size and length. Don't ask about the weight. In ten days.&lt;br /&gt;&lt;br /&gt;The eyes are now open. Although approximately half of the time is spent for drinking Mama empty (I hope they stick to the milk.) and the other half is left for sleeping, they start to rob, crawl, and tussle with each other. A finger held to their nose is replied with resolute hissing. Quite comparable to Marie, who also tries rather hard to be impressive when she declares herself as a grown up. Of course, she also enjoys to visit and cuddle the cute bunch.  Unfortunately, the nest is situated on the  attic, quite close to the toys and clothes she had in the past. In other words, any visit is typically ending with a discussion whether or which piece she may bring down. Therefor, fun is a little bit reduced.&lt;br /&gt;&lt;br /&gt;If you notice a brown blot at the top of the picture: That's been Gandalf's blood in the birth. Of course, we did not exchange the towel: The babys definitely prefer this one's smell and sense and would possibly be shocked by a completely different environment.  Apart from that, the nest is absolutely clean. Better not to enquire how Mama Gandalf achieves this ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-8441277540787214467?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/8441277540787214467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=8441277540787214467' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/8441277540787214467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/8441277540787214467'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2007/09/what-difference-ten-days-make.html' title='What a difference ten days make ...'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-Usy_X0vTUM/RuJryz1mkvI/AAAAAAAAAAU/FDonp_ALC6c/s72-c/038_35.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-2107759913843758299</id><published>2007-08-28T15:27:00.001+02:00</published><updated>2007-08-28T15:35:44.391+02:00</updated><title type='text'>Cat Content</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_-Usy_X0vTUM/RtQjdj1mkuI/AAAAAAAAAAM/4v597qg-ewQ/s1600-h/kittens.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_-Usy_X0vTUM/RtQjdj1mkuI/AAAAAAAAAAM/4v597qg-ewQ/s320/kittens.jpg" alt="" id="BLOGGER_PHOTO_ID_5103743268460860130" border="0" /&gt;&lt;/a&gt;Yesterday we hailed the latest members of the family. The mother's called Gandalf (Ok, that's a males name, but anyways, you can guess why, can't you?),  the childs haven't yet got any names. As you can see on the picture, they are neatly ordered from light to dark, so possibly the names should match that order. Suggestions welcome. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-2107759913843758299?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/2107759913843758299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=2107759913843758299' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/2107759913843758299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/2107759913843758299'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2007/08/cat-content.html' title='Cat Content'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_-Usy_X0vTUM/RtQjdj1mkuI/AAAAAAAAAAM/4v597qg-ewQ/s72-c/kittens.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-8311283430518273995</id><published>2007-08-20T20:29:00.001+02:00</published><updated>2009-06-23T14:46:20.047+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAXR'/><category scheme='http://www.blogger.com/atom/ns#' term='data binding'/><title type='text'>History Repeating</title><content type='html'>In the nineties, I used to work as a freelancer, typically in small one-man projects. At that time, Perl was by far my favourite programming language. &lt;a href="http://www.cpan.org/authors/id/J/JW/JWIED"&gt;Some relicts&lt;/a&gt; can still be found. Perl was the proper tool for the job: I had the oversight. I knew any single line of code. If changes were required, then I knew exactly what to do.&lt;br /&gt;&lt;br /&gt;When I started to work in larger projects, with two or more members, I felt the weak sides of Perl immediately. Even as the lead developer, I began to lose control. Even if I knew how sources &lt;span style="FONT-WEIGHT: bold"&gt;had been&lt;/span&gt;, I didn't know exactly, how they &lt;span style="FONT-WEIGHT: bold"&gt;were&lt;/span&gt;. For example, I could no longer change a methods signature without the risk to break things. The larger the project, the more overwhelming the problem. Java with its type safety and strictness was much more appropriate. I was again able to respond quickly to changed requirements. (Today, I really wonder how large PHP projects are managed and how much time is lost when dealing with these things.)&lt;br /&gt;&lt;br /&gt;Of course, that wasn't the end of the story. Code is more than Java, Perl, or any other programming language. I began to become aware of that in my first XML projects, around 1999. The initial version was always based on DOM. The application programmers were fumbling around from node to node, reproducing algorithms again and again. Of course, DOM (or SAX, or pull parsing) was (and still is), the proper tool for &lt;span style="FONT-WEIGHT: bold"&gt;generic&lt;/span&gt; XML processing. But it is extremely unusable for &lt;span style="FONT-WEIGHT: bold"&gt;application programming&lt;/span&gt;: As soon as the data model changes, you are lost. Once more, the concept works for small projects. But in a large project, things are quite different: There's absolutely no reliable way to find all locations in the code, that need to be changed.&lt;br /&gt;&lt;br /&gt;My reply was the predecessor to &lt;a href="http://sf.net/projects/jaxme"&gt;JaxMe 1&lt;/a&gt;, an early Java/XML binding tool. The binding compiler converts the DTD, or XML schema, into Java beans. By using these beans, the Java compiler controls your use of the data model. If the data model changes, then the compiler tells you exactly what breaks. Ideally, the application programmers will be able to implement about 80% of the projects code by working on the beans and the project becomes manageable again. Of course, the JaxMe predecessor, JaxMe 1, and even &lt;a href="http://ws.apache.org/jaxme"&gt;JaxMe 2&lt;/a&gt; are very limited tools, compared to modern and full blown Java/XML binding suites like &lt;a href="https://jaxb.dev.java.net/"&gt;JAXB&lt;/a&gt;. But that's not the point, in contrary: It's quite telling, that even my self-made tool could boost a project. The fact, that there have been so many similar projects (&lt;a href="http://www.castor.org/"&gt;Castor&lt;/a&gt;, &lt;a href="http://zeus.objectweb.org/"&gt;Zeus&lt;/a&gt;, &lt;a href="http://xmlbeans.apache.org/"&gt;XML Beans&lt;/a&gt;, to name a few), also goes to show the concepts value.&lt;br /&gt;&lt;br /&gt;Two, or three years later, I felt a dejavu: For the first time, I was working in a large SQL/JDBC project. It was the same story again: As soon as we had implemented the first 50 or so queries, some of them quite complex, we felt again, that the growth began to become uncontrolled. An action as simple as changing a column type from boolean to integer could break the project and result in hours of bug tracking. As &lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt;, &lt;a href="http://db.apache.org/ojb/"&gt;OJB&lt;/a&gt;, and other object-relational mappers (not to mention &lt;a href="http://java.sun.com/javaee/technologies/jdo/"&gt;JDO&lt;/a&gt;) weren't available or not really recommendable at the time, I began to implement &lt;a href="http://jaxme.sourceforge.net/docs/RDBMS.html"&gt;my own nonsense&lt;/a&gt; again. It was sufficient as the base of two large projects. A similar tool, not implemented by me, but by another very capable programmer (Hello, Winfried, should you read this. :-), was the foundation of a third project. The success in relation to the simplicity proves again, how important mapping of loosely coupled entities (tables) to structures controlled by the Java compiler can be.&lt;br /&gt;&lt;br /&gt;Well, history's repeating. Nowadays, I am working in a large project again, feeling my own unability to keep the projects parts together: This time the entities are called registry objects, classifications, or associations, they are stored in a registry and accessed via &lt;a href="http://java.sun.com/webservices/jaxr/"&gt;JAXR&lt;/a&gt;. The project is getting larger, the pain caused by data model changes is growing. This time, we do not even have a schema language, not to mention a binding compiler, that translates structures into accessors.&lt;br /&gt;&lt;br /&gt;But maybe, we &lt;span style="FONT-WEIGHT: bold"&gt;can&lt;/span&gt; learn from history. I promise that I search for other peoples solution much longer this time. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-8311283430518273995?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/8311283430518273995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=8311283430518273995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/8311283430518273995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/8311283430518273995'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2007/08/history-repeating.html' title='History Repeating'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8124028403626039195.post-4610853196803275017</id><published>2007-08-16T22:42:00.001+02:00</published><updated>2009-06-23T14:46:06.694+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Authentication'/><category scheme='http://www.blogger.com/atom/ns#' term='Bugzilla'/><category scheme='http://www.blogger.com/atom/ns#' term='httpd'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>Poor Mans GForge</title><content type='html'>I call myself an extremely experienced person, when it comes to software installation, configuration and stuff like that. Having installed server software like &lt;a href="http://httpd.apache.org/"&gt;Apache httpd&lt;/a&gt;, &lt;a href="http://www.bugzilla.org/"&gt;Bugzilla&lt;/a&gt;, &lt;a href="http://www.perl.org/"&gt;Perl&lt;/a&gt;, &lt;a href="http://www.sendmail.org/"&gt;Sendmail&lt;/a&gt;, &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt;, &lt;a href="http://www.eyrie.org/~eagle/software/inn/docs/innd.html"&gt;innd&lt;/a&gt;, &lt;a href="http://www.net-snmp.org/"&gt;snmpd&lt;/a&gt;, &lt;a href="http://www.freeradius.org/"&gt;radiusd&lt;/a&gt;, to name a few, on Linux and mainstream Unixes (Solaris, AIX, HP/UX) as well as exotic server operating systems like SGI, ConvexOS, Dec, or Windows, there's a rare chance that an installation may surprise me. The most notable example used to be &lt;a href="http://www.hylafax.org/"&gt;Hylafax&lt;/a&gt;, which really wasn't easy to handle in 1996, or around that. (I wonder what it's like today. The project lives, so things might have changed.)&lt;br /&gt;&lt;br /&gt;However, there's another example, which can easily driving me crazy: It's &lt;a href="http://gforge.org/"&gt;GForge&lt;/a&gt;, a collaboration server for developers, that basically enables management of a lot of projects via a comfortable web interface. If you have it installed, that is.&lt;br /&gt;&lt;br /&gt;It's not, that I am unable to do it. I &lt;span style="FONT-WEIGHT: bold"&gt;have&lt;/span&gt; running GForge installations. But my first installation required no less than three days of work, until everything was complete and the fun didn't shrink with the second or third such installation. It's simply that I am wondering whether it's worth the effort. In particular, because I find myself missing &lt;a href="http://www.bugzilla.org/"&gt;Bugzilla&lt;/a&gt; anyways, when working with the integrated issue tracker.&lt;br /&gt;&lt;br /&gt;So when I recently had to setup a new development server, I decided to try something different: If I am installing Bugzilla (which I would end to do anyways), then I have my preferred issue tracker and a comfortable, multitenant user management tool ready. Why not simply attach &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt;, WebDAV (as a &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt; repository) to the Bugzilla database?&lt;br /&gt;&lt;br /&gt;The result of my attempt can be found at Bugzilla's own Bugzilla in &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=392482"&gt;Bug 392482&lt;/a&gt;. (Of course, it wasn't an immediate result. There have been a few evolutionary steps.) It consists of two parts: mod_authn_bugzilla is an authentication module for the Apache httpd. Basically, it's simply mod_authn_dbd with some minor changes (setting of environment variables). The Apache module authenticates users against the Bugzilla database. Like its ancestor, it's database agnostic, so you can use it regardless of the type of the Bugzilla database.&lt;br /&gt;&lt;br /&gt;The second part enables management of user ID's with Bugzilla. By default, Bugzilla uses email addresses instead of classical user ID's. Which is of course fine within Bugzilla. However, you wouldn't want to use me@foo.com as part of a subversion URL.&lt;br /&gt;&lt;br /&gt;I am quite happy with the system, as it is now. I am using standard components, which come with the Linux distro with almost no configuration changes. For example, my Subversion repositories are where &lt;a href="http://www.centos.org/"&gt;CentOS&lt;/a&gt; wants them, and not on GForge's preferred location. The webdav directories are below /var/www, as they should be. Ok, I cannot create new projects via the web interface, but project administration is a rare task: User management is what costs the most time and is typically presumed urgent, so that's what matters.&lt;br /&gt;&lt;br /&gt;If you are interested in the details, please contact me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8124028403626039195-4610853196803275017?l=grumpyapache.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://grumpyapache.blogspot.com/feeds/4610853196803275017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8124028403626039195&amp;postID=4610853196803275017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4610853196803275017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8124028403626039195/posts/default/4610853196803275017'/><link rel='alternate' type='text/html' href='http://grumpyapache.blogspot.com/2007/08/poor-mans-gforge.html' title='Poor Mans GForge'/><author><name>Jochen Wiedmann</name><uri>http://www.blogger.com/profile/09855969156780632315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
