<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title></title>
	<atom:link href="http://blog.decaresystems.ie/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.decaresystems.ie</link>
	<description>DSI blog on .Net, Java and technology in general</description>
	<lastBuildDate>Tue, 21 May 2013 08:22:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.decaresystems.ie' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title></title>
		<link>http://blog.decaresystems.ie</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.decaresystems.ie/osd.xml" title="" />
	<atom:link rel='hub' href='http://blog.decaresystems.ie/?pushpress=hub'/>
		<item>
		<title>JavaOne 2012 &#8211; Day 3</title>
		<link>http://blog.decaresystems.ie/2012/10/08/javaone-2012-day-3/</link>
		<comments>http://blog.decaresystems.ie/2012/10/08/javaone-2012-day-3/#comments</comments>
		<pubDate>Mon, 08 Oct 2012 09:56:59 +0000</pubDate>
		<dc:creator>Yagiz Erkan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[OSS]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javaone 2012]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[kotlin]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[servlet 3.1]]></category>
		<category><![CDATA[tiggzi]]></category>

		<guid isPermaLink="false">http://blog.decaresystems.ie/?p=583</guid>
		<description><![CDATA[For me, finding time to blog in between sessions is almost impossible in JavaOne. Going back and forth between different hotels and trying to be in the room early enough to secure a nice seat are time consuming. And when you factor in the fact that the BOF (Birds of a Feather) sessions may end [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=583&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>For me, finding time to blog in between sessions is almost impossible in JavaOne. Going back and forth between different hotels and trying to be in the room early enough to secure a nice seat are time consuming. And when you factor in the fact that the BOF (Birds of a Feather) sessions may end as late as 21:15, I&#8217;m not left with many viable options for blogging. Normally I&#8217;m a night owl. I can work well and be pretty productive late at night. However, this year I&#8217;m trying something new. I&#8217;m waking up at 5 AM to get some work done early in the morning.</p>
<p>When I blog about a day&#8217;s sessions, ideally I try to select a few sessions, the most interesting ones. But sometimes there are so many good sessions that it becomes really difficult to short-list them. Wednesday (javaOneDays[3]) was such a day when three of my Top 5 sessions took place. As an attendee it is a wonderful thing. However as a blogger it makes life harder.<span id="more-583"></span></p>
<div id="attachment_585" class="wp-caption aligncenter" style="width: 234px"><a href="http://decaresystemsblog.files.wordpress.com/2012/10/img_2520.jpg"><img class="size-medium wp-image-585 " title="JavaOne Schedule Builder Kiosk" src="http://decaresystemsblog.files.wordpress.com/2012/10/img_2520.jpg?w=224&#038;h=300" alt="JavaOne Schedule Builder Kiosk" width="224" height="300" /></a><p class="wp-caption-text">JavaOne Schedule Builder Kiosk that I mentioned in a previous blog entry.</p></div>
<p><a href="http://decaresystemsblog.files.wordpress.com/2012/10/servlet3-11.png"><img class="alignleft size-full wp-image-587" title="Servlet API 3.1" src="http://decaresystemsblog.files.wordpress.com/2012/10/servlet3-11.png?w=620" alt="Servlet API 3.1"   /></a>The first session of the day was about <strong>Servlet API 3.1</strong> and it was entitled <em>What&#8217;s New In Servlet 3.1: An Overview</em>. Servlet API is most of the time too low level to be directly used in Enterprise software development but it is important to at least be familiar with it not only because sometimes it becomes necessary to use it also because it is the underlying technology of many other Java APIs and frameworks.</p>
<p>During their talk, the speakers classified the new and noteworthy under 3 main headings:</p>
<ul>
<li>Scalability (e.g. exposing non-blocking IO API)</li>
<li>Support for newer technologies that use HTTP (e.g. WebSocket)</li>
<li>Security enhancements</li>
</ul>
<p><strong>Non-Blocking IO API</strong></p>
<p>If you&#8217;ve worked with the Servlet API before then you know that reading from the <em>ServletInputStream</em> and writing to the <em>ServletOutputStream</em> are blocking operations. The addition of non-blocking IO to the Servlet API introduces new APIs to <em>ServletInputStream</em> and <em>ServletOutputStream</em>, and two new event listeners: <em>ReadListener</em> and <em>WriteListener. </em></p>
<p>We can now set a <em>ReadListener</em> by using <em>ServletInputStream</em>&#8216;s new <em>setReadListener()</em> method. There&#8217;s also a new <em>setWriteListener()</em> method in <em>ServletOutputStream</em>. Because those listeners are used for non-blocking IO, there are also new verification methods such as <em>SetvletInputStream.isFinished()</em>, <em>ServletInputStream.isReady()</em> and <em>ServletOutputStream.canWrite()</em>. As one of the attendees highlighted it, it is surprising to see that the draft specification includes a conflicting naming convention: <em>isReady()</em> and <em>canWrite()</em>. Why not <em>canRead()</em> and <em>canWrite()</em>? Or even <em>isReady()</em> for both interfaces?</p>
<p>Here&#8217;s how those new event listener interfaces look like:</p>
<pre>public interface ReadListener extends EventListener {
  public void onDataAvailable(ServletRequest request);
  public void onAllDataRead(ServletRequest request);
  public void onError(Throwable t);
}

public interface WriteListener extends EventListener {
  public void onWritePossible(ServletResponse response);
  public void onError(Throwable t);
}</pre>
<p>For example, rather than using the blocking <em>read()</em> method of <em>ServletInputStream</em> we can use the <em>setReadListener()</em> method and execute the reading operation within our <em>ReadListener</em> implementation.</p>
<p>From the examples given during the talk I much preferred the one that combined non-blocking IO and async processing. The simple <em>doGet()</em> method looked like this:</p>
<pre>ServletInputStream sis = request.getInputStream();
ServletOutputStream sos = request.getOutputStream();
AsyncContext ctx = req.startAsync();

sis.setReadListener(new SimpleReadListener(sis, sos, ctx));

int b = -1;
while (sis.isReady() &amp;&amp; ((b = sis.read()) != -1)) {
  sos.write(b);
}

if (sis.isFinished()) {
  ctx.complete();
}</pre>
<p>And the <em>SimpleReadListener</em> looked like this:</p>
<pre>public class SimpleReadListener implements ReadListener {
  ...
  public void onDataAvailable(ServletResponse resp) {
    ...
  }

  public void on AllDataRead() {
    ...
    ctx.complete();
  }

  public void onError(final Throwable t) {
    ...
  }
}</pre>
<p><strong>Protocol Upgrade</strong></p>
<p>Protocol upgrade is part of HTTP protocol. It allows an already established connection to switch to a new and incompatible protocol. When the client initiates a request (GET, POST, etc) it can insert an <em>Upgrade</em> header to it indicating the desired protocols in order of preference. Upon receipt of request, the server can accept or refuse the new protocol.  If the server accepts the protocol upgrade then it sends back a <em>101 Switching Protocol</em> along with an <em>Upgrade</em> header containing the chosen protocol.</p>
<p>Using <em>Protocol Upgrade</em> the client and the server can switch from HTTP 1.1 to another protocol such as HTTP 2.0, SHTTP 1.3, IRC 6.9 or Web Socket. For example:</p>
<p><span style="text-decoration:underline;"><em>Client</em></span>:</p>
<pre>GET /chat HTTP 1.1
Host: server.mycompany.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key:...
...</pre>
<p><span style="text-decoration:underline;"><em>Server</em></span>:</p>
<pre>HTTP 1.1 101 Switching Protocol
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept:...
...</pre>
<p>Servlet 3.1 adds 2 new interfaces to the <em>javax.servlet.http</em> package: <em>ProtocolHandler</em> and <em>WebConnection</em>. It also adds a new method to <em>HttpServletRequest</em>: <em>upgrade(ProtocolHandler handler)</em>.</p>
<p>As part of their talk the presenters created an <em>EchoProtocolHandler</em> that implemented the new <em>ProtocolHandler</em> interface. An instance of <em>EchoProtocolHandler</em> was then used as the parameter to the new <em>upgrade()</em> method call to demonstrate upgrading to a simple echo protocol.</p>
<p><strong>Security Enhancements</strong></p>
<p>The new specification brings clarifications on various areas such as:</p>
<ul>
<li><em>run-as</em> in the case of <em>#init</em> and <em>#destroy</em>.</li>
<li>default security semantic for non-specific HTTP methods</li>
<li>in a case where the same parameter name is used in the query string and as part of the POSTed parameters (what is its value?)</li>
</ul>
<p>It also provides protection against some known security problems such as the <em>Session Fixation Attacks</em>.</p>
<p><a href="http://decaresystemsblog.files.wordpress.com/2012/10/tiggzi.jpg"><img class="alignleft size-full wp-image-590" title="tiggzi logo" src="http://decaresystemsblog.files.wordpress.com/2012/10/tiggzi.jpg?w=620" alt="tiggzi logo"   /></a><em>Max Katz</em>&#8216;s <em>Building HTML5 Mobile Apps with Cloud Services</em> made my <strong>Top 3</strong> sessions list in this year&#8217;s JavaOne. He was a great and engaging speaker who mastered his subject and used his presentation material adroitly. He talked about <strong><em>Tiggzi</em> </strong>and I was really impressed by this tool. You can probably guess the nature of this session by the fact that Max only had a single slide for the whole hour. Executed well, this type of slideless, live-demo-centric presentations can be the best type of technical sessions. Throughout his talk, Max incrementally developed a live application. As of this writing, the last version is still live on <a title="tiggzi sample app" href="http://tinyurl.com/javaone13">tinyurl.com/javaone13</a>. Unfortunately the app was modified towards the end of the session to demonstrate tiggzi&#8217;s capability of working with any existing RESTful services, which now points to the <a title="Devoxx" href="http://www.devoxx.com">Devoxx</a>&#8216;s schedule.</p>
<p>Tiggzi is a cloud-based mobile application IDE. An application built by Tiggzi uses the following technologies:</p>
<ul>
<li>jQuery Mobile</li>
<li>HTML5, CSS</li>
<li>JavaScript</li>
<li>PhoneGap</li>
</ul>
<p>Tiggzi is a Web-based tool and it has a very slick UI. The components of the developed application are put together using drag &amp; drop. The first application that Max built (I keep thinking about writing &#8220;we built&#8221;. I guess I felt it so because the presentation was very engaging and also because we, the audience, became testers using our mobile phones to validate the newly built application) was a twitter search app. Max quickly put together a few components to prepare the app visually. On the left hand side of the tool, there was a component gallery to choose from. Creating the UI looked as simple as dragging the desired components and dropping them on the phone view that sits in the middle, on the main panel.  And the selected component had its properties and its possible event bindings on the right hand side of the screen. Testing looked very simple: it was a matter of hitting the <em>&#8220;Test&#8221;</em> button.</p>
<p>Tiggzi knew how to consume JSON and XML services. Using twitter&#8217;s existing REST services, Max provided the necessary data to the application. He entered the service URL, added service request parameters and tested the service endpoint as a verification. The service endpoint was set up correctly so he defined the response structure. Mapping the service to UI components was done using drag &amp; drop as well. I liked the way that it was represented with the request or response structure on the left, the UI component tree on the right and various arrows from left to right connecting them.</p>
<p>After that the app was just working. Max built an APK and at the same time the app was published as a Web app so that we, the attendees, could access the app using our own phones. Even though the requirements were very simple (twitter search), using tiggzi, it was extremely quick to achieve the desired happy path. Tiggzi also had a database console where Max could create an application database. The remaining of the session Max improved the application incremental additions.</p>
<p>I had some of our RESTful services in mind when the realization struck me. And I got the confirmation from Max: Tiggzi works with public services. It can&#8217;t create an app that integrates with your company&#8217;s private services. The service endpoints need to be public. But I&#8217;m signing up for a free trial nonetheless. I&#8217;d like to try tiggzi for myself.</p>
<p><a href="http://decaresystemsblog.files.wordpress.com/2012/10/kotlin.png"><img class="alignleft size-full wp-image-595" title="Kotlin Logo" src="http://decaresystemsblog.files.wordpress.com/2012/10/kotlin.png?w=620" alt="Kotlin Logo"   /></a>The following session was another one that made my<strong> Top 3</strong> list: <em>Incompetence * Motivation = Innovation? (How Kotlin and Other New Things Emerge)</em> presented by <em>Andrey Breslav</em>, Lead Language Designer in JetBrains.</p>
<p>Andrey started his talk by explaining why listening to incompetent people was important. They have requests to make their lives easier however, most of the time, they don&#8217;t know what they are talking about. Even though you say <em>&#8220;it doesn&#8217;t work that way&#8221;</em> or <em>&#8220;it&#8217;s not possible&#8221;</em>, their message is clear: <em>&#8220;change the world&#8221; </em>because they can think out-of-the-box without knowing it. Incompetence is great for requirements. Competence is great for implementation.</p>
<p>After briefly explaining the reasons why a new language makes sense, Andrey cited some of the common language complaints that he keeps hearing and explained how Kotlin addresses those issues :</p>
<ul>
<li>We hate writing stupid constructors!</li>
<li>And getters/setters!</li>
<li>We want to use fields!</li>
<li>Can&#8217;t I just say 3.toString()?</li>
<li>String doesn&#8217;t have enough methods!</li>
<li>One return value is too restricting!</li>
<li>List&lt;String&gt; contains objects, doesn&#8217;t it?</li>
<li>Can you figure out those nulls?</li>
<li>Doesn&#8217;t know that &lt;TD&gt; must be inside a &lt;TR&gt;?</li>
<li>I could use it for the browser, types and all.</li>
</ul>
<p><strong>Kotlin</strong> is a statically-typed JVM-targeted programming language. I like its <em>&#8220;for industrial use&#8221;</em> label. Code written in Kotlin compiles at least as fast as its Java counterparts. And one of the things I really like about Kotlin is its approach to <em>nullable</em> types and <em>NullPointerException</em>. Its type system is designed to prevent unwanted <em>NullPointerException</em>s. Kotlin (or rather its type system) distinguishes between nullable and non-nullable references. (Andrey mentioned that they had a tool (also still in development) that was capable of scanning the standard Java libraries to find nullable objects).</p>
<p>For example, the following <em>name</em> variable is not nullable and the second line causes a compilation error:</p>
<pre>var name : String = "yagiz"
name = null // compilation error</pre>
<p>The following declaration allows nulls:</p>
<pre>var name : String? = "yagiz"
name = null // no error</pre>
<p>The question mark that follows the type does the trick and indicates that this is a nullable type.</p>
<p>Kotlin has also a <em>safe call</em> operator (?.):</p>
<pre>name?.length()</pre>
<p>The call above returns <code>name</code>&#8216;s length if <code>name</code> is not null or it returns <code>null</code> otherwise.</p>
<p>And if you still want a <code>NullPointerException</code> thrown when <code>name</code> is <code>null</code> then you can use the <code>!!</code> operator:</p>
<pre>val length = name!!.length()</pre>
<p>Compare to Scala this produces a better approach because it&#8217;s less verbose and Scala&#8217;s <code>Option</code> type comes with runtime overhead as its values are wrapped into <code>Option</code> objects.</p>
<p>Kotlin has other pretty cool features such as <em>Closures</em>, <em>Extension Functions</em> (two of the rare things that I like about Objective-C are the similar <em>Categories</em> and <em>Class Extensions</em>), <em>Variable Type Inference</em>&#8230;</p>
<p>If you are like me, you&#8217;re probably asking yourself how Kotlin compares to other languages, especially to Scala. They have some differences and official Kotlin documentation has a <a title="How does Katlin compare to Scala" href="http://confluence.jetbrains.net/display/Kotlin/Comparison+to+Scala">comparison list</a> but the important thing to remember is: <em>If you are happy with Scala, you probably don&#8217;t need Kotlin. However if you are looking for an improved way of writing JVM applications then Kotlin looks like a good contender to top the list.</em></p>
<p><a href="http://decaresystemsblog.files.wordpress.com/2012/10/apache1.gif"><img class="alignleft size-full wp-image-598" title="Apache Foundation" src="http://decaresystemsblog.files.wordpress.com/2012/10/apache1.gif?w=620" alt="Apache Foundation"   /></a>The last session that I wanted to talk about in today&#8217;s blog was <em>Heath Kesler</em>&#8216;s <em>Advanced Enterprise Architectures Using Open Source</em> however I realize that this has been a pretty long blog post therefore I&#8217;m going to leave it for the next article, which is going to be cover last day of JavaOne 2012.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/decaresystemsblog.wordpress.com/583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/decaresystemsblog.wordpress.com/583/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=583&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.decaresystems.ie/2012/10/08/javaone-2012-day-3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1ac2db4dd1aedc234ca6ac47cfa45cae?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yagizerkan</media:title>
		</media:content>

		<media:content url="http://decaresystemsblog.files.wordpress.com/2012/10/img_2520.jpg?w=224" medium="image">
			<media:title type="html">JavaOne Schedule Builder Kiosk</media:title>
		</media:content>

		<media:content url="http://decaresystemsblog.files.wordpress.com/2012/10/servlet3-11.png" medium="image">
			<media:title type="html">Servlet API 3.1</media:title>
		</media:content>

		<media:content url="http://decaresystemsblog.files.wordpress.com/2012/10/tiggzi.jpg" medium="image">
			<media:title type="html">tiggzi logo</media:title>
		</media:content>

		<media:content url="http://decaresystemsblog.files.wordpress.com/2012/10/kotlin.png" medium="image">
			<media:title type="html">Kotlin Logo</media:title>
		</media:content>

		<media:content url="http://decaresystemsblog.files.wordpress.com/2012/10/apache1.gif" medium="image">
			<media:title type="html">Apache Foundation</media:title>
		</media:content>
	</item>
		<item>
		<title>JavaOne 2012 &#8211; Day 2</title>
		<link>http://blog.decaresystems.ie/2012/10/04/javaone-2012-day-2/</link>
		<comments>http://blog.decaresystems.ie/2012/10/04/javaone-2012-day-2/#comments</comments>
		<pubDate>Thu, 04 Oct 2012 15:14:05 +0000</pubDate>
		<dc:creator>Yagiz Erkan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[couchbase]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[javaone 2012]]></category>
		<category><![CDATA[jax-rs 2.0]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[vaadin]]></category>

		<guid isPermaLink="false">http://blog.decaresystems.ie/?p=564</guid>
		<description><![CDATA[San Francisco is a busy city. Even though I wake up very early, the traffic and the noise outside suggest that this city never sleeps. But I&#8217;m sure most of the JavaOne attendees were sleeping at 5AM when I woke up to finish yesterday&#8217;s blog post. Anyway&#8230; Let&#8217;s get started. In today&#8217;s article I&#8217;m going to [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=564&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>San Francisco is a busy city. Even though I wake up very early, the traffic and the noise outside suggest that this city never sleeps. But I&#8217;m sure most of the JavaOne attendees were sleeping at 5AM when I woke up to finish yesterday&#8217;s blog post. Anyway&#8230; Let&#8217;s get started. In today&#8217;s article I&#8217;m going to write about 4 of the sessions that I attended during Days[2] of JavaOne.</p>
<p><strong>NoSQL Morning</strong></p>
<p>JavaOne Day 2 started with two interesting NoSQL sessions.<span id="more-564"></span></p>
<div id="attachment_565" class="wp-caption aligncenter" style="width: 273px"><a href="http://decaresystemsblog.files.wordpress.com/2012/10/nosql.png"><img class="size-medium wp-image-565 " title="NoSQL" src="http://decaresystemsblog.files.wordpress.com/2012/10/nosql.png?w=263&#038;h=300" alt="Expert in NoSQL" width="263" height="300" /></a><p class="wp-caption-text">Expert in No SQL</p></div>
<p><a href="http://decaresystemsblog.files.wordpress.com/2012/10/couchbase.jpg"><img class="alignleft  wp-image-570" title="Couchbase Logo" src="http://decaresystemsblog.files.wordpress.com/2012/10/couchbase.jpg?w=180&#038;h=180" alt="Couchbase Logo" width="180" height="180" /></a>First one was a <strong>Couchbase</strong> talk, called <em>Autosharding with NoSQL and</em> <em>Couchbase</em>,<em> </em> given by Raghavan &#8220;Rags&#8221; Srinivas and Matt Ingenthron who were both very good and engaging speakers. Rags started by quickly explaining what NoSQL was. It stands for <em>Not Only SQL</em> and it generally refers to databases that neither expose a SQL interface nor use the relational data model. They are probably better thought as <em>Non-Relational Databases</em>. They typically don&#8217;t offer typical RDBMS features in order to improve overall performance. Therefore they are:</p>
<ul>
<li>Often schemaless</li>
<li>No key constraints</li>
<li>No multi-step transactions</li>
<li>No concept of a join</li>
</ul>
<p>And they are well suited for Cloud deployments.</p>
<p>According to the CAP Theorem (also known as <em>Brewer&#8217;s Theorem),</em> it is impossible for a distributed computer system to simultaneously provide all three of the following guarantees:</p>
<ul>
<li><strong>C</strong>onsistency (all nodes see the same data at the same time)</li>
<li><strong>A</strong>vailability (a guarantee that every request receives a response about whether it was successful or failed)</li>
<li><strong>P</strong>artition tolerance (the system continues to operate despite arbitrary message loss or failure of part of the system)</li>
</ul>
<p>NoSQL databases sacrifice the <em>Consistency</em> guarantee and provide <em>Availability</em> and <em>Partition</em> guarantees.</p>
<p>With the common RDBMS scenario at the Web scale, it becomes expensive and disruptive to shard. Typical applications scale out by adding more commodity servers however databases typically scale up by getting bigger, more complex servers. On the other hand, Couchbase scales like the typical application tier: with linear cost and constant performance. Being able to scale out and auto-sharding flatten the cost and performance curves.</p>
<p>Then Rags gave the example of <a title="Draw Something by OMGPOP" href="http://omgpop.com/drawsomething">Draw Something</a> by OMGPOP which went viral 3 weeks after launch. They reached 40 million users in matter of weeks however they managed to meet the demand successfully by scaling out using Couchbase.</p>
<p>Couchbase is open-source (Apache 2.0) but companies can get enterprise subscriptions providing professional support. Their developer edition is free for 2 nodes. It is supported on Windows and Linux (and Mac but understandably it&#8217;s for development only). It is administered using a very slick looking Web console. The interesting point is that the Web console uses the RESTful API provided by Couchbase therefore anything that can be done through the Admin Console can also be achieved programmatically. It is both a distributed key/value store (based on memcached) and a document oriented database. All documents/items are stored and retrieved using standard hashtable operations such as get, add, etc. They can be stored as JSON documents.</p>
<p>Matt demonstrated how easy to add a node. After talking about certain operations such as CAS (compare and swap), optimistic &amp; pessimistic concurrency, get with lock (GETL), he presented Couchbase&#8217;s <em>View and Query API</em> (Views are perspectives on a collections of documents). He showed code examples of <em>Map/Reduce</em>, <em>Secondary Indexing</em> and the <em>Query API</em>.</p>
<p>The case study of Orbitz was impressive. Average latency and especially max latency improvements after switching to Couchbase looked spectacular.</p>
<p><a href="http://decaresystemsblog.files.wordpress.com/2012/10/mongodb.png"><img class="alignleft  wp-image-572" title="MongoDB Logo" src="http://decaresystemsblog.files.wordpress.com/2012/10/mongodb.png?w=180&#038;h=124" alt="MongoDB Logo" width="180" height="124" /></a>The second NoSQL session was <em>Antoine Girbal</em>&#8216;s <strong>MongoDB</strong> session entitled <em>MongoDB and Java: Big Data Made Easy</em>. This was another good session presented by a good speaker. After introducing <em>Big Data</em> and its 3-Vs (<em><strong>V</strong>olume, <strong>V</strong>ariety and <strong>V</strong>elocity</em>) he told us that <em>Horizontally Scalable Architecture</em> becomes possible thanks to <em>No Joins</em> and <em>No Complex Transactions</em>. He introduced MongoDB&#8217;s use of its <a title="BSON" href="http://www.mongodb.org/display/DOCS/BSON">BSON</a> format which is a binary-encoded serialization of JSON-like documents and the MongoDB/NoSQL equivalents or some RDBMS terms such as <em>collection </em>that is similar to <em>table </em>and <em>document</em> that is similar to <em>row</em>. <em><br />
</em></p>
<p>MongoDB stores data as documents and supports atomic operations on them. It is schema-free. It supports SQL-like equality or regular expression searches. It has a very strong and useful Geospatial support (two-dimensional geospatial indexes), which we successfully use in DSI. An interesting fact revealed by Antoine was that MongoDB&#8217;s Java driver is currently the most used driver, which receives support from 10gen and the community. He, then, got into code examples about obtaining a Mongo instance, working with a database and a collection instance, working with BSON objects, inserting, querying and indexing.</p>
<p>Finally the speaker ended his talk with MongoDB&#8217;s <em>Replica Sets (</em>how they behave and elect a new <em>Primary</em> in case of failures) and <em>Sharding</em>.</p>
<p><a href="http://decaresystemsblog.files.wordpress.com/2012/10/vaadin-logo.png"><img class="alignleft  wp-image-575" title="Vaadin Logo" src="http://decaresystemsblog.files.wordpress.com/2012/10/vaadin-logo.png?w=189&#038;h=45" alt="Vaadin Logo" width="189" height="45" /></a>One of the remaining notable sessions was <em>Building iPad Apps in Pure Java with Vaadin</em> presented by <em>Joonas Lehtinen</em><em>.</em> <strong>Vaadin</strong> is a Java framework for building rich Web applications. By following the GWT approach, Vaadin compiles Java code into HTML5 and JavaScript.</p>
<p>Joonas started his talk by explaining why iPad has become a very important tool: it had a very quick and important market penetration, it currently holds 70% of the tablet marketshare and approximately 100 million iPads have been shipped to date. Furthermore, last year Apple claimed that 93% of Fortune 500 companies had deployed or were testing iPads.</p>
<p>Vaadin, which means female deer in Finnish (hence the curved-bracket and v in their logo that form the head of a stag) is an open-source (licensed under Apache License 2.0) Web application framework for building rich Internet applications. As opposed to most of the other HTML5-and-JavaScript-based mobile application development tools, Vaadin features a server-side architecture, which means that the majority of the code runs on the server-side. Some of you probably has seen the similarity of this approach to GWT&#8217;s and not so surprisingly, Vaadin is using GWT (Google Web Toolkit) under the hood to generate Web-based output. Its programming language is Java and just like in GWT, the programming model is very similar to desktop UI building with events and widgets unlike the traditional Web UI programming model.</p>
<p>During the demos, it looked like Vaading has a rich set of UI library, mostly through its commercial TouchKit. For example their iOS theme has the following major components (among others):</p>
<ul>
<li>TouchKitWindow</li>
<li>NavigationManager</li>
<li>NavigationBar</li>
<li>NavigationButton</li>
<li>SwipeView</li>
<li>PopoverWindow</li>
<li>Tabsheets</li>
<li>Toolbar</li>
<li>Switch</li>
</ul>
<p>One of interesting features of Vaadin is that it offers Offline Mode but we didn&#8217;t get a chance to see it working as part of <a title="JavaOne 2012 - Vaadin Demo" href="https://github.com/jojule/CrmDemo">the demo</a>. It is also supported by a Maven archetype and running/testing it becomes as easy as typing:</p>
<p><code>mvn package jetty:run-war</code></p>
<p>Its on-line documentation looked very comprehensive and they&#8217;re also offering a downloadable <a title="Vaadin e-book" href="https://vaadin.com/book">free e-book</a> if you are interested in learning more about it.</p>
<p>Vaadin looked very convincing with its component library, ease of use and programming model. It was a very positive first impression.</p>
<p><a href="http://decaresystemsblog.files.wordpress.com/2012/10/jax-rs2.png"><img class="alignleft size-full wp-image-578" title="JAX-RS 2.0" src="http://decaresystemsblog.files.wordpress.com/2012/10/jax-rs2.png?w=620" alt="JAX-RS 2.0"   /></a></p>
<p>The last session I want to talk about today is one of my afternoon sessions entitled <em><strong>JAX-RS 2.0</strong>: New and Noteworthy in the RESTful Web Services API</em> presented by <em>Marek Potocia</em>r and <em>Santiago Pericasgeertsen</em>.</p>
<p>More and more developers/architects become convinced that REST, with its simplicity, is in general the best way to expose services. For the Java platform, there are many good frameworks and in DSI we have been happily using <a title="RESTEasy" href="http://www.jboss.org/resteasy">RESTEasy</a>. However standards are important and I like it when standards emerge from the industry/community rather than dictated by a God-like company. This is the case with JAX-RS, Java&#8217;s RESTful service standard. There are very important changes coming with JAX-RS 2.0.</p>
<p>JAX-RS is now a 4-year-old mature specification. Not surprisingly its new version, JAX-RS 2.0, is mostly annotation-driven. It is part of Java EE 6 however it has no internal dependency. And JSR-339 API is now public, meaning there won&#8217;t be any more major changes to it, only slight adjustments.</p>
<p>During their talk, Marek and Santiago developed some of the new features coming with JAX-RS 2.0.</p>
<p><strong>Client API</strong></p>
<p>This is an area where there needed to be standardization and simplification because HTTP client libraries are usually too low-level. This API gives the developers the ability to work with high-level classes such as: ClientFactory, Client, Configuration, RequestBuilder etc. Here&#8217;s an example:</p>
<pre>//Create a client
Client client = ClientFactory.newClient();

//Get account balance
String bal = client.target("http://.../atm/{cardId}/balance")
                   .resolveTemplate("cardId", "4444333322221111")
                   .queryParam("pin", "5678")
                   .request("text/plain").get(String.class);</pre>
<p>Quite simple, really.</p>
<p><strong>Common Configuration</strong></p>
<p>There have been multiple configuration-related complaints therefore the common configuration proposal attempts to evolve the existing client-side <code>Feature</code> into a common solution for both client-side and server-side.</p>
<p>For example, on the client-side:</p>
<pre>client.configuration().register(JsonMessageBodyReader.class)
                      .register(JsonMessageBodyWriter.class)
                      .register...
                      .setProperty("jsonp.callback.name", "callback")
                      .setProperty("jsonp.callback.queryParam", "true")
                      ...</pre>
<p>becomes:</p>
<pre>JsonFeature jf = new JsonFeature().enableCallbackQueryParam();
Client.configuration().register(jf);</pre>
<p>On the server-side:</p>
<pre>public Set&lt;Class&lt;?&gt;&gt; getClasses() {
  ...
  classes.add(JsonMessageBodyReader.class);
  classes.add(JsonMessageBodyWriter.class);
  classes.add(JsonpInterceptor.class);
  ...
}</pre>
<p>becomes:</p>
<pre>public Set&lt;Class&lt;?&gt;&gt; getClasses() {
  ...
  classes.add(JsonFeature.class);
  ...
}</pre>
<p><em>Feature</em> is a new interface and in the above example <em>JsonFeature</em> is an implementation of that. On the server-side it is also possible with dynamic Features.</p>
<p><strong>Asynchronous Processing</strong></p>
<p>Another great addition to the spec is asynchronous processing capability.</p>
<p>On the server-side, this offloads the I/O container threads, especially critical for the long-running operations. It represents suspendable client connections where it is possible to suspend the connection while waiting for an event and resume when the event in question arrives.</p>
<p>On the client-side there&#8217;s an asynchronous request invocation API.</p>
<p><strong>Filters &amp; Interceptors</strong></p>
<p>It&#8217;s really not so difficult to imagine immediate use for filters and interceptors. It would allow us to customize JAX-RS request/response processing for operations such as logging, compression, security etc. It is introduced for both on the server-side and on the client-side.</p>
<p><strong>Hypermedia Support</strong></p>
<p>Support for HATEOAS (Hypermedia As The Engine Of App State).</p>
<p><strong>Server-Side Content Negociation</strong></p>
<p>Content negotiation is a mechanism defined in the HTTP specification that makes it possible to serve different versions of a document (or more generally, a resource representation) at the same URI, so that user agents can specify which version fit their capabilities the best. One classical use of this mechanism is to serve an image in GIF or PNG format, so that a browser that cannot display PNG images (e.g. MS Internet Explorer 4) will be served the GIF version.</p>
<p>All in all it has been a very good JavaOne so far. Pourvu que ça dure!</p>
<p>Hasta Mañana!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/decaresystemsblog.wordpress.com/564/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/decaresystemsblog.wordpress.com/564/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=564&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.decaresystems.ie/2012/10/04/javaone-2012-day-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1ac2db4dd1aedc234ca6ac47cfa45cae?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yagizerkan</media:title>
		</media:content>

		<media:content url="http://decaresystemsblog.files.wordpress.com/2012/10/nosql.png?w=263" medium="image">
			<media:title type="html">NoSQL</media:title>
		</media:content>

		<media:content url="http://decaresystemsblog.files.wordpress.com/2012/10/couchbase.jpg" medium="image">
			<media:title type="html">Couchbase Logo</media:title>
		</media:content>

		<media:content url="http://decaresystemsblog.files.wordpress.com/2012/10/mongodb.png?w=300" medium="image">
			<media:title type="html">MongoDB Logo</media:title>
		</media:content>

		<media:content url="http://decaresystemsblog.files.wordpress.com/2012/10/vaadin-logo.png?w=300" medium="image">
			<media:title type="html">Vaadin Logo</media:title>
		</media:content>

		<media:content url="http://decaresystemsblog.files.wordpress.com/2012/10/jax-rs2.png" medium="image">
			<media:title type="html">JAX-RS 2.0</media:title>
		</media:content>
	</item>
		<item>
		<title>JavaOne 2012 &#8211; Day 1</title>
		<link>http://blog.decaresystems.ie/2012/10/02/javaone-2012-day-1/</link>
		<comments>http://blog.decaresystems.ie/2012/10/02/javaone-2012-day-1/#comments</comments>
		<pubDate>Tue, 02 Oct 2012 14:53:10 +0000</pubDate>
		<dc:creator>Yagiz Erkan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[codename one]]></category>
		<category><![CDATA[constraint programming]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[javaone 2012]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[mobile test automation]]></category>

		<guid isPermaLink="false">http://blog.decaresystems.ie/?p=555</guid>
		<description><![CDATA[Unfortunately, as I feared, this first day of JavaOne started very early for me. I woke up at 4AM and I decided not to fight it. It gave me time to do a bit of work and write yesterday&#8217;s blog entry. Atomic Data Structures I left my hotel at 8 and walked 3 blocks that [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=555&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://decaresystemsblog.files.wordpress.com/2012/10/javaone-sf-2012-banner.png"><img class="size-full wp-image-556 aligncenter" title="JavaOne 2012 Banner" src="http://decaresystemsblog.files.wordpress.com/2012/10/javaone-sf-2012-banner.png?w=620" alt="JavaOne 2012"   /></a></p>
<p>Unfortunately, as I feared, this first day of JavaOne started very early for me. I woke up at 4AM and I decided not to fight it. It gave me time to do a bit of work and write yesterday&#8217;s blog entry.</p>
<p><span style="text-decoration:underline;"><strong>Atomic Data Structures</strong></span></p>
<p>I left my hotel at 8 and walked 3 blocks that separated it from Hilton where my first session was taking place. It is important to pick a good session to start the week. I thought I did a good job in pre-enrolling in <em>&#8220;How do atomic data structures work?&#8221;</em> but unfortunately it didn&#8217;t live up to my expectations. It was obvious that the presenter knew his topic very well and this was his area of expertise however he gave the impression that he was nervous. Consequently, his talk was not well structured, his thoughts wandered and his jokes failed to revive the audience.<span id="more-555"></span></p>
<p>The session was centred around non-blocking data structures and how they work. The background consisted of the definition of atomicity, various standard ways to achieve it, what is a lock-free data structure, synchronized regions, memory barriers, various useful classes from the standard Java API such as <em>java.util.concurrent.atomic.AtomicReference</em> and<em> java.util.concurrent.atomic.AtomicReferenceFieldUpdater</em>. The background ended with a section about atomic updates.</p>
<p>The speaker then talked about linked queues, non-blocking linked queues and array-based bounded queues. It was a good refresher to listen to techniques such as the required steps in removing and adding an element. The most interesting part of the session was about the <a title="LMAX Disruptor" href="http://lmax-exchange.github.com/disruptor/">LMAX Disruptor</a>.</p>
<p>LMAX is a trading platform. In their quest to achieve very low latency and high throughput with their Java platform, they created a framwork that has &#8220;mechanical sympathy&#8221; for the hardware (cache misses at the CPU-level are costly) and that is lock-free (locks requiring kernel arbitration are costly). Their solution is Disruptor and it sounds like a very interesting framework.</p>
<p><span style="text-decoration:underline;"><strong>Constraint Programming API</strong></span></p>
<p>My next session was one of the most interesting sessions of the day: <em>Dr. Jacob Feldman</em>&#8216;s <em>Constraint Programming API</em> talk. I didn&#8217;t know Dr. Feldman previously but it turns out that he worked in University College Cork for 5 years. I was pleasantly surprised to hear that UCC&#8221;s <a title="Cork Constraint Computation Centre" href="http://4c.ucc.ie/web/index.jsp">Cork Constraint Computation Centre</a> (4C) was the world leader in this area.</p>
<p>Constraint Programming (CP) is a programming model where the developer/designer states the relationships between the variables declaratively. CP separates <em>Problem Definition</em> from <em>Problem Resolution</em>. For example, you have a system where 3 variables have the following relationships (constraints):</p>
<ul>
<li>x + y = z</li>
<li>x = y &#8211; 3</li>
<li>0 &lt;= x, y, z &lt;=9</li>
</ul>
<p>You could solve this simple problem by creating nested loops and by enforcing the constraints. But the API gives you a way to describe the problem in a readable fashion and solves the problem with better-than-reasonable performance.</p>
<p>Another simple example would be an application/component that displays a greeting message based on the time of the day, the gender, the marital status and the salutation of the person. With each variable the decision table grows and the combinations grow exponentially. You can easily see how far such a problem can go.</p>
<p>Dr. Feldman started his talk by defining what are optimization engines and what are the leading optimization techniques that are currently in use. He mentioned mainly two optimization techniques:</p>
<ul>
<li>LP/MIP (Linear Programming/Mixed Integer Programming)</li>
<li>CP (Constraint Programming)</li>
</ul>
<p>And as the name of his session indicated, he focused on Constraint Programming. He gave a very simple example how a problem resolution can hide the associated problem definition. As part of his coding example, where 3 nested loops were used to solve the problem, by optimizing the code, the problem definition became completely obfuscated to the reader. One couldn&#8217;t go back to the code and extract the initial constraints easily. Instead he used the CP API to define the problem more clearly before solving it in a <em>Constraint Satisfaction Problem</em> (CSP) example:</p>
<p><code>Problem p = ProblemFactory.newProblem("Test");<br />
Var x = p.variable("X", 1, 10);<br />
...<br />
Var cost = x.multiply(3).multiply(y).minus(z.minus...</code></p>
<p>Then he quickly mentioned the concept of constraint propagation and bi-directional constraint propagation:</p>
<p>Imagine there are the following constraints:</p>
<ul>
<li>x &lt; y</li>
<li>0 &lt;= x, y &lt;= 10</li>
</ul>
<p>Given the constraints above the following emerges:</p>
<ul>
<li>0 &lt;= x &lt;= 9</li>
<li>1 &lt;= y &lt;= 10</li>
</ul>
<p>Changes in x causes changes in y:</p>
<ul>
<li>x &gt; 3</li>
<li>y &gt; 4</li>
</ul>
<p><a title="JSR=331 Java Constraint API" href="http://www.jcp.org/en/jsr/detail?id=331">JSR-331</a> defines a constraint programming API for Java. It has some basic concept such as <em>Problem</em> and <em>Solver</em>:</p>
<p>Problem:</p>
<ul>
<li>Var</li>
<li>VarReal</li>
<li>VarBool</li>
<li>VarSet</li>
<li>Constraint</li>
<li>&#8230;</li>
</ul>
<p>Solver:</p>
<ul>
<li>Search strategy</li>
<li>Solution</li>
<li>&#8230;</li>
</ul>
<p>The rest of the talk was going through various very interesting examples in different nature:</p>
<ul>
<li>Map colouring problem where given a list of countries and colours the application has to match a country with a colour that is different then its neighbours&#8217;.</li>
<li>A logical problem: &#8221; SEND + MORE = MONEY&#8221; where each letter corresponds to a digit.</li>
<li>The famous &#8220;Zebra Puzzle&#8221; that is said to be invented by Einstein.</li>
<li>Scheduling problems,</li>
<li>House construction problems,</li>
<li>Resource allocation problems,</li>
<li>Cloud balancing</li>
</ul>
<p>It was a very interesting and engaging talk. I&#8217;m already downloading <a title="OpenRules" href="http://openrules.com">OpenRules</a> to have a deeper look at it. For more information Dr. Feldman recommended the <em>Handbook of Constraint Programming</em> by Francesca Rossi, Peter van Beek, Toby Walsh.</p>
<p><span style="text-decoration:underline;"><strong>Java vs Node.js</strong></span></p>
<p>My next session went through building a RESTful Web API using oAuth 2.0 by very much concentrating on oAuth and infrastructure. The most interesting information that I retain from the talk is that even though they love Node.js&#8217;s even-driven model, it failed to make an impression on Shutterfly who still uses Java because Node.js hasn&#8217;t performed as well as they expected.</p>
<p><span style="text-decoration:underline;"><strong>Continuous Integration and Automated Mobile Application Testing</strong></span></p>
<p>The talk of Intuit&#8217;s Eing Ong was another great one. Concentrating on Android and iOS, she first described a typical setup. After a theoretical introduction to mobile tests in a continuous integration environment using and the two main automated testing techniques (instrumented and non-instrumented), she presented demos using iOS and Android ran by <a title="Jenkins CI" href="http://jenkins-ci.org/">Jenkins</a>.</p>
<p>Let me quickly reiterate some of the main points starting with the advantages of instrumentation and non-instrumentation:</p>
<p><span style="text-decoration:underline;">Non-instrumentation:</span></p>
<ul>
<li>Device platform agnostic.</li>
<li>Test code reuse.</li>
<li>Test language &amp; test harness autonomy.</li>
<li>Support for:
<ul>
<li>Multi-applications testing</li>
<li>Custom UI Levels</li>
<li>Database/server API assertions</li>
<li>Use of external libraries (e.g. image manipulation)</li>
</ul>
</li>
</ul>
<p><span style="text-decoration:underline;">Instrumentation:</span></p>
<ul>
<li>Elements can be accessed.</li>
<li>Ease of debugging</li>
<li>Ease of test verification</li>
<li>Reduced tools dependencies</li>
<li>Support for:
<ul>
<li>Installing application</li>
<li>Launching application</li>
<li>Cleanup (kill application)</li>
<li>Test execution on device</li>
<li>Code coverage</li>
</ul>
</li>
</ul>
<p>When to use these techniques:</p>
<p><span style="text-decoration:underline;">Non-instrumentation:</span></p>
<ul>
<li>External interaction</li>
<li>Hardware interaction</li>
<li>Image-based features</li>
</ul>
<p>Instrumentation:</p>
<ul>
<li>Text-based features</li>
</ul>
<p>Mobile automation tools:</p>
<p><span style="text-decoration:underline;">Android:</span></p>
<ul>
<li>Non-instrumentation
<ul>
<li>eggPlant</li>
<li>Sikuli</li>
<li>MOET</li>
<li>MonkeyRunner</li>
</ul>
</li>
<li>Instrumentation
<ul>
<li>Robotium</li>
<li>Calabash</li>
<li>MonkeyTalk</li>
</ul>
</li>
</ul>
<p>iOS:</p>
<ul>
<li>Non-instrumentation
<ul>
<li>eggPlant</li>
<li>Sikuli</li>
<li>MOET</li>
</ul>
</li>
<li>Instrumentation
<ul>
<li>UIAutomation</li>
<li>KIF</li>
<li>iCuke</li>
<li>Frank</li>
<li>UISpec</li>
<li>Zucchini</li>
<li>Bwoken</li>
<li>Calabash</li>
<li>MonkeyTalk</li>
</ul>
</li>
</ul>
<p>She was a great speaker who kept the session interesting.</p>
<p><span style="text-decoration:underline;"><strong>Mobile WORA with Codename One</strong></span></p>
<p>I&#8217;m very happy that Codename One session didn&#8217;t disappoint me and even exceeded my expectations. This talk was one of the highlights of the day. Presented mainly by Shai Almog accompanied by his colleague Chen Fishbein, both ex-Sun employees, the session covered Codename One, a cross platform mobile development tool in Java.</p>
<p><a title="Codename One" href="http://www.codenameone.com/">Codename One</a> is free &amp; Open Source tool. It allows Java developers to build true native apps for all major mobile devices. Its architecture is very interesting as some part of the heavy lifting is done on the cloud. This is especially useful for iOS applications as one needs a Mac in order to build an iOS application. Codename One has the following architectural parts:</p>
<ul>
<li>Java API</li>
<li>Designer</li>
<li>Simulator</li>
<li>IDE Plug-in (NetBeans and Eclipse)</li>
<li>Build Server</li>
<li>Service Cloud</li>
</ul>
<p>The Java API does most of the heavy lifting by compiling and glueing the user code to the target platform code. They are also talking to JetBrains to collaborate on a plug-in for IntelliJ IDEA.</p>
<p>Their <em>Kitchen Sink</em> demo looked very good on ten or so different devices running iOS, Android, Win8 Mobile and BlackBerry among a few others. However I need to try it for myself to get a real feel for it. As I am writing this post, Eclipse is installing the Codename One plug-in and I&#8217;m hoping to get my hands on a simple example very soon.</p>
<p>Their &#8220;free&#8221; usage is somewhat limited, especially for iOS applications. Every user gets 100 credits/month that can be spent for builds. An Android app consumes 1 credit/build however this goes up to 20 credits/build for iOS as it is a much more lengthy and costly (Mac hosting on the Cloud is more expensive). But I think this should be fine for most amateurish apps. To get unlimited credits, one pays $9/month, which covers, understandably, various costs associated by running servers on the Cloud. For enterprise level agreements, there&#8217;s a higher and more expensive tier.</p>
<p>All in all Codename One looked very promising. Very soon I&#8217;m going to have a first-hand experience using it. I&#8217;ll probably blog about it later.</p>
<p>It&#8217;s time for me to get ready for the 2nd day of JavaOne 2012. I&#8217;m hoping to meet you here tomorrow.</p>
<p>A demain!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/decaresystemsblog.wordpress.com/555/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/decaresystemsblog.wordpress.com/555/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=555&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.decaresystems.ie/2012/10/02/javaone-2012-day-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1ac2db4dd1aedc234ca6ac47cfa45cae?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yagizerkan</media:title>
		</media:content>

		<media:content url="http://decaresystemsblog.files.wordpress.com/2012/10/javaone-sf-2012-banner.png" medium="image">
			<media:title type="html">JavaOne 2012 Banner</media:title>
		</media:content>
	</item>
		<item>
		<title>JavaOne 2012 &#8211; Day 0</title>
		<link>http://blog.decaresystems.ie/2012/10/01/javaone-2012-day-0/</link>
		<comments>http://blog.decaresystems.ie/2012/10/01/javaone-2012-day-0/#comments</comments>
		<pubDate>Mon, 01 Oct 2012 14:01:25 +0000</pubDate>
		<dc:creator>Yagiz Erkan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[default method]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[java 8]]></category>
		<category><![CDATA[java ee 7]]></category>
		<category><![CDATA[javafx]]></category>
		<category><![CDATA[javaone 2012]]></category>
		<category><![CDATA[lambda expressions]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[project lambda]]></category>

		<guid isPermaLink="false">http://blog.decaresystems.ie/?p=549</guid>
		<description><![CDATA[It is a long trip. A very long one. Even though I never forget this fact before the travelling to San Francisco, the reality sinks in during the journey. My knowledge counter reset after this reality check: 19 hours from home to the hotel. I&#8217;m not even going to complain about the jet lag. I&#8217;m [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=549&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>It is a long trip. A very long one. Even though I never forget this fact before the travelling to San Francisco, the reality sinks in during the journey. My knowledge counter reset after this reality check: 19 hours from home to the hotel. I&#8217;m not even going to complain about the jet lag. I&#8217;m here to write about JavaOne after all&#8230; wide awake at 4AM. So, let&#8217;s get started.</p>
<p>Every year there is one or a few dominating themes in JavaOne. You get a feel for it just by looking at the conference schedule during your pre-enrolment. If you check the same calender just before the first day of JavaOne, you can see which sessions are popular, too popular actually, and full. I even noticed a few talks whose waiting list was in the order of 200. So, without setting foot in Moscone Center and talking to fellow attendees one can get a fair impression about what are the main themes of the year.</p>
<p>There is definitely a concentration around Cloud-related sessions and also HTML5-related responsive Web technology sessions. But I think <em>Cloud</em> is the term we are going to hear most often in this year&#8217;s JavaOne. So, it doesn&#8217;t come as a surprise that Larry Ellison, CEO and co-founder of Oracle, introduced Oracle 12c to thousands of conference attendees at Moscone Center today. What does &#8220;c&#8221; stand for? You guessed it right: <em>Cloud</em>. One of the main design goals of Oracle 12c was Cloud computing deployments. <em>Cloud</em> is now at the heart of Oracle. They put the emphasis on the <em>Private Cloud</em> with their <em>Exadata</em> and/or <em>Exalogic</em> servers.</p>
<p>Again, it is very disappointing not to have any talk on Android. If there&#8217;s someone out there listening (or reading) this is me complaining about it. Android is Java&#8217;s only viable mobile platform. You keep talking about developers, community, teamwork, etc. Prove that these are not stories told just to motivate developers and companies in order to generate more revenue. Prove that you really care about what the community wants. Put your greed and differences aside for once and do what is right for the developers.</p>
<div id="attachment_550" class="wp-caption aligncenter" style="width: 630px"><a href="http://decaresystemsblog.files.wordpress.com/2012/10/javaone-day0-2.jpg"><img class="size-full wp-image-550" title="JavaOne 2012 - Technical Keynote Speech" src="http://decaresystemsblog.files.wordpress.com/2012/10/javaone-day0-2.jpg?w=620&#038;h=465" alt="JavaOne 2012 - Technical Keynote Speech" width="620" height="465" /></a><p class="wp-caption-text">JavaOne 2012 &#8211; Technical Keynote Speech</p></div>
<p>This year the format of the Technical Keynote Speech was somewhat different. There weren&#8217;t many short technology demos, which was probably a good thing. Instead, the JavaFX team has developed a Schedule Builder/Viewer application and it was the main application used in various demos. I think this is a better approach. It also serves a purpose and the attendees can use it during the conference to get a feel for it.</p>
<p>The Conference Schedule app was pretty slick and responsive. They ran it firstly on a Windows laptop. And then on a Mac. To be honest I couldn&#8217;t see any difference. I&#8217;m curious about its UI, and I&#8217;m going to look at it in detail if I can find an opportunity because some sections had a very iOS-like look and feel. From such a demo one can understand that JavaFX has come a long way. I especially liked  to hear about practical features such as being able to produce native code so that a JavaFX application can be submitted to Apple MacStore for instance.</p>
<p>A talk about <em>Project Lambda</em> was next. I&#8217;m not a huge fan of lambda expressions. I&#8217;ll probably use them but I have the feeling that they add more complexity and diminish the readability of the code. But I am going to hold on to refrain from having a strong opinion until I get a chance to use lambda expressions on real living, breathing code.</p>
<p>There was a brief mention of Java 8&#8242;s <em>Default Method</em>s. I like the idea. A very similar concept exists in Objective-C and being able to augment standard interfaces and provide default implementations come in handy.</p>
<p>Then they ran the same Conference Schedule application on a touchscreen kiosk (supporting multi-touch gestures) and on an impressive <a title="Raspberry Pi" href="http://www.raspberrypi.org/">Raspberry Pi</a>. Raspberry Pi is a nice little Linux box that you can get for $25. I&#8217;m not kidding. Go and have a look. Or as they advertise: <em>&#8220;Take a byte!&#8221;</em></p>
<p>Then followed a short section about Project Jigsaw, explaining why it is now part of Java 9 and not as previously announced Java 8, and about the new <em>Compact Profiles</em>. The Compact Profiles specification defines three subset profiles for the Java Runtime Environment. Currently the entire JRE takes up about 52MB. The proposed profiles will take up 10MB, 17MB and 24MB, each level allowing a more feature-complete runtime. However, it looks like the minimalistic profile will allow things like running a Web server, for instance.</p>
<p>The second part of the keynote speech was about Java Enterprise Edition 7. Java EE 7 comes with increased productivity. It encompasses new and/or improved specifications such as:</p>
<ul>
<li>A new batch API (Batch Applications For The Java Platform 1.0 &#8211; JSR 352),</li>
<li>A new JSON API (Java API For JSON Processing (JSON-P) &#8211; JSR 353),</li>
<li>A new WebSocket API (Java API For WebSocket 1.0 &#8211; JSR 356),</li>
<li>Java Temporary Caching API 1.0 (using annotations such as @CachePut, @CacheKeyParam, @CacheValue),</li>
<li>Bean Validation 1.1 (using annotations such as @NotNull, @Max(&#8220;10&#8243;), @Future),</li>
<li>JMS 2.0 (less verbose, reduced boilerplate code, resource injection, AutoCloseable support, etc)</li>
<li>JAX-RS 2.0 (client API, message filters and entity interceptors, etc)</li>
<li>THML5 support (HTML5 Forms, etc)</li>
</ul>
<p>The keynote speech, a long one, ended at around 8PM, with the mention and demos of Project Avatar and Project Easel.</p>
<p>All in all, it looks like it is going to be an interesting week in JavaOne. Talk to you tomorrow.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/decaresystemsblog.wordpress.com/549/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/decaresystemsblog.wordpress.com/549/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=549&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.decaresystems.ie/2012/10/01/javaone-2012-day-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1ac2db4dd1aedc234ca6ac47cfa45cae?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yagizerkan</media:title>
		</media:content>

		<media:content url="http://decaresystemsblog.files.wordpress.com/2012/10/javaone-day0-2.jpg" medium="image">
			<media:title type="html">JavaOne 2012 - Technical Keynote Speech</media:title>
		</media:content>
	</item>
		<item>
		<title>RPC Method Call Crashed COM+ Application &#8211; But Which Call Was That?</title>
		<link>http://blog.decaresystems.ie/2012/09/07/which-rpc-crashed/</link>
		<comments>http://blog.decaresystems.ie/2012/09/07/which-rpc-crashed/#comments</comments>
		<pubDate>Fri, 07 Sep 2012 14:19:01 +0000</pubDate>
		<dc:creator>Mihailo Lalevic</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Interoperability]]></category>
		<category><![CDATA[VB6]]></category>
		<category><![CDATA[WinDbg]]></category>

		<guid isPermaLink="false">http://blog.decaresystems.ie/?p=538</guid>
		<description><![CDATA[Recently, while testing our COM+ application it started crashing with c0000005 &#8211; Access violation. This is VB6 COM+ called from C# application. The funny thing is, dllhost.exe crashes due to the error but there is no indication which method call crashed it. Since it is multi-threaded application C# logs loads of RPC Unavailable errors once [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=538&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Recently, while testing our COM+ application it started crashing with c0000005 &#8211; Access violation. This is VB6 COM+ called from C# application. The funny thing is, dllhost.exe crashes due to the error but there is no indication which method call crashed it.</p>
<p>Since it is multi-threaded application C# logs loads of RPC Unavailable errors once the COM+ crashes, but nowhere I could find original point where the crash occurred. Actually the thread dies and even if debugged in VS the debugger doesn&#8217;t break on this unhandled exception as one would expect, even though it breaks on all other &#8211; RPC Unavailable exceptions.</p>
<p>So, the first task in this case, for me at least, would be to find what method is called when the crash occurred. When facing something unexpected like this I resort to WinDbg which I know just enough to get by analysing crash dumps. Necessity on couple of other occasions made me learn the basics so here are some notes.</p>
<p class="mceWPmore"><span id="more-538"></span></p>
<h2 class="mceWPmore">Preparation</h2>
<p class="mceWPmore">First we need the <strong>crash dump</strong>. That&#8217;s easily obtained through <a title="DebugDiag 1.2" href="http://www.microsoft.com/en-us/download/details.aspx?id=26798">DebugDiag tool</a>. Instructions on how to get the dump <a title="Getting the crash dump" href="http://support.microsoft.com/kb/919789">from Microsoft</a> is a bit on the dry side, I prefer <a title="Getting the crash dump with pictures" href="http://blogs.msdn.com/b/kaushal/archive/2012/05/09/using-debugdiag-to-capture-a-dump-on-first-chance-exception.aspx">instructions with some pictures in it</a>. In this case I needed to select a specific MTS/COM+ application and choose mine from the list. In the list of exceptions I chose C0000005 to generate Full Userdump. Analysing crash dump through DebugDiag tool is normally useful, but in this case did not offer any useful insight.</p>
<p class="mceWPmore">After exception happens user dump is created and from there on we can use <a title="WinDbg" href="http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx">WinDbg</a>. That&#8217;s a part of Windows SDK and I selected to install it as <a title="Windows SDK" href="http://msdn.microsoft.com/en-US/windows/hardware/hh852363">Standalone Component</a>. Follow this intro for <a title="WinDbg intro for .NET developers" href="http://blogs.msdn.com/b/kaevans/archive/2011/04/11/intro-to-windbg-for-net-developers.aspx">getting started with WinDbg</a>. Here&#8217;s the list of <a title="Common WinDbg Commands" href="http://windbg.info/doc/1-common-cmds.html">useful commands</a> of which <a title="Common WinDbg Commands - Call Stack" href="http://windbg.info/doc/1-common-cmds.html#15_call_stack">stack commands</a> are particularly useful.</p>
<p class="mceWPmore">Oh, BTW, you&#8217;d better make sure to have debug symbols available for your COM+. In case of VB6 private symbols are rubbish, but at least for exported symbols I got names of methods, otherwise it would&#8217;ve been impossible to resolve this.</p>
<h2 class="mceWPmore">Analysis</h2>
<p>Lets see what we have in our crash dump:</p>
<pre class="brush: plain; highlight: [7]; title: ; notranslate">

This dump file has an exception of interest stored in it.
The stored exception information can be accessed via .ecxr.
(2620.1b6c): Access violation - code c0000005 (first/second chance not available)
eax=03d5ba94 ebx=72a1a274 ecx=75ebb100 edx=00a3f140 esi=72a1a008 edi=029df748
eip=75ebb13a esp=00a3f06c ebp=00a3f174 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010246
oleaut32!_IDispatchProxyVtbl+0x26:
75ebb13a 336c0000        xor     ebp,dword ptr [eax+eax] ds:0023:07ab7528=????????

</pre>
<p>So <span style="color:#ff0000;">_IDispatchProxyVtbl</span> is crashing. Errrr, looks like vtable &#8211; we&#8217;re trying to call some method on COM+ &#8230; well, I know that OK, lets try analysing this exception:</p>
<pre class="brush: plain; title: ; notranslate">
0:013&gt; !analyze -v
...
FAULTING_IP:
oleaut32!_IDispatchProxyVtbl+26
75ebb13a 336c0000        xor     ebp,dword ptr [eax+eax]

EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 75ebb13a (oleaut32!_IDispatchProxyVtbl+0x00000026)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000000
Parameter[1]: 07ab7528
Attempt to read from address 07ab7528

DEFAULT_BUCKET_ID:  INVALID_POINTER_READ
PROCESS_NAME:  dllhost.exe
ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.
EXCEPTION_PARAMETER1:  00000000
EXCEPTION_PARAMETER2:  07ab7528
READ_ADDRESS:  07ab7528

FOLLOWUP_IP:
oleaut32!_IDispatchProxyVtbl+26
75ebb13a 336c0000        xor     ebp,dword ptr [eax+eax]

MOD_LIST: &lt;ANALYSIS/&gt;
NTGLOBALFLAG:  0
APPLICATION_VERIFIER_FLAGS:  0
LAST_CONTROL_TRANSFER:  from 75d904e8 to 75ebb13a
FAULTING_THREAD:  00001b6c
PRIMARY_PROBLEM_CLASS:  INVALID_POINTER_READ
BUGCHECK_STR:  APPLICATION_FAULT_INVALID_POINTER_READ

STACK_TEXT:
00a3f174 75d904e8 029df170 00216750 00000202 oleaut32!_IDispatchProxyVtbl+0x26
00a3f190 75df5311 110082bb 00a3f380 00000002 rpcrt4!Invoke+0x2a
00a3f598 759daec1 02a7bfb8 002110a8 00178b88 rpcrt4!NdrStubCall2+0x2d6
00a3f5e0 75ebffd3 02a7bfb8 00178b88 002110a8 ole32!CStdStubBuffer_Invoke+0x3c
00a3f604 759dd876 03d5ba00 00178b88 002110a8 oleaut32!CUnivStubWrapper::Invoke+0xcb
00a3f64c 759dddd0 00178b88 0282dde8 03466750 ole32!SyncStubInvoke+0x3c
00a3f698 758f8a43 00178b88 0019ec48 03d5ba00 ole32!StubInvoke+0xb9
00a3f774 758f8938 002110a8 00000000 03d5ba00 ole32!CCtxComChnl::ContextInvoke+0xfa
00a3f790 758f950a 00178b88 00000001 03d5ba00 ole32!MTAInvoke+0x1a
00a3f7bc 759ddccd 00178b88 00000001 03d5ba00 ole32!STAInvoke+0x46
00a3f7f0 759ddb41 d0908070 002110a8 03d5ba00 ole32!AppInvoke+0xab
00a3f8d0 759de1fd 00178b30 028bc878 00000400 ole32!ComInvokeWithLockAndIPID+0x372
00a3f8f8 758f9367 00178b30 00000400 001af3f8 ole32!ComInvoke+0xc5
00a3f90c 758f9326 00178b30 00a3f9cc 00000400 ole32!ThreadDispatch+0x23
00a3f950 75a1c4e7 00230b56 00000400 0000babe ole32!ThreadWndProc+0x161
....
</pre>
<p>Not really useful. I&#8217;ve analysed exceptions before and this command&#8217;s output was much more useful on those occasions.<br />
So lets see the stack (<strong>knf</strong> shows the stack with  frame number and size of the frame):</p>
<pre class="brush: plain; highlight: [5]; title: ; notranslate">
0:013&gt; knf
#   Memory  ChildEBP RetAddr
00           00a3f174 75d904e8 oleaut32!_IDispatchProxyVtbl+0x26
01        1c 00a3f190 75df5311 rpcrt4!Invoke+0x2a
02       408 00a3f598 759daec1 rpcrt4!NdrStubCall2+0x2d6
03        48 00a3f5e0 75ebffd3 ole32!CStdStubBuffer_Invoke+0x3c
04        24 00a3f604 759dd876 oleaut32!CUnivStubWrapper::Invoke+0xcb
05        48 00a3f64c 759dddd0 ole32!SyncStubInvoke+0x3c
06        4c 00a3f698 758f8a43 ole32!StubInvoke+0xb9
07        dc 00a3f774 758f8938 ole32!CCtxComChnl::ContextInvoke+0xfa
08        1c 00a3f790 758f950a ole32!MTAInvoke+0x1a
09        2c 00a3f7bc 759ddccd ole32!STAInvoke+0x46
0a        34 00a3f7f0 759ddb41 ole32!AppInvoke+0xab
...
</pre>
<p>None of these are my Dlls, these are all COM+ infrastructure calls. The size of that<span style="text-decoration:underline;"><strong> rpcrt4!NdrStubCall2</strong></span> is big enough to rouse suspicion. <strong>rpcrt4.dll</strong> is part of <a title="How RPC Works" href="http://technet.microsoft.com/en-us/library/cc738291%28WS.10%29.aspx">RPC Architecture</a> and <a title="NdrStubCall2" href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa374317%28v=vs.85%29.aspx">NdrStubCall2</a> is server-side entry point for RPC Stubs.<br />
We&#8217;re nearly there, lets dump the raw stack:</p>
<pre class="brush: plain; highlight: [11]; title: ; notranslate">
0:013&gt; kd
00a3f174  00a3f190
00a3f178  75d904e8 rpcrt4!Invoke+0x2a
00a3f17c  029df170
00a3f180  00216750
00a3f184  00000202
00a3f188  00000002
00a3f18c  00a3f380
00a3f190  00a3f598
00a3f194  75df5311 rpcrt4!NdrStubCall2+0x2d6
00a3f198  110082bb MyDll!__vba+0x71
00a3f19c  00a3f380
00a3f1a0  00000002
00a3f1a4  e28df787
00a3f1a8  02a7bfb8
00a3f1ac  00178b88
00a3f1b0  00000000
00a3f1b4  00178b88
......
</pre>
<p>So the highlighted line looks like something I&#8217;m looking for, just not really informative. It seems like it might be a pointer to somewhere in vtable? Lets see:</p>
<pre class="brush: plain; highlight: [3]; title: ; notranslate">
0:013&gt; u 110082bb
MyDll!__vba+0x71:
110082bb e9c0d80000      jmp     MyDll!MyObject::Method1+0x50 (11015b80)
110082c0 816c2404ffff0000 sub     dword ptr [esp+4],0FFFFh
110082c8 e923df0000      jmp     MyDll!MyObject::Method2+0x330 (110161f0)
110082cd 816c2404ffff0000 sub     dword ptr [esp+4],0FFFFh
110082d5 e966e30000      jmp     MyDll!MyObject::Method3+0x140 (11016640)
110082da 816c2404ffff0000 sub     dword ptr [esp+4],0FFFFh
110082e2 e949e50000      jmp     MyDll!MyObject::Method4+0x1c0 (11016830)
110082e7 816c2404ffff0000 sub     dword ptr [esp+4],0FFFFh
</pre>
<p>And there it is (note, these are not real method names, __vba is real though). That is the culprit. Well, not really, there was some interoperability issue. The culprit was .NET code, I was passing COM+ objects back and forth, and done something in between to mess up the things. At any rate it was faster to rewrite the method than to chase the exact problem since the method in question is used only for testing.</p>
<p>However, if I hadn&#8217;t been able to figure out the name of the method I would&#8217;ve never been in the position to even consider a fix.<br />
For proper debugging and analysis of RPC calls see <a title="RPC debugging" href="http://kobyk.wordpress.com/2008/06/07/remote-procedure-call-debugging/">Remote Procedure Call debugging</a>. As I said before, I know enough to get by and in this case, luckily, I didn&#8217;t need to dig deeper. On a couple of other occasions I had to and will follow up in further posts.</p>
<h2>In Short</h2>
<ul>
<li>Get the dump</li>
<li>Fire up WinDbg</li>
<li><strong>!analyze -v</strong> to analyse exception</li>
<li><strong>knf</strong> &#8211; to get the call stack</li>
<li><strong>kd</strong> &#8211; to dump the raw stack</li>
<li><strong>u <em>address</em></strong> to disassemble at <em>address</em></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/decaresystemsblog.wordpress.com/538/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/decaresystemsblog.wordpress.com/538/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=538&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.decaresystems.ie/2012/09/07/which-rpc-crashed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/84e2a4be28c3f1d0adddb205c02fa2ee?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mlalevic</media:title>
		</media:content>
	</item>
		<item>
		<title>How To Create Directory Trees In ASCII</title>
		<link>http://blog.decaresystems.ie/2012/08/31/create_ascii_directory_trees/</link>
		<comments>http://blog.decaresystems.ie/2012/08/31/create_ascii_directory_trees/#comments</comments>
		<pubDate>Fri, 31 Aug 2012 22:47:54 +0000</pubDate>
		<dc:creator>Yagiz Erkan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[ascii]]></category>
		<category><![CDATA[directory]]></category>
		<category><![CDATA[tree]]></category>

		<guid isPermaLink="false">http://blog.decaresystems.ie/?p=530</guid>
		<description><![CDATA[I am in the middle of writing a blog post and I needed to represent a directory structure in a quick and easy way. Here&#8217;s the command I used for that: ls -R &#124; grep ":$" &#124; sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/&#124;/' On Windows I used Cygwin to run this [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=530&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I am in the middle of writing a blog post and I needed to represent a directory structure in a quick and easy way. Here&#8217;s the command I used for that:</p>
<p><code>ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'</code></p>
<p>On Windows I used <a href="http://www.cygwin.com/" title="Cygwin">Cygwin</a> to run this *nix command. And what I got was pretty satisfactory:</p>
<pre>   .
   |-ear
   |-ejbs
   |---src
   |-----main
   |-------resources
   |---------META-INF
   |-primary-source
   |-projects
   |---logging
   |-servlets
   |---servlet
   |-----src
   |-------main
   |---------webapp
   |-----------WEB-INF
   |-src
   |---main
   |-----resources</pre>
<p>Let me know if you have a better or quicker or nicer way of doing the same thing.</p>
<p><strong>UPDATE:</strong> As suggested by Derek, you can use the &#8220;<code>tree /a</code>&#8221; command on Windows, for even a prettier output:</p>
<pre>+---ear
+---ejbs
|   \---src
|       \---main
|           \---resources
|               \---META-INF
+---primary-source
+---projects
|   \---logging
+---servlets
|   \---servlet
|       \---src
|           \---main
|               \---webapp
|                   \---WEB-INF
\---src
    \---main
        \---resources</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/decaresystemsblog.wordpress.com/530/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/decaresystemsblog.wordpress.com/530/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=530&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.decaresystems.ie/2012/08/31/create_ascii_directory_trees/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1ac2db4dd1aedc234ca6ac47cfa45cae?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yagizerkan</media:title>
		</media:content>
	</item>
		<item>
		<title>GWT: Communication between Components when using MVP/Places/GIN</title>
		<link>http://blog.decaresystems.ie/2012/08/20/gwt-communication-between-components-when-using-mvpplacesgin/</link>
		<comments>http://blog.decaresystems.ie/2012/08/20/gwt-communication-between-components-when-using-mvpplacesgin/#comments</comments>
		<pubDate>Mon, 20 Aug 2012 10:57:25 +0000</pubDate>
		<dc:creator>brendanlawlor</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[ray ryan]]></category>

		<guid isPermaLink="false">http://blog.decaresystems.ie/?p=519</guid>
		<description><![CDATA[It&#8217;s been more than 3 years since Ray Ryan gave that seminal talk on how to use GWT in large applications. In the intervening years, the advice he gave has been underpinned with libraries and GWT infrastructure. GWT now offers built-in support for MVP, weaving in History management elegantly though the use of Places. GWT-dispatch [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=519&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s been more than 3 years since Ray Ryan gave<a title="Google I/O 2009 - Best Practices for Architecting GWT App" href="http://www.youtube.com/watch?v=PDuhR18-EdM"> that seminal talk</a> on how to use GWT in large applications. In the intervening years, the advice he gave has been underpinned with libraries and GWT infrastructure. GWT now offers built-in support for <a href="https://developers.google.com/web-toolkit/doc/latest/DevGuideMvpActivitiesAndPlaces">MVP</a>, weaving in History management elegantly though the use of Places. <a href="http://code.google.com/p/gwt-dispatch/">GWT-dispatch</a> provides a clean implementation of the command pattern. And <a href="http://code.google.com/p/google-gin/">GIN</a> makes Dependency Injection a natural extension of the GWT paradigm and binds all the other approaches together into one seamless, sensible architecture.</p>
<p>This article isn&#8217;t going to make the case for doing things Ray Ryan&#8217;s way. I don&#8217;t think there&#8217;s any need to convince anyone. But I would like to point out some choices that emerge from developing complex applications using these patterns and make some suggestions about what these choices might mean.</p>
<p><span id="more-519"></span></p>
<p>But firstly, I&#8217;ll like to touch on one thing that Ray Ryan did not talk about much, and which is not covered in many of the GWT MVP articles I&#8217;ve read: the &#8216;M&#8217; in MVP &#8211; the Model. The suggestion seems to be, from a reading of the standard literature, that the Model is just whatever DTO the Presenter happens to be holding onto at any given moment. It&#8217;s true that a model like this will serve you well in a great many scenarios. For example, if your MVP Triad is displaying a list of Users, then a <em>List&lt;UserDTO&gt;</em>, returned from a service call, is all you probably need to act on when coding the behaviour of this Triad. But there are other circumstances, when we will need to maintain some client-side state, and in this case, the DTO is just not enough. This shouldn&#8217;t surprise us. The DTO has its own specific role to play in the overall architecture. A good DTO should contain just enough data to allow the client to communicate efficiently with the server, while still displaying everything that the current MVP&#8217;s View wants to show. The DTO is typically a reduced blend of domain objects, assembled on the server side for use by that MVP Triad in particular, and passed forward and back in a way that reduces chattiness. It should never contain any information that represents client-side state.</p>
<p>Once we accept the need for a Model, even if a simple POJO, we are faced with the question about where to create and maintain this Model. If you&#8217;ve been using Ray Ryan&#8217;s architecture for even a short while, the answer is obvious: GIN. The central class in an MVP Triad is the Presenter. It should mediate between the Model and the View. The Presenter is also the <em>Activity</em> in the standard literature on Place management, and we use GIN to instantiate the Presenter/Activity when its corresponding Place is reached. By extension, the View and Model, which are linked by the Presenter, are also created through GIN, as they are injected into the Presenter&#8217;s constructor. All it takes is to add one little <em>@Singleton</em> annotation to the definition of a Model class, and suddenly we have a Model instance that can be created, maintained and presented automatically whenever required by its Presenter/Activity &#8211; even if that Presenter/Activity is instantiated afresh each time its Place is reached. This Model can hold any number of DTOs as well as the MVP&#8217;s own presentation state (e.g. a boolean to represent visibility of a collapsible part of the screen).</p>
<p>Now we have a singleton class that holds our presentation state without infecting our DTOs. But we quickly realise that we can take this singleton Model one step futher: we can share it with other MVP Triads.</p>
<p>The mechanism to share isn&#8217;t hard to understand &#8211; we simply add our Model class to the constructor of another Presenter/Activity. Harder to understand is <em>why</em> we would do this in the first place. Well sometimes this can be a very efficient way of sharing information between two cooperating Triads. Let&#8217;s go back to our example of a Triad to show a list of Users. Let&#8217;s say we want to be able to click in the list and move to an EditUser Place, with its own MVP Triad for editing the details of a particular User. Once the edit is finished, we&#8217;d like to go back to the list of Users and see the updated User in that list, preferably without performing an entirely new service request to retrieve the list. A shared Model instance could store the list of UserDTOs <em>and</em> the selected UserDTO together, allowing each Triad to work from common data, while still respecting the Place management pattern of GWT.</p>
<p>This is a convenient, readable and efficient way of allowing two Triads to communicate, but it comes at the price of increased coupling. Triads which share a common Model are coupled not just by the fact that they depend on a common data structure, but also because their internal implementations are based on common assumptions about how each Triad reads and updates the Model. This is not a problem as long as we are <em>aware</em> of the coupling, and restrict this pattern of communication to Triads which are designed to always work in tandem. We can even begin to use this knowledge to define the elusive meaning of the word <em>Component</em> in the context of large-scale GWT architectures: <em>Components are groups of cooperating MVP Triads that may share Model instances</em>. A component, in this sense, might be the group of MVP Triads that performs CRUD operations (even sophisticated and varying CRUD operations) on a particular subgroup of domain objects. In our example, we might have the User component, which is composed of Edit User, Add User, View User and List Users MVP Triads.</p>
<p>Taking this as the highest form of coupling between Triads, let&#8217;s work backwards and ask ourselves in what other, less-coupled ways can our Triads communicate. In my experience of the patterns that emerge from this GWT architecture, the next most tightly coupling mode of communication is where one Presenter/Activity issues the instruction to go to a new Place, thus passing control to another Presenter/Activity &#8211; quite probably to a Triad outside the component as we&#8217;ve just defined it. Places offer a fig-leaf of decoupling in this context. In principle, the invoking Triad does not know what &#8211; if any &#8211; other Triad may respond to the instruction to move to a new Place. In practise, our Places are deeply associated with particular Activities, and therefore particular MVP Triads. We could of course change the behaviour associated with a Place simply by mapping it to a different Activity, but this rarely happens. And in fact, the name of our Place &#8211; if we have any sense &#8211; gives a strong indication of what other component it belongs to. For example, our View User activity may, in response a button clicked on its View, instruct GWT to switch to a Place that lists all Operations performed on the system by the particular User. Control would switch to the Operations component of the application (in particular, the MVP Triad that knows how to list Operations). This is coupling <em>across</em> components, and I think should be allowed, not just because of the fig-leaf of Places, but also for readability. The code in the View User Presenter/Activity makes it quite clear to the glance of a developer, where control is going. This is a reasonable trade off if <em>all</em> you want to do is move from one Activity to the next. It is a better alternative to the least coupled form of communication, which can be harder to follow: Application Events.</p>
<p>There are entries on this blog, going <a href="http://blog.decaresystems.ie/2007/11/19/zero-coupling-between-ui-components/">back</a> <a href="http://blog.decaresystems.ie/2007/11/16/future-problems-in-ria-architecture/">years</a>, that talk about a loosely-coupled way of communicating between Triads. You can consider this article to be an evolution of those ideas. They describe an Application Model View Control (AMVC) architecture in which Triads communicated by passing Events exclusively via an intermediate layer called the Application Layer. The Application Layer is responsible for interpreting those events and invoking application level logic to coordinate the behaviour of multiple other Triads. Transplanting this idea to the Ray Ryan architecture, we introduce the idea of an Application Activity/Presenter which listens on GWT&#8217;s event bus for events that have an application-wide meaning (for example, LogOutCurrentUser). Such an event might come from any component in the application, and its effects might be spread widely across the application &#8211; a much more complex operation that merely switching to a new Place. This is a pattern that we have been following in DSI to good effect. But it can lead to difficult-to-read code at times. As such, it is probably best kept for complex patterns of activity across component barriers &#8211; not just switching Place.</p>
<p>To summarise, the Ray Ryan approach to large scale GWT application development allows choices to emerge when it comes to communication between Triads. We can organize these choices into a kind of hierarchy and try to apply a consistent pattern to their use, creating as we do so, a new definition for what we mean by Component:</p>
<p><strong>Most coupled</strong>: Shared Model instances. <em>Only sparingly and ONLY within Triads of the same component</em>.</p>
<p><strong>Medium coupling</strong>: Invocation of one Triad&#8217;s Place from another Triad. Can be trans-component. <em>Use if simply switching Places</em>.</p>
<p><strong>Least coupled</strong>: Event Applications passed through a mediating layer.<em> User for all other (more complex) interactions</em>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/decaresystemsblog.wordpress.com/519/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/decaresystemsblog.wordpress.com/519/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=519&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.decaresystems.ie/2012/08/20/gwt-communication-between-components-when-using-mvpplacesgin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c1364b96c9e393769103411623bad638?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">brendanlawlor</media:title>
		</media:content>
	</item>
		<item>
		<title>How To Generate A Development Google Maps Android API Key?</title>
		<link>http://blog.decaresystems.ie/2012/07/26/how-to-generate-a-development-google-maps-android-api-key/</link>
		<comments>http://blog.decaresystems.ie/2012/07/26/how-to-generate-a-development-google-maps-android-api-key/#comments</comments>
		<pubDate>Thu, 26 Jul 2012 19:38:37 +0000</pubDate>
		<dc:creator>Yagiz Erkan</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[key]]></category>
		<category><![CDATA[maps]]></category>

		<guid isPermaLink="false">http://blog.decaresystems.ie/?p=514</guid>
		<description><![CDATA[In general Google has very good documentation and the coverage about Maps API Key is no exception. However, sometimes, we really need to go fast in order to create a working application and that&#8217;s when a quick how-to guide can save crucial minutes, if not hours. Obviously, I don&#8217;t doubt that, as any good developer, [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=514&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In general Google has very good documentation and the coverage about Maps API Key is no exception. However, sometimes, we really need to go fast in order to create a working application and that&#8217;s when a quick how-to guide can save crucial minutes, if not hours. Obviously, I don&#8217;t doubt that, as any good developer, you&#8217;ll check the official Google documentation about <a title="Obtaining A Google Maps Android API Key" href="https://developers.google.com/maps/documentation/android/mapkey" target="_blank">Obtaining A Google Maps Android API Key</a>.</p>
<p>If you&#8217;re reading this, you already know that you need to obtain a Maps API Key in order to use Google Maps in your Android application. Here&#8217;s how you can quickly create your development key:<br />
<span id="more-514"></span><br />
<strong>Locate your .android directory:</strong> Your personal Android settings that are associated with your profile are located in the active AVD (<em>.android</em>) directory. This directory is under your home directory.</p>
<ul>
<li><em><strong>Windows Vista/7:</strong></em> C:\Users\&lt;user&gt;\.android</li>
<li><em><strong>Windows XP:</strong></em> C:\Documents and Settings\&lt;user&gt;\.android</li>
<li><em><strong>OS X and Linux:</strong></em> ~/.android</li>
</ul>
<p><strong>Locate your debug keystore: </strong>You should see your debug keystore file directly in your <em>.android</em> directory. It is called <em>debug.keystore</em>.</p>
<p><strong>Get the MD5 Fingerprint:</strong> Open a command prompt and navigate to the <em>.android</em> directory. Use the <em>keytool</em> command to get the MD5 Fingerprint:</p>
<blockquote><p><code>keytool -list -alias androiddebugkey -keystore debug.keystore -storepass android -keypass android</code></p></blockquote>
<p>The output of this tool should look like:</p>
<blockquote><p><code>Certificate fingerprint (MD5): 32:46:AA:56:D9:71:8B:2A:0B:34:A1:B6:96:1E:87:59</code></p></blockquote>
<p><em><strong>Note:</strong></em> If you are using Java 7, the output of this command will show you <em>SHA1</em> Fingerprint instead of <em>MD5</em>:</p>
<blockquote><p><code>Certificate fingerprint (SHA1): 32:46:AA:56:D9:71:8B:2A:0B:34:A1:B6:96:1E:87:59:32:46:AA:56</code></p></blockquote>
<p>In this case, add the <em>-v</em> parameter to the above-mentioned <em>toolkey</em> command:</p>
<blockquote><p><code>keytool -list -alias androiddebugkey -keystore debug.keystore -storepass android -keypass android -v</code></p></blockquote>
<p>This is going to run this command in <em>verbose</em> mode therefore you&#8217;re going to see a bigger output and at the end of it you should see the MD5 fingerprint:</p>
<blockquote><p><code>Certificate fingerprints:<br />
MD5: 94:1E:43:49:87:73:BB:E6:A6:88:D7:20:F1:8E:B5:98<br />
SHA1: 32:46:AA:56:D9:71:8B:2A:0B:34:A1:B6:96:1E:87:59:32:46:AA:56<br />
SHA256: 8B:2A:0B:34:A1:B6:96:1E:87:59:32:46:AA:56:E4:42:91:5D:36:BB:24:46:AA:41:A6:88:D7:20:F1:8E:B5:98<br />
Signature algorithm name: SHA1withRSA<br />
Version: 3</code></p></blockquote>
<p><strong>Go to Maps API Sign Up page: </strong>Go to <a href="https://developers.google.com/android/maps-api-signup">https://developers.google.com/android/maps-api-signup</a>. Read and if you agree with the terms and conditions tick the checkbox. Then paste your MD5 Fingerprint in the <em>My certificate&#8217;s MD5 fingerprint: </em>text field. Finally hit <em>Generate API Key</em>. And Voilà!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/decaresystemsblog.wordpress.com/514/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/decaresystemsblog.wordpress.com/514/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=514&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.decaresystems.ie/2012/07/26/how-to-generate-a-development-google-maps-android-api-key/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1ac2db4dd1aedc234ca6ac47cfa45cae?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yagizerkan</media:title>
		</media:content>
	</item>
		<item>
		<title>Tech Ed Europe 2012 Continued…</title>
		<link>http://blog.decaresystems.ie/2012/06/28/tech-ed-europe-2012-continued/</link>
		<comments>http://blog.decaresystems.ie/2012/06/28/tech-ed-europe-2012-continued/#comments</comments>
		<pubDate>Thu, 28 Jun 2012 22:28:41 +0000</pubDate>
		<dc:creator>Anthony Geoghegan</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Conference]]></category>

		<guid isPermaLink="false">http://blog.decaresystems.ie/?p=505</guid>
		<description><![CDATA[Today I saw what Visual Studio 2012 does for testing, both manual and automated. Everyone will be thrilled that Test lab management no longer requires a rocket scientist to get working. New support for &#8220;standard virtual machine&#8221; deployments make lab testing potentially feasible for ordinary mortals at last. I did develop some reservations, however, when [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=505&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Today I saw what Visual Studio 2012 does for testing, both manual and automated. Everyone will be thrilled that Test lab management no longer requires a rocket scientist to get working. New support for &#8220;standard virtual machine&#8221; deployments make lab testing potentially feasible for ordinary mortals at last. I did develop some reservations, however, when I saw how long the demo virtual instances were taking to spin up to perform the tests. Blame was attached to the virtual machines on the demo laptop and I&#8217;m inclined to agree, still the lesson is spinning up virtual machines for test running should not be a synchronous activity.</p>
<p>I managed to catch a really top-class seminar from David Starr and test champion Peter Provost. Their delivery was compelling, the demos great and the subject was just what I came to see. Their top-down web application testing demo really opened my eyes to what <a href="http://watin.org/">WatiN</a> could do for some of my more complex web application projects. I really have to tire kick that framework a bit to see how well it works in practice, as so many of our projects are workflow heavy and invariably require authentication there might be some practical constraints on all that yummy goodness.</p>
<p>Tomorrow is the final day and hence I&#8217;m looking forward to the savagely talented and deeply compelling Mark Russinovich&#8217;s &#8220;Case of the unexplained…&#8221; session that he does every year.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/decaresystemsblog.wordpress.com/505/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/decaresystemsblog.wordpress.com/505/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=505&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.decaresystems.ie/2012/06/28/tech-ed-europe-2012-continued/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/28f92bccf94e32011e4b646d63b5fdbd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ageoghegan</media:title>
		</media:content>
	</item>
		<item>
		<title>Tech Ed Europe 2012</title>
		<link>http://blog.decaresystems.ie/2012/06/28/tech-ed-europe-2012/</link>
		<comments>http://blog.decaresystems.ie/2012/06/28/tech-ed-europe-2012/#comments</comments>
		<pubDate>Thu, 28 Jun 2012 18:29:16 +0000</pubDate>
		<dc:creator>Anthony Geoghegan</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[TechEd Microsoft conference]]></category>

		<guid isPermaLink="false">http://blog.decaresystems.ie/?p=500</guid>
		<description><![CDATA[I’ve been here two days now, with far too little sleep. This afternoon I found myself repeatedly nodding off, even with litres of bitter Dutch coffee in me (some exaggeration there). It’s not because of the seminar content though… mostly anyway. This year I’m concentrating specifically on developer and language features. There’s a new version [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=500&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I’ve been here two days now, with far too little sleep. This afternoon I found myself repeatedly nodding off, even with litres of bitter Dutch coffee in me (some exaggeration there). It’s not because of the seminar content though… mostly anyway. This year I’m concentrating specifically on developer and language features. There’s a new version of the framework due this year, together with VS 2012 and TFS 2012. All of which makes for a lot of concurrent change for me.</p>
<p>The big items on Microsoft’s agenda are Azure and Windows 8. It’s just as you might imagine. To be fair, windows 8 looks like a pretty nice product and I loved the really cool “Windows to go” feature they demo’ed at this morning’s keynote. The demo involved an apparently impromptu video freeze. I think the shocked audience was expecting a Bill Gates blue screen moment. However, it turned out to be all part of the clever demo. “Windows to go” is nice and another string in the Windows 8 bow, but nothing new to Ubuntu fans I think.</p>
<p>Incidentally, the keynote presentations this year seem to be stressful affairs, all the presenters seem rushed and slightly off the pace. Luckily yesterday’s connectivity disaster seemed mitigated. Someone seems to have screwed up on the bandwidth allocation for the conference and the network imploded under a mountain of inane tweets and Facebook twaddle.</p>
<p>Today’s breakout sessions were all crackers. I finally got the 411 on Microsoft’s retro debugger IntelliTrace; I’ve wanted to get the poop on that for some time. It turns out, it’s pretty easy and Microsoft has made some efforts to facilitate deployment within production environments for the new version of Visual Studio. The new application lifecycle management (ALM) features of Visual Studio 2012 are being strongly pushed under the heading of “continuous delivery”, something of a holy grail for me with TFS. It would be so nice if it was a trivial exercise to deploy continuous integration builds for manual testing. Now, Microsoft seems to have gone some way to delivering that, at least for web and Azure applications. The automatic deployment of TFS builds brought a small tear to my eye. I’m slightly in love with Visual Studio 2012 for that reason alone. Manual testing has also received a minor usability overhaul in 2012, under the ALM umbrella; I’m going to have to push that quite heavily with some of our clients this year.</p>
<p>I managed to pick up a stream of invaluable tips on what works and what doesn’t when using Virtual machine instances locally (in Windows 8) for development purposes. The main one seeming to boil down to “make sure your employers are not parsimonious with your personal hardware”. I guess that’s pretty obvious really, but the presenter Brian Randell was very specific on what was required of the hardware and a lot of his hard won experience was communicated.</p>
<p>Lastly, some seemingly minor, but sensible, licensing changes seem to have the potential for increasing code quality for less outlay. Visual Studio 2012 Premium is now set to include Test Professional and the Ultimate edition will have unlimited licensing for test agent instances when performance or load testing.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/decaresystemsblog.wordpress.com/500/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/decaresystemsblog.wordpress.com/500/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.decaresystems.ie&#038;blog=34066530&#038;post=500&#038;subd=decaresystemsblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.decaresystems.ie/2012/06/28/tech-ed-europe-2012/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/28f92bccf94e32011e4b646d63b5fdbd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ageoghegan</media:title>
		</media:content>
	</item>
	</channel>
</rss>
