<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Engineering Chronon</title>
    <link>http://eblog.chrononsystems.com</link>
    <description>All the technical and design details on Chronon - The DVR for Java</description>
    <generator>posterous.com</generator>
    <link xmlns="http://www.w3.org/2005/Atom" href="http://posterous.com/api/sup_update#7c06d06c3" type="application/json" rel="http://api.friendfeed.com/2008/03#sup" />
    
    
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/EngineeringChronon" /><feedburner:info uri="engineeringchronon" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://posterous.superfeedr.com/" /><item>
      <pubDate>Thu, 02 Feb 2012 00:28:00 -0800</pubDate>
      <title>Hidden evils of Java's boolean array (boolean[])</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/8A7o1TrhDuU/hidden-evils-of-javas-byte-array-byte</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/hidden-evils-of-javas-byte-array-byte</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Consider this piece of code which allocates a boolean array of 100,00:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;boolean[] array = new boolean[100000];&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;What should the size of this array be?&lt;/p&gt;
&lt;p&gt;Considering that a boolean can just be either true or false, every element in the array only needs a single bit of space each.&amp;nbsp;Thus, the size of our boolean array in bytes should be:&lt;p /&gt; &lt;code&gt;100,000/8 + (overhead of array object) = 12,500 bytes + (overhead of array object)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;But there lies the hidden evil....&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;The Evil Inside&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As it turns out, when you allocate a boolean array, Java uses an entire byte for each element in the boolean array!&lt;/p&gt;
&lt;p&gt;Thus the size of the boolean array is in fact:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;100,000 bytes + (overhead of array object)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;Remedy&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So is there any way &lt;em&gt;not&lt;/em&gt; to use the 7 extra bytes when you only need the 1 bit?&amp;nbsp;Its here that the &lt;code&gt;java.util.BitSet&lt;/code&gt; class comes to rescue.&lt;/p&gt;
&lt;p&gt;The BitSet class does indeed use a single bit to represent a true/false boolean value.&amp;nbsp;Its implementation uses an array of 'long' values, where each bit of the long value can be individually manipulated to set any position in the entire BitSet to true or false.&lt;/p&gt;
&lt;p&gt;The BitSet implementation does add a bit of cpu overhead since it has to shift and or bits together to set the value of the bit in the correct position. Thus you need to weigh the cost of memory savings versus the extra cpu overhead when using this class.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;Benchmark&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As an example, here is a screenshot from the YourKit profiler, showing the memory used by a boolean array and a bitset object, both 100000 element long:&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Benchmark" height="206" src="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2012-02-02/ijDIhlgzxtnclvnrDxBftvujBtbDDBbbFDrulnsbgBInekvshxfAhiJfIfIx/benchmark.png.scaled500.png" width="489" /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;As can be be seen:&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;boolean&lt;/code&gt; array takes: &lt;br /&gt;&lt;code&gt;100,000 + 16 (array overhead) = 100,016 bytes&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;BitSet&lt;/code&gt; object only takes :&amp;nbsp;&lt;p /&gt;&lt;code&gt;100,000 / 64 (size of long) = 1562.5 = 1563 long values after rounding&lt;/code&gt;&lt;br /&gt; &lt;code&gt;1563*8 + 16 (array overhead) = 12, 520 bytes&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;A few extra bytes are added for the BitSet object itself and the extra 2 fields that it contains.&lt;/p&gt;
&lt;p&gt;To put things in perspective, here is a graph showing the space occupied by both for 100,000 elements:&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Size-graph" height="260" src="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2012-02-02/GfwtFzbqIGjhgrBiDCwBnAcChAmDbtABEjBhndvmImHozwiFiGouHAhftjon/size-graph.png.scaled500.png" width="439" /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong style="font-size: medium;"&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As can be seen from the graph above, using the BitSet instead of a boolean[] can save you tons of memory at the cost of just a few extra cpu cycles&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/hidden-evils-of-javas-byte-array-byte"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/hidden-evils-of-javas-byte-array-byte#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/8A7o1TrhDuU" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="206" width="489" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2012-02-02/ijDIhlgzxtnclvnrDxBftvujBtbDDBbbFDrulnsbgBInekvshxfAhiJfIfIx/benchmark.png">
        <media:thumbnail height="206" width="489" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2012-02-02/ijDIhlgzxtnclvnrDxBftvujBtbDDBbbFDrulnsbgBInekvshxfAhiJfIfIx/benchmark.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="260" width="439" url="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2012-02-02/GfwtFzbqIGjhgrBiDCwBnAcChAmDbtABEjBhndvmImHozwiFiGouHAhftjon/size-graph.png">
        <media:thumbnail height="260" width="439" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2012-02-02/GfwtFzbqIGjhgrBiDCwBnAcChAmDbtABEjBhndvmImHozwiFiGouHAhftjon/size-graph.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://eblog.chrononsystems.com/hidden-evils-of-javas-byte-array-byte</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 25 Jan 2012 13:48:00 -0800</pubDate>
      <title>Hidden evils of Java's String.split() and replace()</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/JGftuvuyVFU/hidden-evils-of-javas-stringsplit-and-stringr</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/hidden-evils-of-javas-stringsplit-and-stringr</guid>
      <description>&lt;p&gt;
	&lt;p&gt;If you code in Java, you have inevitably used the &lt;code&gt;String.split()&lt;/code&gt; and &lt;code&gt;String.replace()&lt;/code&gt; (including &lt;code&gt;replaceFirst()&lt;/code&gt; and &lt;code&gt;replaceAll())&lt;/code&gt; functions.&lt;/p&gt;
&lt;p&gt;And why wouldn't you? They are much more convenient than using the Java Regular Expressions API where you need to create a '&lt;code&gt;Pattern&lt;/code&gt;' object, and possibly a '&lt;code&gt;Matcher&lt;/code&gt;', and then call methods on those.&lt;/p&gt;
&lt;p&gt;However, all convenience comes at a price!&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;The Evil Inside&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In this case, the &lt;code&gt;String.split()&lt;/code&gt; and &lt;code&gt;String.replace*()&lt;/code&gt; methods (with the sole exception of &lt;code&gt;String.replace(char, char)&lt;/code&gt; ) internally use the regular expression apis themselves, which can result in performance issues for your application.&lt;/p&gt;
&lt;p&gt;Here is the &lt;code&gt;String.split()&lt;/code&gt; method:&lt;/p&gt;
&lt;p&gt;&lt;div class="data type-java"&gt;
      &lt;table class="lines" cellspacing="0" cellpadding="0"&gt;
        &lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span rel="#L1" id="L1"&gt;1&lt;/span&gt;
&lt;span rel="#L2" id="L2"&gt;2&lt;/span&gt;
&lt;span rel="#L3" id="L3"&gt;3&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
                &lt;div class="highlight"&gt;&lt;pre /&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;regex&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Pattern&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;compile&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;split&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
  &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Notice that &lt;strong&gt;each&lt;/strong&gt; call to &lt;code&gt;String.split()&lt;/code&gt;&amp;nbsp;creates and compiles a new &lt;code&gt;Pattern&lt;/code&gt; object. The same is true for the &lt;code&gt;String.replace()&lt;/code&gt; methods. This compiling of a pattern each time can cause performance issues in your program if you call the &lt;code&gt;split()&lt;/code&gt; or &lt;code&gt;replace()&lt;/code&gt; functions in a tight loop.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Benchmark&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I tried a very simple test case to see how much the performance is affected.&amp;nbsp;&lt;p /&gt;The first case used &lt;code&gt;String.split()&lt;/code&gt; a million times:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;div class="data type-java"&gt;
      &lt;table class="lines" cellspacing="0" cellpadding="0"&gt;
        &lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span rel="#L1" id="L1"&gt;1&lt;/span&gt;
