<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>lroguet</title>
	
	<link>http://blog.scandinabox.com</link>
	<description>notes, memos, code snippets, examples, ...</description>
	<lastBuildDate>Thu, 16 Feb 2012 15:54:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/scandinabox-blog" /><feedburner:info uri="scandinabox-blog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item>
		<title>Jfokus 2012 | 13-15 February | Stockholm, Sweden</title>
		<link>http://blog.scandinabox.com/jfokus-2012-13-15-february-stockholm-sweden/</link>
		<comments>http://blog.scandinabox.com/jfokus-2012-13-15-february-stockholm-sweden/#comments</comments>
		<pubDate>Thu, 16 Feb 2012 15:29:23 +0000</pubDate>
		<dc:creator>Ludovic ROGUET</dc:creator>
				<category><![CDATA[Back to school]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jfokus 2012]]></category>

		<guid isPermaLink="false">http://blog.scandinabox.com/?p=378</guid>
		<description><![CDATA[Going to a good conference usually makes me want to write and keep this notepad alive. Going to a very good &#8211; and Jfokus 2012 was a very good conference in my opinion &#8211; makes me do it. In the &#8230; <a href="http://blog.scandinabox.com/jfokus-2012-13-15-february-stockholm-sweden/"><em>Continue&#160;reading&#160;<span class="meta-nav">&#8594;</span></em></a>]]></description>
			<content:encoded><![CDATA[<p>Going to a good conference usually makes me want to write and keep this notepad alive. Going to a very good &#8211; and <a title="Jfokus 2012" href="http://www.jfokus.se" target="_blank">Jfokus 2012</a> was a very good conference in my opinion &#8211; makes me do it.</p>
<p><img src="/images/logo-jfokus-2012.jpg" alt="Jfokus 2012" /></p>
<p>In the next couple of days (understand weeks) I will force myself to go through the notes I took during the last 3 days and come up with a couple of posts. I swear.</p>
<h2>My schedule</h2>
<h3>Day 1</h3>
<ul>
<li>Spring into the Cloud by Josh Long &#038; Chris Richardson</li>
<li>A Practical Introduction To Kanban by Marcus Hammarberg &#038; Joakim Sundén</li>
</ul>
<h3>Day 2</h3>
<ul>
<li>Enterprise Java in 2012 and Beyond by Juergen Hoeller</li>
<li>Player Framework 2.0 by Peter Hilton</li>
<li>Maven vs Gradle, On your marks, get set, go! by Hardy Ferentschik</li>
<li>Unleash Your Domain by Greg Young</li>
<li>An Intro to Hadoop by Eva Andreasson</li>
<li>Application Security for Rich Internet Applications by John Wilander</li>
<li>The road to REST by Rickard Öberg</li>
</ul>
<h3>Day 3</h3>
<ul>
<li>7 Things: How to make good teams great by Sven Peters</li>
<li>HTML5 with Play Scala, CoffeeScript and Jade by Matt Raible</li>
<li>Zero Downtime Continuous Deployment of Java Web Applications by Fabiane Bizinella Nardon</li>
<li>It Is Possible to Do Object-Oriented Programming in Java by Kevlin Henney</li>
<li>Scala in Action by Heiko Seeberger</li>
<li>We visualized, we saw, we changed by Leonard Axelsson</li>
<li>Cool Code by Kevlin Henney</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.scandinabox.com/jfokus-2012-13-15-february-stockholm-sweden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>getting started with CodeIgniter on Ubuntu Lucid Lynx (10.04)</title>
		<link>http://blog.scandinabox.com/getting-started-with-codeigniter-on-ubuntu-lucid-lynx-10-04/</link>
		<comments>http://blog.scandinabox.com/getting-started-with-codeigniter-on-ubuntu-lucid-lynx-10-04/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 10:18:06 +0000</pubDate>
		<dc:creator>Ludovic ROGUET</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.scandinabox.com/?p=311</guid>
		<description><![CDATA[As I am currently playing around with CodeIgniter (an open source PHP web application framework), I thought I could write down the few software installation steps one needs to go through in order to get started on a fresh Ubuntu &#8230; <a href="http://blog.scandinabox.com/getting-started-with-codeigniter-on-ubuntu-lucid-lynx-10-04/"><em>Continue&#160;reading&#160;<span class="meta-nav">&#8594;</span></em></a>]]></description>
			<content:encoded><![CDATA[<p>As I am currently playing around with <strong>CodeIgniter</strong> (an open source PHP web application framework), I thought I could write down the few software installation steps one needs to go through in order to get started on a fresh Ubuntu box. And all you really need is a LAMP (<strong>L</strong>inux <strong>A</strong>pache <strong>M</strong>ySQL <strong>P</strong>HP) setup that can be up and running in less than 10 minutes (assuming the OS is already installed of course).</p>
<h3>Install Apache</h3>
<pre class="brush: bash; title: ; notranslate">
sudo apt-get install apache2
</pre>
<h3>Install MySQL</h3>
<pre class="brush: bash; title: ; notranslate">
sudo apt-get install mysql-server
</pre>
<h3>Install PHP (with MySQL support)</h3>
<pre class="brush: bash; title: ; notranslate">
sudo apt-get install php5 php5-mysql
</pre>
<h3>Enable the rewrite mod in Apache</h3>
<p>This is only needed if you plan to get rid off <em>&#8220;index.php&#8221;</em> in your CodeIgniter application&#8217;s URLs.</p>
<pre class="brush: bash; title: ; notranslate">
sudo a2enmod rewrite
sudo gedit /etc/apache2/sites-available/default
</pre>
<pre class="brush: xml; title: ; notranslate">
&lt;!-- Edit the configuration and change AllowOverride None to AllowOverride All --&gt;
&lt;Directory /var/www/&gt;
   Options Indexes FollowSymLinks MultiViews
   AllowOverride All
   Order allow,deny
   allow from all
&lt;/Directory&gt;
</pre>
<h3>Add your site to your local web server</h3>
<p>You could probably just extract the CodeIgniter archive into <strong>/var/www/</strong> but you also could have your application in your home folder (<strong>/home/scandinabox/www.mysite.com/</strong> for instance). In that case, all you need to do is create a symbolic link in the Apache web directory pointing to your application folder.</p>
<pre class="brush: bash; title: ; notranslate">
cd /var/www
sudo ln -s /home/scandinabox/www.mysite.com/ www.mysite.com
</pre>
<h3>Restart Apache</h3>
<pre class="brush: bash; title: ; notranslate">
sudo /etc/init.d/apache2 restart
</pre>
<p>Here you go, just point your web browser to <strong>http://localhost/www.mysite.com/</strong> and you should see the CodeIgniter example pages.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.scandinabox.com/getting-started-with-codeigniter-on-ubuntu-lucid-lynx-10-04/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>concept series – Mozilla Seabird</title>
		<link>http://blog.scandinabox.com/concept-series-mozilla-seabird/</link>
		<comments>http://blog.scandinabox.com/concept-series-mozilla-seabird/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 08:34:47 +0000</pubDate>
		<dc:creator>Ludovic ROGUET</dc:creator>
				<category><![CDATA[The Lab]]></category>
		<category><![CDATA[concept]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[seabird]]></category>

		<guid isPermaLink="false">http://blog.scandinabox.com/?p=303</guid>
		<description><![CDATA[http://www.youtube.com/watch?v=oG3tLxEQEdg]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.youtube.com/watch?v=oG3tLxEQEdg&#038;fmt=18">http://www.youtube.com/watch?v=oG3tLxEQEdg</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.scandinabox.com/concept-series-mozilla-seabird/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>behaviour driven unit test design in Java</title>
		<link>http://blog.scandinabox.com/behaviour-driven-unit-test-design-in-java/</link>
		<comments>http://blog.scandinabox.com/behaviour-driven-unit-test-design-in-java/#comments</comments>
		<pubDate>Sat, 25 Sep 2010 15:18:38 +0000</pubDate>
		<dc:creator>Ludovic ROGUET</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[readability]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://blog.scandinabox.com/?p=269</guid>
		<description><![CDATA[Writing unit tests is not that hard but writing good unit tests which, when they fail, tell you exactly and verbosely why and where it did not go right is not as trivial as it seems. Let&#8217;s say we have &#8230; <a href="http://blog.scandinabox.com/behaviour-driven-unit-test-design-in-java/"><em>Continue&#160;reading&#160;<span class="meta-nav">&#8594;</span></em></a>]]></description>
			<content:encoded><![CDATA[<p>Writing unit tests is not that hard but writing good unit tests which, when they fail, tell you exactly and verbosely why and where it did not go right is not as trivial as it seems.</p>
<p>Let&#8217;s say we have a class that represents a square. The only operations we can perform on a square are: getting its surface and doubling the side length.</p>
<pre class="brush: java; title: ; notranslate">
public class Square {

  private int sideLength;

  public Square(int sideLength) {
    this.sideLength = sideLength;
  }

  public int getSurface() {

    return this.sideLength * this.sideLength;

  }

  public void doubleSideLength() {

    this.sideLength = this.sideLength * 2;

  }

}
</pre>
<p>To test that piece of code, we could probably write a unit test that will look like:</p>
<pre class="brush: java; title: ; notranslate">
public class SquareTest {

  public void testSurfaceWhenSideLengthIsDoubled() {

    Square a = new Square(5);
    Square b = a; b.doubleSideLength();

    assertEquals(a.getSurface(), b.getSurface() / 4);

  }

}
</pre>
<p>From a programmer&#8217;s point of view the code above perfectly makes sense but &#8211; even if the example is rather simple &#8211; it does not really tells us what scenario we want to test here. If this piece code would be read by a product manager, she would probably not understand it (oh well, in that case she probably will but unit tests can be a lot more complex than that).</p>
<p>What about making the code a little bit clearer and telling us a story? There are frameworks for that you could argue (like <a href="http://jbehave.org/" title="JBehave" target="_blank">JBehave</a>) but do we need a framework &#8211; and all the configuration, XML files that come with &#8211; for everything really? What if we just rewrite the test class so it is more narrative?</p>
<pre class="brush: java; title: ; notranslate">
public class SquareTestEnhanced {

  private Square square;

  public void test_side_length_x_2_gives_surface_x_4() {

    when_doubling_is_done_on(new Square(5));
    then_surface_must_be_multiplied_by_4();

  }

  private void when_doubling_is_done_on(Square s) {

    this.square = s;

  }

  private void then_surface_must_be_multiplied_by_4() {

    Square s = this.square; s.doubleSideLength();
    assertEquals(this.square.getSurface() * 4, s.getSurface());

  }

}
</pre>
<p>Isn&#8217;t it enough? Can my product manager understand what we are testing between lines 5 and 10?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.scandinabox.com/behaviour-driven-unit-test-design-in-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>an overview of the NoSQL world</title>
		<link>http://blog.scandinabox.com/an-overview-of-the-nosql-world/</link>
		<comments>http://blog.scandinabox.com/an-overview-of-the-nosql-world/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 17:23:07 +0000</pubDate>
		<dc:creator>Ludovic ROGUET</dc:creator>
				<category><![CDATA[Back to school]]></category>
		<category><![CDATA[cassandra]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[disruptive code 2010]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[neo4j]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[voldemord]]></category>

		<guid isPermaLink="false">http://blog.scandinabox.com/?p=233</guid>
		<description><![CDATA[A few sessions at the Disruptive Code conference were dedicated to the &#8220;NoSQL solutions&#8221; trendy topic and I was really looking forward &#8211; I have to admit &#8211; to what Adam Skogman (from SpringSource) and Eric Evans (from Rackspace) had &#8230; <a href="http://blog.scandinabox.com/an-overview-of-the-nosql-world/"><em>Continue&#160;reading&#160;<span class="meta-nav">&#8594;</span></em></a>]]></description>
			<content:encoded><![CDATA[<p>A few sessions at the <a title="Disruptive Code 2010" href="/disruptive-code-september-2010-stockholm-sweden/">Disruptive Code conference</a> were dedicated to the <span style="text-decoration: underline;">&#8220;NoSQL solutions&#8221;</span> trendy topic and I was really looking forward &#8211; I have to admit &#8211; to what <strong>Adam Skogman</strong> (from <a title="SpringSource" href="http://www.springsource.com/" target="_blank">SpringSource</a>) and <strong>Eric Evans</strong> (from <a title="Rackspace" href="http://www.rackspace.com" target="_blank">Rackspace</a>) had to say on the subject.</p>
<p>In the last <strong>5 years</strong> the amount of data produced worldwide (texts, images, audio, &#8230;) has drastically increased <strong>from 161 exabytes to 988 exabytes</strong> (one EB being one million TB or one billion GB) and with that come some new challenges (storage capacity, availability, &#8230;) that cannot be entirely solved by SQL solutions and relational databases.</p>
<p>Not entirely because &#8220;NoSQL&#8221; does not mean no SQL at all but <strong>n</strong>ot <strong>o</strong>nly SQL really and a mixed architecture (depending on the needs) is probably what the final solution to a problem will look like.</p>
<h3>What are the problems?</h3>
<p>The amount of <strong>data is growing at an exponential rate</strong> and a relational database (like MySQL) is not really a distributed solution. Even though reads can be performed on slaves, writes most likely have to be done on the master (where would the consistency be otherwise?) which becomes a bottleneck in a transaction intensive system.</p>
<p>Relational models are rather statics and once the model has been defined you better not have to change it. From my personal experience I can say that adding a column to a table that gets 10 millions (roughly) extra rows a day without downtime is a rather complex and costly (just in the human resources involved) operation. And when you need to keep 5 years of data in that same table (which would be 18.3 billions rows) and still have a good performance on reads and writes, it gets even more complex.</p>
<p>When you need to store &#8211; as fast as possible &#8211; large quantities of data which structure has to be somehow flexible you&#8217;ll definitely have to have a look at the following solutions.</p>
<h3>What are the solutions?</h3>
<p>There are 4 kinds of NoSQL models at the moment:</p>
<ol>
<li>key/value</li>
<li>column</li>
<li>document</li>
<li>graph</li>
</ol>
<p>Key/value stores design is domain driven. Entities that are tightly coupled go to the same bucket (a customer and her shopping cart for instance) but different instances (customer A and customer B) don&#8217;t have to be in the same bucket.<br />
With a key/value store like <a title="Redis" href="http://code.google.com/p/redis/" target="_blank">Redis</a> a throughput of 110,000 database operations per second can be achieved when MySQL shows a good 15,000 (good because it&#8217;s still pretty good).</p>
<p>Most key-value stores provide an indexing mechanism and/or a search engine usually based on <em>Lucene</em>, <em>Solr</em>, <em>Elastic Search</em>.</p>
<p><em> </em></p>
<p>As for the other solutions we can mention <em><a title="Apache Cassandra" href="http://cassandra.apache.org/" target="_blank"><em>Cassandra</em></a> (from Facebook), </em><em>Google BigTable</em> and <em>Hadoop HBase</em> (column models), <em>CouchDB</em> and <em>MongoDB</em> (document model) and <em>Neo4J</em> (graph database).</p>
<p>Graph models seems like a pretty interesting topic (even though performance is not what you can expect from a key/value store for instance) and I will definitely have a closer look at <em>Neo4J</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.scandinabox.com/an-overview-of-the-nosql-world/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>high performance web sites, with ads [aftonbladet.se]</title>
		<link>http://blog.scandinabox.com/high-performance-web-sites-with-ads-aftonbladet-se/</link>
		<comments>http://blog.scandinabox.com/high-performance-web-sites-with-ads-aftonbladet-se/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 20:17:44 +0000</pubDate>
		<dc:creator>Ludovic ROGUET</dc:creator>
				<category><![CDATA[Back to school]]></category>
		<category><![CDATA[disruptive code 2010]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[iframes]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[optimization]]></category>

		<guid isPermaLink="false">http://blog.scandinabox.com/?p=206</guid>
		<description><![CDATA[Today was the first day of the disruptive code conference in Stockholm (#dcode on Twitter) and I&#8217;m taking notes, a lot of notes. I unfortunately don&#8217;t have time to blog live from the event &#8211; too busy listening to some &#8230; <a href="http://blog.scandinabox.com/high-performance-web-sites-with-ads-aftonbladet-se/"><em>Continue&#160;reading&#160;<span class="meta-nav">&#8594;</span></em></a>]]></description>
			<content:encoded><![CDATA[<p>Today was the first day of the disruptive code conference in Stockholm (<a href="http://twitter.com/#search?q=%23dcode" title="Disruptive Code on Twitter" target="_blank">#dcode</a> on Twitter) and I&#8217;m taking notes, a lot of notes. I unfortunately don&#8217;t have time to blog live from the event &#8211; too busy listening to some really good talks &#8211; so I am taking another approach: for the next couple of days, I&#8217;ll write about the sessions I have been attending.</p>
<p>Let&#8217;s get started then with notes I took during a session ran by <strong>Tobias Järlund</strong>, CTO at AftonBladet, the biggest Swedish newspaper (so he claims at least) : <strong>high performance web sites, with ads (don&#8217;t let third parties make you slow)</strong> which was based on AftonBladet&#8217;s experience and experiments on web site, embedding third party ads, optimization.</p>
<h3>Facts and figures</h3>
<p>www.aftonbladet.se lately (due to the elections in Sweden) had all time high traffic with 2.4 millions visitors a day on its front page which, as it has always been, is really, really, &#8230; really long and contains no less than 20 advertising spots.</p>
<h3>Web performance optimization, iframes vs. JavaScript</h3>
<p><strong>&#8220;The server side is not the bottleneck&#8221;</strong> and, according to Tobias, optimization should rather be performed on the client side.</p>
<p>There are plenty of solutions available (iframes and/or JavaScript based) and AftonBladet decided, after evaluating the pros and cons of some of them, to go for <strong>friendly iframes</strong> that have the following &#8220;properties&#8221; (but not only):</p>
<ul>
<li>may load in parallel</li>
<li>possible to late-load</li>
<li>full access to the DOM</li>
<li>support all types of ads</li>
</ul>
<h3>The setup</h3>
<ol>
<li>create an iframe to a small static cacheable HTML page from the same domain</li>
<li>inside the iframe, use the JavaScript variable <strong>inDapIF = true</strong> to tell the ad it is loaded inside a friendly iframe</li>
<li>inside the iframe, create a script element with the ad url as the source (load the ad just like a normal JavaScript ad)</li>
<li>when the ad has finished loading, resize the iframe to fit the dimensions of the ad</li>
</ol>
<p>Even if <em>&#8220;using iframes is the best option today&#8221;</em> to solve that kind of problems, be careful when implementing such solutions since rendering iframes is quite an expensive operation.</p>
<h3>Tweaks</h3>
<ul>
<li>don&#8217;t load all ads at once, use queues or delays</li>
<li>set default sizes (1 by 1 pixel for instance) and then resize</li>
<li>try not to block the &#8220;onload&#8221; event (the page loading speed is now taken into consideration by Google for ranking)</li>
</ul>
<h3>The future</h3>
<ul>
<li> <strong>&lt;frag&gt;</strong> tag (Google Chrome) to mark a piece of code that should be loaded in parallel, not blocking (not implemented)</li>
<li>postMessage(&#8230;) implemented in all modern browsers for messaging between iframes and the main page</li>
</ul>
<h3>Results</h3>
<p>It&#8217;s certainly pretty cool when you get the chance to try out solutions and experiment different techniques but it&#8217;s even better when you measure the impact of the changes you make on your users&#8217; experience!</p>
<p>By implementing friendly iframes Aftonbladet drastically improved the loading speed of the front page (editorial content loaded at the same time or even before the ads) and readers liked it&#8230;</p>
<ul>
<li>visits per week up 7%</li>
<li>page views per visit up 16%</li>
<li>&#8220;latest news&#8221; section (which used to show up really late in the rendering process) CTR (click through rate) up 35%</li>
<li>average page load time down 30%</li>
</ul>
<p>&#8230; and the most remarkable thing being that all <strong>those changes have not had any impact on the ads CTR</strong>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.scandinabox.com/high-performance-web-sites-with-ads-aftonbladet-se/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>a brief introduction to Terrastore</title>
		<link>http://blog.scandinabox.com/brief-introduction-to-terrastore/</link>
		<comments>http://blog.scandinabox.com/brief-introduction-to-terrastore/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 13:04:49 +0000</pubDate>
		<dc:creator>Ludovic ROGUET</dc:creator>
				<category><![CDATA[Back to school]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[terracotta]]></category>
		<category><![CDATA[terrastore]]></category>

		<guid isPermaLink="false">http://blog.scandinabox.com/?p=178</guid>
		<description><![CDATA[Every 3rd Friday is a lantern day at work meaning that developers are free to try out new technologies, play around with obscure programming languages and give presentations on their findings to whoever is interested in the selected topic. Today &#8230; <a href="http://blog.scandinabox.com/brief-introduction-to-terrastore/"><em>Continue&#160;reading&#160;<span class="meta-nav">&#8594;</span></em></a>]]></description>
			<content:encoded><![CDATA[<p>Every 3rd Friday is a <span style="text-decoration: underline;">lantern day</span> at work meaning that developers are free to try out new technologies, play around with obscure programming languages and give presentations on their findings to whoever is interested in the selected topic.</p>
<p>Today a consultant from Mejsla AB, new member in my team and committer to the Terrastore project, <a title="Sven Johansson on Twitter" href="http://twitter.com/svjson" target="_blank">Sven Johansson</a>, ran a session on Terrastore, a documents store (a documents oriented database in other words) based on the Terracotta clustering technology. As the team is currently investigating NoSQL storage solutions for one of the applications its responsible for, it&#8217;s always nice to get to know about existing (or at least under development) products out there.</p>
<blockquote><p>Terrastore is a modern document store which provides advanced scalability and elasticity features without sacrificing consistency.</p></blockquote>
<p>The open-source project started in September 2009 and is basically an advanced key/value store (like CouchDB, MongoDB, RavenDB, &#8230;) written in Java. Where a relational database deals with a bunch of tables containing rows, a store has buckets in which Java objects can be stored and retrieved from.</p>
<pre class="brush: java; title: ; notranslate">
/** A class representing a person */
public class Person {
  public String identifier;;
  public String lastname, firstname;
}

/** An instance of the class */
Person aPerson = new Person();
aPerson.identifier = &quot;1234567890&quot;;
a.lastName = &quot;Doe&quot;;
a.firstName = &quot;John&quot;;
</pre>
<p>Now we want to store aPerson and retrieve it.</p>
<pre class="brush: java; title: ; notranslate">
TerrastoreClient client = new TerrastoreClient(&quot;http://some_host:some_port&quot;, new HTTPConnectionFactory());

/** Store the document in the &quot;address_book&quot; bucket */
client.bucket(&quot;address_book&quot;).key(aPerson.identifier).put(aPerson);

/** Retrieve the document from the &quot;address_book&quot; bucket */
Person aPerson = client.bucket(&quot;address_book&quot;).key(&quot;1234567890&quot;).get(Person.class);
</pre>
<p>Sven also described the different deployment architectures currently available (cluster or multi-cluster) among other things&#8230; On September 12, 2010 version 0.7.0 of Terrastore was released (including changes like client instantiation giving a list of hosts instead of a single server address like in the above example) and more functionalities are already in the pipe: MapReduce operations, better integration with Elastic Search, &#8230;</p>
<p>If you want to read more on Terrastore, feel free to pay a visit to the project&#8217;s Google Code page (<a href="http://code.google.com/p/terrastore/" title="Terrastore" target="_target">http://code.google.com/p/terrastore/</a>).</p>
<p>Those couple of lines were my minutes of Sven&#8217;s presentation and, I have to admit, a rather brief introduction to the project. Good luck to the committers and looking forward to the baby&#8217;s next steps! </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.scandinabox.com/brief-introduction-to-terrastore/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Install libstdc++.so.5 on Ubuntu 10.04 64-bit</title>
		<link>http://blog.scandinabox.com/install-libstdc-so-5-on-ubuntu-10-04-64-bit/</link>
		<comments>http://blog.scandinabox.com/install-libstdc-so-5-on-ubuntu-10-04-64-bit/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 17:33:47 +0000</pubDate>
		<dc:creator>Ludovic ROGUET</dc:creator>
				<category><![CDATA[*nix]]></category>
		<category><![CDATA[ubuntu 10.04]]></category>

		<guid isPermaLink="false">http://blog.scandinabox.com/?p=149</guid>
		<description><![CDATA[I recently got a new laptop and, as often in that case, had to install a fresh Ubuntu 10.04 64-bit (to replace a Windows XP) and all the software and tools I need as a developer. One of the software &#8230; <a href="http://blog.scandinabox.com/install-libstdc-so-5-on-ubuntu-10-04-64-bit/"><em>Continue&#160;reading&#160;<span class="meta-nav">&#8594;</span></em></a>]]></description>
			<content:encoded><![CDATA[<p>I recently got a new laptop and, as often in that case, had to install a fresh Ubuntu 10.04 64-bit (to replace a Windows XP) and all the software and tools I need as a developer.</p>
<p>One of the software I had to install was the Tibco Enterprise Messaging Service (an implementation of the Java Message Service, JMS). The installation went fine (I had to <em><u>deactivate all the visual effects</u></em> in order to see the content of the dialog boxes though &#8211; under <em>System > Preferences > Appearance</em>) but I had some troubles starting EMS.</p>
<pre class="brush: bash; title: ; notranslate">/opt/tibco/ems/5.0/bin/tibemsd</pre>
<blockquote><p>/opt/tibco/ems/5.0/bin/tibemsd: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory</p></blockquote>
<p>EMS requires <strong>libstdc++.so.5</strong> but only <strong>libstdc++.so.6</strong> is nowadays bundled with Ubuntu. After some Googling I finally came across a solution that worked.</p>
<pre class="brush: bash; title: ; notranslate">
wget http://security.ubuntu.com/ubuntu/pool/universe/i/ia32-libs/ia32-libs_2.7ubuntu6.1_amd64.deb
dpkg-deb -x ia32-libs_2.7ubuntu6.1_amd64.deb ia32-libs
sudo cp ia32-libs/usr/lib32/libstdc++.so.5.0.7 /usr/lib32/
cd /usr/lib32
sudo ln -s libstdc++.so.5.0.7 libstdc++.so.5
</pre>
<p>If you have another solution that you&#8217;d like to share, please leave a comment!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.scandinabox.com/install-libstdc-so-5-on-ubuntu-10-04-64-bit/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Install Sun Java JDK 5 on Ubuntu 10.04 (Lucid Lynx)</title>
		<link>http://blog.scandinabox.com/install-sun-java-jdk-5-on-ubuntu-10-04-lucid-lynx/</link>
		<comments>http://blog.scandinabox.com/install-sun-java-jdk-5-on-ubuntu-10-04-lucid-lynx/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 14:09:08 +0000</pubDate>
		<dc:creator>Ludovic ROGUET</dc:creator>
				<category><![CDATA[*nix]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jdk 1.5]]></category>
		<category><![CDATA[ubuntu 10.04]]></category>

		<guid isPermaLink="false">http://blog.scandinabox.com/?p=156</guid>
		<description><![CDATA[Add the partner repository Resynchronize the package index files Install Sun JDK 5]]></description>
			<content:encoded><![CDATA[<h3>Add the partner repository</h3>
<pre class="brush: bash; title: ; notranslate">sudo add-apt-repository &quot;deb http://ir.archive.ubuntu.com/ubuntu jaunty-updates main multiverse&quot;</pre>
<h3>Resynchronize the package index files</h3>
<pre class="brush: bash; title: ; notranslate">sudo apt-get update</pre>
<h3>Install Sun JDK 5</h3>
<pre class="brush: bash; title: ; notranslate">sudo apt-get install sun-java5-jdk</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.scandinabox.com/install-sun-java-jdk-5-on-ubuntu-10-04-lucid-lynx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unix – how to search for a string in multiple gzip compressed files</title>
		<link>http://blog.scandinabox.com/unix-how-to-search-for-a-string-in-multiple-gzip-compressed-files/</link>
		<comments>http://blog.scandinabox.com/unix-how-to-search-for-a-string-in-multiple-gzip-compressed-files/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 13:39:45 +0000</pubDate>
		<dc:creator>Ludovic ROGUET</dc:creator>
				<category><![CDATA[*nix]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[gz]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu 10.04]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[zcat]]></category>

		<guid isPermaLink="false">http://blog.scandinabox.com/?p=140</guid>
		<description><![CDATA[Sometimes you need to look for specific errors in the log files of a couple of nodes. Luckily &#8211; for me &#8211; the system administrators have done a nice job gathering all the log files on one machine. Each node &#8230; <a href="http://blog.scandinabox.com/unix-how-to-search-for-a-string-in-multiple-gzip-compressed-files/"><em>Continue&#160;reading&#160;<span class="meta-nav">&#8594;</span></em></a>]]></description>
			<content:encoded><![CDATA[<p>Sometimes you need to look for specific errors in the log files of a couple of nodes. Luckily &#8211; for me &#8211; the system administrators have done a nice job gathering all the log files on one machine. Each node has its own folder (named after its IP address) and the logs are compressed (gunzip).</p>
<p>Now let&#8217;s look for a call to the <em>&#8220;getSomeInformation&#8221;</em> method made by the merchant <em>123</em> that should hopefully have reached one of the nodes. I will use <strong>zcat</strong> and cross my fingers&#8230;</p>
<pre class="brush: bash; title: ; notranslate">
zcat 10.1.*.*/application-a/http-requests-log.gz | grep 'getSomeInformation&amp;merchant=123'
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.scandinabox.com/unix-how-to-search-for-a-string-in-multiple-gzip-compressed-files/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

