<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>New RIFERS blogs entries from Geert Bevin</title>
		<link>http://rifers.org/blogs</link>
		<description>The feeds of the Rifers community blogs</description>
		<language>en</language>
		<copyright>Copyright of the content contained is attributed to the original authors</copyright>
		<pubDate>Tue, 06 Jan 2009 22:51:08 +0100</pubDate>
		<managingEditor>Rifers Blogs: https://rifers.org/blogs</managingEditor>
		
			<item>
				<title>JavaZone 2008 : Bytecode Manipulation in the Real World</title>
				<link>http://rifers.org/blogs/gbevin/2008/9/17/javazone_2008_bytecode</link>
				<description>&lt;p&gt;I just finished my talk at JavaZone 2008 about bytecode manipulation.&lt;/p&gt;

&lt;p&gt;You can download the presentation&apos;s PDF file from:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://uwyn.com/download/bytecode_real_world.pdf&quot;&gt;http://uwyn.com/download/bytecode_real_world.pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the abstract:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Bytecode Manipulation in the Real World&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Bytecode manipulation has become increasingly popular over the last years. It is used by JPA implementations, application servers, AOP libraries, web frameworks, monitoring systems, profilers, clustering solutions, scripting languages, workflow engines, and much more. In fact, most of today&apos;s applications will most probably rely on byte code manipulation, often even without realizing.&lt;/p&gt;

&lt;p&gt;Application developers however seem to be overly careful and often frown upon bytecode manipulation as an arcane art that is risky and difficult to understand. This presentation will show you that it&apos;s easier than you think. We&apos;ll go over concise examples that illustrate the concepts. Distinct patterns, coming from different domains, will give you ideas about adopting byte code manipulation for your own products. You&apos;ll learn arguments to reassure skeptics and see how the manipulation can plugged into your tool chain. We&apos;ll finish off with tips and tricks to write maintainable code with the ASM library.&lt;/p&gt;

&lt;p&gt;After this session you&apos;ll see byte code manipulation as another tool in your arsenal and you&apos;ll have a good picture of how to start using it yourself.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Outline:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What is bytecode manipulation?&lt;/li&gt;
&lt;li&gt;Some popular projects that use it&lt;/li&gt;
&lt;li&gt;Don&apos;t be afraid&lt;/li&gt;
&lt;li&gt;Plug in the manipulation&lt;/li&gt;
&lt;li&gt;Best practices&lt;/li&gt;
&lt;/ul&gt;</description>
				<pubDate>Wed, 17 Sep 2008 13:29:38 +0200</pubDate>
				<author>Geert Bevin</author>
				<guid>http://rifers.org/blogs/gbevin/2008/9/17/javazone_2008_bytecode</guid>
			</item>
		
			<item>
				<title>Game Review : Alone in the Dark for XBox 360</title>
				<link>http://rifers.org/blogs/gbevin/2008/8/10/game_review_alone_in_the_dark</link>
				<description>&lt;p&gt;&lt;img src=&quot;http://media.ign.com/games/image/object/774/774387/aloneinthedarkxbox360boxart_160w.jpg&quot; alt=&quot;box art&quot; align=&quot;left&quot; style=&quot;margin: 0 1em 1em 0&quot; /&gt;This is a first for me, I don&apos;t usually review games. I like Alone in the Dark so much thought, that I felt like talking about it.&lt;/p&gt;

&lt;p&gt;I bought this game after having read all the bad reviews out there. However, it seemed to me that most criticisms boiled down to the reviewers being unable to handle the controls or being unwilling to take a little bit of time to get used to them. The graphics that I saw, the description of the features, the game play, and the storyline all attracted me, so I got the game a week ago.&lt;/p&gt;

&lt;p&gt;I just finished it and I have to say that I rarely have had so much fun with a game. It&apos;s entirely different from any other next gen title out there in that it generally allows you to take your time and think things through. You can combine many real world objects to create bombs, set cars on fire, create gasoline trails, glue molotov cocktails to enemies, etc. The right approach often gets you through a tough spot without have to resort close combat. I&apos;ve seen videos of players just storming into scenes and having an impossible time getting through them because they didn&apos;t properly look at the possibilities beforehand.&lt;/p&gt;

&lt;p&gt;This game stems from the great line of adventure games of old, yet it take everything into this new generation by give you a great free-roaming world with kick ass physics. Sure, there are frustrating sections that take a lot of practice and skill to succeed (like the car chases), but if you don&apos;t like this kind of game play ... just skip it. With its DVD menu system, Alone In The Dark let&apos;s you play what you want and doesn&apos;t force you, what a novel idea! Personally, I found these sections thrilling since after some practice you get through them and really feel a sense of accomplishment.&lt;/p&gt;