&lt;span rel="#L2" id="L2"&gt;2&lt;/span&gt;
&lt;span rel="#L3" id="L3"&gt;3&lt;/span&gt;
&lt;span rel="#L4" id="L4"&gt;4&lt;/span&gt;
&lt;span rel="#L5" id="L5"&gt;5&lt;/span&gt;
&lt;span rel="#L6" id="L6"&gt;6&lt;/span&gt;
&lt;span rel="#L7" id="L7"&gt;7&lt;/span&gt;
&lt;span rel="#L8" id="L8"&gt;8&lt;/span&gt;
&lt;span rel="#L9" id="L9"&gt;9&lt;/span&gt;
&lt;span rel="#L10" id="L10"&gt;10&lt;/span&gt;
&lt;span rel="#L11" id="L11"&gt;11&lt;/span&gt;
&lt;span rel="#L12" id="L12"&gt;12&lt;/span&gt;
&lt;span rel="#L13" id="L13"&gt;13&lt;/span&gt;
&lt;span rel="#L14" id="L14"&gt;14&lt;/span&gt;
&lt;span rel="#L15" id="L15"&gt;15&lt;/span&gt;
&lt;span rel="#L16" id="L16"&gt;16&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
                &lt;div class="highlight"&gt;&lt;pre /&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;	&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;begin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nanoTime&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;	&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&amp;gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000000&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;	&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;1000000&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;	&lt;span class="o"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;	  &lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;split&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;split&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot; &amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;	  &lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;	&lt;span class="o"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;	&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nanoTime&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;	&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;	&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TimeUnit&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MILLISECONDS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;convert&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;begin&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;TimeUnit&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;NANOSECONDS&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
  &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;In the second case, I just changed the loop to use a precompiled &lt;code&gt;Pattern&lt;/code&gt; object:&lt;/p&gt;
&lt;p&gt;&lt;div class="data type-java"&gt;
      &lt;table class="lines" cellspacing="0" cellpadding="0"&gt;
        &lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span rel="#L1" id="L1"&gt;1&lt;/span&gt;
&lt;span rel="#L2" id="L2"&gt;2&lt;/span&gt;
&lt;span rel="#L3" id="L3"&gt;3&lt;/span&gt;
&lt;span rel="#L4" id="L4"&gt;4&lt;/span&gt;
&lt;span rel="#L5" id="L5"&gt;5&lt;/span&gt;
&lt;span rel="#L6" id="L6"&gt;6&lt;/span&gt;
&lt;span rel="#L7" id="L7"&gt;7&lt;/span&gt;
&lt;span rel="#L8" id="L8"&gt;8&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
                &lt;div class="highlight"&gt;&lt;pre /&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="c1"&gt;//create the Pattern object outside the loop	&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="n"&gt;Pattern&lt;/span&gt; &lt;span class="n"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Pattern&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;compile&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot; &amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;1000000&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;	&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;split&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pattern&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;split&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;	&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
  &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="font-size: medium;"&gt;Benchmark Results&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here are the average results of 6 test runs:&lt;/p&gt;
&lt;p&gt;Time taken with &lt;code&gt;String.split()&lt;/code&gt; : 1600ms&lt;br /&gt;Time taken with precompiled &lt;code&gt;Pattern&lt;/code&gt; object: 1195 ms&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Split-benchmark" height="281" src="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2012-01-25/psmaJBnHzaspEwjIEwiIbBBBJJhByxlGeEkaAqkepjcrEDydkzBbgqvjwocu/split-benchmark.png.scaled500.png" width="460" /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Note that I used an extremely simple regular expression here which consists of just a single 'space' character and it resulted in &amp;gt; 25% decrease in performance.&lt;/p&gt;
&lt;p&gt;A longer more complex expression would take longer to compile and thus make the loop containing the split() method even slower compared to its counterpart.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lesson learned:&lt;/strong&gt; It is good to know the internals of the APIs you use. Sometimes the convenience comes at the price of a hidden evil which may come to bite you when you are not looking.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/hidden-evils-of-javas-stringsplit-and-stringr"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/hidden-evils-of-javas-stringsplit-and-stringr#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/JGftuvuyVFU" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="281" width="460" url="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2012-01-25/psmaJBnHzaspEwjIEwiIbBBBJJhByxlGeEkaAqkepjcrEDydkzBbgqvjwocu/split-benchmark.png">
        <media:thumbnail height="281" width="460" url="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2012-01-25/psmaJBnHzaspEwjIEwiIbBBBJJhByxlGeEkaAqkepjcrEDydkzBbgqvjwocu/split-benchmark.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://eblog.chrononsystems.com/hidden-evils-of-javas-stringsplit-and-stringr</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 13 Dec 2011 02:42:00 -0800</pubDate>
      <title>Chronon 2.2 released</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/vXrdftDIINU/chronon-22-released</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/chronon-22-released</guid>
      <description>&lt;p&gt;
	&lt;p&gt;This is mainly a bugfix release for all components.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Some enhancements to the Debugger UI:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Import/Export available for 'Post Execution Logging' and 'Timeline' views&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-12-13/kzAvxcyoBFleurpEGJIGvyonFBtjjfymbEDszbIqwioCIaDjuqHgkGylfFfe/ie-pelogging.png.scaled1000.png"&gt;&lt;img alt="Ie-pelogging" height="161" src="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-12-13/kzAvxcyoBFleurpEGJIGvyonFBtjjfymbEDszbIqwioCIaDjuqHgkGylfFfe/ie-pelogging.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;img alt="Ie-timeline" height="222" src="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-12-13/HvBeJviscwtcyqzepyAvaqyerabkonzksspykEAdIfDiHkCfemxlChwBswlj/ie-timeline.png.scaled500.png" width="292" /&gt;
&lt;div class='p_see_full_gallery'&gt;&lt;a href="http://eblog.chrononsystems.com/chronon-22-released"&gt;See the full gallery on Posterous&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Servers tab now has 'Record' button in main toolbar&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Recordbutton-servers" height="124" src="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-12-13/rEcAiuuyudEmdBecdcBDphcbEfsdtFglAaeIftrHJiAvvorvcGokEeIuGbjq/recordbutton-servers.png.scaled500.png" width="396" /&gt;
&lt;/div&gt;
Recording Server&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bugfixes for all 3 components: recordingserver.war, controller and recorder.jar.&lt;/p&gt;
&lt;p&gt;Each component in this release can be updated indepently.&lt;/p&gt;
&lt;p&gt;Thus for example, if you dont want to update the controller on each box, you can just replace the recorder.jar files with the updated one and leave the rest still running.&lt;/p&gt;
&lt;p&gt;If however you are updating from a beta version, you will need to update all 3 components at once.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Grab the latest version from our &lt;a href="http://www.chrononsystems.com/download"&gt;download&lt;/a&gt; page now!&lt;/strong&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/chronon-22-released"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/chronon-22-released#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/vXrdftDIINU" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="170" width="528" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-12-13/kzAvxcyoBFleurpEGJIGvyonFBtjjfymbEDszbIqwioCIaDjuqHgkGylfFfe/ie-pelogging.png">
        <media:thumbnail height="161" width="500" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-12-13/kzAvxcyoBFleurpEGJIGvyonFBtjjfymbEDszbIqwioCIaDjuqHgkGylfFfe/ie-pelogging.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="222" width="292" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-12-13/HvBeJviscwtcyqzepyAvaqyerabkonzksspykEAdIfDiHkCfemxlChwBswlj/ie-timeline.png">
        <media:thumbnail height="222" width="292" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-12-13/HvBeJviscwtcyqzepyAvaqyerabkonzksspykEAdIfDiHkCfemxlChwBswlj/ie-timeline.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="124" width="396" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-12-13/rEcAiuuyudEmdBecdcBDphcbEfsdtFglAaeIftrHJiAvvorvcGokEeIuGbjq/recordbutton-servers.png">
        <media:thumbnail height="124" width="396" url="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-12-13/rEcAiuuyudEmdBecdcBDphcbEfsdtFglAaeIftrHJiAvvorvcGokEeIuGbjq/recordbutton-servers.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://eblog.chrononsystems.com/chronon-22-released</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 08 Dec 2011 15:52:00 -0800</pubDate>
      <title>Chronon Step-by-Step Tutorial</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/7dfxkFdaHl4/chronon-step-by-step-tutorial</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/chronon-step-by-step-tutorial</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Still don't think you are utilizing Chronon to its maximum potential?&lt;/p&gt;
