<?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>Gridshore &#187; Open Source</title>
	<atom:link href="http://www.gridshore.nl/category/open-source/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gridshore.nl</link>
	<description>A weblog about software engineering, Architecture, Technology an other things we like.</description>
	<lastBuildDate>Tue, 13 Dec 2011 15:36:58 +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>Using the NOS open data API with the springframework and jackson</title>
		<link>http://www.gridshore.nl/2011/01/20/using-the-nos-open-data-api-with-the-springframework-and-jackson/</link>
		<comments>http://www.gridshore.nl/2011/01/20/using-the-nos-open-data-api-with-the-springframework-and-jackson/#comments</comments>
		<pubDate>Wed, 19 Jan 2011 23:36:34 +0000</pubDate>
		<dc:creator>jettro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[Spring Framework]]></category>

		<guid isPermaLink="false">http://www.gridshore.nl/?p=1134</guid>
		<description><![CDATA[<p>Some time ago the NOS started providing their data as open data through an API. Using this API you can get the latest news items. You can limit the results to sport news. There is also a search available and a few more categories to find news for. The API is a REST like [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago the NOS started providing their data as open data through an API. Using this API you can get the latest news items. You can limit the results to sport news. There is also a search available and a few more categories to find news for. The API is a REST like api and can return xml as well as JSON. In this blog post I am creating an API with the Spring framework RESTTemplate. </p>
<p><span id="more-1134"></span>
<p>First the basics. If you want to try these examples yourself you need to request a key. More information can be found here:</p>
<p><a href="http://open.nos.nl/">http://open.nos.nl/</a></p>
<p>Because groovy is a very nice language to do this kind of experimentation I&#8217;ll show you de groovy code first. Just a few lines to print a JSON string:</p>
<pre class="brush: groovy; title: ; notranslate">
def key = &quot;Your Key&quot;
nos = new RESTClient(&quot;http://open.nos.nl/v1/&quot;)
JSON newsItems = nos.get(path : &quot;latest/article/key/$key/output/json/category/sport/&quot;).data
print newsItems
</pre>
<p>The result is a long string. If you want to convert a string to nice formatted json check the resources for a link. The following image gives you an idea of the structure of the returned JSON:</p>
<p><img src="http://www.gridshore.nl/wp-content/uploads/Screen-shot-2011-01-19-at-22.27.31.png" alt="Screen shot 2011-01-19 at 22.27.31.png" border="0" width="600" height="395"/></p>
<p>Now let us do the same thing in java. Usually this takes much more code. To be honest, it is not at all bad if you use the RESTTemplate of the Spring framework. Have a look at the following code:</p>
<pre class="brush: java; title: ; notranslate">
public class SearchApiUsingSpring {
    public static void main(String[] args) {
        RestTemplate restTemplate = new RestTemplate();
        String result = restTemplate.getForObject(&quot;http://open.nos.nl/v1/latest/article/key/{key}/output/json/category/sport/&quot;,
                String.class, &quot;YOUR KEY&quot;);
        System.out.println(result);
    }
}
</pre>
<p>Of course the result is the same, not bad is it? Just three lines of real code. Nice, but not enough for my example. Of course I want to use the result as an object. Therefore I am going to use an object mapper called Jackson. Check resources for a link. Jackson is a framework that enables us to map JSON objects to actual java objects. Based on the structure of the returned JSON I created a java object and used jackson annotations to map it to the JSON structure. The spring RESTTemplate facilitates using mappers. A Jackson mapper is available. The following code shows the improved sample.</p>
<pre class="brush: java; title: ; notranslate">
public class SearchApiUsingSpring {
    public static void main(String[] args) {
        RestTemplate restTemplate = new RestTemplate();
        LatestArticle result = restTemplate.getForObject(&quot;http://open.nos.nl/v1/latest/article/key/{key}/output/json/category/sport/&quot;,
                LatestArticle.class, &quot;Your Key&quot;);

        for (Article article : result.getItems().get(0)) {
            System.out.printf(&quot;Title : %s\n&quot;, article.getTitle());
            System.out.printf(&quot;Description : %s\n&quot;, article.getDescription());
            System.out.printf(&quot;Link : %s\n&quot;, article.getLink());
            System.out.println(&quot;_________________________________&quot;);
        }
    }
}
</pre>
<p>Just a very small difference, besides the printing stuff. The change is the type returned by the getForObject method. Now it is not a string anymore but a LatestArticle. To be able to use Jackson you do need to create the classes with a few annotations.</p>
<pre class="brush: java; title: ; notranslate">
@JsonIgnoreProperties(ignoreUnknown = true)
public class LatestArticle {
    @JsonProperty(&quot;latest_article&quot;)
    private ArrayList&lt;ArrayList&lt;Article&gt;&gt; items = new ArrayList&lt;ArrayList&lt;Article&gt;&gt;();

	// getters and setters
}

@JsonIgnoreProperties(ignoreUnknown = true)
public class Article {
    private String id;
    private String type;
    private String title;
    private String description;
    private String link;

	// getters and setters
}
</pre>
<p>I use the annotation @JsonIgnoreProperties, I do not want to break my code if a property that is available in json is not available in my java class. I&#8217;ll remove it later on when I have all the properties mapped. Why not immediately? Well I want to explain what I did with the date fields first. Mapping a date is a bit different. We do need to map the date using the specific format. I include Joda time to the path and create a synchronizer for a Joda date time object. Jackson has support for joda time out of the box. But I used a different format and therefore I had to create my own. The class Article is slightly enhanced with a DateTime property called published. I only show the setter this time. This is where we have to assign our own deserializer. The code for my deserializer is also shown.</p>
<pre class="brush: java; title: ; notranslate">
// from Article
    @JsonDeserialize(using = JsonDateDeserializer.class)
    public void setPublished(DateTime published) {
        this.published = published;
    }

public class JsonDateDeserializer extends JsonDeserializer&lt;DateTime&gt; {
    private final DateTimeFormatter formatter = DateTimeFormat.forPattern(&quot;yyyy-MM-dd HH:mm:ss&quot;);

    @Override
    public DateTime deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        return formatter.parseDateTime(jp.getText());
    }
}
</pre>
<p>Now we can also print the published date. Be sure not to put annotations on the field and on the setter. I had the problem with the last_update, I need JsonProperty annotation. First I put it on the field, but than the JsonDeserialize was not read anymore.</p>
<p>That is it for now, I will write more when I am ready. Than I will also publish the code. Some of the resources that were useful to me are written down below.</p>
<h3>Resources</h3>
<p><a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/remoting.html#rest-resttemplate">http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/remoting.html#rest-resttemplate</a><br/><br />
<a href="http://jackson.codehaus.org/">http://jackson.codehaus.org/</a><br/><br />
<a href="http://jsonviewer.stack.hu/">http://jsonviewer.stack.hu/</a><br/><br />
<a href="http://java.dzone.com/articles/how-serialize-javautildate">http://java.dzone.com/articles/how-serialize-javautildate</a><br/></p>
<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.gridshore.nl%2F2011%2F01%2F20%2Fusing-the-nos-open-data-api-with-the-springframework-and-jackson%2F&amp;title=Using%20the%20NOS%20open%20data%20API%20with%20the%20springframework%20and%20jackson&amp;t=2' height='25' width='155' frameborder='0' scrolling='no'></iframe></div></div><div style='clear:both'></div></div><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.gridshore.nl/2011/01/20/using-the-nos-open-data-api-with-the-springframework-and-jackson/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Book review: OSGi and Apache Felix 3.0</title>
		<link>http://www.gridshore.nl/2011/01/05/book-review-osgi-and-apache-felix-3-0/</link>
		<comments>http://www.gridshore.nl/2011/01/05/book-review-osgi-and-apache-felix-3-0/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 08:59:10 +0000</pubDate>
		<dc:creator>jettro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[bookreview]]></category>
		<category><![CDATA[felix]]></category>
		<category><![CDATA[OSGi]]></category>

		<guid isPermaLink="false">http://www.gridshore.nl/?p=1130</guid>
		<description><![CDATA[<p>At the end of 2010 I reviewed the book “OSGi and Apache Felix 3.0 Beginner’s Guide“. The people from packt publishing contacted me based on my involvement in the past with OSGi and felix. I wrote a number of blog posts on OSGi and felix and gave a presentation at the NLJug together with [...]]]></description>
			<content:encoded><![CDATA[<p>At the end of 2010 I reviewed the book “OSGi and Apache Felix 3.0 Beginner’s Guide“. The people from packt publishing contacted me based on my involvement in the past with OSGi and felix. I wrote a number of blog posts on OSGi and felix and gave a presentation at the NLJug together with Allard about the topic. During the process of reviewing, I got enthusiastic about the book. I think the result is a good book for people that want to learn about OSGi by getting their hands dirty.</p>
<p>You can find the complete book review on this page: <a href="http://www.gridshore.nl/book-reviews/osgi-and-apache-felix-3-0-beginners-guide/">OSGi and Apache Felix 3.0 Beginner’s Guide</a></p>
<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.gridshore.nl%2F2011%2F01%2F05%2Fbook-review-osgi-and-apache-felix-3-0%2F&amp;title=Book%20review%3A%20OSGi%20and%20Apache%20Felix%203.0&amp;t=2' height='25' width='155' frameborder='0' scrolling='no'></iframe></div></div><div style='clear:both'></div></div><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.gridshore.nl/2011/01/05/book-review-osgi-and-apache-felix-3-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Axon Framework 0.6 released</title>
		<link>http://www.gridshore.nl/2010/08/08/axon-framework-0-6-released/</link>
		<comments>http://www.gridshore.nl/2010/08/08/axon-framework-0-6-released/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 17:53:45 +0000</pubDate>
		<dc:creator>Allard</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Axon Framework]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[cqrs]]></category>
		<category><![CDATA[Domain Driven Design]]></category>

		<guid isPermaLink="false">http://www.gridshore.nl/2010/08/08/axon-framework-0-6-released/</guid>
		<description><![CDATA[<p>Today, I released version 0.6 of the Axon Framework. 0.6 has many new features and is another step towards full production readiness. There is still some work to do, but first, let’s take a look at what has changed…</p> <p></p> <p>Test fixtures are now part of the axon-test module. These fixtures allow you to [...]]]></description>
			<content:encoded><![CDATA[<p>Today, I released version 0.6 of the Axon Framework. 0.6 has many new features and is another step towards full production readiness. There is still some work to do, but first, let’s take a look at what has changed…</p>
<p><span id="more-1070"></span></p>
<p>Test fixtures are now part of the axon-test module. These fixtures allow you to test your command handling logic based on events and commands. You define these tests in a given-when-then style: given these past events, when I execute this command, I expect these events to occur.</p>
<p>The <tt>CommandBus</tt> interface now allows for asynchronous command dispatching. Instead of using a return value, a Callback can be given to the command bus if you wish to be notified of the result of command execution.</p>
<p>The repositories make use of a <tt>UnitOfWork</tt> instance, which keeps track of changed aggregates and generated events. Instead of saving each aggregate separately, the <tt>UnitOfWork</tt> can be committed, causing changed aggregates to be stored, and events to be dispatched. With the new <tt>SimpleUnitOfWorkInterceptor</tt> or the <tt>SpringTransactionalInterceptor</tt>, it is no longer necessary to call <tt>repository.save()</tt>. In fact, you are discouraged from doing so.</p>
<p>Repositories are now capable of detecting conflicting modifications. When loading an aggregate, you may pass in the expected version of the aggregate. An exception is raised if that version does not match the actual version.</p>
<p>Event sourcing repositories allow for a more advanced way of detecting conflicts. Sometimes, not all concurrent modification are in conflict with each other. One user may very well change the shipping address of an order, while another user is adding items. Other modifications, however, are clearly conflicting, such as one user marking an order as shipped, and another one adding a product. For this purpose, you can register a <tt>ConflictResolver</tt> with the repository. This conflict resolver can, based on unseen and newly applied events, decide whether the changes made by the second user are accepted.</p>
<p>Axon now provides a mechanism to trigger snapshot creation based on the number of events needed to load to reconstitute an aggregate. When the number of events exceeds a given threshold, a snapshot is created and stored in the Event Store.</p>
<p>The <tt>SimpleCommandBus</tt> and <tt>SimpleEventBus</tt> now expose statistics over JMX. Although currently quite limited, the statistics will be improved in the coming versions.</p>
<p>All of these features help making applications with CQRS-based architectures even easier. But we’re not there yet. The coming months, we will try to make it even easier with features like Event versioning, support for aggregates with multiple entities, and whatever comes to mind in Axon’s growing community.</p>
<p>For more information about the Axon Framework, see <a href="http://www.axonframework.org">www.axonframework.org</a>.</p>
<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.gridshore.nl%2F2010%2F08%2F08%2Faxon-framework-0-6-released%2F&amp;title=Axon%20Framework%200.6%20released&amp;t=2' height='25' width='155' frameborder='0' scrolling='no'></iframe></div></div><div style='clear:both'></div></div><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.gridshore.nl/2010/08/08/axon-framework-0-6-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An evening on the Go</title>
		<link>http://www.gridshore.nl/2010/07/28/an-evening-on-the-go/</link>
		<comments>http://www.gridshore.nl/2010/07/28/an-evening-on-the-go/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 23:47:44 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.gridshore.nl/2010/07/28/an-evening-on-the-go/</guid>
		<description><![CDATA[<p>Last Thursday (July 22nd, 2010) Rob Pike, a Principal Engineer at Google, gave a talk at the O&#8217;Reilly Open Source conference. In this talk he stated that established languages such as C++ and Java are too complex and not adequately suited for today&#8217;s computing environments. He then proceeded with some criticism of dynamically typed [...]]]></description>
			<content:encoded><![CDATA[<p>Last Thursday (July 22nd, 2010) <a title="Rob Pike" href="http://research.google.com/people/r/index.html">Rob Pike</a>, a Principal Engineer at Google, gave a talk at the O&#8217;Reilly Open Source conference. In this talk he stated that established languages such as <a title="C++" href="http://en.wikipedia.org/w/index.php?title=C%2B%2B&amp;oldid=374538072">C++</a> and <a title="Java" href="http://en.wikipedia.org/w/index.php?title=Java_(programming_language)&amp;oldid=374887455">Java</a> are too complex and not adequately suited for today&#8217;s computing environments. He then proceeded with some criticism of dynamically typed languages (that I share) and finally ended up plugging the <a href="http://golang.org">Go language</a> (which he co-developed) as a solution to the problem.</p>
<p>Now, Rob Pike is not nobody (in addition to being a Google principle engineer he has C and Unix credentials), plus the Go language has the Google brand name on it, so I thought it would be a good idea to check it out&#8230;. </p>
<p><span id="more-1067"></span>
<p>&nbsp;</p>
<h3>Evaluating Go</h3>
<p>The <a href="http://golang.org">Go programming language</a> is described on the website as a language geared towards system programming. That is to say, it is a new(ish), general purpose programming language developed internally at Google to scratch an itch some of their developers had and they then decided to open source it.</p>
<p>Evidently, judging from Rob Pike&#8217;s talk at O&#8217;Reilly, it is also intended to be a simpler alternative to C++ and Java and a more robust alternative to dynamically typed languages such as Ruby, Python and such. It is this claim that I felt was particularly intriguing, so I took a look at the language this evening by reading through the <a href="http://golang.org/doc/go_spec.html">language spec</a> and briefly glancing at the <a href="http://golang.org/doc/go_tutorial.html">tutorials</a>.</p>
<p>&nbsp;</p>
<h3>Creak, creak&#8230;</h3>
<p>Well, let&#8217;s address the great big elephant in the room immediately: it would seem that &#8220;simpler alternative&#8221; is Google-speak (or Pike-speak) for &#8220;forty five years old&#8221;. It&#8217;s had a spit-polish plus language features and libraries added, but there&#8217;s no way around it — Go is a rehash of the C programming language with some Pascal thrown in for good measure. Not surprising of course, given Rob&#8217;s background, but perhaps not the great linguistic revolution you would have expected.</p>
<p>Just to reassure you all, I&#8217;m not exaggerating: Go is essentially C, including structs, pointers and reams of different (un)signed int types. It even includes everyone&#8217;s favorite cross-platform language feature: numeric types whose size is architecture-dependent.</p>
<p>&nbsp;</p>
<h4>Spit-shine</h4>
<p>That&#8217;s not to say that some improvements have not been made to cover up some of the glaring problems that made C and C++ hard to handle: extern is gone as a concept, as is pointer arithmetic. Plus Go has a type definition feature, so you don&#8217;t need macro&#8217;s anymore. Also, Go has some more built-in types (such as complex numbers), support for Unicode and it can insert semicolons where needed and has both escaped and unescaped strings (both borrowed from Bourne Shell). And it places the type behind the identifier instead of in front and uses := as an assignment to distinguish from equality (borrowing from Pascal).</p>
<p>&nbsp;</p>
<h4>Back from the dead</h4>
<p>&nbsp;</p>
<p>Nevertheless, not all is well with the world. Like it&#8217;s ancestors Go still relies on an ability to export named entities (including variables), meaning you can get into the global variable mess. And guess what&#8217;s back from the dead: the goto statement, in its <a href="http://userweb.cs.utexas.edu/users/EWD/transcriptions/EWD02xx/EWD215.html">full and glorious horror</a>.</p>
<p>&nbsp;</p>
<h3>So what else is new?</h3>
<p>At the core of it, Go is a component-based language. It&#8217;s main architectural feature for this is the <em>package</em>, which isn&#8217;t much like Java but rather borrows from the Unit found in Turbo Pascal: a collection of exported types and identifiers, with hidden implementations. Packages serve as libraries in the language and are the main strength and source of language functionality.</p>
<p>In the spirit of &#8220;this is your grandfather&#8217;s technology&#8221;, Go is not an object-oriented language. Instead it is fully procedural and uses the <a href="http://en.wikipedia.org/wiki/Abstract_data_type">abstract data type</a> as its main means of abstraction. Admittedly, this is a good combination with the Unit-like library. The ADT concept has been bolstered with real language support to keep ADT functions and data structures together though. Even though the main data structures are C-style structs, the language includes the concept of a method (which is a function that is sort of legoed into a data type, creating the effect of putting a function pointer into a struct in C). Methods directly associate a callable code block with a data structure, so it&#8217;s sort of like adding real behavior to your basic data type. That&#8217;s a pretty good concession to OO thinking sure enough, but encapsulation beyond the package level and inheritance are still out.</p>
<p>The other major feature of the language is built-in concurrency modeled on <a href="http://en.wikipedia.org/wiki/C._A._R._Hoare">Tony Hoare&#8217;s</a> <a href="http://en.wikipedia.org/wiki/Communicating_sequential_processes">Communicating Sequential Processes</a>. This is a brand of concurrency that is not based around the classic &#8220;multi-process, shared single memory&#8221; model but around a &#8220;multi-process, multi-memory&#8221; model whereby processes are linked together by channels. Each process can &#8220;toss&#8221; values to another process over a channel (or &#8220;catch&#8221; values coming in across a channel). These operations block until succeeded, which allows for synchronization. The mechanism has been proven equally powerful as <a href="http://en.wikipedia.org/wiki/Edsger_W._Dijkstra">Dijkstra&#8217;s</a> standard <a href="http://en.wikipedia.org/wiki/Semaphore_(programming)">semaphore</a> mechanism. This is once again a typical choice for someone with Rob Pike&#8217;s background as this mechanism is also included in the Bourne Shell in the form of <a href="http://en.wikipedia.org/wiki/Named_pipe">named pipes</a>. Of course in such a language it must also be easy to start threads or fork subprocesses and indeed this can be accomplished with the use of a single statement.</p>
<p>&nbsp;</p>
<h3>So what are we to make of this&#8230;</h3>
<p>The Go programming language is an interesting combination of proven language features and program architectures. Rooted firmly in the Pascal/C/Bourne Shell era, it seems a bit of a museum of 1960&#8242;s language design ideas geared towards the hardware systems environment of that era&#8217;s dreams (and possibly today&#8217;s reality): heavily multiprocessed with the distinction between local and distributed processing disappeared into the background, using ADT and component-based modularity to achieve separation of concerns.</p>
<p>&nbsp;</p>
<h3>&#8230; except perhaps a bonfire?</h3>
<p>&nbsp;</p>
<p>And yet, I can&#8217;t say that I&#8217;m overly impressed with Go. Mostly I don&#8217;t see the point. Sure, its well-suited to the multiprocessing environment that we have nowadays. But its support for domain modeling and domain driven design is poor, based as it is on the ADT concept — a serious failing in a modern language if you ask me. And a language that isn&#8217;t architecture independent in a Cloud-based platform era? Come on&#8230; But most of all I don&#8217;t see the new language idea that is supposed to make this language better than all others. I don&#8217;t see a refreshing combination of functional and OO paradigms like Scala, or an &#8220;easily-typed shell over a large Java class library&#8221; like Groovy. I don&#8217;t really see what Google thinks it has accomplished with Go.</p>
<p>In addition to that, I don&#8217;t see proof for the claim of simplicity. Sure, it covers up the worst pointer-related problems in C/C++. Sure, multithreading is less verbose than it is in Java. But on the whole the language is no simpler than Java, as far as I&#8217;m concerned. I don&#8217;t like the lacking encapsulation, the poor man&#8217;s OSGi modularity, the way methods are tacked on to external data types rather than syntactically part of data structures. And I don&#8217;t think first-class lambda functions (popularly called closures) are all that special and I don&#8217;t think that having channels as a built-in language element is a great advantage over having them in a separate library (like C++ or Java do).</p>
<p>So what do I think of Go&#8217;s future? Well, it certainly has one major weapon in its arsenal: the Google logo, which still makes everything cool that it touches. So Go might get somewhere based on that. But on its own merits I can&#8217;t think of any reason to prefer it over another language.</p>
<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.gridshore.nl%2F2010%2F07%2F28%2Fan-evening-on-the-go%2F&amp;title=An%20evening%20on%20the%20Go&amp;t=2' height='25' width='155' frameborder='0' scrolling='no'></iframe></div></div><div style='clear:both'></div></div><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.gridshore.nl/2010/07/28/an-evening-on-the-go/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Axon Framework 0.5 released</title>
		<link>http://www.gridshore.nl/2010/04/24/axon-framework-0-5-released/</link>
		<comments>http://www.gridshore.nl/2010/04/24/axon-framework-0-5-released/#comments</comments>
		<pubDate>Sat, 24 Apr 2010 15:27:59 +0000</pubDate>
		<dc:creator>Allard</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Axon Framework]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[cqrs]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[JTeam]]></category>

		<guid isPermaLink="false">http://www.gridshore.nl/2010/04/24/axon-framework-0-5-released/</guid>
		<description><![CDATA[<p> Today, I finalized the 0.5 release of the Axon Framework. There is quite a number of changes since the 0.4 version. The 0.5 version is a major step towards production readiness of the framework.</p> <p>Besides some changes to existing building blocks, such as the event bus, which is now much more powerful, the [...]]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 5px; display: inline;" src="http://www.gridshore.nl/wp-content/uploads/axon_logo.png" alt="" align="left" /> Today, I finalized the 0.5 release of the Axon Framework. There is quite a number of changes since the 0.4 version. The 0.5 version is a major step towards production readiness of the framework.</p>
<p>Besides some changes to existing building blocks, such as the event bus, which is now much more powerful, the 0.5 version also includes some new features.</p>
<p>Read on to find out more.</p>
<p><span id="more-1047"></span></p>
<h2><strong>New features</strong></h2>
<ul>
<li><strong>Code restructuring.</strong> The package structure has been changed to better reflect the different architectural components Axon Framework provides. It should be easier to find the one you&#8217;re looking for.</li>
<li><strong>Command Bus.</strong> The command bus is added to Axon. It provides you the ability to explicitly define commands and dispatch them to your command handlers. Furthermore, the command bus provides you the ability to process commands regardless of their type using interceptors. This is useful for, for example, logging, authorization and correlation of incoming commands.</li>
<li><strong>JPA Event Store. </strong>The easiest CQRS configuration is on using full-consistency. That means everything should run within a single transaction. Since transactions over multiple data sources involve a huge performance penalty, Axon provides a JPA Event Store. Its performance is not as good as the FileSystem version, but is does provide transaction support.</li>
<li><strong>Easy switching between full-consistency and eventual consistency.</strong> You can easily choose to process all commands and related events inside a single transaction, or to handle events asynchronously. Choosing for consistency or high-performance is just a matter of configuration. No coding required.</li>
<li><strong>Per-event listener configuration of asynchronous processing.</strong> It is now possible to decide on synchronous vs asynchronous event processing for each event handler individually, just by adding an annotation. If you configure a transaction manager for your event listeners, Axon will process the events in batches and manage the transactions around them.</li>
<li><strong>Support for rolling snapshots.</strong> All event stores will automatically pick up snapshot events. Snapshot events are an important performance booster when aggregates generate a lot of events. Instead of reading all passed events, the event store just needs to read the last snapshot event and the regular events created since the snapshot.</li>
<li><strong>Transactional Event Processing.</strong> Configuring transactions in asynchronous event processing is now a lot easier. 0.5 includes a <tt>SpringTransactionManager</tt> you can use in combination with Spring&#8217;s <tt>PlatformTransactionManager</tt>.</li>
<li><strong>Major documentation update.</strong> The documentation has been restructured to make it easier to find what you&#8217;re looking for.</li>
</ul>
<h2><strong>Maven Central</strong></h2>
<p>Where the 0.4 version required configuration of a repository in your project’s pom.xml, the 0.5 version doesn’t. All required artifacts are available in the maven central repository.</p>
<h2>Workshop and professional support</h2>
<p>We believe that the 0.5 version of Axon Framework is a major step towards production readiness. Therefore, JTeam has decided to provide professional support for the Axon Framework and organize workshops to get you acquainted with the numerous features and choices involved with CQRS.</p>
<p>The first workshop is planned for Friday May 21st in Amsterdam, The Netherlands. For more information, visit <a href="http://www.jteam.nl/training/workshop/cqrs-axon-framework-training-workshop.html">http://www.jteam.nl/training/workshop/cqrs-axon-framework-training-workshop.html</a>.</p>
<h2>Getting started</h2>
<p>Want to get started? Visit <a href="http://www.axonframework.org">www.axonframework.org</a> and download the <a href="http://axonframework.googlecode.com/files/reference-guide-0.5.pdf">reference guide</a>. That should contain enough information to get you started. If you still have questions, drop me a message.</p>
<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.gridshore.nl%2F2010%2F04%2F24%2Faxon-framework-0-5-released%2F&amp;title=Axon%20Framework%200.5%20released&amp;t=2' height='25' width='155' frameborder='0' scrolling='no'></iframe></div></div><div style='clear:both'></div></div><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.gridshore.nl/2010/04/24/axon-framework-0-5-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Axon Framework &#8211; the CQRS framework for Java &#8211; version 0.4 released</title>
		<link>http://www.gridshore.nl/2010/02/21/axon-framework-the-cqrs-framework-for-java-version-0-4-released/</link>
		<comments>http://www.gridshore.nl/2010/02/21/axon-framework-the-cqrs-framework-for-java-version-0-4-released/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 15:57:56 +0000</pubDate>
		<dc:creator>Allard</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Axon Framework]]></category>

		<guid isPermaLink="false">http://www.gridshore.nl/2010/02/21/axon-framework-the-cqrs-framework-for-java-version-0-4-released/</guid>
		<description><![CDATA[<p>Last week, I published the 0.4 release of the Axon Framework. Axon helps developers build high performance, scalable and extensible applications using the CQRS pattern. The 0.4 release is a major step towards 1.0, and includes transactional event handling, high-performance caching repositories and easy configuration of event sourcing support. Furthermore, we have also built [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="logo" border="0" alt="logo" align="left" src="http://www.gridshore.nl/wp-content/uploads/logo1.png" width="100" height="100" />Last week, I published the 0.4 release of the Axon Framework. Axon helps developers build high performance, scalable and extensible applications using the CQRS pattern. The 0.4 release is a major step towards 1.0, and includes transactional event handling, high-performance caching repositories and easy configuration of event sourcing support. Furthermore, we have also built a demo application that uses Flex to get real-time updates pushed from the server.</p>
<p>Read on to find out more.</p>
<p> <span id="more-1008"></span><br />
<h2>About the Axon Framework</h2>
<p><a name="Axon_Framework"></a></p>
<p>Axon Framework helps build scalable, extensible and maintainable applications by supporting developers apply the Command Query Responsibility Segregation (CQRS) architectural pattern. It does so by providing implementations, sometimes complete, sometimes abstract, of the most important building blocks, such as aggregates, repositories and event the bus – the dispatching mechanism for events. Furthermore, Axon provides annotation support, which allows you to build aggregates and event listeners without tying your code to Axon specific logic. This allows you to focus on your business logic, instead of the plumbing, and helps you makes your code easier to test in isolation.</p>
<h2>Features available in 0.4</h2>
<p>We have made quite a few additions and changes since the 0.3 release. Unfortunately, this also means I had to make some minor API changes. There is now a bigger choice of abstract classes for most of the building blocks. This allows you to choose whether you want to use the logic provided by Axon, or prefer to develop more of your own. Whatever your wish is, there should be a class to help you on your way.</p>
<p>The biggest change since 0.3 is the addition of an Asynchronous Event Bus that supports transactional processing of events. Since it is asynchronous, it means that your command processing doesn’t have to wait for events to be processed. However, this Event Buss can also guarantee the order in which events are delivered to the event handlers. You can choose full concurrent processing (without any guarantees about ordering), full sequential processing (FiFo guarantee) or anything in between. You could, for example, guarantee the sequential processing of Events that come from the same aggregate.</p>
<p>The Event Bus also provides transaction support. That means you can tell the event bus to retry an event after a certain amount of time when processing fails, for example due to an error in the underlying mechanism, such as a database. For performance reasons, you can configure the event handler to process multiple events within a single transaction. Database updates are a lot faster if you process several events within a single transaction before committing it. Within your event handler, you can configure transactions. </p>
<p>Besides Domain Events, Axon now also allows you to explicitly define two other types of events: Application Events and System Events. Application Event can notify your event listeners that something interesting happened in your application. System Events are a special type of application events and can be used to indicate that a part of your application has changed state, for example when the database is no longer available. These System Events could provide interesting operational information about your application.</p>
<p>Another major change since 0.3 is the documentation. We have brought the documentation up to par with the code-base. All features are now extensively described in the reference guide. You can download the manual from the Axon Framework website: <a href="http://www.axonframework.org" target="_blank">www.axonframework.org</a>.</p>
<p>Last, but definitely not least, we have created a demo application that you can easily download and deploy to have a look at how you can use events to your advantage. This demo application is built using a Flex Client and an Axon-based server side component. The Flex Client registers itself as an event listener and will automatically process incoming events, at real time! That means that you can have 2 windows open, change something in one window, and see the change come in immediately on the other window, too. Check our <a href="http://code.google.com/p/axonframework/wiki/SampleInstallation" target="_blank">Sample Installation</a> page for more information.</p>
<h2>What to expect in upcoming releases</h2>
<p>The major components of the CQRS pattern are already available in the 0.4 release of Axon Framework. However, there is still a number of features we want to include in the 1.0 release. Although one of the advantages of CQRS is that it makes an application scalable and extensible, the 1.0 release of Axon Framework focuses on what happens inside a single JVM. Streaming events between JVM’s is not made impossible though, the Spring Integration connectors can be used to publish events to JMS, MQ, mail, HTTP and any other protocol supported by Spring Integration.</p>
<p>Some features to expect before the 1.0 release are rolling snapshots. When aggregates live for a long time, the number of events to read in each time the aggregate is loaded could easily run in the thousands. Reading in a thousand events takes a long time. Instead of reading in a thousand events, you can summarize all these events into a single snapshot event. Axon Framework will provide the plumbing necessary for you to build snapshot events.</p>
<p>Another feature that we’ll be spending some attention on is failure recovery. Unfortunately, applications sometimes behave unexpectedly and sometimes stop entirely. The reason of a crash won’t be the Axon Framework itself, of course. But since we have a reliable source of events in the events store, we can use this to recover from failure. Axon Framework will provide some building blocks that allow you to republish events to event handlers that did not get the chance to process them. This same mechanism will allow you to restore your application state from backups.</p>
<p>The last feature currently on the roadmap is JMX support. Since Axon Framework deals with the dispatching and invocation of event handlers, it has interesting information about an application’s performance and technical state. We are planning to expose this information using JMX MBeans.</p>
<p>If you have any other ideas, you can submit a feature request on <a href="http://www.axonframework.org/issues" target="_blank">www.axonframework.org/issues</a>. </p>
<h2>Getting started with Axon</h2>
<p>If you&#8217;re eager to get started using Axon Framework for your own application, check out the <a href="http://www.axonframework.org" target="_blank">Axon Framework website</a>. There, you can download the binaries, sources documentation and a sample application. If you use Maven, the reference manual will explain how you can configure the dependencies on the Axon binaries.</p>
<p>If the information on the website is not enough to get you started, don’t hesitate to send me a message or post a comment at the bottom of this blog entry.</p>
<h2>A special thanks to…</h2>
<p>Before I wrap up, I would like to thank Jettro Coenradie for his help on the sample project and the reference documentation. I think the sample turned out into a pretty cool demo environment for some of the advantages that Axon can provide.</p>
<p>Also many thanks to <a href="http://www.jteam.nl" target="_blank">JTeam</a> for the time they allowed me to spend on the project. Without it, I am sure I couldn’t have delivered this release. Thanks!</p>
<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.gridshore.nl%2F2010%2F02%2F21%2Faxon-framework-the-cqrs-framework-for-java-version-0-4-released%2F&amp;title=Axon%20Framework%20%26ndash%3B%20the%20CQRS%20framework%20for%20Java%20%26ndash%3B%20version%200.4%20released&amp;t=2' height='25' width='155' frameborder='0' scrolling='no'></iframe></div></div><div style='clear:both'></div></div><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.gridshore.nl/2010/02/21/axon-framework-the-cqrs-framework-for-java-version-0-4-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CQRS made easy with cqrs4j</title>
		<link>http://www.gridshore.nl/2009/12/21/cqrs-made-easy-with-cqrs4j/</link>
		<comments>http://www.gridshore.nl/2009/12/21/cqrs-made-easy-with-cqrs4j/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 08:37:00 +0000</pubDate>
		<dc:creator>Allard</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[cqrs]]></category>
		<category><![CDATA[Domain Driven Design]]></category>

		<guid isPermaLink="false">http://www.gridshore.nl/?p=954</guid>
		<description><![CDATA[<p>&#160;</p> <p>Command Query Responsibility Segregation (CQRS) is an architectural style that makes a clear distinction between commands, which tell an application to do something, and queries, which are requests for information from an application. This distinction comes from the fact that the requirements (and thus also the model) for the execution and validation of [...]]]></description>
			<content:encoded><![CDATA[<p>&#160;<img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="cqrs4j_logo" border="0" alt="cqrs4j_logo" align="left" src="http://www.gridshore.nl/wp-content/uploads/logo_large.png" width="100" height="100" /></p>
<p>Command Query Responsibility Segregation (CQRS) is an architectural style that makes a clear distinction between commands, which tell an application to do something, and queries, which are requests for information from an application. This distinction comes from the fact that the requirements (and thus also the model) for the execution and validation of commands are significantly different than those for queries. Events play an important role in the synchronization of application state resulting from executed command.</p>
<p>Applying a CQRS style architecture involves the development of quite a lot of “plumbing” code: event dispatching, asynchronous event processing, transactions, etc. <em>cqrs4j</em>, an Apache 2 licensed open source framework, takes care of all the plumbing for you. Read on to find out how…</p>
<p> <span id="more-954"></span><br />
<h2>A brief introduction to CQRS</h2>
<p>As I stated above, CQRS makes a distinction between the model that validates and executes commands and the model that is used for providing state information. This is quite significantly different than how most (web)app applications are build nowadays. In fact, the model used for commands (the box named “Domain” in the image below), does not expose any state, at all. You might wonder, but how do I know what to show in the front end? That comes directly from your data sources using a thin data layer. I’ll explain how the data gets there in a minute.<a href="http://www.gridshore.nl/wp-content/uploads/cqrs_architecture.jpg"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="cqrs_architecture" border="0" alt="cqrs_architecture" src="http://www.gridshore.nl/wp-content/uploads/cqrs_architecture_thumb1.jpg" width="404" height="281" /></a></p>
<p>When a command comes in, it will load an <a href="http://dddstepbystep.com/wikis/ddd/aggregate.aspx" target="_blank">aggregate</a> from the <a href="http://dddstepbystep.com/wikis/ddd/repository.aspx" target="_blank">repository</a> and execute certain operations on it. As a result of these operations, the aggregate produces events, which are picked up for storage by the repository and for dispatching by the event bus. The event bus will dispatch each event to all (interested) event handlers. Some of these event handlers will perform actions on other (related) aggregates, some others will update the database tables they manage.</p>
<p>Having handlers update the data in the database means that your tables do not have to be normalized anymore. Instead, CQRS allows you to optimize your tables for the way you want to query them. This makes the data layer processing your queries really simple, and maintainable. </p>
<p>Furthermore, since all state changes are initiated by events, these events become a reliable source for an audit trail. By storing these events, you have an audit trail that you can use to replay the entire application history. Instead of just seeing “current application state” only, you can see all the changes that have led to the current state, providing valuable information trying to find bugs or deal with customer complaints.</p>
<p>The asynchronous and event driven nature of CQRS makes it extremely valuable for complex applications that have different views on the information in the application. Integration with third party systems that need to be notified of certain changes in your application –and vice versa–&#160; is a lot easier if you use an event driven approach. And since event handling is done asynchronously, the application is more responsive and easier to scale. </p>
<p>But as you notice, there is quite a lot of processing and pushing around of events. When you have a customer breathing up your neck, you don’t want to be developing infrastructure code. You would want to be focusing on the business logic, which is quite complex by itself.</p>
<h2>cqrs4j</h2>
<p>cqrs4j is a Spring-oriented framework that provides the most important building blocks of a CQRS architecture. Creating an aggregate becomes really simple. You don’t have to worry about managing the storage and dispatching of (uncommitted) events. Event sourcing becomes as easy as wiring two beans in your application context.</p>
<p><strong>Annotation support</strong></p>
<p>cqrs4j comes with out-of-the-box annotation support. This makes is really easy to wire event handler methods. cqrs4j can automatically subscribe all your event handlers to the event bus and delegate all relevant events to the appropriate event handlers. Enabling annotation support is as easy as wiring a single bean in your application context.</p>
<p><strong>Spring Integration support</strong></p>
<p>Spring Integration is a framework that allows easy developments of a Messaging systems using the pipes-and-filters architecture. This fits nicely with most of the event dispatching process of CQRS. cqrs4j has support for Spring Integration, which allows you to publish all events as messages on a Spring Integration channel. Sending messages through JMS queues, via email, or through file system storage will only take a few lines of (XML) configuration.</p>
<p><strong>Transaction support</strong></p>
<p>If you update your database tables through incoming events, dealing with them one-by-one in a transaction can become time consuming and take up too much resources of your database. With cqrs4j, you can configure transactions just by setting the @Transactional annotation on your event handlers. You can also configure how many events should be handled in a single transaction.</p>
<h2>cqrs4j project page</h2>
<p>cqrs4j is an open source project, licensed under the Apache 2 license. Visit the project home page for the latest downloads, documentation and source code at <a href="http://code.google.com/p/cqrs4j" target="_blank">code.google.com/p/cqrs4j</a>.</p>
<p><strong>We welcome your feedback</strong></p>
<p>If you have any requests, remarks or other feedback, please let us know. You can report bugs and improvement requests on the <a href="http://code.google.com/p/cqrs4j/issues/" target="_blank">issues page</a>. You can also leave a message via the <a href="http://www.gridshore.nl/contact/" target="_blank">contact page</a> or by leaving a comment.</p>
<h2>Further reading</h2>
<p>I have some more CQRS related blog articles coming up, but there are already quite a few around. Here is a few that helped me get started:</p>
<ul>
<li><a href="http://www.infoq.com/presentations/greg-young-unshackle-qcon08" target="_blank">Greg Young @ QCon: Unshackle your domain</a> </li>
<li><a href="http://elegantcode.com/2009/11/11/cqrs-la-greg-young/" target="_blank">CQRS a la Greg Young</a> </li>
<li><a href="http://elegantcode.com/2009/11/20/cqrs-the-domain-events/" target="_blank">CQRS – The Domain Events</a> </li>
<li><a href="http://elegantcode.com/2009/12/08/cqrs-domain-state/" target="_blank">CQRS – Domain State</a> </li>
<li><a href="http://jonathan-oliver.blogspot.com/2009/10/dddd-why-i-love-cqrs.html" target="_blank">DDDD – Why I love CQRS</a> </li>
</ul>
<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.gridshore.nl%2F2009%2F12%2F21%2Fcqrs-made-easy-with-cqrs4j%2F&amp;title=CQRS%20made%20easy%20with%20cqrs4j&amp;t=2' height='25' width='155' frameborder='0' scrolling='no'></iframe></div></div><div style='clear:both'></div></div><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.gridshore.nl/2009/12/21/cqrs-made-easy-with-cqrs4j/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Open source as in free</title>
		<link>http://www.gridshore.nl/2008/11/14/open-source-as-in-free/</link>
		<comments>http://www.gridshore.nl/2008/11/14/open-source-as-in-free/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 20:34:32 +0000</pubDate>
		<dc:creator>jettro</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.gridshore.nl/?p=430</guid>
		<description><![CDATA[<p></p> <p>Last week I was at the NLJug J-Fall. This is a conference for Java developers organized in the name of the Dutch Java Users Group. One of the keynotes was given by Reginald Hutcherson from Sun. He talked about Sun and of course also about making Java and many related products open source. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.gridshore.nl/wp-content/uploads/logo-opensource.png" alt="logo_opensource.png" border="0" width="118" height="100" align="left" /></p>
<p>Last week I was at the NLJug J-Fall. This is a conference for Java developers organized in the name of the Dutch Java Users Group. One of the keynotes was given by Reginald Hutcherson from Sun. He talked about Sun and of course also about making Java and many related products open source. He explained why this was very good. Since we all love free software. This was obviously a comment with a humorous undertone. Yet there are still many people who truly believe open source is just free software. What is really free in this context? Like many others I am think that open source software is not free.</p>
<p>Read on to learn why</p>
<p><span id="more-430"></span>
<p>When we look at the overall picture of software, there are a number of levels of free. In my view we can distinguish the next 4 steps in &#8220;free&#8221; for open source:</p>
<ol>
<li>Free source code</li>
<li>Free software</li>
<li>Free documentation</li>
<li>Free Support</li>
</ol>
<p>How free is an open source product? You can do with the sources what you want? For example, create your own components and sell your components together with the open source product? To explain what you can do with the sources, an open source products is accompanied by a license. Some licenses feel like a free newspaper on the street.</p>
<p><em>&#8220;Sir, you want to try this newspaper for free?-Yeah, sure, give it to me-but you&#8217;ll need to register here for a trial subscription that without written termination is immediately converted into a permanent subscription.&#8221;</em></p>
<p>So a free paper comes with a subscription and some rules around this subscription. Like with this free newspaper, free open source software also comes with a license. The instructions might indicate that there are multiple licenses depending on your type of use. Important is that some licenses do not go together. Therefore I think free software becomes quite complex.</p>
<p>The more free an open source product is, the more important the community behind the open source product is. If only the source code is freely available, you&#8217;ll need to build the product yourself. Besides the source code is perhaps an installation manual available. In this situation the risk of problems is large and so the support of a community is very important. This support will focus largely be confined to a mailing list or an online forum. Fortunately, the most open source projects also provide &#8220;runnables&#8221;. In other words, working applications that can be executed immediately. If you&#8217;re lucky, you can also find free a user manual. Support is available via mailing lists and online forum.</p>
<p>The next step is free documentation. Again, a very active community is important. Without an active community there is often no proper documentation. Moreover, proper documentation results in better overall adoption of a product. Another reason for good documentation is a commercial interest for a company. The most common form of a commercial interest in an open source project, is a company that arises from the starter (s) that open source project. This company will assist in the use of the open source product. Now it&#8217;s interesting, especially as the last step in the free software is free support. This undermines the business model of the commercial business, since they often earn money by providing support. The balance between free and paid support is therefore difficult for a company that wants to make money and not loose the community. Therefore, online support is usually free. This is picked up by the community together with employees of the company that supports he open source project.
</p>
<p>Free means that you can obtain the sources for free, not necessarily the use of the software. You still need someone who goes into the sources, learning about the software or someone who will understand the software so as to train others. You probably need to train people in using the software before they can become productive.</p>
<p>I believe that open source will never be really free. What does this mean for open source now? A disaster? Nope, with paid software it is no different. Then you must also train your people. Open source is not the same as free. If you take the words open source literally, it means that only that the source code is open or available. The &#8220;Open Source Initiative&#8221; has a definition that describes open source. The availability of the source is only one of the 10 points which open source must meet. The other points that are described, among other open source software should be able to pass on to others, provided that the license is included, the original writer gets recognition. Read the full 10 points on the following page: <a href="http://www.opensource.org/docs/osd">http://www.opensource.org/docs/osd</a>. A license may call itself an open-source license only if it is approved by OSI. A long list of open-source licenses is available on the same website: <a href="http://www.opensource.org/licenses/alphabetical">http://www.opensource.org/licenses/alphabetical</a>. When you have read the open source definition, you come to the conclusion that there is no talk of free software. There is only talk about the availability of open or free sources and what you can do with those sources.</p>
<p>Conclusion, open source projects tend to make their software available for free under a well known open source license. The software can be used for for free. You can ask for help for free in a forum. For onsite support you often have to pay. Because you can do with so much for free with open source software, open source will often be seen as free. I think however that the use of open source will never be completely free. You&#8217;ll always have to invest in learning about the software. You may have to hire expensive consultants for implementations. The main lesson learned that I can give is that making a choice for open source should never be based on the fact that it is &#8220;free&#8221;, this is not right. Opt for open source for the freedom that you get, the quality and particularly the community that is always willing to help.</p>
<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.gridshore.nl%2F2008%2F11%2F14%2Fopen-source-as-in-free%2F&amp;title=Open%20source%20as%20in%20free&amp;t=2' height='25' width='155' frameborder='0' scrolling='no'></iframe></div></div><div style='clear:both'></div></div><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.gridshore.nl/2008/11/14/open-source-as-in-free/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Yes We Can&#8230;.the day after</title>
		<link>http://www.gridshore.nl/2008/11/05/yes-we-canthe-day-after/</link>
		<comments>http://www.gridshore.nl/2008/11/05/yes-we-canthe-day-after/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 16:35:22 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[international technology]]></category>
		<category><![CDATA[Obama]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[predicting the future]]></category>
		<category><![CDATA[United States]]></category>

		<guid isPermaLink="false">http://www.gridshore.nl/2008/11/05/yes-we-canthe-day-after/</guid>
		<description><![CDATA[<p>On November 4, 2008 a great wish came true for most of the United States and the rest of the world: a great alliance of liberals, progressives, new voters, young voters, men, women, blacks, hispanics and people who wanted change in general rose up and dropkicked George W. Bush and his neoconservative cronies out [...]]]></description>
			<content:encoded><![CDATA[<p><img style="218px" alt="Barack Obama" hspace="5" src="http://upload.wikimedia.org/wikipedia/commons/1/1f/BarackObama2005portrait.jpg" width="150" align="left" border="0" />On November 4, 2008 a great wish came true for most of the United States and the rest of the world: a great alliance of liberals, progressives, new voters, young voters, men, women, blacks, hispanics and people who wanted change in general rose up and dropkicked <a href="http://en.wikipedia.org/wiki/George_W._Bush">George W. Bush</a> and his neoconservative cronies out of power in <a href="http://en.wikipedia.org/wiki/Washington">Washington D.C.</a></p>
<p>So now it is November 5. It&#8217;s the morning after and instead of being just the junior senator from <a href="http://www.illinois.gov/">Illinois</a>, <a href="http://en.wikipedia.org/wiki/Barack_Obama">Barack Obama</a> is now the president-elect of the United States. Which means that the time has finally come for those of us who cannot vote to start thinking about what we can expect in the way of change. Of course we all know about the big things that have been central themes in the campaign, like the economy and the war in Iraq. But for us who work in the technology sector it is also interesting to wonder what changes might be on store.</p>
<p>Now, I am not a real political pundit. So I might be talking out of my ass in the rest of this article. But nevertheless what follows is, in no particular order, the topics that I think will be interesting to watch in the next few years in the United States under new management.</p>
<p><span id="more-421"></span>
<p>&nbsp;</p>
<h3>Energy as a technology driver</h3>
<p>The Obama campaign has never had much to say on the issue of technology per se (it&#8217;s not foremost an anybodies mind right now, so that&#8217;s understandable). Where Obama has touched on technology, it has almost solely related to energy technologies (renewable energy, clean coal technology and so on). That isn&#8217;t much numerically, but as a topic it is certainly a very good one to commit to pushing technology.</p>
<p>Energy technologies are currently the bleeding edge of applied physics and chemistry, with an enormous push in technology and knowledge development in order to create energy sources that do not deplete the world&#8217;s resources and limit carbon dioxide emissions. They are also poised to become a huge industry driver with all sorts of new plants, facilities and infrastructure going up all over the place. Which offers opportunities for all sorts of companies and industries from all over the world. Whether it is <a href="http://w1.siemens.com/entry/cc/en/">Siemens</a>, <a href="http://www.ge.com/">General Electric</a> or a startup like <a href="http://www.darwind.nl/">Darwind</a> (producers of wind turbines), producers of tidal turbines or solar panels, solar power stations, or large energy consumers (like the <a href="http://www.google.com">Google</a> data centers or the <a href="http://www.ams-ix.net/">Amsterdam Internet Exchange</a> or greenhouses and chemical production plants) looking to reduce their energy footprint, or technology providers (companies, universities, research institutes) developing technologies to help others, there is enormous potential everywhere.</p>
<p>And, while it may not seem so at first, part of that potential is also in smart IT solutions. I&#8217;ve already mentioned power usage by Google and others. Energy conservation is one answer, but part of the solution will also have to come from incorporating new energy sources into the infrastructure — solar, wind and water. Some of the new sources may be small (like energy production from solar panels on people&#8217;s houses) and many will suffer from high fluctuations in supply. In order to accommodate this new paradigm power grids will have to be replaced by or upgraded to <em>smart power grids</em> (strongly dependent on computer control systems) that can dynamically switch on small-to-large supply fluctuations, can rebalance the system in these conditions and can allow for correct billing so that home power producers can be paid for the power they put into the grid. Google and General Electric have already signed an agreement to develop such grids together in the future.</p>
<p>And other examples are rife. Lots of machinery and machine networks will start using dynamic controls to optimize power use and minimize emissions. One of the major challenges here (since it is such an open system with many small parts that cannot all be replaced or upgraded at once) is the traffic infrastructure. The major attention here is on hybrid engines, hydrogen engines and soon. But the fact is that huge inroads will be made by having more automation in cars to balance power distribution to the wheels, break control and balance, traffic jam avoidance and (in the future) guidance control.</p>
<p>As you can see there are huge areas where energy concerns can be a technology driver in the upcoming years. It will be interesting to see whether and to what extent the new Obama administration will push technology development in this area in the next few years. Will Obama be able to make a large energy conservation and renewable energy push in the U.S.? Will he put people in charge with the vision to see how far-reaching the new developments can be? And how will Europe and the rest of the world respond? Will they be spurred on to even greater heights in this field, inspired by a new U.S. push and driven by competition?</p>
<p>&nbsp;</p>
<h3>The defense industry</h3>
<p>Aside from new fields, such as energy, the defense industry has been a technology driver in the U.S. for the last five decades. This area will be interesting to watch as well.</p>
<p>On the one hand, Obama is faced with a rotten economy and impopular wars. That is not the climate in which to invest heavily in the technologies of war. Rather, I wouldn&#8217;t be surprised to see defense budget cuts coming up in the next few years. On the other hand, <a href="http://www.darpa.mil/">DARPA</a> has always done pretty well for the U.S. and I cannot imagine any president seriously cutting back on that agency.</p>
<p>What will be most interesting to see is if the Obama administration will refocus the defense industry to move from shock-and-awe baloney to a smarter, leaner way of working. DARPA has long funded research into <a href="http://en.wikipedia.org/wiki/Unmanned_aerial_vehicle">UAV</a>s all over the world (as have other governments and institutes). And (to look elsewhere shortly) the <a href="http://www.marine.nl">Dutch navy</a> has been developing naval vessels for years that can be manned by smaller and smaller crews. Will the Obama administration move to a more high-tech and less bulky military? It would be interesting, especially since such a military would depend heavily on IT development as well.</p>
<p>&nbsp;</p>
<h3>Education in general</h3>
<p>Obama made a big deal of education in his campaign. And rightly so, since primary and secondary education in the United States is an ungodly mess. But aside from pure necessity to keep the United States from sliding backward in the future, a major education push may have profound long-term effects on the IT industry.</p>
<p>One of the major reasons for the popularity of outsourcing to India in the last few years has been the ready availability of a large pool of at least reasonably well-educated software developers. And their low cost of course, although that effect is melting away rapidly. But cheap or not, Indians do still have the advantage of being available, whereas in Europe and the U.S. people are still hard to find. But an education push might just change that in the next generation. If more people reach higher levels of education the U.S. might once again be able to fill a large part of its own requirements. In combination with the rising costs of Indian and Chinese resources (already a reason for Intel to move some of its production plants back to the U.S.) we may see a small or even dramatic reversal in the outsourcing trend in the next 15 to 25 years.</p>
<p>Something else might prompt a small, short-term reversal as well by the way: the new commitment from the Obama administration to make it harder and costlier to ship jobs overseas. That in combination with economic slowdown in the next year may very well cause a small collapse in the outsourcing trend from the United States if the Obama administration is willing not only to make overseas jobs more expensive but to start subsidizing local jobs to make them more attractive to companies. Which of course opens the question of what will happen if Europe follows suit.</p>
<p>&nbsp;</p>
<h3>The Microsoft case</h3>
<p>&nbsp;</p>
<p>This one is a bit of a sideshow nowadays, but still: <a href="http://www.microsoft.com">Microsoft</a> might suddenly find life a little harder again under the Obama administration. In the latter days of the <a href="http://en.wikipedia.org/wiki/Bill_Clinton">Clinton</a> administration, <a href="http://en.wikipedia.org/wiki/Janet_Reno">Janet Reno</a> was prosecuting Microsoft for antitrust violations. Microsoft heavily backed the Bush campaign in 2000 and in 2001 the case against them suddenly vanished. Now the Democrats are resuming executive control, Microsoft might start feeling the crosshairs of the <a href="http://www.usdoj.gov/">Justice Department</a> on its forehead again.</p>
<p>Of course there is the question of whether this still matters. Microsoft has not been doing all that well in recent years and the mantle of technology leader company seems to have passed to Google more or less. Still, it&#8217;s something to watch.</p>
<p>&nbsp;</p>
<h3>The Internet Generation</h3>
<p>The final thing that I think we should watch for in the next few years is less tangible and therefore the most interesting: the effect of the Internet generation. Obama was elected in part due to heavy support from young adults in the United States and it shows in all aspects of his campaign. From the fact that he is the first president(-elect) ever who gave the online portion of his campaign equal footing with the real-world part to the slick use of all media to appeal to voters&#8230; It is clear in everything, this will be the first administration populated heavily by people from a generation that has grown up in an online world.</p>
<p>The question now is what effect in general this will have on the relationship of the administration to technology, technology users and their views on the world. I&#8217;m not exactly sure where this could go, but I think two interesting topics to watch are the new administration&#8217;s views on intellectual property law and its views on open source and government.</p>
<p>The second subject is of direct interest to the technology field. There have been half-hearted moves in the last few years in different countries towards using open source software rather than commercial software (and one serious move in Brazil). Perhaps the United States will adopt a similar policy, or at least make some moves in that area in some parts of the government. This might also be interesting in combination of the passing of the mantle of leadership (or &#8220;coolness&#8221;) from Microsoft to Google and might be fuelled by the rise of the Google/Internet generation (after the Microsoft/Desktop generation). Either way, there might be reason for a far greater push into OSS than we have seen even in the last few years.</p>
<p>The first subject might be the result of the Internet generation&#8217;s new views on information exchange and availability of everything you want when you want it. The world has already known for years that a new way of dealing with intellectual property (especially copyright) is necessary in the new world. It will be interesting to see how much influence the youth component will have on the voice of the United States in the next few years.</p>
<p>&nbsp;</p>
<h3>Waiting for the future</h3>
<p>Like I said, I think there are lots of interesting developments that are coming our way courtesy of the new management in the United States; I hope, after reading, that you agree. We already have the beginnings of change across the pond; all that remains now is to see what shape change will take. And how we will respond to change to make life better in our jobs, our lives and the lives of the people around us.</p>
<p>All of a sudden, life is exciting again.</p>
<p><strong>YES, WE CAN!!!</strong></p>
<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.gridshore.nl%2F2008%2F11%2F05%2Fyes-we-canthe-day-after%2F&amp;title=Yes%20We%20Can....the%20day%20after&amp;t=2' height='25' width='155' frameborder='0' scrolling='no'></iframe></div></div><div style='clear:both'></div></div><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.gridshore.nl/2008/11/05/yes-we-canthe-day-after/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Redesigning libraries completely</title>
		<link>http://www.gridshore.nl/2008/10/15/redesigning-libraries-completely/</link>
		<comments>http://www.gridshore.nl/2008/10/15/redesigning-libraries-completely/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 22:53:23 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[copyright]]></category>
		<category><![CDATA[openness]]></category>

		<guid isPermaLink="false">http://www.gridshore.nl/2008/10/15/redesigning-libraries-completely/</guid>
		<description><![CDATA[<p>I just got done reading Jettro&#8217;s post on refactoring your library. And still being in the vacation mood, it reminded me of an idea that surfaces in my so-called brain every now and then: the public library for the twenty-first century.</p> <p>Much like Jettro I have the habit of accumulating odds and ends of [...]]]></description>
			<content:encoded><![CDATA[<p>I just got done reading Jettro&#8217;s post on <a href="http://www.gridshore.nl/2008/10/13/refactoring-your-library/">refactoring your library</a>. And still being in the vacation mood, it reminded me of an idea that surfaces in my so-called brain every now and then: the public library for the twenty-first century.</p>
<p>Much like Jettro I have the habit of accumulating odds and ends of documentation over time (sometimes including entire books which tend to go out of date). Which means that I tend to run out of space after a while. At the same time all this documentation suffers from the problem of not being very portable, which means it doesn&#8217;t fit very well with our information at your fingertips age. All in all a digital form of storage available at any time and possibly to a large audience (or at least available to me from any place) would be far preferable. However, that solution runs afoul of copyright laws and treaties.</p>
<p>Looking at it in a more general way, there is a general contradiction between the historical rights of authors and the needs of information consumers in the modern age. In the following sections I will attempt to provide an overview of the reasons and interests in this situation and what I think would be a good idea for our modern age.</p>
<p><span id="more-291"></span><br />
<h3>Copyright</h3>
<h4>Why copyright?</h4>
<p>Let&#8217;s start right at the beginning by reviewing why we have copyright in the first place.</p>
<p>Copyright started in fifteenth century England. Until the fourteenth century, if you wrote something your only way of keeping your creation safe was by obscurity: show it to nobody, let nobody read it or hear you reading it. Now, for most of history that was not a great big problem; most people didn&#8217;t read, very few <em>could</em> write and what they did write they actually wanted heard (plays and stories) or was too complicated for most people to understand (early works of science). It was the time of the storyteller, the playwrite and the scribe (and in fact quite a large number of works from earlier centuries were lost due to lack of dissemination).</p>
<p>But in 1444 <a href="http://en.wikipedia.org/wiki/Johannes_Gutenberg">Johannes Gutenberg</a> invented the <a href="http://en.wikipedia.org/wiki/Movable_type">movable type</a> <a href="http://en.wikipedia.org/wiki/Printing_press">printing press</a> and for the first time made it possible on a large scale to record and disseminate ideas, theories, stories, images and far more. For the first time ever what one man thought of might be carried across cities, countries and continents at a speed far beyond his control. And for the first time it became possible to steal ideas for ones own profit.</p>
<p>At first of course this was not a major problem. The only work of mass popularity available was the bible and nobody was really claiming ownership of that (although its large-scale dissemination would have <a href="http://en.wikipedia.org/wiki/Protestanism">huge repercussions</a> a century later). But as other works spread, science started taking hold in southern Europe and wealth started to accumulate in the seafaring kingdoms of Europe, it became necessary to protect works from which one might actually derive profit. Which of course severely limited the dissemination of knowledge and so stood in the way of further development.</p>
<p>As progress took hold over centuries and Europe started to be a place for knowledge-capital again, it was becoming necessary to introduce a system whereby a person could make his works public without thereby giving up all control over that work an lose the possibility of deriving personal gain and recognition from it.</p>
<h4>What is copyright exactly?</h4>
<p>Copyright was the answer to this quandary and is more or less exactly what it sounds like: the right to copy a work. More specifically, copyright is defined as follows:</p>
<blockquote>
<p><u><strong>Copyright</strong></u>: The monopolistic right of the author of a work of <em>science</em>, <em>art</em> or <em>literature</em> to</p>
<ul>
<li><strong>publish</strong> and/or</li>
<li><strong>disseminate</strong></li>
</ul>
<p>that work.</p>
</blockquote>
<p>Copyright is a legal mechanism that allows an author of a work to make his work public in any way that he desires for his own personal gain and have government support to keep everybody else from stealing that work after it has been made public. This mechanism benefits the author in that he can profit from his work and still keep control of it. And at the same time it balances the needs of the author against the needs of knowledge consumers who can now access the work in question once they&#8217;ve gotten permission from the author, pass on their copy of the work (but only that copy) and quote or otherwise use the work as long as they give credit to the original author.</p>
<p>Copyright is a form of legal protection for authors which is given by national governments. As such, copyright is a matter of national law in every country. However, since most works are spread across borders nowadays (and have been for a while) there is also an international treaty that creates a protective framework for authors across most of the globe. This treaty is known as the <a href="http://www.wipo.int/treaties/en/ip/berne/trtdocs_wo001.html">Berne Convention</a> and is governed by the <a href="http://www.wipo.int">World Intellectual Property Organization</a>.</p>
<h3>A modern age of publishing</h3>
<h4>Publishing and the rise of the Internet</h4>
<p>The rise of copyright and the system of laws and treaties establishing copyright (especially since 1886) were a very reasonable and acceptable compromise between the needs of authors and knowledge consumers for a long time. The system allowed for the controlled but ever-growing flow of information, which in turn allowed more and more people access to all sorts of knowledge and allowed them to produce, record and disseminate more knowledge themselves and so on. It is fair to say that the technological revolution that has taken place on this planet starting with the <a href="http://en.wikipedia.org/wiki/Industrial_Revolution">Industrial Revolution</a> would not have taken place without copyright.</p>
<p>However, in the 1960&#8242;s the continuous growth of knowledge of the last centuries resulted in a dramatic change of circumstances for authors of all works; the kind of change that had last been seen in the 1440&#8242;s. On October 29, 1969 two teams working for <a href="http://www.darpa.mil/">DARPA</a> created the first part of the Internet and in so doing (although I&#8217;m sure nobody stopped to think about it at the time) created a whole new medium for disseminating works. A medium that, much like the movable type of five hundred years earlier, vastly increased the speed and ease with which any work might be disseminated amongst a huge number of people and which might also enable those people to understand those works far more than before.</p>
<p>Copyright worked well for a long, long time because it was a mechanism suited perfectly to the media available when it was invented. Works were available and could be disseminated under copyright from a relatively limited number of sources to a large audience which was, on the whole, capable of receiving but not of reproducing works (at least not in a way that would seriously threaten the livelihood of the authors). Also, the limited number of original sources of dissemination made it possible to institute a reasonable system of compensation for authors of works which were subject to mass dissemination (like songs broadcast on the radio). The introduction of the Internet made it possible for the first time for every dissemination of a work to result in a new source of dissemination with ease and speed. Copyright, although not encoded to be limited to a particular collection of media, was not prepared for that.</p>
<h4>Open source, open standards, open everything</h4>
<p>Of course, as usual, nobody noticed at first. For starters it took a while for the Internet to become a popular medium; that didn&#8217;t happen until the latter part of the 1990&#8242;s. Second, the dramatic impact of the Internet on traditional views on copyrightable material also required another development: the popularization of the idea of information freedom.</p>
<p>Freedom of information (i.e. the idea that information should be freely disseminated) started in earnest in the 1960&#8242;s as well at universities such as <a href="http://berkeley.edu/">Berkeley</a>, where the first generation of students to &#8220;grow up&#8221; with computers and networking saw the potential and ease of digital media in distributing data. This new idea took hold in many forms and led (among others) to the development of open source groups like the <a href="http://www.gnu.org/">GNU</a>, whose philosophy is that of <a href="http://www.gnu.org/philosophy/free-sw.html">free software</a>.</p>
<p>The result of these developments was that the next generation grew up in a new, digitalized age with a whole new attitude towards works and intellectual property. Copyright had always been an understandable and reasonable concept because it fit the available media and it was hard to seriously violate copyright laws without trying (you cannot accidentally copy a whole book fifteen times). But in the new age, where copying is easy, copyright seems a lot less reasonable and a far greater limitation on the will of people who are used to easy access to everything. Which is a problem, since one cannot deny that the more freely information flows, the more and more varied use it finds and the more and more varied growth of knowledge results.</p>
<h4>Supranationalism and the level, European playing field</h4>
<p>There is one more recent change that I must mention that is relevant to what I want to propose. After the Second World War, the countries of Europe (and to some extent the world) realized that more and more often the world is faced with problems and challenges that surpass the traditional, national boundaries &#8212; and the abilities of nation states to deal with. For more and more things it is necessary to have supranational cooperation and a system of rules and regulations that don&#8217;t stop at the border.</p>
<p>Luckily, in Europe, we have something like that: we have a <a href="http://europe.eu">European Union</a>. The European Union is a supranational organization dedicated to pursuing <a href="#note0">ever closer union</a> among the nations of Europe. And part of that mission is to strive towards an ever more level playing field for people and businesses in all walks of life. To create a society on top of different societies with both cooperation and fair competition across traditional boundaries.</p>
<p>That same European Union is also charged with the task of creating a situation of ever-increasing opportunities on equal footing for all its citizens in this modern age. As such, the Union also faces the apparent clash between copyright and the need to disseminate information to stimulate development of the European society through science, industry, culture and education.</p>
<h3>The European library</h3>
<p>So, what do I think should be the answer? Where do I think the new balance should be struck? Well, I think that there is a huge opportunity right at our feet if we only dare see the circumstances of the day as a chance and not a problem. To recap the above, we are faced with the following:</p>
<ul>
<li>A body (by necessity ever growing) of authors in need of protection of their rights</li>
<li>A body of knowledge consumers empowered by a new medium no longer to be constricted by the old ways of doing things and not feeling those old restrictions to be reasonable anymore</li>
<li>A new form of government, encompassing all the old and unifying many different people, rising on the need for cooperation between peoples</li>
</ul>
<p>Now, call me crazy, but it seems to me that we have not only a problem, but the necessity and the means to solve that problem and a perfectly positioned group of people to take responsibility for implementing the solution.</p>
<p>Back when mass media was first introduced, copyright law faced similar problems as it does nowadays but on a more limited scale. The solution back then was to allow mass media dissemination of works and arrange for compensation at the source. We have the same situation today except that we have no organized source from which to arrange compensation, nor a large enough government institution to arrange compensation.</p>
<p>So what I propose is this: since the desire for dissemination of works exists among all the peoples of Europe, let it be a task of the European Union. Let it not fall to the Union to fight the tide by trying to enforce ancient copyright, but instead let it fall to the Union to arrange dissemination of <strong>all</strong> works to <strong>all</strong> European citizens through an online library offering every European citizen access to everything &#8212; books, music, movies, scientific papers, everything else, old, new, everything ever published in Europe before, now and in the future. And let it be a service that is paid for by the European citizens through common taxation &#8212; carried by all Europeans, free at point of use and with as much use as wanted or needed. We have the technology required (the Internet), the government required (the Union), the driving forces (the authors and the knowledge consumers). All that is required is the will to embrace a new way of thinking and the courage to let go of the old.</p>
<p>Now, just in case you think I&#8217;ve gone off my nut: I have no illusions that this is going to happen (or at least not anytime soon). But it is what I would like to have happen and what I think should happen.</p>
<h3>Modern reading equipment</h3>
<p>All of that aside, there&#8217;s another thing I would like to have happen to go with that European library: a big push in the <a href="http://en.wikipedia.org/wiki/Electronic_paper">electronic paper</a> area. Or at least a vast improvement in Internet connectivity and devices, because I really dislike everything we use to gather information online nowadays. Both desktops and laptops are incredibly cumbersome to handle and force you to sit (or lie) in uncomfortable positions for far too long simply because you can&#8217;t make them move with your body and so must make your body accommodate these devices instead. As I already said, I don&#8217;t imagine we&#8217;ll have a European library anytime soon &#8212; so can&#8217;t we at least have devices that aren&#8217;t trying to cripple us instead?</p>
<p>&nbsp;</p>
<hr />
<ul>
<li><a id="note0" name="note0">[0]</a> &#8211; <a href="http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:C:2008:115:0001:01:EN:HTML">Treaty on the European Union</a>, Title 1, Article 1, paragraph 2</li>
</ul>
<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.gridshore.nl%2F2008%2F10%2F15%2Fredesigning-libraries-completely%2F&amp;title=Redesigning%20libraries%20completely&amp;t=2' height='25' width='155' frameborder='0' scrolling='no'></iframe></div></div><div style='clear:both'></div></div><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.gridshore.nl/2008/10/15/redesigning-libraries-completely/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