&lt;p&gt;What more to say. The inventory system is awesome and not frustrating thanks to the shortcuts that you can setup. The switch between first person and third person isn&apos;t gratuitous and instead serve very different purposes and allow you to fully appreciate the game. The fighting system where you control the weapon with the right analog stick is just awesome. It&apos;s like having a mini Wii controller on the 360&apos;s game pad. Additionally, it allows you grab objects and move them around you in three-dimensional space to solve puzzles. This is once more very innovative and refreshing.&lt;/p&gt;

&lt;p&gt;Finally, it seems to me that Alone in the Dark is a work of art and that it&apos;s simple not appreciated by the mainstream press. This is nothing new and often happens to visionaries. I for one hope that Eden Studios will continue along this path and surprise me with other games in the future. We need studios that dare to step outside the beaten path and execute this in such a masterful way as Alone in the Dark.&lt;/p&gt;

&lt;p&gt;Thanks a lot for this game! &lt;/p&gt;

&lt;h3&gt;Scores&lt;/h3&gt;

&lt;table style=&quot;width: 40em&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;10.0&lt;/b&gt;&lt;/td&gt;&lt;td width=&quot;100%&quot;&gt;&lt;b&gt;Presentation&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;Everything oozes quality. The menu system, the inventory, the atmosphere, the in-game hints. Perfect score!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;9.0&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Graphics&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;The graphics are in general top-notch though there&apos;s some clipping or frame rate dips. The whole cinematic feel is dead on though and regularly shows breathtaking scenes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;10.0&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Sound&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;Perfect and thrilling! This music score could have been done for a Hollywood block buster!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;9.0&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Gameplay&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;It takes a little while to get used to the large set of controls. They quickly feel natural though and allow you to interact with the world in a totally novel fashion.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;7.0&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Lasting Appeal&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;The game is short and I will probably not replay it. However, the story line and atmosphere is so good that it will probably become one of those reference games that I think of for many years to come.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;9.0&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;OVERALL&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;(out of 10 / not an average)&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</description>
				<pubDate>Sun, 10 Aug 2008 22:55:07 +0200</pubDate>
				<author>Geert Bevin</author>
				<guid>http://rifers.org/blogs/gbevin/2008/8/10/game_review_alone_in_the_dark</guid>
			</item>
		
			<item>
				<title>Channel Intelligence&apos;s European patent application is in bad shape</title>
				<link>http://rifers.org/blogs/gbevin/2008/7/24/channel_intelligence_european</link>
				<description>&lt;p&gt;Today one of the Belgian patent information centers got back to me to discuss the state of &lt;a href=&quot;http://register1.epoline.org/espacenet/regviewer?AP=02806291&amp;amp;CY=EP&amp;amp;LG=en&amp;amp;DB=REG&quot;&gt;Channel Intelligence&apos;s European patent application&lt;/a&gt;. They confirm that the patent is indeed still under examination and that means that it has not even been sent to the local patent offices of each individual country where this patent would apply.&lt;/p&gt;
&lt;p&gt;The patent has been under examination for over 7 years and Channel Intelligence has been gradually trying to adapt some of the claims to get it past the examinator. The fact that it is taking this long is a good sign since it means that the patent office never consider it to be into an acceptable state and it already went through several iterations. Also, since this is clearly a software patent, the representative of this Belgian information center confirmed that it will be almost impossible for this patent application to be approved in Europe.&lt;/p&gt;
&lt;p&gt;He suggested that I put a comprehensive dossier together with all prior art and detailed explanations about how they invalidate the novelty and inventiveness of the patent. This seems to correspond with what&apos;s written in &lt;a href=&quot;http://www.epo.org/patents/law/legal-texts/html/epc/2000/e/ar115.html&quot;&gt;article 115 of the European Patent Convention&lt;/a&gt;. The examinator however has no obligation to take this into consideration. At his sole discretion he can decide to use or ignore the information that is sent to him.&lt;/p&gt;
&lt;p&gt;However, that&apos;s not all. In the very unlikely event that this patent might be accepted in Europe, there&apos;s still a 9 month period after the acceptance date where an official protest can be filed. This doesn&apos;t have to be done through a lawyer and can simply be coordinated with a local patent office. Such actions however can&apos;t be ignored and will have to be examined in detail by the global European Patent Office.&lt;/p&gt;
&lt;p&gt;I thus plan on creating this dossier and also publish it on my blog. Anybody that feels strongly against this patent will then be able to use this information to send his or her own letter to the patent office. If we coordinate this correctly, they might not be able to ignore the pressure.&lt;/p&gt;
&lt;p&gt;Thanks a lot everyone for all your support. I&apos;m amazed at how friendly and helpful everyone has been so far.&lt;/p&gt;</description>
				<pubDate>Thu, 24 Jul 2008 20:47:57 +0200</pubDate>
				<author>Geert Bevin</author>
				<guid>http://rifers.org/blogs/gbevin/2008/7/24/channel_intelligence_european</guid>
			</item>
		
			<item>
				<title>Channel Intelligence patent : abundance of prior art</title>
				<link>http://rifers.org/blogs/gbevin/2008/7/23/channel_intelligence_prior_art</link>
				<description>&lt;p&gt;Since the European patent that Channel Intelligence tries to sue us with &lt;a href=&quot;http://rifers.org/blogs/gbevin/2008/7/23/did_channel_intelligence_jump_t&quot;&gt;doesn&apos;t seem to be granted yet&lt;/a&gt;. I&apos;m now looking for prior art to stop the patent from being awarded. This could make this lawsuit go simply go away for everyone they targeted in Europe.&lt;/p&gt;