&lt;p&gt;We have released a &lt;a href="http://chronon.onconfluence.com/display/DOC/Chronon+Tutorial"&gt;Step-by-Step Chronon Tutorial&lt;/a&gt;, where you can download a sample eclipse project and have us walk you through debugging it using Chronon, explaining every single feature.&lt;/p&gt;
&lt;p&gt;It takes less than 10 minutes to go through the entire tutorial and by the end you will become a master of Time Travel!&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/chronon-step-by-step-tutorial"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/chronon-step-by-step-tutorial#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/7dfxkFdaHl4" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://eblog.chrononsystems.com/chronon-step-by-step-tutorial</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 24 Nov 2011 18:44:00 -0800</pubDate>
      <title>Using Chronon with Intellij IDEA</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/2pJTXldtpYE/using-chronon-with-intellij-idea</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/using-chronon-with-intellij-idea</guid>
      <description>&lt;p&gt;
	&lt;p&gt;For all the Intellij IDEA users out there dying to use Chronon, we have now published a detailed guide on &lt;a href="http://chronon.onconfluence.com/display/DOC/Using+Chronon+with+Intellij+IDEA"&gt;&lt;strong&gt;Using Chronon alongside Intellij IDEA&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/using-chronon-with-intellij-idea"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/using-chronon-with-intellij-idea#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/2pJTXldtpYE" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://eblog.chrononsystems.com/using-chronon-with-intellij-idea</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 22 Nov 2011 01:11:00 -0800</pubDate>
      <title>GWT support added in Chronon 2.1.2</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/Yk9jaxI1sqk/gwt-support-added-in-chronon-212</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/gwt-support-added-in-chronon-212</guid>
      <description>&lt;p&gt;
	&lt;p&gt;We have updated the &lt;a href="http://chrononsystems.com/products/chronon-time-travelling-debugger/"&gt;Chronon Eclipse plugin&lt;/a&gt; to support the Google GWT plugin.&amp;nbsp;You need GWT plugin version 2.4.2 or higher for the Chronon plugin to be enabled for it.&lt;/p&gt;
&lt;p&gt;With the GWT support:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can record GWT applications easily in development mode.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-11-22/jiggJwgzhdsDqijDclIGxIgkzkfJflIpbAmmhzupovyBoDnalsltxrsaBnib/gwt_record.png.scaled1000.png"&gt;&lt;img alt="Gwt_record" height="146" src="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-11-22/jiggJwgzhdsDqijDclIGxIgkzkfJflIpbAmmhzupovyBoDnalsltxrsaBnib/gwt_record.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The GWT 'Development mode' view has the Chronon 'blue' stop button that is enabled when you are recording a GWT application. Make sure to use that instead of the 'red' button to stop your GWT applications, otherwise the recording wont be saved properly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Gwt_stop" height="288" src="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-11-22/bcnAszdGapoqaIupbaGFAjHiJqvezGlzunqaFEjcyntGjqjguIfDdwpbnBao/gwt_stop.png.scaled500.png" width="466" /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/gwt-support-added-in-chronon-212"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/gwt-support-added-in-chronon-212#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/Yk9jaxI1sqk" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="194" width="665" url="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-11-22/jiggJwgzhdsDqijDclIGxIgkzkfJflIpbAmmhzupovyBoDnalsltxrsaBnib/gwt_record.png">
        <media:thumbnail height="146" width="500" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-11-22/jiggJwgzhdsDqijDclIGxIgkzkfJflIpbAmmhzupovyBoDnalsltxrsaBnib/gwt_record.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="288" width="466" url="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-11-22/bcnAszdGapoqaIupbaGFAjHiJqvezGlzunqaFEjcyntGjqjguIfDdwpbnBao/gwt_stop.png">
        <media:thumbnail height="288" width="466" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-11-22/bcnAszdGapoqaIupbaGFAjHiJqvezGlzunqaFEjcyntGjqjguIfDdwpbnBao/gwt_stop.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://eblog.chrononsystems.com/gwt-support-added-in-chronon-212</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 13 Nov 2011 23:29:00 -0800</pubDate>
      <title>Emergency bugfix update for Chronon Recording Server</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/tl6EmmLNh_M/emergency-bugfix-update-for-chronon-recording</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/emergency-bugfix-update-for-chronon-recording</guid>
      <description>&lt;p&gt;
	&lt;p&gt;We have just updated the &lt;a href="http://chrononsystems.com/products/chronon-recording-server/"&gt;Chronon Recording Server&lt;/a&gt; to version 2.1.0.296 with an emergency bugfix update.&lt;/p&gt;
&lt;p&gt;The update can be downloaded from the download page on our website:&lt;br /&gt;&lt;a href="http://chrononsystems.com/download/"&gt;http://chrononsystems.com/download/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Bug Details&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The bug occurs when a recording is 'split' at preset time intervals (eg 1 hour), by the Recording Server and results in a corrupt recording.&lt;/p&gt;
&lt;p&gt;The bug is inside the Chronon Recorder and during a 'split' can produce an invalid recording, which will throw an exception during the unpack phase. If you try to unpack the recording inside eclipse, the Chronon eclipse plug-in will show an error saying the recording is corrupt. The exception/error will show itself near the end of the unpack phase ( ie, after atleast 90% of the way through).&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Fix&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;To fix the bug, &lt;em&gt;download the latest recording server zip file and just &lt;strong&gt;replace the recorder.jar files in your recording server installation with the updated version&lt;/strong&gt; in the new recording server zip&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; The current recorder .jar version with the bugfix is 2.1.0.296. If you are using that version or higher, then you are fine, otherwise you need to update.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;ACKNOWLEDGMENT&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Our thanks to Steven M, who reported this issue. We fully support your reporting of issues and we appreciate it when people work with us to identify and solve the problem.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/emergency-bugfix-update-for-chronon-recording"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/emergency-bugfix-update-for-chronon-recording#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/tl6EmmLNh_M" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://eblog.chrononsystems.com/emergency-bugfix-update-for-chronon-recording</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 10 Nov 2011 16:40:00 -0800</pubDate>
      <title>Java Bytecode manipulation : Tools of the trade</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/R-HrlWOT5L0/java-bytecode-manipulation-tools-of-the-trade</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/java-bytecode-manipulation-tools-of-the-trade</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Since the &lt;a href="http://chrononsystems.com/"&gt;Chronon&lt;/a&gt; recorder uses bytecode instrumentation to record your java applications, I thought I would list some of the tools we use to help us with it:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://asm.ow2.org/"&gt;&lt;strong&gt;ASM framework&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The de-facto Java framework for bytecode manipulation. The ASM framework is the fastest, most flexible and well known framework around for doing bytecode manipulation. &amp;nbsp;At the time of writing its the only framework that supports the Java 7 class file format. If you are trying to choose a framwork for bytecode manipulation, stop, just learn and use ASM.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://asm.ow2.org/eclipse/index.html"&gt;&lt;strong&gt;Bytecode Outline plugin&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This eclipse plugin can automatically show you the bytecode for java file open in your editor. It can also show the corresponding ASM code that would be needed to generate the said bytecode. It will help you understand both bytecodes and the ASM framework better.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ej-technologies.com/products/jclasslib/overview.html"&gt;&lt;strong&gt;jClassLib Bytecode Viewer&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This free tool, made by the same guys who make JProfiler, is the most comprehensive way to view your generated .class files. It can show you the bytecodes individually for a method along with things like the local variable table, exceptions table, constant pool, etc. &amp;nbsp;Its a must have, in my opinion, if you are fiddling around with Java byetcodes in any way.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://chrononsystems.com/products/chronon-time-travelling-debugger/"&gt;&lt;strong&gt;Chronon Time Travelling Debugger&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This may sound like self promotion, but I remember the time before &lt;a href="http://chrononsystems.com/"&gt;Chronon&lt;/a&gt; was born and each time we would run into issues with the generated bytecode, (which btw you will at some point too, no matter how hard you try not to), it would take hours trying to use the standard debugger or littering our code with println() statements everywhere before we found the root cause. Now if we find any error in the generated bytecode, we just look at the &lt;a href="http://chrononsystems.com/"&gt;Chronon&lt;/a&gt; recording of the executed code in the Time Travelling Debugger and can find root cause in minutes.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/java-bytecode-manipulation-tools-of-the-trade"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/java-bytecode-manipulation-tools-of-the-trade#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/R-HrlWOT5L0" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://eblog.chrononsystems.com/java-bytecode-manipulation-tools-of-the-trade</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 31 Oct 2011 22:48:32 -0700</pubDate>
      <title>JVM 5 is the new IE 6</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/xerbyHLdgVk/jvm-5-is-the-new-ie-6</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/jvm-5-is-the-new-ie-6</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Note that I mentioned JVM 5, &lt;em&gt;not&lt;/em&gt; Java 5.&lt;/p&gt;
