<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Xebia Blog &#187; Wilfred Springer</title>
	<atom:link href="http://blog.xebia.com/author/wspringer/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xebia.com</link>
	<description>Software development done right!</description>
	<lastBuildDate>Wed, 01 Feb 2012 00:30:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Biomimicry and Software Development</title>
		<link>http://blog.xebia.com/2011/02/21/biomimicry-and-software-development/</link>
		<comments>http://blog.xebia.com/2011/02/21/biomimicry-and-software-development/#comments</comments>
		<pubDate>Mon, 21 Feb 2011 16:43:00 +0000</pubDate>
		<dc:creator>Wilfred Springer</dc:creator>
				<category><![CDATA[Xebia]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false"></guid>
		<description><![CDATA[Just this morning, I listened to Michael Pawlyn's wonderful TED talk on "Using nature's genius in architecture". It left me with a few thoughts buzzing around in my head during the rest of the day. I just want to jot them down here quickly, even if it ...]]></description>
			<content:encoded><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">Just this morning, I listened to <a href="http://www.ted.com/talks/michael_pawlyn_using_nature_s_genius_in_architecture.html">Michael Pawlyn&#8217;s wonderful TED talk on &#8220;Using nature&#8217;s genius in architecture&#8221;</a>. It left me with a few thoughts buzzing around in my head during the rest of the day. I just want to jot them down here quickly, even if it only were to serve my own memory. </p>
<p><b>Setting souls ablaze</b></p>
<p>Let&#8217;s start by fast-forwarding to the end of the talk. Right before the very end of the talk, Michael quotes Alexander de Sainte-Exupéry:<br />
<blockquote>&#8220;If you want to build a flotilla of ships, you don&#8217;t sit around talking about carpentry<span id="more-6157"></span>. No, you need to set people&#8217;s souls ablaze with visions of exploring distant shores.&#8221;</p></blockquote>
<p>I haven&#8217;t been able to find references to the quote anywhere else (yet), but even if it would have been Michael himself who made it up, I am still totally happy with it. I do believe this quote captures one of the essential virtues of people leading teams in a (software) company. People who are not able to &#8216;set people&#8217;s soul ablaze&#8217; should not be in front of a team, as far as I&#8217;m concerned. Period.</p>
<p><b>Should we really <i>eliminate</i> waste?</b></p>
<p>Michael&#8217;s talk also raised another question. I have been working on agile adoption for years in a row now, and until today, I considered &#8216;eliminating waste&#8217; a vital attitude for running a healthy development process. You don&#8217;t want waste; you want working software instead. </p>
<p>However, Michael&#8217;s talk makes you wonder if <i>reducing</i> waste isn&#8217;t really just sub-optimimizing it. He basically promotes: <i>&#8220;shifting from a linear, wasteful, polluting way of using resources to a closed loop model&#8221;</i>, and shows how waste created by one natural process often can be fed back into another natural process to grow something else. (Like using the waste of coffee grains as a substrate for growing mushrooms.)</p>
<p>Now, I am sure this not new to any of you. He just has better examples than you have ever seen before. But it made me wonder if there might be a counterpart to this in <i>our</i> industry as well. I mean, not creating any waste at all seems like the ultimate goal, but <i>could it be</i> that there is a way in which we &#8211; instead of focusing on getting rid of it, just for sake of getting it out of our system &#8211; could feed it back into our system in an efficient way? (And then I don&#8217;t mean reusing paper copies of pointless documents as cat litter.)</p>
<p>Honestly, I don&#8217;t have the answer. It seems like a crazy idea to consider in our industry. But perhaps the environmental guys are ahead of us. It might be worth to consider it for a while, since we spend quite a bit of energy getting rid of it. </p>
<p>This is how Michael says it:<br />
<blockquote>&#8220;But perhaps more than anything, what this thinking provides is a really positive way of talking about sustainable design. Far too much of the talk about the environment uses very negative language. But here it&#8217;s about synergies and abundance and optimizing. And this is an important point.&#8221;</p></blockquote>
<p>It seems to me that if we would be able to shift our focus in a similar way, there might be some room for further optimization.</p>
<p></div>
<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8084037628342188612-1130114523130686451?l=blog.flotsam.nl' alt='' /></div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/02/21/biomimicry-and-software-development/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/02/21/biomimicry-and-software-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NoSQL MongoDB night, starring Roger Bodamer (10gen)</title>
		<link>http://blog.xebia.com/2011/02/09/nosql-mongodb-night-starring-roger-bodamer-10gen/</link>
		<comments>http://blog.xebia.com/2011/02/09/nosql-mongodb-night-starring-roger-bodamer-10gen/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 14:56:42 +0000</pubDate>
		<dc:creator>Wilfred Springer</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[10gen]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[NoSQL]]></category>

	<!-- AutoMeta Start -->
	<category>roger</category>
	<category>10gen</category>
	<category>bodamer</category>
	<category>mongodb</category>
	<category>meetup</category>
	<category>nosql</category>
	<category>february</category>
	<category>16th</category>
	<category>roger</category>
	<category>10gen</category>
	<category>bodamer</category>
	<category>mongodb</category>
	<category>meetup</category>
	<category>nosql</category>
	<category>february</category>
	<category>16th</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=5938</guid>
		<description><![CDATA[Roger Bodamer from 10Gen, the company that develops and supports MongoDB, has agreed to come speak about all things MongoDB on Wednesday February 16th, at Xebia in Hilversum. We will start with a basic technical introduction to MongoDB but Roger knows MongoDB inside and out so feel free to suggest topics that you would like [...]]]></description>
			<content:encoded><![CDATA[<div style="float:right; padding: 5px"><img title="Roger Bodamer" src="http://www.10gen.com/static/images/team/roger.png?_ds=83c230ac0c7c8c87ced8b8c21555d03890579168" alt="" width="100" height="150" /></div>
<p>Roger Bodamer from 10Gen, the company that develops and supports MongoDB, has agreed to come speak about all things MongoDB on Wednesday February 16th, at Xebia in Hilversum. We will start with a basic technical introduction to MongoDB but Roger knows MongoDB inside and out so feel free to suggest topics that you would like to hear more about. Of course there will be a Q&amp;A at the end.</p>
<p>For more information about Roger and 10gen, have a look at their <a href="http://www.10gen.com/team">team page</a> (he&#8217;s third from the top).</p>
<p>Note that we need to put a limit on the number of registrants, so <em>if</em> you considered joining, register <em>now</em>. You can register at the <a href="http://www.meetup.com/nosql-nl/events/16090094/">Dutch NoSQL Meetup page found here</a>. </p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/02/09/nosql-mongodb-night-starring-roger-bodamer-10gen/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F02%2F09%2Fnosql-mongodb-night-starring-roger-bodamer-10gen%2F&amp;title=NoSQL%20MongoDB%20night%2C%20starring%20Roger%20Bodamer%20%2810gen%29" id="wpa2a_2"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/02/09/nosql-mongodb-night-starring-roger-bodamer-10gen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You have just been deconfluenced</title>
		<link>http://blog.xebia.com/2011/02/09/you-have-just-been-deconfluenced/</link>
		<comments>http://blog.xebia.com/2011/02/09/you-have-just-been-deconfluenced/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 08:42:02 +0000</pubDate>
		<dc:creator>Wilfred Springer</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[confluence]]></category>
		<category><![CDATA[proxy]]></category>

	<!-- AutoMeta Start -->
	<category>deconfluencer</category>
	<category>confluence</category>
	<category>xslt</category>
	<category>jnotify</category>
	<category>portnumber</category>
	<category>filter</category>
	<category>commandline</category>
	<category>conf</category>
	<category>deconfluencer</category>
	<category>confluence</category>
	<category>xslt</category>
	<category>jnotify</category>
	<category>portnumber</category>
	<category>filter</category>
	<category>commandline</category>
	<category>conf</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=5880</guid>
		<description><![CDATA[Before you start wondering, &#8216;deconfluencing&#8217; is not a word you can lookup in Merriam Webster. Perhaps it should be. It certainly is something I needed, and eventually ended up creating myself. Say what? Have you ever been in a position in which you had a lot of useful content inside Confluence, but you did not [...]]]></description>
			<content:encoded><![CDATA[<p>Before you start wondering, &#8216;deconfluencing&#8217; is not a word you can lookup in Merriam Webster. Perhaps it should be. It certainly is something I  needed, and eventually ended up creating myself.</p>
<p><span id="more-5880"></span></p>
<p><strong>Say what?</strong></p>
<p>Have you ever been in a position in which you had a lot of useful content inside Confluence, but you did not necessarily want it to be published out there as a Confluence web site, with all the bells and whistles it offers. If you were in that position, then the Deconfluencer might be just what you need.</p>
<p>The Deconfluencer is doing exactly what you would expect from its name. It takes a Confluence space, and republishes it, stripping off everything you don&#8217;t want, and rewriting the bits you want to have rewritten.</p>
<p>Let&#8217;s look at an example. Suppose this is your Confluence page:</p>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/02/Screen-shot-2011-02-09-at-9.04.59-AM.png"><img class="alignnone size-full wp-image-5881" title="Screen shot 2011-02-09 at 9.04.59 AM" src="http://blog.xebia.com/wp-content/uploads/2011/02/Screen-shot-2011-02-09-at-9.04.59-AM.png" alt="" width="400" height="450" /></a></p>
<p>Then the Deconfluencer could turn it into something like this:</p>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/02/Screen-shot-2011-02-09-at-9.03.41-AM.png"><img class="alignnone size-full wp-image-5882" title="Screen shot 2011-02-09 at 9.03.41 AM" src="http://blog.xebia.com/wp-content/uploads/2011/02/Screen-shot-2011-02-09-at-9.03.41-AM.png" alt="" width="404" height="340" /></a></p>
<p>Same contents, just rendered differently.</p>
<p><strong>How does it work?</strong></p>
<p>The Deconfluencer is simply a <a href="http://en.wikipedia.org/wiki/Reverse_proxy">reverse proxy</a> with some built-in transformation logic. (And some other features that come in handy when republishing Confluence content.) It&#8217;s not a war. It&#8217;s simply a commandline tool that &#8211; once started up &#8211; listens on a certain port, forwards incoming requests to Confluence, transforming  the results before sending it back to the browser.</p>
<p><strong>I don&#8217;t like your look and feel</strong></p>
<p>Well, rightfully so. The good thing is, you can transform the Confluence page in <em>any way you like</em>. If you unzip a Deconfluencer distribution, you will find a conf directory with a filter.xsl file, and a resources directory containing static resources, such as CSS and imagery. To start with the latter: if you only want to change the CSS, then you simply change the style.css file, and you&#8217;re good. However, if what you want to do is a little bit more involved, you need to adjust the filter.xsl file.</p>
<p>The filter.xsl XSLT template is used to transform the page coming from Confluence into the resulting page. It is this file that actually generates a page header that points to the resources found in the resources directory I mentioned before. However, it also has some basic templates to filter out contents you probably don&#8217;t want to see. In order to be able to transform an HTML page using XSLT, the Deconfluencer first transforms the incoming XML into a DOM.</p>
<p><strong>That sounds like a painful exercise</strong></p>
<p>Well, it may sound that way, but it really isn&#8217;t. Once you started the Deconfluencer, you can simply update the filter.xsl file on the fly, and check out the results immediately after hitting the refresh button. Rest assure, the Deconfluencer will not load the template from the file system for every request. Instead, it will monitor the conf directory and only reload the filter.xsl file if the file was changed.</p>
<p><strong>Overwriting existing files? I don&#8217;t want to do that!</strong></p>
<p>Then you don&#8217;t. You don&#8217;t have to. You can also start the deconfluencer and point it to alternative locations. Simply run the deconfluencer without any options, and it will tell you which options you have to use. Just for sake of convenience: these are the commandline parameters it currently supports:</p>
<pre>
 -b BASE URL   : The base URL of the URL space we want to deconfluence.
 -f FILTER     : The location of the XSLT filter to be applied. (Defaults to con
                 f/filter.xsl.)
 -n PORTNUMBER : The portnumber on which the reverse proxy will run (8082)
 -o NAME=VALUE : Parameters to be passed to the transformation
 -p PASSWORD   : The password used to authenticate to Confluence.
 -s PATH       : Location to be used for serving static resources. (Defaults to
                 resources/.)
 -u USERNAME   : The username used to authenticate to Confluence.
 -v            : Verbose mode. Logging data to std err.
</pre>
<p><strong>Enough about that; where can I find it?</strong></p>
<p>The Deconfluencer project is <a href="https://github.com/xebia/deconfluencer">hosted on Github</a>. You <em>can</em> download the sources and build it from scratch, but I have to warn you that <a href="http://jnotify.sourceforge.net/">JNotify</a> is not listed in one of the central Maven repositories though, so you probably need to install that yourself. Alternatively, you can download a distribution from Github directly, by pointing your browser <a href="https://github.com/downloads/xebia/deconfluencer/deconfluencer-1.0-SNAPSHOT-dist.tar.gz">here</a>.</p>
<p><strong>What&#8217;s missing?</strong></p>
<p>There are certainly some things that could be improved. Like, currently it&#8217;s not dealing with attachments in a useful way. As a result, images you have on your Confluence page will most likely not show up correctly. It will not require a major overhaul, but it&#8217;s certainly something that would be nice to have. </p>
<p><strong>Now, what do <em>you</em> think about all of this?</strong></p>
<p>Does this sound sensible? Do you see other purposes for it? Feel free to comment, or &#8211; even better &#8211; just <a href="https://github.com/xebia/deconfluencer#fork_box">fork the project yourself</a>.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/02/09/you-have-just-been-deconfluenced/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F02%2F09%2Fyou-have-just-been-deconfluenced%2F&amp;title=You%20have%20just%20been%20deconfluenced" id="wpa2a_4"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/02/09/you-have-just-been-deconfluenced/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NoSQL, NoJAVA, No[you name it]</title>
		<link>http://blog.xebia.com/2011/01/06/nosql-nojava-no-you-name-it/</link>
		<comments>http://blog.xebia.com/2011/01/06/nosql-nojava-no-you-name-it/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 16:58:06 +0000</pubDate>
		<dc:creator>Wilfred Springer</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[nojava]]></category>
		<category><![CDATA[NoSQL]]></category>

	<!-- AutoMeta Start -->
	<category>music</category>
	<category>artists</category>
	<category>pullquote</category>
	<category>enthusiasts</category>
	<category>music</category>
	<category>artists</category>
	<category>pullquote</category>
	<category>enthusiasts</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=5697</guid>
		<description><![CDATA[On the resemblance between Java and Madonna]]></description>
			<content:encoded><![CDATA[<p>I was listening to the <a href="http://javaposse.com/">JavaPosse</a> a minute ago. Dick Wall is saying that he figures there is never going to be anything as big as Java ever again.</p>
<p>A couple of weeks ago, I overheard a discussion between a couple of people involved in the music business. They concluded that the days of the megastars are officially over; they didn&#8217;t think there would ever be another artist rising to the same levels of stardom as Madonna, Elvis, Michael Jackson or the Beatles.<br />
<span id="more-5697"></span></p>
<h4>The Music Industry</h4>
<p>The reason why these people from the music industry figured there&#8217;d never be anything as big as the artists mentioned, ever again, is because of the Internet. It just has never been as easy as it is today to share music. I can put something together in an afternoon, and have it available on <a href="http://bandcamp.com/">Bandcamp</a> or Facebook that same night. And if it&#8217;s any good, it will spread like wildfire.</p>
<p>But, hold on, it has not only become way easier to put something out there on the Internet. It <em>also</em> became much easier to pull something down from the Internet. I recently switched over to Spotify. Even though I have a convenient setup that allows me to listen to my (legally acquired) MP3 all over my place, I haven&#8217;t touched it since then. And before that, I tried Last.fm for a while and found a load of new artists. The collection of music I listen to has grown significantly, last year. (As an example, I found <a href="http://thejackstaffordfoundation.com/fr_music.cfm">about the &#8220;Wifi?&#8221; song</a> through Facebook. A song right from the heart for many of us, I&#8217;m sure.)</p>
<p>Back in the days, both the artist and the listener depended on the record labels to tie supply to demand. That basically acted as a big funnel. In went all artists, out came the ones that were most likely to generate a lot of money. For a record label, it made way more sense to have one world-famous artist, than having several targeting a smaller audience. Because of that, <em>some</em> artists got all the exposure (radio, TV) and others hardly any at all.</p>
<p>The Internet has changed that. It basically short circuited this relationship, and boosted the supply.</p>
<h4>The Software Industry</h4>
<p>Let&#8217;s assume for a while that there is some truth in all of this. I can imagine that marketing funding has contributed a lot to putting <em>some</em> artists in the spotlight, and keeping others out in the dark. That seems to be exactly what happened to Java as well; only this time it wasn&#8217;t one single vendor, but a lot of them; and the same goes for SQL. (IBM, Sun, Hewlett Packard, Sybase, Oracle, etc.)</p>
<p>That doesn&#8217;t mean Java is awful or SQL is a piece of crap. Au contraire. It just means that because of critical mass of these big corporations, Java got more visibility, and therefore more momentum than any of its competitors.</p>
<p>It&#8217;s interesting that Java may actually both have profited and &#8216;suffered&#8217; from the Internet. Java&#8217;s appearance coincided with the rise of the Internet. The first people enthusiastic about Java liked it because of its Internet potential. (I remember my boss at Sun saying that, one day, his friend passed by and showed him Java tooth tumbling inside an Applet; that&#8217;s the day he applied for a job at Sun.)</p>
<p>These were probably also the people who started to talk about their ideas on how to use Java in new ways. Java dates from 1995. Sourceforge from 1999; it now provides a home for 45,186 Java projects. (And remember, they got some competition since then: Github, Java.net, Codehaus, Apache, etc.) At OOPSLA 2004, in Vancouver, all posters where about Java, with the exception of the ones that were not about programming at all. Sharing has been the basic attitude of the Java world, and that &#8211; I feel &#8211; contributed a lot to its popularity.</p>
<p>The same also goes for having other languages running on the Java VM. And in that sense Java (the language) also &#8216;suffered&#8217; from the Internet. The first other language running on the Java VM <a href="http://www.adahome.com/Tutorials/Lovelace/java.htm">might have been Ada </a>(back in 1996), but now it&#8217;s hard to keep up with the numbers: Clojure, Scala, Jerlang, JRuby, Mirah, JavaScript, and I could go on for a while.</p>
<p>So, the genie is out of the bottle. People got used to polyglot programming, and no marketing budget will ever be able to make any more noise than the buzz coming from the community directly. Again, it&#8217;s not unlike the demise of the music industry. The Internet short circuited supply-demand both in the music industry as well as in the software industry.</p>
<p>And alternatives to Java on the Java VM are not the exception. The same goes for storage solutions. Back in the days, the only real option for storing your data used to be a SQL database. (In fact, in many cases, the only option used to be Oracle or DB2.) But since then, people started to scratch their head, wondering how on earth SQL solutions would solve their scalability problems, and came up with other, sometimes simpler ways to store their data. And then, they spread it through the Internet.</p>
<h4>Conclusion</h4>
<p>In summary, it seems our world is coming to a joint conclusion that Java and SQL are no longer the only options out there. Phew! That&#8217;s a breeze of fresh air! I therefore declare this year to be the year to celebrate the &#8220;No&#8221; movement: NoSQL (<em>Not only</em> SQL), NoJAVA (<em>Not only</em> Java) and &#8211; well &#8211; basically No[you name it] (<em>Not only</em> &#8216;you name it&#8217;). Back in the days, all we had was NoCHOICE. But now we have. Let&#8217;s take advantage of that.</p>
<p>The image that pops up in my head when I think about NoSQL and alternative languages on the Java VM (and the music industry) is one of a lava lamp. Down at the bottom, you see blobs of wax trying to cut loose to make their escape. Often they get pulled back, only to settle back at the bottom and wait for a new opportunity to make their way. It sort of reminds me of the big corporations and monumental industry standards preventing creative ideas to escape. But now, the old industry seems to loose its grip. The knot is slipping. Many bright ideas managed to cut themselves loose and have crossed the chasm. It&#8217;s unlikely that anything will be able to pull them back now. Welcome to 2011. Up, up, and away!</p>
<p><br/><br />
<br/><br />
<i>(And for that reason, it might also be good to mention the <a href="http://www.meetup.com/nosql-nl/">NoSQL NL meetup scheduled for January 24</a>, the <a href="http://dutch-scala-enthusiasts.ning.com/">Dutch Scala Enthusiasts</a>, and the <a href="http://ams-clj.github.com">Clojure meetup</a>. If you want to learn more about your options, it might be good to drop by somewhere soon.)</i></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/01/06/nosql-nojava-no-you-name-it/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/01/06/nosql-nojava-no-you-name-it/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hexdump for dummies</title>
		<link>http://blog.xebia.com/2010/10/01/hexdump/</link>
		<comments>http://blog.xebia.com/2010/10/01/hexdump/#comments</comments>
		<pubDate>Fri, 01 Oct 2010 12:48:48 +0000</pubDate>
		<dc:creator>Wilfred Springer</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tools]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=5385</guid>
		<description><![CDATA[Contrary to what you might have expected because of the title, this is not an introduction to the marvelous UNIX hexdump tool. If that&#8217;s what you were searching for, then you better pull up the man page first, because I&#8217;m not going to spend a word it. This article is about something better&#8230; Before going [...]]]></description>
			<content:encoded><![CDATA[<p>Contrary to what you might have expected because of the title, this is not an introduction to the marvelous UNIX hexdump tool. If that&#8217;s what you were searching for, then you better pull up the man page first, because I&#8217;m not going to spend a word it. This article is about something better&#8230;</p>
<p><span id="more-5385"></span>Before going into that, first a short message to anyone who feels like XML or JSON are the only data encoding formats we will ever need:</p>
<p>WAKE UP!!! Only a fraction of the data on your hard disk is encoded as XML or JSON. A lot of it is binary encoded data. How would you feel about not having images, mp3, videos, PDFs and Word documents (well that would be ok, I guess)? If you really think that text-based formats are all you will ever need, then you can kiss all of that goodbye. So, with that out of the way, now read on.</p>
<p>Binary data is there to stay. In fact, a large part of the world evolves around binary encoded data. (The Internet for instance. TCP-IP packets are not XML documents, although there has been an RFC suggesting something like that in the past.) In fact, with the rise of NoSQL, the importance of having better ways of dealing with binary encoded data has probably only increased. (Many of these databases store arrays of bytes, and leave it up to you to reconstruct that into something useful.)</p>
<p><strong>The agony!</strong></p>
<p>Unfortunately, dealing with binary encoded data is not all that easy. Even understanding what is getting decoded and why can be extremely hard. On the plus side, we do have tools such as hexdump and hexl-mode (Emacs), but the output of hexdump -C will only be meaningful to a few people. For the rest of us, we still need to work really hard to understand what on earth is represented by the binary encoded representation.</p>
<p>Here is the top of a Java class file, presented with hexdump -C, as an example:</p>
<pre>00000000  ca fe ba be 00 00 00 31  00 2b 0a 00 0a 00 1d 09  |.......1.+......|
00000010  00 09 00 1e 09 00 09 00  1f 07 00 20 0a 00 04 00  |........... ....|
00000020  1d 0a 00 04 00 21 0a 00  04 00 22 0a 00 04 00 23  |.....!...."....#|
00000030  07 00 24 07 00 25 01 00  03 66 6f 6f 01 00 12 4c  |..$..%...foo...L|
00000040  6a 61 76 61 2f 6c 61 6e  67 2f 53 74 72 69 6e 67  |java/lang/String|
00000050  3b 01 00 06 4c 4f 4e 44  4f 4e 01 00 0d 43 6f 6e  |;...LONDON...Con|
00000060  73 74 61 6e 74 56 61 6c  75 65 08 00 26 01 00 03  |stantValue..&amp;...|
00000070  62 61 72 01 00 01 49 01  00 06 3c 69 6e 69 74 3e  |bar...I...|
00000080  01 00 16 28 4c 6a 61 76  61 2f 6c 61 6e 67 2f 53  |...(Ljava/lang/S|
00000090  74 72 69 6e 67 3b 49 29  56 01 00 04 43 6f 64 65  |tring;I)V...Code|</pre>
<p>As I said, it does provide some help, but not a lot of help.</p>
<p><strong>But what if</strong></p>
<p>But wait, if the computer knows how to decode this into something useful, why isn&#8217;t it able to provide some more insight in what I&#8217;m looking at? I mean, it&#8217;s quite a lot of work to interpret the above. Why isn&#8217;t a computer capable of annotating it, in order to help me understand what it says here?</p>
<p>The good news is: now there is a way to get that. Last year <a href="http://www.slideshare.net/springerw/oopsla-talk-on-preon">at OOPSLA, I presented Preon</a> (now a <a href="http://preon.codehaus.org/">codehaus project</a>), a framework that captures the mapping of the in memory representation and the binary encoded representation in a declarative way. Preon is capable of giving you a decoder and encoder for free, and it also used to be able to generate documentation on the encoded representation.</p>
<p>But now, there is something new: in the next release, you will have the ability to &#8211; while you are decoding data &#8211; output an HTML document that clearly explains how the in memory data structure is represented in its encoded representation! Here is an example of exactly the same Java class as shown before. (Click to jump to the live page.):</p>
<p><a href="http://www.xs4all.nl/~wilfred/preon/hello.html"><img src="http://blog.xebia.com/wp-content/uploads/2010/10/dumpr.png" alt="dumpr" title="dumpr" width="590" height="319" class="alignnone size-full wp-image-5392" /></a></p>
<p>As you can see, you can just move your mouse around over the page. Once it hits a byte that it knows about, it will highlight the bytes that together make up a data element, and show meta data on the side, including the value from these bytes. </p>
<p><strong>Done?</strong></p>
<p>Now, this is far from done. There is plenty of more stuff that will be added, such as a better presentation of the metadata, and an explanation, showing the dependencies between the decoded data and other parts of the encoded presentation. But it does show one of Preon&#8217;s strengths: by capturing the metadata on the mapping between the encoded representation and the in-memory representation, Preon is capable of explaining what is getting decoded. None of this was present in Preon before. Everything has been added to the framework without changing an existing line of code.</p>
<p>The version of Preon capable of doing this, <a href="http://github.com/wspringer/preon/tree/PREON-35">currently resides on Github</a>.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2010/10/01/hexdump/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2010%2F10%2F01%2Fhexdump%2F&amp;title=Hexdump%20for%20dummies" id="wpa2a_6"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2010/10/01/hexdump/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>NoSQL Meetup at VPRO</title>
		<link>http://blog.xebia.com/2010/09/13/nosql-meetup-at-vpro/</link>
		<comments>http://blog.xebia.com/2010/09/13/nosql-meetup-at-vpro/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 09:51:29 +0000</pubDate>
		<dc:creator>Wilfred Springer</dc:creator>
				<category><![CDATA[NoSQL]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=5311</guid>
		<description><![CDATA[Just a heads-up for everyone interested in NoSQL: the next NoSQL Meetup meeting will be held at VPRO&#8217;s headquarters, on Tuesday September 21, next week. Nils (VPRO) will talk about the adoption of CouchDB at VPRO, and Paul guide us through the remainder of the Dynamo paper. (So if you haven&#8217;t read it yet, check [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://photos4.meetupstatic.com/photos/event/9/2/4/d/global_15637453.jpeg" alt="" width="104" height="108" /></p>
<p>Just a heads-up for everyone interested in NoSQL: the next NoSQL Meetup meeting will be held at VPRO&#8217;s headquarters, on Tuesday September 21, next week. <a href="http://www.meetup.com/nosql-nl/members/12577009/">Nils</a> (VPRO) will talk about the adoption of <a href="http://couchdb.apache.org/">CouchDB</a> at VPRO, and <a href="http://www.meetup.com/nosql-nl/members/12529118/">Paul</a> guide us through the remainder of the Dynamo paper. (So if you haven&#8217;t read it yet, check it out <a href="http://nosqlsummer.org/paper/amazon-dynamo">here</a>.)</p>
<p><span id="more-5311"></span></p>
<p>If you feel like joining in as well, find the meeting details <a href="http://www.meetup.com/nosql-nl/calendar/14654064/">here</a>. Make sure you register though; we want to make sure we have enough space to fit in everyone.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2010/09/13/nosql-meetup-at-vpro/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2010%2F09%2F13%2Fnosql-meetup-at-vpro%2F&amp;title=NoSQL%20Meetup%20at%20VPRO" id="wpa2a_8"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2010/09/13/nosql-meetup-at-vpro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Service Integration at the Presentation Layer</title>
		<link>http://blog.xebia.com/2010/07/21/service-integration-at-the-presentation-layer/</link>
		<comments>http://blog.xebia.com/2010/07/21/service-integration-at-the-presentation-layer/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 13:56:06 +0000</pubDate>
		<dc:creator>Wilfred Springer</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[SOA]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=4995</guid>
		<description><![CDATA[How did we end up here? Fifteen years ago, at the end of the two-tier client server age, people started to realize the importance of distinguishing between at least three different layers in the architecture. A business layer, providing a convenient API allowing you to address a particular business concern, a data layer storing related [...]]]></description>
			<content:encoded><![CDATA[<p><strong>How did we end up here?</strong></p>
<p>Fifteen years ago, at <a href="http://www.amazon.com/Client-Server-Survival-Guide-3rd/dp/0471316156">the end of the two-tier client server age</a>, people started to realize the importance of distinguishing between at least three different layers in the architecture. A business layer, providing a convenient API allowing you to address a particular business concern, a data layer storing related data, and a presentation layer providing a convenient user dialog on top of the business logic.</p>
<p><a rel="attachment wp-att-5004" href="http://blog.xebia.com/2010/07/21/service-integration-at-the-presentation-layer/simple/"><img class="alignnone size-full wp-image-5004" title="Three layers" src="http://blog.xebia.com/wp-content/uploads/2010/07/simple.png" alt="Three layers" width="180" height="265" /></a></p>
<p><span id="more-4995"></span>At some point, it became apparent that modularizing like this was not going to cut it. We needed to modularize the business tier and create &#8216;services&#8217; addressing particular concerns. This is what we ended up having:</p>
<p><a rel="attachment wp-att-5011" href="http://blog.xebia.com/2010/07/21/service-integration-at-the-presentation-layer/first-split/"><img class="alignnone size-full wp-image-5011" title="first-split" src="http://blog.xebia.com/wp-content/uploads/2010/07/first-split.png" alt="first-split" width="181" height="265" /></a></p>
<p>In our new world, we did have services with clear interfaces, and these services communicated through each other through clearly defined interfaces (either local or remote). However, we were cheating. In most cases we couldn&#8217;t figure out how to preserve consistency without relying on the convenience provided by SQL solutions, so we allowed for some &#8216;integration&#8217; at the data layer; that is, we stored all data in a single database, and essentially faked isolated services on top of that. And then &#8211; since we still needed to be able to present a single integrated user interface &#8211; we created a single presentation layer component that pulled in everything it needed from the business logic below.</p>
<p>The rise of SOA essentially caused us to focus on service boundaries even more. And although we had different schools of thought &#8211; and there were actually quite a few folks who felt like service oriented had nothing to do with web services &#8211; the focus started to shift from a modularization problem to a remote integration problem. So it was essentially about pulling the different things already identified even further apart.</p>
<p><a rel="attachment wp-att-5010" href="http://blog.xebia.com/2010/07/21/service-integration-at-the-presentation-layer/soa/"><img class="alignnone size-full wp-image-5010" title="soa" src="http://blog.xebia.com/wp-content/uploads/2010/07/soa.png" alt="soa" width="261" height="293" /></a></p>
<p>Now, if you pull services apart like illustrated above, the link to a single data store is obviously going to hurt. So a good thing about everything that happened back then is that everybody started to feel the pain of linking to a shared data store. The technical complications forced people into making services have their own data layer, and drop &#8216;integration&#8217; on a data tier.  It might not have been the ideal reason for doing it, but the net effect was this:</p>
<p><a rel="attachment wp-att-5007" href="http://blog.xebia.com/2010/07/21/service-integration-at-the-presentation-layer/more-isolation/"><img class="alignnone size-full wp-image-5007" title="more-isolation" src="http://blog.xebia.com/wp-content/uploads/2010/07/more-isolation.png" alt="more-isolation" width="180" height="265" /></a></p>
<p>This is when people also started to realize that ACID wasn&#8217;t going to cut it in the long run, and we should consider other was to preserve consistency, paving the way for NoSQL and spreading the word on compensating transactions and idempotence.</p>
<p>So what do we have now? On the plus side, we do have services that are pretty much isolated from each other (good!). However, the integration with the UI is still pretty much one big blob. And for some reason, that is considered quite ok. But is it really? In many cases, the dependencies between the presentation layer and the business logic layer are pretty tight.</p>
<p>Let&#8217;s take a payment service as an example. Whatever the payment service will require from the user to enter, obviously needs to be entered in the presentation layer. Replacing one payment service with another type of payment service will most likely have big implications on the presentation layer. At the same time, the rest of the dialog offered to the user probably is completely independent of the dialog presented when dealing with the payment service.</p>
<p>So, if we feel strongly that services should be isolated from each other as much as possible (free interpretation of Parnas) and keep what needs to be exposed to an absolute minimum, why not cut the presentation layer apart as well?</p>
<p><a rel="attachment wp-att-5006" href="http://blog.xebia.com/2010/07/21/service-integration-at-the-presentation-layer/even-more-isolation/"><img class="alignnone size-full wp-image-5006" title="even-more-isolation" src="http://blog.xebia.com/wp-content/uploads/2010/07/even-more-isolation.png" alt="even-more-isolation" width="436" height="265" /></a></p>
<p><strong>Presentation layer service integration</strong></p>
<p>For some reason, the idea of presentation layer based integration doesn&#8217;t land very well in a world once dominated by the WS-flavor of SOA. However, mashups are omnipresent on the <em>Internet</em>. It&#8217;s just often not considered as a way to do integration of services within a single system in a single organization.</p>
<p>Organizing your service oriented architecture as outlined above bares some resemblance to<a href="http://www.javaworld.com/javaworld/jw-07-1999/jw-07-toolbox.html"> the ideas expressed by Allen Holub more than a decade ago</a>, but then applied on a larger scale. The central message in his article was to prevent objects from exposing too much of their own internal state by making objects responsible for providing a UI representation of themselves. That sounds like a horrible idea according to the model that promotes strict separation between presentation layer and business logic layer, but I think it makes perfect sense in a service oriented architecture.</p>
<p>Back to the payment service example: let&#8217;s assume for a minute that the left-hand service is a shopping service (including the presentation layer dialog with the user) and that the right-hand service is the payment service. Integrating the services would require some integration on the presentation layer as well as the business logic layer.</p>
<p>When the user selects a payment method associated to a particular payment service, the payment service&#8217;s presentation layer should be pulled up, passing clues on what to do after the payment succeeded or failed. From that point on, the payment service itself is in control of (part of) the dialog.</p>
<p>When the payment is cleared, the payment presentation layer will hand back control to the shopping service&#8217;s presentation layer. However, the business logic layer might communicate more information on the status of a payment through the SPI defined by the shopping service. (Like settlement related information.)</p>
<p><a rel="attachment wp-att-5005" href="http://blog.xebia.com/2010/07/21/service-integration-at-the-presentation-layer/conflict/"><img class="alignnone size-full wp-image-5005" title="conflict" src="http://blog.xebia.com/wp-content/uploads/2010/07/conflict.png" alt="conflict" width="433" height="285" /></a></p>
<p><strong>Consequences</strong></p>
<p>By considering the presentation layer to be part of the actual service, you introduce a couple of new degrees of freedom. First of all, depending on how the integration in the presentation tier is done, you might have the option to have part of the user dialog executing in the same address space as the business logic. Instead of having to do several remote calls for pulling together all data to be presented to the user, the presentation layer would do all of these calls internally and then ship the resulting presentation to the place where it will get integrated with the other presentation part components. It could give you the option to enjoy the benefits of spatial locality.</p>
<p>Another benefit that was already mentioned before is the fact that you can easily rip and replace a service. You only have to worry about the presentation and business logic layer interfaces, not about what&#8217;s actually happening behind those interfaces. Think <a href="http://en.wikipedia.org/wiki/Field_Replaceable_Unit">Field Replaceable Units (FRUs)</a> but then software.</p>
<p><strong>Counter arguments</strong></p>
<p>The counter argument for presentation tier integration is that you would basically have to redo the presentation layer interfaces for every new type of presentation you are targeting. I tend to disagree, and since this is just a blog post, I&#8217;m going to try to walk away from it by just asking for some proof of that first.</p>
<p><strong>Implementation</strong></p>
<p>In <a href="http://www.floriandaniel.it/university/publicationdetails.php?publication_oid=20">&#8220;Understanding UI Integration&#8221;</a> from 2007, the authors provide an overview of the UI integration state of the union. They basically talk about browser plugin components, mashups, portlets and WSRP (which would be one of the ways to achieve the spatial locality benefits outlined above). However, they state this:</p>
<blockquote><p>&#8220;Although the efforts we&#8217;ve described here are certainly useful, we believe that effective standardization similar to that of standardizing service interfaces is needed for UI integration to really take off. In general we see a lack of abstraction to conceptualize composition-oriented features in the context of UI integration.&#8221;</p></blockquote>
<p>I think that still holds today. There might be a few initiatives to push boundaries a little further (<a href="http://code.google.com/apis/opensocial/">OpenSocial</a> comes to mind), but there is no clear direction.</p>
<p>So what is your opinion on this? Do you consider services having a presentation layer interface malpractice or critical to true service oriented architectures? And if you do have services offering a presentation layer interface, what principles do you have in place to keep it all organized?</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2010/07/21/service-integration-at-the-presentation-layer/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2010%2F07%2F21%2Fservice-integration-at-the-presentation-layer%2F&amp;title=Service%20Integration%20at%20the%20Presentation%20Layer" id="wpa2a_10"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2010/07/21/service-integration-at-the-presentation-layer/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>The Dutch NoSQL Community is Alive!</title>
		<link>http://blog.xebia.com/2010/06/12/the-dutch-nosql-community-is-alive/</link>
		<comments>http://blog.xebia.com/2010/06/12/the-dutch-nosql-community-is-alive/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 09:33:23 +0000</pubDate>
		<dc:creator>Wilfred Springer</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[NoSQL]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=4866</guid>
		<description><![CDATA[The Dutch NoSQL community is alive! Now, if you are new to NoSQL and you happen to have a Relational Database background, then rest assure: the NoSQL movement is not a militant group trying to get rid of SQL altogether. The N.o. in NoSQL represents: Not only. In the NoSQL community, we are looking at alternative [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.meetup.com/nosql-nl/"><img class="alignnone" src="http://photos4.meetupstatic.com/photos/event/9/2/4/d/global_15637453.jpeg" alt="" width="174" height="180" /></a></p>
<p><a href="http://www.meetup.com/nosql-nl/"></a>The Dutch NoSQL community is <a href="http://www.meetup.com/nosql-nl/">alive</a>! Now, if you are new to NoSQL and you happen to have a Relational Database background, then rest assure: the NoSQL movement is not a militant group trying to get rid of SQL altogether. The N.o. in NoSQL represents: Not only. In the NoSQL community, we are looking at alternative ways to handle data (in particular big data), and it turns out there a myriad of solutions popping up these days, such as:</p>
<p><span id="more-4866"></span></p>
<ul>
<li>Google Big Table</li>
<li>HBase</li>
<li>Tokyo Cabinet</li>
<li>Cassandra</li>
<li>MongoDB</li>
<li>CouchDB</li>
<li>Voldemort</li>
</ul>
<p>… and this is only scratching the surface. So, there is plenty of stuff to explore and discuss. The Dutch NoSQL Community is getting people together to discuss these topics.</p>
<p>Our first mission is to be the Dutch host of the <a href="http://nosqlsummer.org/">NoSQL Summer initiative</a>: a seasonal, worldwide reading club for databases, distributed systems &amp; NOSQL-related scientific papers. Because &#8211; as the Berlin group stated it &#8211; &#8220;What could be a better excuse to hang out in a sunny beergarden after work than to discuss dry CS fundamentals like Relational Algebra or Paxos with fellow geeks? Err &#8230; anyway, this is gonna be fun.&#8221; And fun it will be.</p>
<p>So, if your interested to join in and meet your fellow swimmers, we warmly welcome you to <a href="http://www.meetup.com/nosql-nl/calendar/13769810/">our first meeting</a>, on July 1, in Amsterdam. If you consider joining in, please sign up for it now. (If you can&#8217;t make it to that meeting, but you would consider attending some other time, or if you just want to express your sympathy for NoSQL solutions in general, don&#8217;t hesitate, just <a href="http://www.meetup.com/nosql-nl/join/">join the group</a>.)</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2010/06/12/the-dutch-nosql-community-is-alive/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2010%2F06%2F12%2Fthe-dutch-nosql-community-is-alive%2F&amp;title=The%20Dutch%20NoSQL%20Community%20is%20Alive%21" id="wpa2a_12"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2010/06/12/the-dutch-nosql-community-is-alive/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Workers of the Scala World, Unite!</title>
		<link>http://blog.xebia.com/2010/04/20/workers-of-the-scala-world-unite/</link>
		<comments>http://blog.xebia.com/2010/04/20/workers-of-the-scala-world-unite/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 15:39:02 +0000</pubDate>
		<dc:creator>Wilfred Springer</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Scala]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=4395</guid>
		<description><![CDATA[If there is anything that made Java popular during the last decade, then it must be the community. This may sound like a paradox at first: popularity does sort of imply the existence of a community. But it&#8217;s really not just the existence or even the size of the community. It&#8217;s the vibe that counts. [...]]]></description>
			<content:encoded><![CDATA[<p>If there is anything that made Java popular during the last decade, then it must be the community. This may sound like a paradox at first: popularity does sort of imply the existence of a community. But it&#8217;s really not just the existence or even the size of the community. It&#8217;s <em>the vibe</em> that counts.<br />
<span id="more-4395"></span><br />
From my own experience, the Scala community, having grown from the same genetic material as the Java community, <em>does</em> share a similar vibe. However, without the big corporations backing the language, a lot of the community energy seems to go into local initiatives, disconnected from each other: let&#8217;s just say, small pockets of Scala resistance. I can imagine that does not necessarily help in Scala taking over the globe.</p>
<p><a title="Scala Tribes" rel="attachment wp-att-4400" href="http://blog.xebia.com/2010/04/20/workers-of-the-scala-world-unite/screen-shot-2010-04-20-at-3-18-54-pm-2/" target="_blank"><img class="size-full wp-image-4400 alignnone" title="Screen shot 2010-04-20 at 3.18.54 PM" src="http://blog.xebia.com/wp-content/uploads/2010/04/Screen-shot-2010-04-20-at-3.18.54-PM1.png" alt="scala-tribe.org" width="490" height="360" /></a></p>
<p>In order to contribute my share of changing all of that, I just uploaded a single serving site, <a href="http://scala-tribes.org/" target="_blank">Scala Tribes</a>, serving only one purpose: to provide an overview of all of these Scala user communities found across the globe. This should not only help you to find a local group of Scala users wherever you are; it will hopefully also serve as a way to integrate these disjoint isolated Scala communities.</p>
<p>Currently, it&#8217;s just a list of pointers, allowing you to directly jump to the various communities, to directly tap into their news feeds, or to keep track of the events they organize by accessing their calendars.</p>
<p>If you happen to be part of local Scala initiatives like these, then I would encourage you to send me some pointers. Currently, the list contains only to 15 user groups, but I am sure there is more. (Like, I am not capable of decoding anything but Dutch, English, and to some extent German. That means that anything in any other language escapapes my radar.)</p>
<p>Since every group in this list is associated with a woeid (Where On Earth ID), creating a map out of it turns out to be quite easy. The result is below. As you can see, there&#8217;s not too much coverage for Asia, Africa and South America yet. Perhaps you can be the first to add some pointers for those continents.</p>
<p><img class="alignnone" title="Scala Enthusiasm Across the Globe" src="http://maps.google.com/maps/api/staticmap?size=550x400&amp;sensor=false&amp;markers=color:red|45.511791,-122.675629|37.878689,-121.943451|52.108200,5.329860|42.312561,-71.088676|41.884151,-87.632408|40.714550,-74.007118|40.015739,-105.279243|-37.817532,144.967148|51.506321,-0.127140|48.856918,2.341210|43.648560,-79.385330|49.260441,-123.114029|33.748310,-84.391113|42.503819,12.573470|56.153000,10.204520" alt="" width="550" height="400" /></p>
<p>I would also be interested to hear other thoughts on this. Is there anything else that you would like to see?</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2010/04/20/workers-of-the-scala-world-unite/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2010%2F04%2F20%2Fworkers-of-the-scala-world-unite%2F&amp;title=Workers%20of%20the%20Scala%20World%2C%20Unite%21" id="wpa2a_14"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2010/04/20/workers-of-the-scala-world-unite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A company less colorful</title>
		<link>http://blog.xebia.com/2010/04/08/a-company-less-colorful/</link>
		<comments>http://blog.xebia.com/2010/04/08/a-company-less-colorful/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 18:30:00 +0000</pubDate>
		<dc:creator>Wilfred Springer</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Xebia]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false"></guid>
		<description><![CDATA[Tonight, I stared at the http://blogs.sun.com/ site and realized that the entries I once wrote would soon have an Oracle logo on top. That's just not right. They can't just make me become one their bloggers. It's unfair!Well, anyway. While staring at t...]]></description>
			<content:encoded><![CDATA[<p>Tonight, I stared at the http://blogs.sun.com/ site and realized that the entries I once wrote would soon have an Oracle logo on top. That&#8217;s just not right. They can&#8217;t just make me become one their bloggers. It&#8217;s unfair!</p>
<p>Well, anyway. While staring at the rebranded front page, I wonder how they made the transition. I remember that &#8211; in the past &#8211; Sun went over a couple of rebranding efforts. Rather than actually changing the CSS classes in use, they would actually redefine those classes. But since most of the classes were for one sole purpose only &#8211; to set the color &#8211; they used the names of these colors as the names of the CSS classes<span id="more-6132"></span>.</p>
<p>So you would have a CSS class called purple. In order to adopt the new style, they just redefined purple to be yellow from now on. So the CSS would have something like this:</p>
<p>.purple { color: yellow; }</p>
<p>It turns out they did exactly the same thing for restyling the Oracle way: they replaced all color definitions to shades of grey:</p>
<pre class="brush-css" style="white-space: pre-wrap; word-wrap: break-word;">/* table colors */table.dkgrey{background:#666}.sunred{background:#f00}.sunblue{background:#525252}.sunyellow{background:#a4a4a4}.sunred,.sunblue,td.sunred a,td.sunblue a{color:#fff}td.sunred b,td.sunred div.navtitle{color:#9f9f9f;font-weight:bold}td.sunred li,td.sunblue li,td.sunred ul,td.sunblue ul{color:#fff;list-style-image:url("../im/ic_bullet_white.gif")}td.sunyellow b,td.sunyellow div.navtitle,td.sunyellow a:link,td.sunyellow a:visited{color:#000}td.sunyellow a:hover{color:#666;text-decoration:underline}table.white,td.white,th.white,tr.white td,tr.white th,table tr td.white,table tr th.white,td.white,table.white1,td.white1,th.white1,tr.white1 td,tr.white1 th,table tr td.white1,table tr th.white1,td.white1{background:#fff}table.ltgrey,td.ltgrey,th.ltgrey,tr.ltgrey td,tr.ltgrey th,table tr td.ltgrey,table tr th.ltgrey{background:#ccc}table.vltgrey,td.vltgrey,th.vltgrey,tr.vltgrey td,tr.vltgrey th,table tr td.vltgrey,table tr th.vltgrey{background:#ddd}table.grey3,td.grey3,th.grey3,tr.grey3 td,tr.grey3 th,table tr td.grey3,table tr th.grey3{background:#e3e3e3}table.blue1,td.blue1,th.blue1,tr.blue1 td,tr.blue1 th,table tr td.blue1,table tr th.blue1{background:#999}table.yellow2,td.yellow2,th.yellow2,tr.yellow2 td,tr.yellow2 th,table tr td.yellow2,table tr th.yellow2{background:#fff}</pre>
<p>It can&#8217;t help feeling there&#8217;s a message hidden here.
<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8084037628342188612-8487731324568010058?l=blog.flotsam.nl' alt='' /></div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2010/04/08/a-company-less-colorful/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2010/04/08/a-company-less-colorful/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  blog.xebia.com/author/wspringer/feed/ ) in 1.36555 seconds, on Feb 9th, 2012 at 4:35 pm UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 9th, 2012 at 5:35 pm UTC -->