&lt;p&gt;Below is a list of what I already found with the help of friends. If you have other suggestions, please add them as comments.&lt;/p&gt;
&lt;p&gt;Also, I&apos;d appreciate it if people could help me &lt;a href=&quot;http://www.docstoc.com/docs/953027/Channel-Intelligence-vs-Uwyn&quot;&gt;to read over the patent&lt;/a&gt; and validate the applicability of this prior art. I might have missed something.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;2001 : The Things I Want&lt;/b&gt; (&lt;a href=&quot;http://thethingsiwant.com/&quot;&gt;http://thethingsiwant.com&lt;/a&gt;) - create universal online wishlists and gift registries&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;2000 : ShopSmart&lt;/b&gt; (&lt;a href=&quot;http://web.archive.org/web/20000510040121/http://www.shopsmart.com/&quot;&gt;web archive&lt;/a&gt;) - allowed you to create lists of items, to compare the prices and to prioritize them. A friend of mine worked on this application and there are even articles published about it in the Sunday Times and the Daily Post. Still looking for copies of those.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;1999 : Kelkoo&lt;/b&gt; (&lt;a href=&quot;http://kelkoo.com&quot;&gt;http://kelkoo.com&lt;/a&gt;) - seems to do exactly what is described in the patent, I contacted them to see if they can help to protest against the patent application.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;1997 : No Amiga To Waste&lt;/b&gt; (&lt;a href=&quot;http://thunderstorms.org/NATW&quot;&gt;http://thunderstorms.org/NATW&lt;/a&gt;) - this is an application that I created where lists of ideas can be created and commented on over the internet. While not 100% inside e-commerce realm (Bla-bla List isn&apos;t either btw), this can be seen as prior art imho.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;1996 : Peapod&lt;/b&gt; (&lt;a href=&quot;http://peapod.com&quot;&gt;http://peapod.com&lt;/a&gt;) - allows you to create online grocery lists.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
				<pubDate>Wed, 23 Jul 2008 11:28:14 +0200</pubDate>
				<author>Geert Bevin</author>
				<guid>http://rifers.org/blogs/gbevin/2008/7/23/channel_intelligence_prior_art</guid>
			</item>
		
			<item>
				<title>Did Channel Intelligence jump the gun with the European patent complaints?</title>
				<link>http://rifers.org/blogs/gbevin/2008/7/23/did_channel_intelligence_jump_t</link>
				<description>&lt;p&gt;The &lt;a href=&quot;http://rifers.org/blogs/gbevin/2008/7/18/request_for_help_first_time_i_h&quot;&gt;official complaint from Channel Intelligence&lt;/a&gt; states the &lt;a href=&quot;http://www.google.com/patents?vid=USPAT6917941&quot;&gt;US patent number&lt;/a&gt; but it only vaguely mentions that they &apos;own the foreign equivalents&apos;. I thus decided to search for them, and I found this: &lt;a href=&quot;http://register1.epoline.org/espacenet/regviewer?AP=02806291&amp;amp;CY=EP&amp;amp;LG=en&amp;amp;DB=REG&quot;&gt;http://register1.epoline.org/espacenet/regviewer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It turns out that the equivalent European patent is still under examination. I&apos;ve contacted the Belgian patent office to see what the local status is and they&apos;re getting back to me shortly. With the abundance of prior art, it might actually be easy to stop the patent from being granted in Europe now. Apparently it&apos;s much more effective to intervene during the examination process than it is to contest the patent once it&apos;s granted.&lt;/p&gt;</description>
				<pubDate>Wed, 23 Jul 2008 09:50:02 +0200</pubDate>
				<author>Geert Bevin</author>
				<guid>http://rifers.org/blogs/gbevin/2008/7/23/did_channel_intelligence_jump_t</guid>
			</item>
		
			<item>
				<title>Channel Intelligence vs. Uwyn : thoughts after the first day</title>
				<link>http://rifers.org/blogs/gbevin/2008/7/19/thoughts_after_first_day</link>
				<description>&lt;p&gt;Thanks a lot everyone for all your helpful comments. It&apos;s heartwarming to see how many people care and manifest their support.&lt;/p&gt;