&lt;p&gt;Since &lt;a href="http://chrononsystems.com/"&gt;Chronon&lt;/a&gt; requires running on JVM 6, we do get people time to time asking &lt;em&gt;"Does that mean Java 5 is not supported?"&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Backward Compatibility&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It seems some people still don't understand that you can run Java 5 code on JVM 6. The JVMs are, and have always been, fully backward compatible.&lt;/p&gt;
&lt;p&gt;This also means, that you can still write your code as Java 5 and even use JVM 5 to compile and build your &amp;nbsp;application, but during deployment you can choose JVM 6 instead of JVM 5 and gain all the advantages of using a more recent JVM while making sure your code still can, if really needed, run on JVM 5.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Disadvantages of JVM 5&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The JVM 5 is over 7 years old. It was even End Of Life'd over 2 years ago. &amp;nbsp;That means it won't be receiving any more updates, so if you run into a jvm bug, tough luck... On Macs, its not even possible to install JVM 5 unless you use some hacks.&lt;/p&gt;
&lt;p&gt;Frankly, why anyone would use a a 7 year old technology which won't receive any new updates, when a perfectly good alternative is available, is beyond me!&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Advantages of JVM 6&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The JVM 6 has been with us for &amp;gt; 5 years now and is still very much under active development. It has had 29 updates so far and is used by millions. It has much better performance than JVM 5 and the vast number of updates have ensured it is pretty damn stable.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;At this point it baffles me that enterprises are sticking with a 7 year old, discontinued technology which has a perfectly good replacement which performs better and gets active updates. JVM 5 is the new IE 6 and like IE 6, it would be good for everyone if it was completely eradicated from this world.&lt;/p&gt;
&lt;p /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/jvm-5-is-the-new-ie-6"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/jvm-5-is-the-new-ie-6#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/xerbyHLdgVk" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://eblog.chrononsystems.com/jvm-5-is-the-new-ie-6</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 28 Oct 2011 02:20:00 -0700</pubDate>
      <title>Recording Server improvements since beta</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/yqckcHVAPEk/77566038</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/77566038</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Now that the &lt;a href="http://chrononsystems.com/products/chronon-recording-server/"&gt;Chronon Recording Server&lt;/a&gt; is out of beta, here are some changes we made to it based on a lot of feedback from our customers to improve the experience for everyone:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Installation Experience&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The complex &lt;a href="http://chronon.onconfluence.com/display/DOC/Install+Chronon+Recording+Server"&gt;installation procedure&lt;/a&gt; of the &lt;a href="http://chrononsystems.com/products/chronon-recording-server/"&gt;Recording Server&lt;/a&gt; was among the biggest complaints during the beta period, so we sought to make it much more simpler.&lt;/p&gt;
