<?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>Tales From The Cloud &#187; opinions</title>
	<atom:link href="http://blog.newsplore.com/category/opinions/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.newsplore.com</link>
	<description>Everything beta</description>
	<lastBuildDate>Tue, 07 Sep 2010 10:40:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>A project triumvirate</title>
		<link>http://blog.newsplore.com/2009/07/05/the-project-triumvirate</link>
		<comments>http://blog.newsplore.com/2009/07/05/the-project-triumvirate#comments</comments>
		<pubDate>Mon, 06 Jul 2009 00:11:11 +0000</pubDate>
		<dc:creator>Florin</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[opinions]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[Project management]]></category>

		<guid isPermaLink="false">http://blog.newsplore.com/?p=1302</guid>
		<description><![CDATA[There are three forces that shape a project: domain, process and technology. Add the &#8220;-driven&#8221; suffix to any of them and you&#8217;ll perhaps recognize some of the methods used in projects you&#8217;ve been involved in and yet, as soon as one takes too much of a lead against the other two, failure will follow almost [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="padding-right:0;margin-top:3px"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.newsplore.com%2F2009%2F07%2F05%2Fthe-project-triumvirate"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.newsplore.com%2F2009%2F07%2F05%2Fthe-project-triumvirate" height="61" width="51" /></a></div><p>There are three forces that shape a project: domain, process and technology. Add the &#8220;-driven&#8221; suffix to any of them and you&#8217;ll perhaps recognize some of the methods used in projects you&#8217;ve been involved in and yet, as soon as one takes too much of a lead against the other two, failure will follow almost inevitably. At the intersection of these three forces we find familiar terms and concepts but first a word or two about each of them:</p>
<p><b>Technology</b><br />
Back in the days of the tech bubble, tech was allmighty. Buzzwords like Java, EJBs, PHP defined entire projects. It was the time where software became accessible to a much larger audience. The new wave of enthusiastic geeks embraced everything from new languages to professional certifications to the then-nascent open source. I admit having my share of technology-driven projects back in the day&#8230;</p>
<p><b>Process</b><br />
Process brings structure and pace to a project. The two complementary components of a project process are methodology and integration. We are all too familiar with <em>methodology</em>: waterfall, RUP or agile methods of software development are vastly documented and practiced; <em>integration</em> largely is defect management, testing, build, deployment and documentation. Today they all come together in what is called <a href="http://www.martinfowler.com/articles/continuousIntegration.html">continuous integration</a> where all these concepts become interrelated in a repetitive process that produces accountability and visibility into the progress of a project. Process is also the one force that tends to disappear first after a project is finished.</p>
<p><b>Domain</b><br />
The domain captures entities and business logic, is driven by the business requirements and is in no way influenced by the two other forces. The most successful way to employ the domain is through <a href="http://en.wikipedia.org/wiki/Domain-driven_design">Domain Driven Design</a> where the main focus of software development is neither technology nor process but the business requirements.</p>
<p><span id="more-1302"></span><br />
There are times in the life cycle of a project where these forces have to be kept separate but most of the time they shape each other. At their confluence there are several artifacts that are paramount to a project&#8217;s success with <em>code</em> being at their core.</p>
<div><img class="alignnone size-full wp-image-1303" src="http://blog.newsplore.com/wp-content/uploads/2009/07/Project_Triumvirate.png" alt="Project_Triumvirate" width="500" height="500" /></div>
<p><i>Code</i><br />
Although each force is important during a project life-cycle, they all work towards producing code. No matter how many <a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language">UML diagrams</a>, <a href="http://www.codingthearchitecture.com/2008/03/18/software_architecture_document_guidelines.html">software architecture documents</a> or <a href="http://en.wikipedia.org/wiki/Burn_down_chart">burn down charts</a> are produced the most valuable and tangible value that a project creates is runnable code.</p>
<p><i>APIs</i><br />
Application Programming Interfaces represent the external view of runnable software products. APIs state the intent of the software. They should be cared-for and refined during a project lifecycle, until they become the best representation of the domain they are modeling. APIs also serve for integration purposes and so they should be extended to blend into the domain of the consumers as needed.</p>
<p><i>Features</i><br />
Features are defined within a project scope. They can be fully defined prior to coding in a waterfall process or, defined and/or shaped during the project development in an Agile setup. Features specify a system&#8217;s requirements (they are called <a href="http://en.wikipedia.org/wiki/User_story">user stories</a> in an agile project).</p>
<p><i>Test, Build, Deploy, Run</i><br />
Projects have to be monitored since inception to their natural end. Just like a child&#8217;s development stages, projects need to touch milestones, assess velocity and health. They do so by constant testing, building, deploying and running.</p>
<p><b>Roles</b><br />
Project roles that drive each of these forces can also be mapped in the above figure. Take the <a href="http://en.wikipedia.org/wiki/Scrum_(development)#Roles">Agile roles</a> for instance:</p>
<div><img class="alignnone size-full wp-image-1309" src="http://blog.newsplore.com/wp-content/uploads/2009/07/Roles_Forces.png" alt="Roles_Forces" width="600" height="500" /></div>
<p><b>A fine balance</b><br />
Imagine any of the forces represented by circles in the picture becoming disproportionally larger than the others. As a result, one or more of the artifacts at the intersection of the forces will become disproportionally smaller than the others upsetting the equilibrium. Whether is less features, less APIs or less testing, the end result is still unbalanced.</p>
<p>As always, people (roles) will drive the forces. Balancing them requires skill from all parts involved and the success or failure of a project depends on giving enough power to each not to overturn the balance. If <a href="http://en.wikipedia.org/wiki/First_Triumvirate">ancient romans</a> could do it two millennia ago, so can we.</p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://blog.newsplore.com/2009/07/05/the-project-triumvirate" /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.newsplore.com/2009/07/05/the-project-triumvirate/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Process Journalism really is Agile Journalism</title>
		<link>http://blog.newsplore.com/2009/06/13/process-journalism-really-is-agile-journalism</link>
		<comments>http://blog.newsplore.com/2009/06/13/process-journalism-really-is-agile-journalism#comments</comments>
		<pubDate>Sun, 14 Jun 2009 00:25:20 +0000</pubDate>
		<dc:creator>Florin</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[journalism]]></category>
		<category><![CDATA[opinions]]></category>
		<category><![CDATA[media]]></category>

		<guid isPermaLink="false">http://blog.newsplore.com/?p=1267</guid>
		<description><![CDATA[&#160;&#160;&#160; There&#8217;s an interesting story rippling the news stream these days: The New York Times is questioning the ways Techcrunch reports on news. The crux of the issue is product journalism v. process journalism, the act of producing news only after all facts have been verified versus just writing the story based on what the [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="padding-right:0;margin-top:3px"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.newsplore.com%2F2009%2F06%2F13%2Fprocess-journalism-really-is-agile-journalism"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.newsplore.com%2F2009%2F06%2F13%2Fprocess-journalism-really-is-agile-journalism" height="61" width="51" /></a></div><table>
<tr>
<td>
<img src="http://blog.newsplore.com/wp-content/uploads/2009/06/Media.jpg" alt="Media" width="260" height="200" class="alignnone size-full wp-image-1272" />
</td>
<td>&nbsp;&nbsp;&nbsp;</td>
<td align='justify'>There&#8217;s an interesting story rippling the news stream these days: The New York Times is <a href='http://www.techcrunch.com/2009/06/07/the-morality-and-effectiveness-of-process-journalism/'>questioning</a> the ways Techcrunch reports on news. The crux of the issue is <a href='http://www.techcrunch.com/2009/06/13/interview-with-npr-on-process-journalism/'>product journalism v. process journalism</a>, the act of producing news only after all facts have been verified versus just writing the story based on what the author best knows about an event at that moment then let the story evolve and provide rigorous updates and corrections once it does.</td>
</tr>
</table>
<p>As I was reading, I got an epiphany. The &#8220;old media&#8221; is following the old methods, much like the <a href='http://en.wikipedia.org/wiki/Waterfall_model'>waterfall process</a> where the story (the requirements) has to be fully known before proceeding with actually breaking the story (the implementation). The <a href='http://en.wikipedia.org/wiki/New_media'>new media</a> follows a radical approach: it starts with a lead (or rumor) that is initially published in a somewhat crude form, then the story evolves based on field feedback and facts drawn from the actual reality, until it becomes accurate. Even the language of the aforementioned references use words like &#8220;iterative process&#8221;, &#8220;transparent&#8221; and &#8220;standards&#8221; the same way I&#8217;d use them when talking about developing software.</p>
<p>This method of early release followed by incremental improvements resembles so much the agile methods of software development, I&#8217;m calling it <b>Agile Journalism</b>. </p>
<p>A revolution is happening in the media. Old methods are swiftly pushed aside; the emergence of the Internet as <i>the</i> news dissemination medium is fundamentally changing the ways the reality is reported upon. Who wants to read a story that is already obsolete or wrong altogether and impossible to be corrected/evolved until a new paper edition is off the press? The new media not only breaks news faster (release early) but gets the stories right eventually, simply because the new rules (standards) are clearly stating that until confirmed, the product -otherwise useful- is still a beta representation of the reality and the consumers already know how to consume such product.</p>
<p>From blogs to real time news streams, the new media&#8217;s aspiration is to bring the most accurate information yet to the consumers. It can and will do it by revolutionizing the way the stories are iteratively discovered based on constant feedback, the same way agile methods are revolutionizing the software industry.</p>
<p><span style="font-size: x-small;">Image courtesy <a href='http://www.flickr.com/photos/hirefrank/'>hirefrank</a></span></p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://blog.newsplore.com/2009/06/13/process-journalism-really-is-agile-journalism" /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.newsplore.com/2009/06/13/process-journalism-really-is-agile-journalism/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Proposal to standardize the Level 2 query cache configuration in JPA 2.0</title>
		<link>http://blog.newsplore.com/2009/05/28/a-call-to-standardize-level-2-cache-configuration-in-jpa-20</link>
		<comments>http://blog.newsplore.com/2009/05/28/a-call-to-standardize-level-2-cache-configuration-in-jpa-20#comments</comments>
		<pubDate>Thu, 28 May 2009 21:41:54 +0000</pubDate>
		<dc:creator>Florin</dc:creator>
				<category><![CDATA[opinions]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[JPA 2.0]]></category>

		<guid isPermaLink="false">http://blog.newsplore.com/?p=1174</guid>
		<description><![CDATA[Level 2 cache is one of the most powerful features of the JPA spec. It&#8217;s a transparent layer that manages out-of-session data access and cranks-up the performance of the data access tier. To my knowledge it has been first seen in Hibernate and was later adopted by the then-emerging JPA spec (driven mostly by the [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="padding-right:0;margin-top:3px"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.newsplore.com%2F2009%2F05%2F28%2Fa-call-to-standardize-level-2-cache-configuration-in-jpa-20"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.newsplore.com%2F2009%2F05%2F28%2Fa-call-to-standardize-level-2-cache-configuration-in-jpa-20" height="61" width="51" /></a></div><p>Level 2 cache is one of the most powerful features of the JPA spec. It&#8217;s a transparent layer that manages out-of-session data access and cranks-up the performance of the data access tier. To my knowledge it has been first seen in Hibernate and was later adopted by the then-emerging JPA spec (driven mostly by the Hibernate guys back in the day).<br />
As annotations gained strength and adoption, L2 caching that was initially configured through XML or properties files, was brought closer to the source code, alas in different forms and shapes. This becomes apparent if you ever have to deploy your webapp across a multitude of containers as you have to painfully recode the cache configuration (or worse, <a href="http://blog.newsplore.com/?p=981">hand-coded cache access</a>). Why not standardizing the cache control in JPA? This seems to be simple enough to achieve and yet it isn&#8217;t there. Now that JPA 2.0 is standardizing on Level 2 cache access (See JSR 317 section 6.10) it is the natural thing to do.<br />
Every JPA provider has its own way of specifying cache access (both Entity and query cache).<br />
To grasp the extent of the various ways cache is configured, here are some examples:</p>
<p><b>Hibernate:</b><br />
Cache control for entities</p>
<pre>@Entity
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Employee {...</pre>
<p>Cache control for named queries:</p>
<pre>@javax.persistence.NamedQuery(name="findEmployeesInDept",
query="select emp from Employee emp where emp.department = ?1",
hints={@QueryHint(name="org.hibernate.cacheable",value="true")})

or

@org.hibernate.annotations.NamedQuery(cacheable=true, cacheRegion="employeeRegion")</pre>
<p><b>OpenJPA</b><br />
Cache control for entities</p>
<pre>@Entity
@org.apache.openjpa.persistence.DataCache(timeout=10000)
public class Employee {...</pre>
<p><a href="http://openjpa.apache.org/builds/1.0.2/apache-openjpa-1.0.2/docs/manual/ref_guide_caching.html#ref_guide_cache_query">Query cache</a> requires hand coded cache access:</p>
<pre>OpenJPAEntityManagerFactory oemf = OpenJPAPersistence.cast(emf);
QueryResultCache qcache = oemf.getQueryResultCache();</pre>
<p><span id="more-1174"></span><b>EclipseLink</b><br />
Cache control <a href="http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG)#How_to_Use_the_.40Cache_Annotation">for entities</a></p>
<pre>@Entity
@org.eclipse.persistence.annotations.Cache(expiry=10000,
    type=org.eclipse.persistence.annotations.CacheType.FULL)
public class Employee {...</pre>
<p>Query cache is hand coded (example from <a href="http://wiki.eclipse.org/Using_Advanced_Query_API_(ELUG)#Using_Queries_and_the_Cache">here</a>):</p>
<pre>ReadObjectQuery query = new ReadObjectQuery(Employee.class);

// Instruct the ReadQuery to cache its query results
query.cacheQueryResults();

// The first time you invoke it, the ReadQuery reads from the database, session
// cache, or both and stores the result set in its internal query cache
Employee employeeFirst = (Employee) session.executeQuery(query);</pre>
<p>Another JPA provider, <b>DataNucleus </b>is used by Google AppEngine for Java and they have thir own way of defining the cache access.<br />
Entity cache control in DataNucleus:</p>
<pre>@javax.jdo.annotations.Extension(vendorName="datanucleus", key="cacheable", value="false")
@Entity
public class Employee {...</pre>
<p>Query caching is again <a href="http://www.datanucleus.org/products/accessplatform/rdbms/query.html">manual</a>:</p>
<pre>query.setHint("datanucleus.query.resultCacheType", "weak");</pre>
<p>Looking at the above examples it looks to me that caching was an afterthought for most of the JPA providers. Let&#8217;s remember that the cache should be transparent and pluggable and the value that a cache provider delivers stays in performance and not in configuration.<br />
JPA cache configuration is in need of standardization and in my opinion the closest to a standard is (again) Hibernate.</p>
<p>A great addition to the JPA2 spec is the introduction of @Cacheable that controls entity caching but there&#8217;s still no standard on how to control query caching.<br />
Here are some enhancements that I&#8217;m proposing:</p>
<p>1. An enhancement to @NamedQuery and @NamedNativeQuery to allow explicit cache enablement through a boolean attribute called cacheable, the same way @org.hibernate.annotations.NamedQuery is defined.</p>
<pre>@NamedQuery(name="findEmployeesInDept", query="...", <span style="color: red;">cacheable=true</span>)
...
@Entity
public class Employee {...</pre>
<p>2. Both @javax.persistence.Cacheable and @NamedQuery to support optional attributes: <em>timeout</em> (in sec.)  and a <em>cacheRegion</em> attribute that in turn, will point to a cache policy where a more complex configuration can be used (to add the cache concurrency strategy and eviction policy for instance).</p>
<pre>@NamedQuery(name="findEmployeesInDepartment", query="...",
   <span style="color: red;">cacheRegion="DepartmentEmployeesCacheRegion"</span>)
@Entity
@javax.persistence.Cacheable(<span style="color: red;">cacheRegion="EmployeeCacheRegion"</span>)
public class Employee {...</pre>
<p>Cache regions can be configured through a new annotation, @java.persistence.annotation.CacheRegion.</p>
<pre>
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Cacheable {
    boolean value() default true;
    <font color='red'>int timeout();
    String cacheRegion();  //takes precedence if used</font>
}

package java.persistence.annotation;
@Target({TYPE, PACKAGE}) @Retention(RUNTIME)
public @interface CacheRegion {
    int timeout();   //i.e. 300 s
    javax.cache.EvictionStrategy evictionStrategy(); //EvictionPolicy.LRU, FIFO, etc
    String name();  //region name
    ConcurrencyStrategy concurrencyStrategy();
    String hints();  //vendor extensions
}</pre>
<p>If specified, a @CacheRegion exists either in-place along with the entity definition or separately through a new annotation @java.persistence.annotation.CacheRegions:</p>
<pre>package java.persistence.annotation;
@Target({TYPE, PACKAGE}) @Retention(RUNTIME)
public @interface CacheRegions {
	CacheRegion[] value();
}

example:
@CacheRegions ({
  CacheRegion(name="EmployeeCacheRegion", timeout=300, evictionPolicy=
EvictionStrategy.LRU, ConcurrencyStrategy.TRANSACTIONAL),
  CacheRegion(name="OfficeLocationsCacheRegion", timeout=-1, evictionPolicy=
EvictionStrategy.LRU, ConcurrencyStrategy.READ_ONLY),
})
public class OrganizationStructureDAO {...</pre>
<p>4. Sensible and well-defined defaults if some of the values are nor specified: default timeout, default eviction policy and default concurrency.</p>
<p>Vendor extensions of cache configurations will still be able to be deployed through the <em>hints</em> attribute both for @NamedQuery and @CacheRegion.</p>
<p>In the end, configuring the cache should be executed the same way across containers given that the cache providers that will be used will likely be the same. At least that&#8217;s what I&#8217;m hoping to see in JPA 2.0.</p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://blog.newsplore.com/2009/05/28/a-call-to-standardize-level-2-cache-configuration-in-jpa-20" /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.newsplore.com/2009/05/28/a-call-to-standardize-level-2-cache-configuration-in-jpa-20/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Thinking in&#8221; what?</title>
		<link>http://blog.newsplore.com/2009/05/23/thinking-in-what</link>
		<comments>http://blog.newsplore.com/2009/05/23/thinking-in-what#comments</comments>
		<pubDate>Sat, 23 May 2009 13:46:03 +0000</pubDate>
		<dc:creator>Florin</dc:creator>
				<category><![CDATA[opinions]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ddd]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://blog.newsplore.com/?p=1097</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160; &#8220;Thinking in&#8230;&#8221; anything has been a marketing quirk for a while now, being used and abused from the field of language learning to computer science. Thinking in Java is the title of a well known book written by Bruce Eckel. I am passing a &#8220;Think in Spanish&#8221; course flyer ad every time I stroll [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="padding-right:0;margin-top:3px"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.newsplore.com%2F2009%2F05%2F23%2Fthinking-in-what"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.newsplore.com%2F2009%2F05%2F23%2Fthinking-in-what" height="61" width="51" /></a></div><table>
<tr>
<td><img src="http://blog.newsplore.com/wp-content/uploads/2009/05/image010.jpg" alt="image010" width="160" height="213" class="alignnone size-full wp-image-1257" /></td>
<td>&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td>
&#8220;Thinking in&#8230;&#8221; anything has been a marketing quirk for a while now, being used and abused from the field of language learning to computer science. <a href='http://www.mindview.net/Books/TIJ4'>Thinking in Java</a> is the title of a well known book written by Bruce Eckel. I am passing a &#8220;Think in Spanish&#8221; course flyer ad every time I stroll on Bloor Street West here in Toronto.<br />
Funny, thinking within the rigors of a discipline is the very definition of thinking inside the box. </p>
<p>With respect to programming languages, it encourages one to think within the limits of a single language which is the exact opposite of what one should do when developing software.
</td>
<tr></table>
<p>The hegemony of agile methodologies inflicted a disruptive change on the face of the software industry and amongst the established roles within a team. The legions of &#8220;coders&#8221; bred by the tech bubble of 2000 are facing extinction; the roles of the software designer and Technical Architect are fuzzier than ever. Thinking inside of the language box makes a better coder but not a better software engineer.</p>
<p>Modern software design methodologies shatter that box. Domain Driven Design disconnects the developer from the technology and places domain rules before the intricacies of a language. Test Driven Development brings the Domain in the software realm and it does it by forcing to write the tests first, then write the actual code. Test-first forces you to think behavior and APIs <i>first</i> then perform the act of coding which is nothing more than implementing that behavior.<br />
Eric Evans&#8217;s <a href='http://www.infoq.com/presentations/strategic-design-evans'>DDD: Strategic Design</a> is an eye opener. And while you&#8217;re at it, check his other <a href='http://www.infoq.com/presentations/model-to-work-evans'>presentation</a> about domain modeling.</p>
<p>So instead of &#8220;Thinking in Java&#8221;, think Domain and APIs first then act. In Java.</p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://blog.newsplore.com/2009/05/23/thinking-in-what" /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.newsplore.com/2009/05/23/thinking-in-what/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobile internet is here to stay</title>
		<link>http://blog.newsplore.com/2009/05/17/mobile-internet-is-the-future-and-its-here-to-stay</link>
		<comments>http://blog.newsplore.com/2009/05/17/mobile-internet-is-the-future-and-its-here-to-stay#comments</comments>
		<pubDate>Sun, 17 May 2009 15:09:39 +0000</pubDate>
		<dc:creator>Florin</dc:creator>
				<category><![CDATA[opinions]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://blog.newsplore.com/?p=1075</guid>
		<description><![CDATA[Since I went back from vacation (Easter with family back home in Romania) I got quite interested in the mobile internet. This was the first time I wasn&#8217;t going to internet cafes or asking buddies to let me use their internet (and their PCs). I have a beaten Nokia 3100 that works both in RO [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="padding-right:0;margin-top:3px"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.newsplore.com%2F2009%2F05%2F17%2Fmobile-internet-is-the-future-and-its-here-to-stay"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.newsplore.com%2F2009%2F05%2F17%2Fmobile-internet-is-the-future-and-its-here-to-stay" height="61" width="51" /></a></div><p>Since I went back from vacation (Easter with family back home in Romania) I got quite interested in the mobile internet. This was the first time I wasn&#8217;t going to internet cafes or asking buddies to let me use their internet (and their PCs).<br />
I have a beaten <a href="http://europe.nokia.com/A4143848">Nokia 3100</a> that works both in RO and here in Toronto. I was playing with it in my first vacation days back home, exploring the features of my romanian mobile carrier (I love the *&#8230;# service commands, they remind me of dumb terminals) and I noticed that they had a new offering, mobile internet. Configuration was a breeze and I found myself browsing the internet a few minutes later. Email, news, even checking if my websites are still up and running; they were all there where I left them.<br />
Needless to say that from that day I didn&#8217;t step into an internet cafe anymore to get my fix.</p>
<p>I also got a lovely gift from Corina around the same time, an iPod Touch. Since I&#8217;m a fan of Apple&#8217;s products I couldn&#8217;t be happier and since I started using it I realized that I use my regular laptop less and less. I&#8217;m using the iPod Touch more to check Email, news, weather, live TV (gotta love France24) and play the occasional game, than to listen to music. The experience is more condensed and focused and so I spend less time to find what I&#8217;m looking for. Mobile internet experience achieved the goal that it&#8217;s parent couldn&#8217;t: ease of use.</p>
<p>Funny that I had to go back home to find it out.<br />
<span id="more-1075"></span></p>
<p>I decided to enable my web properties for the mobile internet. Firstly I made this blog mobile-friendly. I installed <a href="http://www.bravenewcode.com/wptouch/">Wptouch for WordPress</a>. It&#8217;s an excellent plugin that just works on iPod Touch and iPhone. I also installed <a href="http://wordpress.org/extend/plugins/wordpress-mobile-edition/installation/">WordPress Mobile Edition</a> that should do the trick for the rest of the mobile devices so go ahead and give the <a href='http://blog/newsplore.com'>Newsplore Blog</a> a spin on a mobile browser. Actually WordPress should render for mobile browsers natively, it will only accelerate the shift.</p>
<p>Next I&#8217;m going to make spincloud.com mobile; not that there aren&#8217;t any mobile weather websites but it won&#8217;t be long until mobile browsers will generate more traffic than their desktop counterparts.  I&#8217;m merely getting ready for the inevitable. Eventually there will be websites made only for mobile consumption (if there aren&#8217;t already) just like these days newspapers are becoming -ironically- paperless.<br />
Interestingly many high traffic websites and and blogs (techcrunch, gigaom) don&#8217;t work yet on mobile phones (the iPhone situation is better but still not there yet). On the other hand Google is awesome on small browsers. Mail (attachments included, I could read PDFs too!), Reader, search, News, everything just worked. It even translated the search result links for the mobile experience. Kudos Google!<br />
This is not the beginning of the mobile internet (WML anyone?) but with the advance on the devices front, the critical mass has been reached. And for those of you reading this on a cell phone, Q.E.D.</p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://blog.newsplore.com/2009/05/17/mobile-internet-is-the-future-and-its-here-to-stay" /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.newsplore.com/2009/05/17/mobile-internet-is-the-future-and-its-here-to-stay/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evaluating EclipseLink 1.1</title>
		<link>http://blog.newsplore.com/2009/03/21/evaluating-eclipselink-11</link>
		<comments>http://blog.newsplore.com/2009/03/21/evaluating-eclipselink-11#comments</comments>
		<pubDate>Sun, 22 Mar 2009 00:34:53 +0000</pubDate>
		<dc:creator>Florin</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[opinions]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[EclipseLink]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[jpa]]></category>

		<guid isPermaLink="false">http://blog.newsplore.com/?p=981</guid>
		<description><![CDATA[As I&#8217;m using the ubiquitous Hibernate 3.3 as the JPA 1.0 provider for Spincloud, I decided to try out another one. I had tried OpenJPA (spawned from Kodo JDO) when they only supported build-time bytecode enhancement and it was a pain to make it work. It worked all right but boy what a pain. There&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="padding-right:0;margin-top:3px"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.newsplore.com%2F2009%2F03%2F21%2Fevaluating-eclipselink-11"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.newsplore.com%2F2009%2F03%2F21%2Fevaluating-eclipselink-11" height="61" width="51" /></a></div><p align='justify'>As I&#8217;m using the ubiquitous Hibernate 3.3 as the JPA 1.0 provider for <a href="http://spincloud.com">Spincloud</a>, I decided to try out another one. I had tried <a href="http://openjpa.apache.org/">OpenJPA</a> (spawned from Kodo JDO) when they only supported <a href="http://people.apache.org/~mprudhom/openjpa/site/openjpa-project/manual/ref_guide_pc_enhance.html#ref_guide_pc_enhance_build">build-time bytecode enhancement</a> and it was a pain to make it work. It worked all right but boy what a pain. There&#8217;s  now an <a href="http://people.apache.org/~mprudhom/openjpa/site/openjpa-project/manual/ref_guide_pc_enhance.html#ref_guide_pc_enhance_runtime">agent</a> to provide on-the-fly enhancement but I&#8217;ll take transparent enhancement anytime.<br />
I&#8217;ve heard about EclipseLink before. The project started when Oracle donated the respectable <a href="http://www.oracle.com/technology/tech/java/newsletter/articles/toplink/history_of_toplink.html">TopLink project</a> to the Eclipse foundation. If the solid reputation behind TopLink was a good enough argument for me to try it, the announcement that <a href="http://eclipselink.blogspot.com/2008/03/eclipselink-to-provide-jpa-20-reference.html">it will be the JPA 2.0 reference implementation</a> convinced me that I should try it out.<br />
My goal is to evaluate if EclipseLink is production-ready. I&#8217;m applying a complex set of evaluation criteria (joking): if it can run Spincloud then it is (I was inspired by Seifer&#8217;s <a href="http://www.infoq.com/presentations/seifer-ruby-vm-comparison">interview on Infoq</a> about Ruby VMs; when asked what was the criteria for qualifying if a Ruby VM is production ready, he answered: if it runs Rails).</p>
<p>I have the following JPA requirements:<br />
- column mappings, one-to-one, one-to-many<br />
- supports BLOB fields<br />
- supports NamedQueries and NamedNativeQueries<br />
- support for object cache and query cache<br />
- deployment/operational nice to have: ease of maintaining compatibility with both  EclipseLink and Hibernate in the source code and runtime. Ideally I should plug-in any JPA provider without changing a single line of code. This was not attainable as I&#8217;ll explain below.</p>
<p>I started by downloading the binaries</a>. I&#8217;m using Maven to bring the jars so I&#8217;ve followed the instructions <a href="http://wiki.eclipse.org/EclipseLink/Maven">here</a>. I only changed the version since I wanted to use v1.1.0:</p>
<pre>
  &lt;dependency&gt;
    &lt;groupId&gt;org.eclipse.persistence&lt;/groupId&gt;
    &lt;artifactId&gt;eclipselink&lt;/artifactId&gt;
    &lt;version&gt;1.1.0&lt;/version&gt;
    &lt;scope&gt;provided&lt;/scope&gt;
  &lt;/dependency&gt;
</pre>
<p>There&#8217;s a single jar file called eclipselink-1.1.0.jar downloaded which is a nice change from the multitude of Hibernate jars I was accustomed with.<br />
<span id="more-981"></span><br />
Next, I created a new persistence.xml file since I didn&#8217;t know how different it would be from the one tied to Hibernate. Initially I just changed the JPA provider to:</p>
<pre>
  &lt;provider&gt;org.eclipse.persistence.jpa.PersistenceProvider&lt;/provider&gt;
</pre>
<p>as the documentation stated.<br />
Then I had a look at my current NamedQueries and NamedNativeQueries that looked like this:</p>
<pre>
@org.hibernate.annotations.NamedQueries({
	@org.hibernate.annotations.NamedQuery(name="findStationByPK",
	        query="select station from Station station where station.id=:stationPK"
	        , cacheable=true, cacheRegion="weatherStationsRegion"),
...
</pre>
<p>and I recalled that I did this in order to make use of Hibernate&#8217;s Query cache facility, alas a non-standard way of cache enablement (not until JPA 2.0 anyway). I had to put query caching to rest and switched all my Named*Queries to standard JPA:</p>
<pre>
@javax.persistence.NamedQueries({
	@javax.persistence.NamedQuery(name="findStationByPK",
	        query="select station from Station where id=:stationPK"),
...
</pre>
<p> I&#8217;m not using the integration unit tests I have due to the issues I had with the <a href="http://static.springframework.org/spring/docs/2.0.x/reference/testing.html#integration-testing">Spring integration test framework</a> I&#8217;m using after switching to Spring 3.0 so I&#8217;m using ad-hoc testing for now.  After rebuilding/deploying the project I didn&#8217;t notice any error on Tomcat start-up so I just tried the GUI, displaying the weather in a map area. I hit the first error:</p>
<pre>
Exception [EclipseLink-7060] (Eclipse Persistence Services - 1.1.0.r3639-SNAPSHOT):
org.eclipse.persistence.exceptions.ValidationException
Exception Description: Cannot acquire data source [java:comp/env/ds/MeteoDS].
Internal Exception: javax.naming.NamingException: This context must be accessed
throughout a java: URL
</pre>
<p>I dug through the documentation (what&#8217;s with this documentation and what does <a href="http://wiki.eclipse.org/EclipseLink/Examples/JPA/Tomcat_Web_Tutorial#Limitations_to_JPA">&#8220;No dynamic weaving (instrumentation) &#8211; static weaving of entities is still available via EclipseLink&#8221;</a> means, why JPAEclipseLinkSessionCustomizer example is broken and finally why use teh deprecated SessionCustomizer?) and found that I have to use a <a href="http://wiki.eclipse.org/EclipseLink/Examples/JPA/Tomcat_Web_Tutorial#Session_Customizer">session customizer</a> to make it work in Tomcat. I didn&#8217;t like this one bit (it just works in Hibernate) but I followed the instructions and EclipseLink could establish the connection with the Tomcat-configured data source as expected. This was the first duly noted turn-off.<br />
I redeployed and browsed the weather map just to hit another problem:</p>
<pre>
  Exception Description: Syntax error parsing the query [findStationByPK:
    select station from   Station where id=:stationPK], line 1, column 28:
    syntax error at [where].
 Internal Exception: MismatchedTokenException(65!=66)
</pre>
<p>Hmm, no compile-time JPA query check. Not good. I checked the JPA query, it was:</p>
<pre>
  @javax.persistence.NamedQuery(name="findStationByPK",
       query="select station from Station where id=:stationPK"),
...
</pre>
<p>which looked OK but looking closely I realized that it was not. The correct syntax is (notice the <b>station.</b> indirection:</p>
<pre>
@javax.persistence.NamedQueries({
	@javax.persistence.NamedQuery(name="findStationByPK",
	        query="select station from Station <b>station</b> where <b>station</b>.id=:stationPK"),
	@javax.persistence.NamedQuery(name="findByStationId",
...
</pre>
<p>Hibernate was happy with the &#8220;non-standard&#8221; syntax while EclipseLink is not. No big deal, it wasn&#8217;t in many places anyway. I scanned all my queries and fixed them. Redeployed and hit this:</p>
<pre>
  Exception Description: Syntax error parsing the query [findByStationId: from
    Station station where station.stationId=:stationId], line 1, column 0:
    unexpected token [from].
</pre>
<p>My JPA query is:</p>
<pre>
	@javax.persistence.NamedQuery(name="findByStationId",
	        query="from Station station where station.stationId=:stationId")
</pre>
<p>Again a Hibernate artifact. H3 supports the convenience of using queries that start with &#8220;from entity&#8230;&#8221; if they return entities (single or lists). The fix was simply to add &#8220;select station&#8221; in front of the JPA QL:</p>
<pre>
	@javax.persistence.NamedQuery(name="findByStationId",
	        query="<b>select station</b> from Station station where
                station.stationId=:stationId")
</pre>
<p>Not a biggie either, standard is better and Hibernate can parse this kind of query. Again, rebuilt/redeployed and queried the map again. This time the error was this:</p>
<pre>
[EL Warning]: 2009-03-21 19:02:42.135--UnitOfWork(2001070194)--Exception [EclipseLink-4002]
(Eclipse Persistence Services -
 1.1.0.r3639-SNAPSHOT): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
You have an error in your SQL syntax; check
the manual that corresponds to your MySQL server version for the right syntax to use
near ':area) , LOCATION) and obs_time
&gt; :minSynopDateToConsiderStr UNION select distin' at line 1
Error Code: 1064
Call: <b>select distinct STATION_FK as STATION_IDENTIFIER, LOCATION,
obs_time as REPORT_TIME  from SYNOP where Contains(GeomFromText(:area) , LOCATION) and
obs_time &gt; :minSynopDateToConsiderStr UNION
select distinct STATION_FK as STATION_IDENTIFIER,
LOCATION, REPORT_TIME as REPORT_TIME from METAR where
Contains(GeomFromText(:area) , LOCATION) and REPORT_TIME &gt; :minMetarDateToConsiderStr</b>
</pre>
<p>I couldn&#8217;t find anything at first in the documentation (getting really pissed at the documentation style, can&#8217;t find anything useful) but I finally found <a href="//wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG)#Using_Named_Parameters_in_a_Native_Query">this</a>:</p>
<pre>
Support for the EclipseLink # convention is helpful if you are already familiar with
EclipseLink queries or if you are migrating EclipseLink queries to a JPA application.
</pre>
<p>I&#8217;m not &#8220;already familiar with EclipseLink queries&#8221; and no, it&#8217;s not helpful. So now I have to use #area instead of :area named parameter. This is really smart. Why in the world would one want to change the column with sharp? I&#8217;m starting to suspect clumsiness or plain careless coding. I still want to maintain Hibernate/EclipseLink pluggability so I have no choice but creating a static class that holds all NamedNativeQueries and parametrizes the named parameter prefix:</p>
<pre>
class NativeQueries {
public final static String WEATHER_SNAPSHOT_IN_AREA_NATIVE_QUERY ="select distinct
STATION_FK as STATION_IDENTIFIER, LOCATION, obs_time as REPORT_TIME from SYNOP where
Contains (GeomFromText(<font color="red">@named-param-prefix@</font>area) " +
 ", LOCATION) and obs_time &gt; <font color="red">@named-param-prefix@</font>minSynopDateToConsiderStr UNION " +
"select distinct STATION_FK as STATION_IDENTIFIER, LOCATION, REPORT_TIME
as REPORT_TIME from METAR where Contains(GeomFromText(<font color="red">@named-param-prefix@</font>area) " +
", LOCATION) and REPORT_TIME &gt; <font color="red">@named-param-prefix@</font>minMetarDateToConsiderStr";
...
}
</pre>
<p>Then I have to use ant to perform a pre-compilation task that replaces <font color="red">@named-param-prefix@</font> with either : or #. This really got the best of me as I&#8217;ve hit a Java compilation quirk too: you have to delete all classes that rely on the NativeQueries class since they will not recompile if the values of the <b>public static final String</b> values change; you have to delete all .class files and force a full compilation for them.<br />
After I did this build change it all started working. Victory at last. Or was it? Well, no; I still have to add query caching as I heavily use spatial queries to fetch area weather (activated every time the map is dragged/zoomed). There&#8217;s the <a href="http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG)#Using_EclipseLink_JPA_Extensions_for_Entity_Caching">@Cache</a> but it&#8217;s for entity caching which is good but what I also need is query caching à la Hibernate: </p>
<pre>
 @org.hibernate.annotations.NamedQuery(name="qName", query="&lt;query&gt;",
    <font color="red">cacheable=true, cacheRegion="some-cache-region"</font>)
</pre>
<p align='justify'>
After another round of thorough search of the documentation I <a href="http://wiki.eclipse.org/Using_Advanced_Query_API_%28ELUG%29#Using_Queries_and_the_Cache">found what I needed</a> but it wasn&#8217;t what I expected. EclipseLink doesn&#8217;t support annotation-level query cache configuration. Instead you have to code-in (or use AOP to) cache writes after the queries are executed, via its ReadQuery class.<br />
Needless to say I didn&#8217;t do it. I gave up on it right there.<br />
On a whole this felt a lot like my (undocumented) evaluation I did over a year ago with OpenJPA (no dice too). Poor documentation (worse than EL&#8217;s) and lack of (then) runtime weaving made it a nightmare to deploy. I haven&#8217;t tried it ever since.</p>
<p>Prognosis: negative</p>
<p>This is really a shame, EclipseLink seems to be quite fast and has a footprint similar to Hibernate but:<br />
- the documentation is awful. Guys, look at Hibernate and follow their lead. I badly need a single page HTML up-to-date documentation that I can freely browse. I can find almost anything in a matter of seconds using Hibernate&#8217;s single page HTML doc and Ctrl-F. I feel so strongly about this, I&#8217;d make an addition to the <a href="http://manifesto.softwarecraftsmanship.org/">Software Craftsmanship Manifesto:</a> <b>&#8220;Maintain top-notch documentation&#8221;</b>. Spring and Hibernate projects got it right and this is one of the secrets of their success. Take note.<br />
- Use : (column) for named parameters in NamedNativeQuery; it is consistent with NamedQuery syntax (and hopefully standardized in JPA 2.0).<br />
- Use compile-time Named*Query syntax check. It adds a great deal to predictability.<br />
- Add the Session Customizer fix into of the base platform and make it transparent to the user. Nobody wants to write integration code to fix oddities of popular containers. &#8220;Out of the box&#8221; is valuable.<br />
- Work on a better query caching support or push hard for a JPA 2.0 beta since there&#8217;s standardized second-level caching.</p>
<p>Oh and guys, <a href="http://wiki.eclipse.org/Introduction_to_EclipseLink_Queries_(ELUG)">some</a> documentation pages don&#8217;t render properly on Safari, the TOCs overlap the content. Unacceptable.</p>
<p>Until then I&#8217;m sticking with Hibernate 3.3. It just works.</p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://blog.newsplore.com/2009/03/21/evaluating-eclipselink-11" /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.newsplore.com/2009/03/21/evaluating-eclipselink-11/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Atlantis spotted on Google Earth?</title>
		<link>http://blog.newsplore.com/2009/02/22/atlantis-spotted-on-google-earth</link>
		<comments>http://blog.newsplore.com/2009/02/22/atlantis-spotted-on-google-earth#comments</comments>
		<pubDate>Mon, 23 Feb 2009 03:31:01 +0000</pubDate>
		<dc:creator>Florin</dc:creator>
				<category><![CDATA[opinions]]></category>
		<category><![CDATA[archeology]]></category>
		<category><![CDATA[discoveries]]></category>

		<guid isPermaLink="false">http://blog.newsplore.com/?p=585</guid>
		<description><![CDATA[I couldn&#8217;t miss this one. It didn&#8217;t take long  after Google released its seafloor imagery to its Earth and Maps products for someone to claim the discovery of nothing less than Atlantis itself! Ah, and again it wasn&#8217;t me&#8230; Take a closer look at the Atlantic Ocean floor area: On the left, a grid-like structure is [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="padding-right:0;margin-top:3px"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.newsplore.com%2F2009%2F02%2F22%2Fatlantis-spotted-on-google-earth"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.newsplore.com%2F2009%2F02%2F22%2Fatlantis-spotted-on-google-earth" height="61" width="51" /></a></div><p>I couldn&#8217;t miss this one. It didn&#8217;t take long  after Google released its <a href="http://www.guardian.co.uk/technology/2009/feb/01/google-earth-oceans-project">seafloor imagery</a> to its Earth and Maps products for someone to claim the discovery of nothing less than <a href="http://www.thesun.co.uk/sol/homepage/news/article2255989.ece">Atlantis itself</a>! Ah, and again it wasn&#8217;t me&#8230;</p>
<p>Take a closer look at the Atlantic Ocean floor <a href="http://maps.google.com/?ie=UTF8&amp;ll=31.071756,-21.917725&amp;spn=4.901429,11.447754&amp;t=h&amp;z=7">area</a>:</p>
<p><img class="alignnone size-full wp-image-591" src="http://blog.newsplore.com/wp-content/uploads/2009/02/atlantis.png" alt="atlantis" width="460" height="180" /></p>
<p>On the left, a grid-like structure is clearly visible. I also spotted a similar &#8220;grid&#8221; east of the main one (yes, I called it!) and some more off the west coast of Ireland.</p>
<p>However, it may all be a false alarm. Google said that:</p>
<p class="article"> “Bathymetric (or sea floor terrain) data is often collected from boats using sonar to take measurements of the sea floor [...] The lines reflect the path of the boat as it gathers the data.&#8221;</p>
<p class="article">I&#8217;m keeping my fingers crossed though. I&#8217;m waiting for Discovery Channel, bounty hunters and reality showmen to swarm the place now as I think this patch of open ocean is international waters. Finders keepers!</p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://blog.newsplore.com/2009/02/22/atlantis-spotted-on-google-earth" /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.newsplore.com/2009/02/22/atlantis-spotted-on-google-earth/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Deus ex Machina</title>
		<link>http://blog.newsplore.com/2008/11/07/deus-ex-machina</link>
		<comments>http://blog.newsplore.com/2008/11/07/deus-ex-machina#comments</comments>
		<pubDate>Fri, 07 Nov 2008 04:13:27 +0000</pubDate>
		<dc:creator>Florin</dc:creator>
				<category><![CDATA[opinions]]></category>
		<category><![CDATA[movies]]></category>

		<guid isPermaLink="false">http://blog.newsplore.com/?p=258</guid>
		<description><![CDATA[I love Hollywood movies. They project a surreal world that in which all stories have a happy ending. Whenever the hero seems to be cornered and rapidly heading to his doom, a last-second turn of events allows him to escape. This is deus ex machina. God from the machine. To the rescue. I&#8217;m thinking back [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="padding-right:0;margin-top:3px"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.newsplore.com%2F2008%2F11%2F07%2Fdeus-ex-machina"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.newsplore.com%2F2008%2F11%2F07%2Fdeus-ex-machina" height="61" width="51" /></a></div><p>I love Hollywood movies. They project a surreal world that in which all stories have a happy ending. Whenever the hero seems to be cornered and rapidly heading to his doom, a last-second turn of events allows him to escape. This is <a href="http://en.wikipedia.org/wiki/Deus_ex_machina">deus ex machina</a>. God from the machine. To the rescue.</p>
<p>I&#8217;m thinking back at many movies I so enjoyed. Terminator, Die Hard (yeah, right), Batman, Ironman, Indiana. Deus ex machina all over. I denounce them.</p>
<p>Think of a Hollywood movie, any of them. Chances are it&#8217;s a Deus one.</p>
<p>I like Rocky 1 and Trainspotting. And <a href="http://www.imdb.com/title/tt0419365/">Sex Traffic.</a></p>
<p>I know why I like the cheesy Deus&#8217; movies. I know the ending, no surprises there. Shameless happiness at the end, the hero survives all impossible circumstances. Satisfaction guaranteed.</p>
<p>No more of this nonsense. Realism rocks. I&#8217;m not going to go watch any of these other movies anymore!</p>
<p>And yet I can&#8217;t look away.</p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://blog.newsplore.com/2008/11/07/deus-ex-machina" /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.newsplore.com/2008/11/07/deus-ex-machina/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>REST is DSL</title>
		<link>http://blog.newsplore.com/2008/11/06/rest-is-dsl</link>
		<comments>http://blog.newsplore.com/2008/11/06/rest-is-dsl#comments</comments>
		<pubDate>Fri, 07 Nov 2008 03:18:37 +0000</pubDate>
		<dc:creator>Florin</dc:creator>
				<category><![CDATA[opinions]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://blog.newsplore.com/?p=238</guid>
		<description><![CDATA[I like RESTful URLs. They clearly express the intent of the provided resource. We humans speak a language close to REST when we talk to The Internet.  Take a look at Google&#8217;s RESTful search query, probably the most used RESTful URL ever: http://www.google.com/search?q=your-terms-of-choice in freeform language this translates to: &#8220;Google, search for this term.&#8221; How [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="padding-right:0;margin-top:3px"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.newsplore.com%2F2008%2F11%2F06%2Frest-is-dsl"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.newsplore.com%2F2008%2F11%2F06%2Frest-is-dsl" height="61" width="51" /></a></div><p>I like <a title="REST" href="http://en.wikipedia.org/wiki/Representational_State_Transfer">REST</a>ful URLs. They clearly express the intent of the provided resource. We humans speak a language close to REST when we talk to The Internet. </p>
<p>Take a look at Google&#8217;s RESTful search query, probably the most used RESTful URL ever:</p>
<pre>http://www.google.com/search?q=your-terms-of-choice</pre>
<p>in freeform language this translates to: &#8220;Google, search for this term.&#8221;</p>
<p>How about the Flickr RESTful tag cluster search service:</p>
<pre>http://api.flickr.com/services/rest/?method=flickr.tags.getClusters&amp;
api_key=a6f11b67ae348a7b3f2da0d865b8bc1d&amp;tag=Berlin</pre>
<p>In Flickr lingo this means: &#8220;Fetch all tag clusters for the &#8216;Berlin&#8217; tag&#8221;.</p>
<p>It doesn&#8217;t take much to understand RESTful URLs. They speak the language of the domain they represent and therefore in the Web Services provider-consumer world:</p>
<p><b>The collection of all RESTful services provided by a domain represents its web-oriented Domain Specific Language.</b>  </p>
<p><a title="DSL" href="http://www.martinfowler.com/bliki/DomainSpecificLanguage.html">DSL</a>s have been around for a long time. For more information check Martin Fowler&#8217;s <a title="Fowler's DSL talk" href="http://www.infoq.com/presentations/domain-specific-languages">talk</a> on the subject.</p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://blog.newsplore.com/2008/11/06/rest-is-dsl" /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.newsplore.com/2008/11/06/rest-is-dsl/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac wars</title>
		<link>http://blog.newsplore.com/2008/11/04/mac-wars</link>
		<comments>http://blog.newsplore.com/2008/11/04/mac-wars#comments</comments>
		<pubDate>Tue, 04 Nov 2008 15:41:11 +0000</pubDate>
		<dc:creator>Florin</dc:creator>
				<category><![CDATA[opinions]]></category>
		<category><![CDATA[computing]]></category>

		<guid isPermaLink="false">http://blog.newsplore.com/?p=209</guid>
		<description><![CDATA[Oh, that “I’m a Mac” commercial is on the TV again. Then some ugly new ad where some webcam people defend the PCs on behalf of Microsoft: “I’m a PC”. While my brain was tricked into an attempted wash, I realized that I’m not any of it. I’m a human being. I’m not trying to [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="padding-right:0;margin-top:3px"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.newsplore.com%2F2008%2F11%2F04%2Fmac-wars"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.newsplore.com%2F2008%2F11%2F04%2Fmac-wars" height="61" width="51" /></a></div><table border="0">
<tbody>
<tr valign="top">
<td><img src="http://blog.newsplore.com/wp-content/uploads/2008/11/macontop.jpg" alt="hump" width="130" height="90" /></td>
<td></td>
<td>Oh, that “I’m a Mac” commercial is on the TV again. Then some ugly new ad where some webcam people defend the PCs on behalf of Microsoft: “I’m a PC”. While my brain was tricked into an attempted wash, I realized that I’m not any of it.</td>
</tr>
</tbody>
</table>
<p>I’m a human being.</p>
<p>I’m not trying to help you here Redmond but voila, here’s one good ad slogan:</p>
<p><strong><span style="medium;">I am not a machine. I’m a human being. And I use a PC.</span></strong><sup>®</sup></p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://blog.newsplore.com/2008/11/04/mac-wars" /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.newsplore.com/2008/11/04/mac-wars/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