&lt;p&gt;I already had some informal legal assistance and it seems that causing a patent to be revoked is a very expensive process. That is the only thing that prior art can be used for. Since the patent is there and has been granted by the US patent office, its validity cannot be challenged unless it&apos;s entirely revoked. What I can do is challenge the relevance of the patent in regards to Bla-bla List. I&apos;m now waiting for replies from several open-source foundations that are supposed to provide free legal assistance is cases like this. If they don&apos;t come through, I&apos;ll have to hire a patent lawyer in Belgium.&lt;/p&gt;

&lt;p&gt;I&apos;ve also contacted the lawyers that sent me this letter directly to ask them for concrete suggestions about the amicable resolve that they propose. At least this will give me a picture about what they&apos;re after. This what I sent them:&lt;/p&gt;

&lt;div class=&quot;quotebody&quot;&gt;&lt;p&gt;Dear sir,&lt;/p&gt;

&lt;p&gt;I just received a fedex about your claim that http://blablalist.com would infringe intellectual property rights that are allegedly held by Channel Intelligence, Inc. in US patent No. 6,917,941.&lt;/p&gt;

&lt;p&gt;The service provided at http://blablalist.com has been free of charge and the technology is actually made available for free under an open-source license that has been approved by the Free Software Foundation. Uwyn has never received any payments from the users of the service nor made any profits from it.&lt;/p&gt;

&lt;p&gt;As you suggest in the last paragraph of your letter, I&apos;m ready to discuss ways to resolve this amicably. What are your suggestions?&lt;/p&gt;

&lt;p&gt;Best regards,&lt;/p&gt;

&lt;p&gt;Geert&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;There seem to be a collection of possible reasons that I can use to dismiss myself as a defendant. I didn&apos;t know that the legal system worked this way, but apparently it&apos;s common for patent infringement cases to target a whole laundry list of defendants. They all typically try to be dismissed and only one valid reason is needed for this to happen. If the suggestions for an amicable resolve don&apos;t satisfy me, aiming for a dismissal will probably be my next course of action.&lt;/p&gt;

&lt;p&gt;I&apos;ll keep you all posted!&lt;/p&gt;</description>
				<pubDate>Sat, 19 Jul 2008 10:34:53 +0200</pubDate>
				<author>Geert Bevin</author>
				<guid>http://rifers.org/blogs/gbevin/2008/7/19/thoughts_after_first_day</guid>
			</item>
		
			<item>
				<title>Request for help : first time I have to deal with a patent infringement complaint</title>
				<link>http://rifers.org/blogs/gbevin/2008/7/18/request_for_help_first_time_i_h</link>
				<description>&lt;p&gt;I&apos;m reaching out to the collective experience of my readers. Today I received a letter from a US attorney that claims that &lt;a href=&quot;http://blablalist.com&quot;&gt;Bla-bla List&lt;/a&gt; infringes on &lt;a href=&quot;http://www.google.com/patents?vid=USPAT6917941&quot;&gt;US Patent No. 6,917,941&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Bla-bla List has just been an experiment for me with Rich Internet Applications. It has always been an open-source effort and I made it available as a free service to see how well it would fare out in the wild. Since this service never generated any revenue for me, paying for a lawyer to dig into this is something that I&apos;d like the avoid (though maybe I can&apos;t).&lt;/p&gt;