&lt;p&gt;The complaints centered around an understanding of the various ports used for communication and the high amount of configuration needed. We have cut down on both in this release.&lt;/p&gt;
&lt;p&gt;The biggest change we made was with respect to the Recording Server .war file itself. During the beta period, you had to put a special configuration file to tell the Recording Server which port to listen on. This was confusing in many ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The xml file with the context parameter was specific to the container, so you had to figure out how to pass the context parameter for your specific container.&lt;/li&gt;
&lt;li&gt;The mention of port itself was confusing to a lot of people. They couldn't differentiate between the port used for accessing the web ui in the container and the port at which the recording server was listening. We would get frequent complaints like "&lt;em&gt;I configured port 80 for the recording server, but when I type localhost:80/recordingserver nothing happens&lt;/em&gt;". And we would have to explain that the web ui was still running at the port of the container it was deployed on, eg localhost:8080/recordingserver. But by this time it was all too confusing for the user.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We have made the experience much simpler now, by removing the need for the xml file entirely. Now you just deploy the .war file normally in your container. When the recording server is first accessed, it will ask the user to specify a port to listen for controllers.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-10-28/jlwAjqEHakBtufGlFtijtuqEHahJuImwDkrmcAFfdyahEDkJBpiAqfrHwHyD/crs-ports.png.scaled1000.png"&gt;&lt;img alt="Crs-ports" height="271" src="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-10-28/jlwAjqEHakBtufGlFtijtuqEHahJuImwDkrmcAFfdyahEDkJBpiAqfrHwHyD/crs-ports.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;a href="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-10-28/FGGvzDJhiqjlplvozoGdbvbIoBBAfxHdhozfgaHuGkyBhfrcdycClqlHCpog/crs-ports-settings.png.scaled1000.png"&gt;&lt;img alt="Crs-ports-settings" height="345" src="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-10-28/FGGvzDJhiqjlplvozoGdbvbIoBBAfxHdhozfgaHuGkyBhfrcdycClqlHCpog/crs-ports-settings.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;a href="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-10-28/ohfvlnzfjAlsJhmrIslgdkgxdqEobkCIstxJhadyIiCbCmjvqdHsxvHEamtw/crs-ports-settings2.png.scaled1000.png"&gt;&lt;img alt="Crs-ports-settings2" height="345" src="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-10-28/ohfvlnzfjAlsJhmrIslgdkgxdqEobkCIstxJhadyIiCbCmjvqdHsxvHEamtw/crs-ports-settings2.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;div class='p_see_full_gallery'&gt;&lt;a href="http://eblog.chrononsystems.com/77566038"&gt;See the full gallery on Posterous&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;This has multiple benefits:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;No xml file needed to configure the port. Its all done in the UI and can also be changed directly from the UI at any point.&lt;/li&gt;
&lt;li&gt;Since the user accessed the recording server web UI the first time using the port of the container in which it was deployed, eg by using localhost:8080/recordingserver, he no longer has confusions as to differentiating between the port at which to access the UI and the port at which the Recording Server listens.&lt;/li&gt;
&lt;li&gt;Since the UI explicitly states that the port the user is specifying is the one at which the recording server will be listening to controllers, when editing the controller config file, the user knows exactly which port number to use.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Result - Install in &amp;lt; 2 mins&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We have even made a video of the recording server installation along with 2 controllers. The video is &amp;lt; 2 mins in length and goes to show how simple it is to install the recording server now.&lt;/p&gt;
&lt;p&gt;&lt;iframe src="http://www.youtube.com/embed/bhsSpd-_6xA?wmode=transparent" allowfullscreen frameborder="0" height="417" width="500"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Running Controller without admin privileges&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Another issue during the beta period was some people not having admin access to install the controller and instead of getting admin permission, they wanted to quickly evaluate the product. We have now updated the documentation to show &lt;a href="http://chronon.onconfluence.com/display/DOC/Controller+Installation"&gt;how to use the Controller temporarily without requiring administrator privileges&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thread Dump&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Recorder Status panel in the Recording Server now has a button to get a Thread Dump of the application being recorded. Can come in handy if your application freezes for some reason or if you just want to know what is going in all those threads.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Crs-threaddump" height="296" src="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-10-28/bzsBsyFvIGxCBFodDAabDlApdFFazDDitqxvghdrgzoiuDsEbAdvoxdkbwis/crs-threaddump.png.scaled500.png" width="354" /&gt;
&lt;a href="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-10-28/ulmmuslGIDcbAekmGHrpBJibwemsfjwwBEvlointbHmGkiyurAdiEInaazfE/crs-threaddump2.png.scaled1000.png"&gt;&lt;img alt="Crs-threaddump2" height="295" src="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-10-28/ulmmuslGIDcbAekmGHrpBJibwemsfjwwBEvlointbHmGkiyurAdiEInaazfE/crs-threaddump2.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;div class='p_see_full_gallery'&gt;&lt;a href="http://eblog.chrononsystems.com/77566038"&gt;See the full gallery on Posterous&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Recording for long periods of time&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We even made a big change with the recorder to allow running it for long periods of time.&lt;/p&gt;
&lt;p&gt;Previously we were using a custom thread local mechanism which needed you to specify the total number of threads created in advance. This was set by default to a high number like 5000. However, there are many programs out there that do not use thread pooling and would create and destroy threads, moving the thread id number to cross whatever 'max' value you put.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thus we decided to use a different algorithm now, which completely removes the need for specifying a max value. You can create and destroy as many new threads as you want now!&lt;/p&gt;
&lt;p&gt;This has made the configuration simpler both in the Recording Server UI and the Chronon Eclipse plugin, since there are no longer any fields needed for specifying maximum threads.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-10-28/laACjyqqEtBtbwxaiFFaGDkpgAEhDChCAlcaHhpyhmJICgAchxmdkcjgvilz/crs-maxthreads-before.png.scaled1000.png"&gt;&lt;img alt="Crs-maxthreads-before" height="337" src="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-10-28/laACjyqqEtBtbwxaiFFaGDkpgAEhDChCAlcaHhpyhmJICgAchxmdkcjgvilz/crs-maxthreads-before.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;a href="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-10-28/rtyxJIkBbFvkCmcdtxrIIBHklmlctgAmxdiDdnFAsltifdymndamyAbtGFuD/crs-maxthreads-after.png.scaled1000.png"&gt;&lt;img alt="Crs-maxthreads-after" height="256" src="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-10-28/rtyxJIkBbFvkCmcdtxrIIBHklmlctgAmxdiDdnFAsltifdymndamyAbtGFuD/crs-maxthreads-after.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;div class='p_see_full_gallery'&gt;&lt;a href="http://eblog.chrononsystems.com/77566038"&gt;See the full gallery on Posterous&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/77566038"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/77566038#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/yqckcHVAPEk" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="296" width="354" url="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-10-28/bzsBsyFvIGxCBFodDAabDlApdFFazDDitqxvghdrgzoiuDsEbAdvoxdkbwis/crs-threaddump.png">
        <media:thumbnail height="296" width="354" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-10-28/bzsBsyFvIGxCBFodDAabDlApdFFazDDitqxvghdrgzoiuDsEbAdvoxdkbwis/crs-threaddump.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="481" width="815" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-10-28/ulmmuslGIDcbAekmGHrpBJibwemsfjwwBEvlointbHmGkiyurAdiEInaazfE/crs-threaddump2.png">
        <media:thumbnail height="295" width="500" url="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-10-28/ulmmuslGIDcbAekmGHrpBJibwemsfjwwBEvlointbHmGkiyurAdiEInaazfE/crs-threaddump2.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="503" width="929" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-10-28/jlwAjqEHakBtufGlFtijtuqEHahJuImwDkrmcAFfdyahEDkJBpiAqfrHwHyD/crs-ports.png">
        <media:thumbnail height="271" width="500" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-10-28/jlwAjqEHakBtufGlFtijtuqEHahJuImwDkrmcAFfdyahEDkJBpiAqfrHwHyD/crs-ports.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="611" width="885" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-10-28/FGGvzDJhiqjlplvozoGdbvbIoBBAfxHdhozfgaHuGkyBhfrcdycClqlHCpog/crs-ports-settings.png">
        <media:thumbnail height="345" width="500" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-10-28/FGGvzDJhiqjlplvozoGdbvbIoBBAfxHdhozfgaHuGkyBhfrcdycClqlHCpog/crs-ports-settings.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="611" width="885" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-10-28/ohfvlnzfjAlsJhmrIslgdkgxdqEobkCIstxJhadyIiCbCmjvqdHsxvHEamtw/crs-ports-settings2.png">
        <media:thumbnail height="345" width="500" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-10-28/ohfvlnzfjAlsJhmrIslgdkgxdqEobkCIstxJhadyIiCbCmjvqdHsxvHEamtw/crs-ports-settings2.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="474" width="704" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-10-28/laACjyqqEtBtbwxaiFFaGDkpgAEhDChCAlcaHhpyhmJICgAchxmdkcjgvilz/crs-maxthreads-before.png">
        <media:thumbnail height="337" width="500" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-10-28/laACjyqqEtBtbwxaiFFaGDkpgAEhDChCAlcaHhpyhmJICgAchxmdkcjgvilz/crs-maxthreads-before.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="436" width="850" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-10-28/rtyxJIkBbFvkCmcdtxrIIBHklmlctgAmxdiDdnFAsltifdymndamyAbtGFuD/crs-maxthreads-after.png">
        <media:thumbnail height="256" width="500" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-10-28/rtyxJIkBbFvkCmcdtxrIIBHklmlctgAmxdiDdnFAsltifdymndamyAbtGFuD/crs-maxthreads-after.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://eblog.chrononsystems.com/77566038</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 12 Oct 2011 14:37:00 -0700</pubDate>
      <title>Why doesn't Step Forward also Step Out</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/255foS1YukY/why-doesnt-step-forward-also-step-out</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/why-doesnt-step-forward-also-step-out</guid>
      <description>&lt;p&gt;
	
&lt;p&gt;A lot of people come up to me with this peeve:&lt;/p&gt;
&lt;p&gt;The Step Forward button in Chronon, when it reaches the end of a method, doesn't perform an automatic 'step out' like your regular debugger. Instead you have to click the 'Step Out' button manually.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The reason we don't have the 'Step Forward' button automatically do a 'Step Out' is apparently due to the presence of the 'Step Backward' button.&lt;/p&gt;
&lt;p&gt;Consider this scenario:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Stepping forward at the end of a method Steps Out of it.&lt;/li&gt;
&lt;li&gt;Now when the user presses the Step Backward button:&lt;ol&gt;
&lt;li&gt; Should we go back inside the method we came out of, or &lt;/li&gt;
&lt;li&gt; Should we 'step back' in the current method we just stepped out to.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The &lt;em&gt;undefined semantic&lt;/em&gt; of the Step Back button in this case could cause confusion to the user if we took either of those choices, but the user expected the another.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Our Solution&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We wanted to keep the semantic of the 'Step Back' button to do exactly the opposite of what the 'Step Forward' button does.&lt;/p&gt;
&lt;p&gt;So in this case, to keep that semantics of Step Back intact, we limited the Step Back and Step Forward to only step inside a single method call and requiring the user to press the 'Step Out' button explicitly.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Mitigation&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Although considering all the advantages Chronon offers over a regular debugger or logging, pressing the Step Out button is hardly an inconvenience, we made it even easier with the introduction of &lt;a href="http://chronon.onconfluence.com/display/DOC/Keyboard+Shortcuts"&gt;Keyboard Shortcuts&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The peeves that developers mentioned were really related to the fluidity and smoothness of the debugging experience when you only have to keep track of pressing a single button.&lt;/p&gt;
&lt;p&gt;Keeping this in mind, if you use &lt;a href="http://chronon.onconfluence.com/display/DOC/Keyboard+Shortcuts"&gt;keyboard shortcuts&lt;/a&gt; for stepping within Chronon, the Step Out button is only a key away. Also you will notice the speed and fluidity when stepping using &lt;a href="http://chronon.onconfluence.com/display/DOC/Keyboard+Shortcuts"&gt;keyboard shortcuts&lt;/a&gt; is far, far smoother than using a regular debugger since we are not executing any code. Thus stepping over say a method that contains the bulk of your program's execution in Chronon would happen instantly compared to a regular debugger where you would notice pauses.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I think the above post does a good job explaining the rational behind the behavior of the Step Forward button. The &lt;a href="http://chronon.onconfluence.com/display/DOC/Keyboard+Shortcuts"&gt;keyboard shortcuts&lt;/a&gt; introduced recently in Chronon do a good job of keeping the fluidity of the debugging experience and you will find the experience butter-smooth compared to using a regular debugger even with the extra hassle of pressing a different key for step out.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/why-doesnt-step-forward-also-step-out"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/why-doesnt-step-forward-also-step-out#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/255foS1YukY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://eblog.chrononsystems.com/why-doesnt-step-forward-also-step-out</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 23 Sep 2011 06:18:00 -0700</pubDate>
      <title>Chronon Webinar video recording</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/Kcsn3vVwxTA/chronon-webinar-video-recording</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/chronon-webinar-video-recording</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Here is the video recoridng of our very first Chronon Webinar held on Sept 21.&lt;/p&gt;