&lt;p&gt;Has anyone here ever had to defend himself again such a claim? Does the software being open-source or the service being free make any difference?&lt;/p&gt;
&lt;p&gt;Thanks for any help or recommendations that you can give me.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;update:&lt;/b&gt; people have asked me for the lawyer&apos;s letter and the claim, I scanned it and you can download it as a 1MB PDF from &lt;a href=&quot;http://blablalist.com/ca-08-437.pdf&quot;&gt;http://blablalist.com/ca-08-437.pdf&lt;/a&gt; or browse through it online at &lt;a href=&quot;http://www.docstoc.com/docs/document-preview.aspx?doc_id=953027&quot;&gt;http://www.docstoc.com/docs/document-preview.aspx?doc_id=953027&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;update 2:&lt;/b&gt; seems I&apos;m not alone in this, they have sued about any list application out there : &lt;a href=&quot;http://www.techcrunch.com/2008/07/17/channel-intelligence-sues-just-about-everyone-who-offers-wishlists/&quot;&gt;http://www.techcrunch.com/2008/07/17/channel-intelligence-sues-just-about-everyone-who-offers-wishlists/&lt;/a&gt;&lt;/p&gt;</description>
				<pubDate>Fri, 18 Jul 2008 11:15:19 +0200</pubDate>
				<author>Geert Bevin</author>
				<guid>http://rifers.org/blogs/gbevin/2008/7/18/request_for_help_first_time_i_h</guid>
			</item>
		
			<item>
				<title>Beware, Apple TV warranty isn&apos;t worldwide</title>
				<link>http://rifers.org/blogs/gbevin/2008/7/16/apple_tv_warranty_isnt_worldwide</link>
				<description>&lt;p&gt;When I was in the USA I bought an Apple TV and brought it back home to Belgium.&lt;/p&gt;
&lt;p&gt;Last night, it broke down entirely after just a couple of months of operation. When I hook it up to the power socket, nothing happens. The front light doesn&apos;t light up, and I can hear no noises of the hard drive spinning up either. Seems to me that either a fuse broke, or something else just fried.&lt;/p&gt;
&lt;p&gt;I spent some time with the Apple support line, both in the USA and in Belgium and they both say that I can only have it services in USA. I&apos;ll thus have to wait &apos;till my next trip to San Francisco in October to have the Apple TV repaired.&lt;/p&gt;
&lt;p&gt;This sucks, I thought that all Apple products had worldwide warranties, apparently some of them don&apos;t.&lt;/p&gt;</description>
				<pubDate>Wed, 16 Jul 2008 10:00:26 +0200</pubDate>
				<author>Geert Bevin</author>
				<guid>http://rifers.org/blogs/gbevin/2008/7/16/apple_tv_warranty_isnt_worldwide</guid>
			</item>
		
			<item>
				<title>Gotcha: using RIFE&apos;s bean-centric validation with Terracotta (or any entity container/cache)</title>
				<link>http://rifers.org/blogs/gbevin/2008/7/16/gotcha_rife_terracotta_validatio</link>
				<description>&lt;p&gt;RIFE has a unique approach towards validation which is centralized around bean instances and not bean classes.&lt;/p&gt;