&lt;p&gt;&lt;iframe src="http://www.youtube.com/embed/9ZIUKQYTcAI?wmode=transparent" allowfullscreen frameborder="0" height="417" width="500"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/chronon-webinar-video-recording"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/chronon-webinar-video-recording#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/Kcsn3vVwxTA" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://eblog.chrononsystems.com/chronon-webinar-video-recording</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 09 Sep 2011 13:49:00 -0700</pubDate>
      <title>Oracle JVM Language Summit 2011: Debugging in 2011</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/4y2t5diamdI/oracle-jvm-language-summit-2011-debugging-in</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/oracle-jvm-language-summit-2011-debugging-in</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;a href="http://www.chrononsystems.com"&gt;Chronon&lt;/a&gt; talk at the Oracle JVM Language Summit 2011&lt;/p&gt;
&lt;p&gt;
&lt;object height="322" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="486"&gt;
&lt;param name="movie" value="http://c.brightcove.com/services/viewer/federated_f9?isVid=1" /&gt;
&lt;param name="bgcolor" value="#FFFFFF" /&gt;
&lt;param name="flashVars" value="videoId=1113248906001&amp;amp;linkBaseURL=http%3A%2F%2Fmedianetwork.oracle.com%2Fmedia%2Fshow%2F16998&amp;amp;playerID=1640183659&amp;amp;playerKey=AQ~~,AAAAAFcSbzI~,OkyYKKfkn3za9MF0qI3Ufg1AerdkqfR3&amp;amp;domain=embed&amp;amp;dynamicStreaming=true" /&gt;
&lt;param name="base" value="http://admin.brightcove.com" /&gt;
&lt;param name="seamlesstabbing" value="false" /&gt;
&lt;param name="allowFullScreen" value="true" /&gt;
&lt;param name="swLiveConnect" value="true" /&gt;
&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed src="http://c.brightcove.com/services/viewer/federated_f9?isVid=1" type="application/x-shockwave-flash" height="322" flashvars="videoId=1113248906001&amp;amp;linkBaseURL=http%3A%2F%2Fmedianetwork.oracle.com%2Fmedia%2Fshow%2F16998&amp;amp;playerID=1640183659&amp;amp;playerKey=AQ~~,AAAAAFcSbzI~,OkyYKKfkn3za9MF0qI3Ufg1AerdkqfR3&amp;amp;domain=embed&amp;amp;dynamicStreaming=true" width="486"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/oracle-jvm-language-summit-2011-debugging-in"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/oracle-jvm-language-summit-2011-debugging-in#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/4y2t5diamdI" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://eblog.chrononsystems.com/oracle-jvm-language-summit-2011-debugging-in</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 08 Sep 2011 01:38:15 -0700</pubDate>
      <title>Chronon interview at Basement Coders</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/leP295x9pRQ/chronon-interview-at-basement-coders</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/chronon-interview-at-basement-coders</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;iframe src="http://player.vimeo.com/video/28699567?portrait=0" frameborder="0" height="283" width="500"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://basementcoders.com/2011/09/episode-43-interview-with-prashant-deva-of-chronon-systems/"&gt;Read the full post&lt;/a&gt; at BasementCoders.com&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/chronon-interview-at-basement-coders"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/chronon-interview-at-basement-coders#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/leP295x9pRQ" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://eblog.chrononsystems.com/chronon-interview-at-basement-coders</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 04 Sep 2011 06:36:00 -0700</pubDate>
      <title>Chronon 2.0 fixes everything wrong with Logging</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/3Oazwvr_y4E/chronon-20-fixes-everything-wrong-with-loggin</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/chronon-20-fixes-everything-wrong-with-loggin</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Lets get this straight. Currently the only real way to debug long running, server side applications, is by looking at log files. Yet, logging in its current form is fundamentally broken.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;What's wrong with logging currently?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The paradox of logging:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You put a logging statement at a piece of code where you 'think' might be a bug.&lt;/li&gt;
&lt;li&gt;Because you already thought about the bug at that place, you already hardened the code there.&lt;/li&gt;
&lt;li&gt;In real life, errors happen where you least expected them to&lt;/li&gt;
&lt;li&gt;Thus, what really happens is, you never end up putting a log statement where the error actually ends up occurring.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Apart from the above paradox which occurs due to the fact that you are basically trying to &lt;em&gt;predict&lt;/em&gt; errors in advance, logging has other evils:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It clutters up your code and hides actual logic.&lt;/li&gt;
&lt;li&gt;Its a huge distraction from actual coding.&lt;/li&gt;
&lt;li&gt;Log levels &amp;nbsp;- Not only do you need to think of the log statements, but also the 'level' of logging. Talk about predicting errors, this practically needs you to be Nostradamus.....&lt;/li&gt;
&lt;li&gt;Also it is just real fun to figure out a bug from a long running server which has a ginormous log file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Whats good then?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;That said, there is something good about logging after all.&lt;/p&gt;
&lt;p&gt;If in the miraculous case, you do get your log statements positioned exactly right, looking at a log file can give you a quick overview of the execution of your program.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: large;"&gt;&lt;strong&gt;Chronon 2.0 and Post Execution Logging&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;With Chronon 2.0, we are reinventing logging, just like we reinvented the debugger only a few months ago.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;&lt;a href="http://www.chrononsystems.com/post-execution-logging/"&gt;Post Execution Logging&lt;/a&gt;&lt;/strong&gt; functionality in Chronon 2.0 allows you to &lt;em&gt;add logging to a program &lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;after&lt;/span&gt;&lt;/strong&gt; it has executed&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Yes, you read that right. &lt;strong&gt;You can actually add logging after your code's execution!&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not only that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can access all your variables (just like in regular logging statements)&lt;/li&gt;
&lt;li&gt;You will the results of the log execution instantly without having to wait for the program to rexecute fully!&lt;/li&gt;
&lt;li&gt;In true Chronon fashion, clicking on a line of log output will take you directly to the point in time when that statement was output, so you can see the entire state of your program and use the step back functionality to find the root cause of your issue.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That also means you can finally get rid of all those logging statements in your program that are cluttering up your code and focus only on developing your software.&lt;/p&gt;
&lt;p&gt;If all this still sounds crazy to you, see the video below to see Post Execution Logging in action.&lt;/p&gt;
&lt;p&gt;&lt;iframe src="http://www.youtube.com/embed/wx51MBnse8A?wmode=transparent" allowfullscreen frameborder="0" height="417" width="500"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.chrononsystems.com/post-execution-logging/"&gt;Read more details on Post Execution logging&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Evaluation Expired?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Btw, if your Chronon 1.0 evaluation has expired and you still want to try out Chronon 2.0, just &lt;a href="http://www.chrononsystems.com/download/"&gt;go ahead and download it&lt;/a&gt; and you will get another 30 days of free trial!&lt;/p&gt;
&lt;p /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/chronon-20-fixes-everything-wrong-with-loggin"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/chronon-20-fixes-everything-wrong-with-loggin#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/3Oazwvr_y4E" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://eblog.chrononsystems.com/chronon-20-fixes-everything-wrong-with-loggin</feedburner:origLink></item>
    <item>
      <pubDate>Sat, 03 Sep 2011 06:24:00 -0700</pubDate>
      <title>Scaling Chronon</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/jWkUttICon8/scaling-chronon</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/scaling-chronon</guid>
      <description>&lt;p&gt;
	&lt;p&gt;A nice infographic on how to scale the &lt;a href="http://www.chrononsystems.com/"&gt;Chronon Recorder&lt;/a&gt;.&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-09-03/cHwEfrqmIoGbeyvGphyirexFGJrBcufArJBFitBJiJfhgHkruGaFcitpIjuh/recorder_scaling.png.scaled1000.png"&gt;&lt;img alt="Recorder_scaling" height="346" src="http://posterous.com/getfile/files.posterous.com/temp-2011-09-03/cHwEfrqmIoGbeyvGphyirexFGJrBcufArJBFitBJiJfhgHkruGaFcitpIjuh/recorder_scaling.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;More details on our &lt;a href="http://chronon.onconfluence.com/display/DOC/Chronon+Performance+guide"&gt;Performance Guide&lt;/a&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/scaling-chronon"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/scaling-chronon#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/jWkUttICon8" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="881" width="1272" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-09-03/cHwEfrqmIoGbeyvGphyirexFGJrBcufArJBFitBJiJfhgHkruGaFcitpIjuh/recorder_scaling.png">
        <media:thumbnail height="346" width="500" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-09-03/cHwEfrqmIoGbeyvGphyirexFGJrBcufArJBFitBJiJfhgHkruGaFcitpIjuh/recorder_scaling.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://eblog.chrononsystems.com/scaling-chronon</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 19 Aug 2011 11:51:00 -0700</pubDate>
      <title>Support for Dynamic Proxy classes</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/-DcmOq6kn-c/66176684</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/66176684</guid>
      <description>&lt;p&gt;
	&lt;p&gt;We have now added full support for &lt;a href="http://download.oracle.com/javase/6/docs/api/java/lang/reflect/Proxy.html"&gt;Dynamic Proxy&lt;/a&gt; object in todays release (&lt;a href="http://www.chrononsystems.com/download/"&gt;Chronon 1.8.8&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Recorder Support&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Chronon will now instrument any Dynamic Proxy class that implements any interface that is 'included' in your Recorder Configuration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Time Travelling Debugger Support&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Time Travelling Debugger knows about Proxy classes and will allow stepping inside any call made on a proxy object.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stepping In will take you directly to the 'Invocation Handler' call corresponding to the Dynamic Proxy class.&lt;/li&gt;
&lt;li&gt;Stepping Out works likewise and Stepping Out from an 'Invocation Handler' of a Proxy class will direcly take you to the call site of the original method called on that Proxy.&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-08-19/BvrEoosodzkfzvibJmxujnczlIwFkGqbJwvADHsedueHDApvIEbtGeeHvgeq/proxy-stepin.png.scaled1000.png"&gt;&lt;img alt="Proxy-stepin" height="330" src="http://posterous.com/getfile/files.posterous.com/temp-2011-08-19/BvrEoosodzkfzvibJmxujnczlIwFkGqbJwvADHsedueHDApvIEbtGeeHvgeq/proxy-stepin.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-08-19/EvIjgHBGtojwspwguyvecEvwogGpGzBrtGxzqDBsritqfosaFnctgDAGIysH/proxy-stepin2.png.scaled1000.png"&gt;&lt;img alt="Proxy-stepin2" height="280" src="http://posterous.com/getfile/files.posterous.com/temp-2011-08-19/EvIjgHBGtojwspwguyvecEvwogGpGzBrtGxzqDBsritqfosaFnctgDAGIysH/proxy-stepin2.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-08-19/junvlikJrkatqtbbugjDnsuHcHtGCFcgzrmhuArwcipukHgtxAjmuImttlJk/proxy-stepout.png.scaled1000.png"&gt;&lt;img alt="Proxy-stepout" height="281" src="http://posterous.com/getfile/files.posterous.com/temp-2011-08-19/junvlikJrkatqtbbugjDnsuHcHtGCFcgzrmhuArwcipukHgtxAjmuImttlJk/proxy-stepout.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;div class='p_see_full_gallery'&gt;&lt;a href="http://eblog.chrononsystems.com/66176684"&gt;See the full gallery on Posterous&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Chronon Recording Server Support&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.chrononsystems.com/recordingserver/"&gt;Recording Server&lt;/a&gt; will now correctly identify the relevant Dynamic Proxy classes to instrument during a dynamic Start/Stop.&lt;/p&gt;
&lt;p&gt;In order to get the Dynamic Proxy support in your &lt;a href="http://www.chrononsystems.com/recordingserver/"&gt;Recording Server&lt;/a&gt; installation, you only need to update the 'recorder.jar' file for all applications, which can be found in the &lt;a href="http://www.chrononsystems.com/download/"&gt;Standalone Recorder Pack&lt;/a&gt;&amp;nbsp;on the &lt;a href="http://www.chrononsystems.com/download/"&gt;downloads page&lt;/a&gt;.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/66176684"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/66176684#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/-DcmOq6kn-c" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="438" width="663" url="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-08-19/BvrEoosodzkfzvibJmxujnczlIwFkGqbJwvADHsedueHDApvIEbtGeeHvgeq/proxy-stepin.png">
        <media:thumbnail height="330" width="500" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-08-19/BvrEoosodzkfzvibJmxujnczlIwFkGqbJwvADHsedueHDApvIEbtGeeHvgeq/proxy-stepin.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="434" width="776" url="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-08-19/EvIjgHBGtojwspwguyvecEvwogGpGzBrtGxzqDBsritqfosaFnctgDAGIysH/proxy-stepin2.png">
        <media:thumbnail height="280" width="500" url="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-08-19/EvIjgHBGtojwspwguyvecEvwogGpGzBrtGxzqDBsritqfosaFnctgDAGIysH/proxy-stepin2.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="437" width="778" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-08-19/junvlikJrkatqtbbugjDnsuHcHtGCFcgzrmhuArwcipukHgtxAjmuImttlJk/proxy-stepout.png">
        <media:thumbnail height="281" width="500" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-08-19/junvlikJrkatqtbbugjDnsuHcHtGCFcgzrmhuArwcipukHgtxAjmuImttlJk/proxy-stepout.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://eblog.chrononsystems.com/66176684</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 15 Aug 2011 19:53:00 -0700</pubDate>
      <title>Chronon 1.8.7 and release mishaps</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/jbO3jquQCAI/chronon-187-and-release-mishaps</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/chronon-187-and-release-mishaps</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Today we had a bit of a mishap with the 1.8.0 release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mishap Details&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Soon after we released 1.8.0, we discovered a fix for a longstanding bug in the Recorder which would throw exceptions while instrumentation.&lt;/p&gt;
&lt;p&gt;Since we like to get features and bugfixes out as soon as possible to our users, &amp;nbsp;we immediately updated the Recorder and Eclipse plugin to 1.8.5. &amp;nbsp;We even starting sending out mails to some evaluators to update their Eclipse plugins or Recording Server installations to 1.8.5.&lt;/p&gt;
&lt;p&gt;However, as we were doing so, somebody found a bug in the new 1.8.5 release!&amp;nbsp;Apparently the fix we had put in introduced another bug which caused local variable assignments to be not recorded!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But all is good now :)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So here we are now, everything is finally fixed and we have updated the version to 1.8.7.&amp;nbsp;This should solve both the exception issue and the issue with local variables not being recorded.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Please &lt;a href="http://chronon.onconfluence.com/display/DOC/Upgrading+Chronon"&gt;update your eclipse plugins&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;If you are using the &lt;a href="http://www.chrononsystems.com/recordingserver/"&gt;Chronon Recording Server&lt;/a&gt; version 1.7 or higher,&amp;nbsp;you just need to download the &lt;a href="http://www.chrononsystems.com/download/"&gt;Standalone Recorder pack&lt;/a&gt; and update your recorder.jar file to get the fix.&lt;br /&gt;If you have a version of the Recording Server &amp;lt; 1.7, contact us to get the latest binaries.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sorry for all the confusion and next time we wont be so hasty in putting out a bugfix which we haven't thoroughly tested :)&lt;/p&gt;
&lt;p /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/chronon-187-and-release-mishaps"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/chronon-187-and-release-mishaps#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/jbO3jquQCAI" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://eblog.chrononsystems.com/chronon-187-and-release-mishaps</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 15 Aug 2011 01:50:00 -0700</pubDate>
      <title>Chronon 1.8 released</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/DzFmoPfrYgE/chronon-18-released</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/chronon-18-released</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Another week, another release!&lt;/p&gt;