&lt;p&gt;Instead of having an external validation service, each bean instance publishes meta data about its constraints. Every part of the system (validation, form generation, database structure creation, ...) will inspect the meta data and peruse it. Validation is an exception in that after inspecting the meta data, the results of the validation are contributed back for each specific bean instance as &lt;code&gt;ValidationError&lt;/code&gt;s. This again allows every part of the system to easily access the validation results and act accordingly.&lt;/p&gt;
&lt;p&gt;Instead of implementing a container that keeps track of all the mappings between bean instances, their meta data and the validation errors, I decided that each bean instance will actually hold this data into fields. However, since people generally dont want to pollute their bean classes with framework-specific constructs, I created the &lt;a href=&quot;http://rifers.org/wiki/display/RIFE/Meta+data+merging&quot;&gt;meta-data merging facility&lt;/a&gt;. This automatically looks for a class with the &lt;code&gt;MetaData&lt;/code&gt; suffix when a bean class is loaded. Through byte code instrumentation, the capabilities of the &lt;code&gt;MetaData&lt;/code&gt; class are merged into the original class and you can safely cast each instance of the original class to any of the interfaces that the &lt;code&gt;MetaData&lt;/code&gt; class implements. (you can find more details about this feature in the &lt;a href=&quot;http://rifers.org/wiki/display/RIFE/Meta+data+merging&quot;&gt;RIFE wiki&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;All this is very intuitive when you use it in practice and develop a database-backed website. RIFE&apos;s database layer doesn&apos;t use an entity container either but rather creates and populates new bean instances each time an entity is fetched from the database. This has the benefit of each thread having a dedicated version of the entity which can be manipulated without risking data races. Only when all the operations are finished, the entity is stored back into the database through an explicit save call.&lt;/p&gt;
&lt;p&gt;The code could be like this when editing an existing &lt;code&gt;User&lt;/code&gt; entity:&lt;/p&gt;
&lt;div class=&quot;paste&quot;&gt;
&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_type&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;user&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;database&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;restore&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;userId&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;fillSubmissionBean&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(((&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;Validated&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;database&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;setBlock&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;&quot;success&quot;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;generateForm&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;However, when using Terracotta (or something else, like a cache), you typically don&apos;t want every entity to go back to the database. Instead, you want to keep them in memory and only store certain parts into the database. So instead of having a database manager, you have some kind of in-memory service that is able to find and store entities.&lt;/p&gt;
&lt;p&gt;Intuitively and naively you would replace the code above with the following &lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;broken code&lt;/span&gt;:&lt;/p&gt;

&lt;div class=&quot;paste&quot; style=&quot;border: 1px solid red&quot;&gt;
&lt;div&gt;&lt;code&gt;&lt;span style=&quot;background-color: rgb(255,200,200); color: red; font-weight: bold;&quot;&gt;// this code is broken, read below to know why&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgb(255,200,200);&quot;&gt;&lt;code&gt;
&lt;span class=&quot;java_type&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;user&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;service&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;findById&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;userId&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div style=&quot;background-color: rgb(255,200,200);&quot;&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;fillSubmissionBean&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(((&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;Validated&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div style=&quot;background-color: rgb(255,200,200);&quot;&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;service&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;setBlock&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;&quot;success&quot;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;generateForm&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

&lt;/div&gt;

&lt;p&gt;The problem relies in the fact that each and every thread will be working with the same instance of the &lt;code&gt;User&lt;/code&gt;. Your initial reaction might be to just synchronize the accesses to this instance, but hang on, think about what&apos;s happening. You actually &lt;b&gt;don&apos;t want&lt;/b&gt; every thread to have the same instance. You want the instances to be different and isolated, they all have to contain the data that was submitted through their respective web forms, and you all want them to have their own validation errors. This is &lt;b&gt;exactly the same&lt;/b&gt; as what happens when you get a new instance from the database.&lt;/p&gt;
&lt;p&gt;So, instead of retrieving the user from the service to modify it with possibly invalid data, you want to create a new instance of the entity that will be in local scope until the validation has succeeded. Only then you want to store it back into the service. This guarantees that your data is always correct and also allows perfectly concurrent access on users with the same identifier.&lt;/p&gt;
&lt;p&gt;The correct code would thus be:&lt;/p&gt;
&lt;div class=&quot;paste&quot;&gt;
&lt;div&gt;&lt;code&gt;&lt;!--  : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class=&quot;java_type&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;user&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;getSubmissionBean&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;setId&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;userId&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(((&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;Validated&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;service&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;setBlock&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;&quot;success&quot;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;generateForm&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

&lt;/div&gt;

&lt;p&gt;This had me scratching my head when I was bitten by the broken code above. However, if you think about it, it&apos;s perfectly logical. Working with in-memory containers is fundamentally different from working with relational database, where your data is stored independently from the actual objects that you&apos;re using. You have to remember that an in-memory container is a store too, and you don&apos;t want invalid or intermediate results to end up in there. However, this is what you risk to happen when you directly manipulate the fields of the instances that are already in the in-memory container ... but it&apos;s oh so tempting to do!&lt;/p&gt;</description>
				<pubDate>Wed, 16 Jul 2008 09:37:30 +0200</pubDate>
				<author>Geert Bevin</author>
				<guid>http://rifers.org/blogs/gbevin/2008/7/16/gotcha_rife_terracotta_validatio</guid>
			</item>
		
			<item>
				<title>Videocast : Terracotta tuning and statistics recorder</title>
				<link>http://rifers.org/blogs/gbevin/2008/7/4/videocast_terracotta_tuning_stat</link>
				<description>&lt;p&gt;At this year&apos;s TSSJS Europe in Prague, we recorded a demo of how to tune an application for Terracotta. By changing the granularity of locks, I demonstrate how our statistics recorder allows you to visualize the application&apos;s behavior. This makes is easy to get a cluster-wide view of your application&apos;s characteristics and makes it a lot easy to identify areas that can be optimized.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://library.theserverside.com/detail/RES/1214576610_869.html?asrc=RSS_BP_KABPSOFTDEV&quot;&gt;You can watch the webcast here&lt;/a&gt;, after filling in a simple registration form.&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;</description>
				<pubDate>Fri, 04 Jul 2008 09:48:42 +0200</pubDate>
				<author>Geert Bevin</author>
				<guid>http://rifers.org/blogs/gbevin/2008/7/4/videocast_terracotta_tuning_stat</guid>
			</item>
		
			<item>
				<title>Speaking at TSSJS 2008 Europe in Prague</title>
				<link>http://rifers.org/blogs/gbevin/2008/5/21/speaking_at_tssjs_2008_europe</link>
				<description>&lt;p&gt;Next month I&apos;ll be speaking at &lt;a href=&quot;http://javasymposium.techtarget.com/europe/speakers.html#GBevin&quot;&gt;TheServerSide.com Java Symposium&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The topics I will cover are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://javasymposium.techtarget.com/europe/sessions.html#GBevinBold&quot;&gt;Boldly Go Where the Java Language Has Never Gone Before&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://javasymposium.techtarget.com/europe/sessions.html#GBevinJVM&quot;&gt;JVM Clustering in the Real World&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&apos;ve done both sessions before and they&apos;re pretty solid now.&lt;/p&gt;
&lt;p&gt;The &apos;Boldly go...&apos; one has been a huge success at JavaOne as it was booked completely full and I did a repeat session on Friday that still had quite good attendance.&lt;/p&gt;
&lt;p&gt;See you in Prague!&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://javasymposium.techtarget.com/europe/index.html&quot;&gt;&lt;img src=&quot;http://rifers.org/images/ImSpeakingatTSSJS.gif&quot; width=&quot;100&quot; height=&quot;100&quot; alt=&quot;speaking at TSSJS 2008&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
				<pubDate>Wed, 21 May 2008 12:41:09 +0200</pubDate>
				<author>Geert Bevin</author>
				<guid>http://rifers.org/blogs/gbevin/2008/5/21/speaking_at_tssjs_2008_europe</guid>
			</item>
		
			<item>
				<title>My first YouTube video : Robert Plant cover song</title>
				<link>http://rifers.org/blogs/gbevin/2008/5/20/first_youtube_video</link>
				<description>&lt;p&gt;I picked music back up after a loooong hiatus of 7 years. I decided to evolve together with the world and to broadcast myself &lt;img src=&quot;http://rifers.org/images/blog/emoticon-wink.gif&quot; width=&quot;16&quot; height=&quot;16&quot; alt=&quot;;)&quot; /&gt;.&lt;/p&gt;

&lt;p&gt;Did the first one last night. The song is &quot;All The Kings Horses&quot; from Robert Plant and the Strange Sensation. When I heard it playing last afternoon from my iTunes collection, I couldn&apos;t help picking up my guitar to figure out the chords and such. This recording is the result of a couple of hours searching and rehearsing. I&apos;m considering adding it to a concert repertoire I&apos;m preparing, as one of the few cover songs.&lt;/p&gt;

&lt;p&gt;Anyways, my YouTube channel is located at &lt;a href=&quot;http://www.youtube.com/gbevin&quot;&gt;http://www.youtube.com/gbevin&lt;/a&gt; and I&apos;ll be posting new entries as I learn and compose songs.&lt;/p&gt;

&lt;p&gt;Hope you enjoy it, and if you don&apos;t, still be nice &lt;img src=&quot;http://rifers.org/images/blog/emoticon-normal.gif&quot; width=&quot;16&quot; height=&quot;16&quot; alt=&quot;:)&quot; /&gt;&lt;/p&gt;

&lt;div align=&quot;center&quot;&gt;
&lt;a href=&quot;http://www.youtube.com/watch?v=Vwa0ZwxX_x8&quot;&gt;http://www.youtube.com/watch?v=Vwa0ZwxX_x8&lt;/a&gt;
&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
document.write(&quot;&lt;object width=\&quot;425\&quot; height=\&quot;373\&quot;&gt;&lt;param name=\&quot;movie\&quot; value=\&quot;http://www.youtube.com/v/Vwa0ZwxX_x8&amp;amp;hl=en&amp;amp;color1=0x2b405b&amp;amp;color2=0x6b8ab6&amp;amp;border=1\&quot;&gt;&lt;/param&gt;&lt;param name=\&quot;wmode\&quot; value=\&quot;transparent\&quot;&gt;&lt;/param&gt;&lt;embed src=\&quot;http://www.youtube.com/v/Vwa0ZwxX_x8&amp;amp;hl=en&amp;amp;color1=0x2b405b&amp;amp;color2=0x6b8ab6&amp;amp;border=1\&quot; type=\&quot;application/x-shockwave-flash\&quot; wmode=\&quot;transparent\&quot; width=\&quot;425\&quot; height=\&quot;373\&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&quot;);
//--&gt;
&lt;/script&gt;
&lt;noscript&gt;
&lt;object width=&quot;425&quot; height=&quot;373&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/Vwa0ZwxX_x8&amp;amp;hl=en&amp;amp;color1=0x2b405b&amp;amp;color2=0x6b8ab6&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;/object&gt;
&lt;/noscript&gt;
&lt;/div&gt;</description>
				<pubDate>Tue, 20 May 2008 10:10:47 +0200</pubDate>
				<author>Geert Bevin</author>
				<guid>http://rifers.org/blogs/gbevin/2008/5/20/first_youtube_video</guid>
			</item>
		
			<item>
				<title>ScreenFlow : Finally a Mac screen capturing app that kicks ass</title>
				<link>http://rifers.org/blogs/gbevin/2008/2/29/screenflow_finally_a_mac_screen</link>
				<description>&lt;p&gt;I&apos;ve been recording all my screen casts with SnapzPro and then re-recording them with Camtasia Studio on Windows to be able to edit them. This is to say the least, extremely tedious.&lt;/p&gt;
&lt;p&gt;Yesterday I stumbled into &lt;a href=&quot;http://www.varasoftware.com/products/screenflow/&quot;&gt;ScreenFlow&lt;/a&gt;, an all-in one screen recording and video editing application with very cool features like call outs, video actions, key press display, etc. You can even capture audio from multiple sources and record your iSight at the same time as doing your screen cast. Afterwards you can combine them by manipulating the individual tracks and for example get a cool narrator call out that sits in a corner of the screen cast.&lt;/p&gt;
&lt;p&gt;I also like their approach towards the recording operation itself. You don&apos;t have to constraint yourself by deciding which area of the screen has to be recorded beforehand. With ScreenFlow you just record everything and crop it in the editor afterwards. They are using a custom algorithm that only records changes that appeared on the screen, so even my 2560x1600 resolution was recorded together with audio and the iSight video, without any sign of a hick-up. I love it!&lt;/p&gt;
&lt;p&gt;It might be a tad on the expensive side ($99), but considering the functionality that you get, I don&apos;t think it&apos;s exaggerated.&lt;/p&gt;</description>
				<pubDate>Fri, 29 Feb 2008 08:24:39 +0100</pubDate>
				<author>Geert Bevin</author>
				<guid>http://rifers.org/blogs/gbevin/2008/2/29/screenflow_finally_a_mac_screen</guid>
			</item>
		
			<item>
				<title>Terracotta lightning talk at Fosdem 2008</title>
				<link>http://rifers.org/blogs/gbevin/2008/2/15/terracotta_lightning_talk</link>
				<description>The yearly open-source Fosdem conference takes place again in Brussels on February the 23rd and the 24th.&lt;br /&gt;
&lt;br /&gt;
I&apos;m giving a 15 minute lightning talk about Terracotta on Saturday the 23rd at 15h40. Given the available time, I will not be able to say much and will just try to wet everybody&apos;s appetite. I&apos;ll stick around for a while afterwards to answer question and give demos and such.&lt;br /&gt;
&lt;br /&gt;
You can find the details here:&lt;br /&gt;
&lt;a href=&quot;http://fosdem.org/2008/schedule/events/456&quot; target=&quot;_blank&quot;&gt;http://fosdem.org/2008/schedule/events/456&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Looking forward to the conference and catching up with everyone in real life &lt;img src=&quot;http://rifers.org/images/blog/emoticon-nose.gif&quot; width=&quot;16&quot; height=&quot;16&quot; alt=&quot;:-)&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
</description>
				<pubDate>Fri, 15 Feb 2008 11:09:33 +0100</pubDate>
				<author>Geert Bevin</author>
				<guid>http://rifers.org/blogs/gbevin/2008/2/15/terracotta_lightning_talk</guid>
			</item>
		
			<item>
				<title>Laszlo in Action hits the shelves</title>
				<link>http://rifers.org/blogs/gbevin/2008/2/5/laszlo_in_action</link>
				<description>&lt;p&gt;&lt;a href=&quot;http://www.manning.com/klein/&quot;&gt;&lt;img src=&quot;http://www.manning.com/klein/klein_cover150.jpg&quot; alt=&quot;cover&quot; align=&quot;left&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;After many months of editing and fine-tuning, Manning finally published &lt;a href=&quot;http://www.manning.com/klein/&quot;&gt;Laszlo in Action&lt;/a&gt;, the first comprehensive guide towards OpenLaszlo besides the reference documentation.&lt;/p&gt;
&lt;p&gt;I received a final copy through DHL yesterday. Norman Klein and Max Carlson really did a great job explaining the technology behind this vast RIA framework, and it has been a pleasure to review several chapters of the earlier drafts.&lt;/p&gt;
&lt;p&gt;I&apos;m sure this book will make it much easier for people to develop with OpenLaszlo as it clarifies some of the lesser known intricacies.&lt;/p&gt;</description>
				<pubDate>Tue, 05 Feb 2008 10:43:47 +0100</pubDate>
				<author>Geert Bevin</author>
				<guid>http://rifers.org/blogs/gbevin/2008/2/5/laszlo_in_action</guid>
			</item>
		
		
	</channel>
</rss>