&lt;p&gt;This time we have a bunch of productivity boosing features our users have been asking for:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keyboard Shortcuts&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yes, they are finally here! There is now a keyboard shortcut for almost every operation in Chronon. Its amazing how fast debugging is with these!&amp;nbsp;&lt;br /&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-08-15/qGrvrCghzjfiFaIBEmyDizpozniafJlwxalEesqrchrDuGfaCubJshIvoIII/keyboardshortcuts_6.png.scaled1000.png"&gt;&lt;img alt="Keyboardshortcuts_6" height="333" src="http://posterous.com/getfile/files.posterous.com/temp-2011-08-15/qGrvrCghzjfiFaIBEmyDizpozniafJlwxalEesqrchrDuGfaCubJshIvoIII/keyboardshortcuts_6.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;img alt="Keyboardshortcuts_2" height="311" src="http://posterous.com/getfile/files.posterous.com/temp-2011-08-15/uhrdsltyEoosCkgqvgByvJiqCDwmvfqmceDxuucqfDkxIpGBrfJvAsIEvjyl/keyboardshortcuts_2.png.scaled500.png" width="398" /&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-08-15/DDwCCtzGycGmCHrepaJGAuiyGqeCIFwhbJystAnawbriCJqtIFcfjtvoyspx/keyboardshortcuts_4.png.scaled1000.png"&gt;&lt;img alt="Keyboardshortcuts_4" height="141" src="http://posterous.com/getfile/files.posterous.com/temp-2011-08-15/DDwCCtzGycGmCHrepaJGAuiyGqeCIFwhbJystAnawbriCJqtIFcfjtvoyspx/keyboardshortcuts_4.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;div class='p_see_full_gallery'&gt;&lt;a href="http://eblog.chrononsystems.com/chronon-18-released"&gt;See the full gallery on Posterous&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Look at the &lt;a href="http://chronon.onconfluence.com/display/DOC/Keyboard+Shortcuts"&gt;documentation for the key mapping for all the keyboard shortcuts&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solaris support&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For all the Solaris fans, Chronon is now officially supported on Solaris x86 and 864 (32 bit and 64 bit) platforms!&lt;br /&gt; Native agent binaries are available with the &lt;a href="http://www.chrononsystems.com/download/"&gt;Chronon Eclipse plugin&lt;/a&gt; and the &lt;a href="http://www.chrononsystems.com/download/"&gt;Standalone Recorder download pack&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Double click to jump&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In views like Exceptions View, Threads View, Current Line view, you can just double click on the appropriate exception, thread, &amp;nbsp;method to jump directly to it. No need to click the 'step to' button. More productivity boost!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Faster Stack View&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Stack view now uses caching and is much, much faster. Along with the keyboard shortcuts for stepping, you will find using Chronon blazingly fast!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Recorder bugfixes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We fixed some bugs with the Recorder. If you are using the &lt;a href="http://www.chrononsystems.com/recordingserver"&gt;Chronon Recording Server&lt;/a&gt; 1.7 or higher, you can download the &lt;a href="http://www.chrononsystems.com/download/"&gt;Standalone Recorder pack&lt;/a&gt; and use the recorder jar from there to get the bugfixes in your Recording Server installation.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Evaluation expired??&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If your Chronon evaluation has expired, but you still want to try out these awesome features, contact &lt;a href="mailto:support@chrononsystems.com"&gt;support@chrononsystems.com&lt;/a&gt; and we will provide you with an extended evaluation!&lt;/p&gt;
&lt;p&gt;So go ahead and&amp;nbsp;&lt;a href="http://www.chrononsystems.com/download/"&gt;Download now&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;While you are at it, don't forget to check out the &lt;a href="http://www.chrononsystems.com/recordingserver"&gt;Chronon Recording Server&lt;/a&gt;!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/chronon-18-released"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/chronon-18-released#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/DzFmoPfrYgE" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="372" width="559" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-08-15/qGrvrCghzjfiFaIBEmyDizpozniafJlwxalEesqrchrDuGfaCubJshIvoIII/keyboardshortcuts_6.png">
        <media:thumbnail height="333" width="500" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-08-15/qGrvrCghzjfiFaIBEmyDizpozniafJlwxalEesqrchrDuGfaCubJshIvoIII/keyboardshortcuts_6.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="311" width="398" url="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-08-15/uhrdsltyEoosCkgqvgByvJiqCDwmvfqmceDxuucqfDkxIpGBrfJvAsIEvjyl/keyboardshortcuts_2.png">
        <media:thumbnail height="311" width="398" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-08-15/uhrdsltyEoosCkgqvgByvJiqCDwmvfqmceDxuucqfDkxIpGBrfJvAsIEvjyl/keyboardshortcuts_2.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="211" width="750" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-08-15/DDwCCtzGycGmCHrepaJGAuiyGqeCIFwhbJystAnawbriCJqtIFcfjtvoyspx/keyboardshortcuts_4.png">
        <media:thumbnail height="141" width="500" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-08-15/DDwCCtzGycGmCHrepaJGAuiyGqeCIFwhbJystAnawbriCJqtIFcfjtvoyspx/keyboardshortcuts_4.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://eblog.chrononsystems.com/chronon-18-released</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 14 Aug 2011 07:04:00 -0700</pubDate>
      <title>Using Mindmaps for design</title>
      <link>http://feedproxy.google.com/~r/EngineeringChronon/~3/qFBInd3Z2VM/using-mindmaps-for-designingarchitecting</link>
      <guid isPermaLink="false">http://eblog.chrononsystems.com/using-mindmaps-for-designingarchitecting</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I recently came across Mind maps.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I find them to be excellent for designing/architecting. Much better than a design document with bullet points and long descriptions.&lt;/p&gt;
&lt;p&gt;If you think about it, take any problem, you usually end up first breaking down the high level concepts, then working your way down to the details of each in a hierarchical manner.&amp;nbsp;Mind maps allow that naturally, and I have found them better than anything else to put thoughts on paper.&lt;/p&gt;
&lt;p&gt;Below is a mind map showing the design of the '&lt;em&gt;Open External Recording&lt;/em&gt;' dialog in &lt;strong&gt;&lt;a href="http://www.chrononsystems.com/"&gt;Chronon&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-08-14/doqvIaamliIFHeEwsJByAujCvAbraxEuxavcxfqugqayhzdDfsoAuojpswhv/Open_Recording.png.scaled1000.png"&gt;&lt;img alt="Open_recording" height="173" src="http://posterous.com/getfile/files.posterous.com/temp-2011-08-14/doqvIaamliIFHeEwsJByAujCvAbraxEuxavcxfqugqayhzdDfsoAuojpswhv/Open_Recording.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;Notice how easy it is to see each case and go all the way down to the minute implementation details of each. It is much more consice that a long design document and conveys the information much more clearly.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eblog.chrononsystems.com/using-mindmaps-for-designingarchitecting"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://eblog.chrononsystems.com/using-mindmaps-for-designingarchitecting#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EngineeringChronon/~4/qFBInd3Z2VM" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/878398/pdeva.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4SsZesoOSCBz</posterous:profileUrl>
        <posterous:firstName>Prashant</posterous:firstName>
        <posterous:lastName>Deva</posterous:lastName>
        <posterous:nickName>pdeva</posterous:nickName>
        <posterous:displayName>Prashant Deva</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="359" width="1039" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-08-14/doqvIaamliIFHeEwsJByAujCvAbraxEuxavcxfqugqayhzdDfsoAuojpswhv/Open_Recording.png">
        <media:thumbnail height="173" width="500" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-08-14/doqvIaamliIFHeEwsJByAujCvAbraxEuxavcxfqugqayhzdDfsoAuojpswhv/Open_Recording.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://eblog.chrononsystems.com/using-mindmaps-for-designingarchitecting</feedburner:origLink></item>
  </channel>
</rss>

