tag:blogger.com,1999:blog-82554554581041562202024-03-13T04:08:08.339-07:00ObjectLab Open Source NewsThe best way to keep track of what ObjectLab is up to...ObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.comBlogger22125tag:blogger.com,1999:blog-8255455458104156220.post-45122468617496883552018-07-29T05:31:00.001-07:002018-07-29T12:09:10.775-07:00A Human Readable Predicate with ObjectLab KitRecently, I have been working with Predicates.<br />
<br />
I'm modelling some stuff for a bank but I needed to present updates and changes to the handwritten rules regularly. I don't know about you but wouldn't be nice if we could print the Predicate and not getting something like:<br />
<br />
<code>net.objectlab.kit.util.excel.ExcelWorkbookTest$$Lambda$1/868693306@13221655</code>
<br />
<br />
Therefore, here comes the PrintablePredicate<t> class in the next release of ObjectLab Kit. </t><br />
<t><br /></t> <t>See <a href="https://github.com/Appendium/objectlabkit/blob/master/utils/src/main/java/net/objectlab/kit/util/predicate/PrintablePredicate.java" target="_blank">PrintablePredicate.java</a></t><br />
<t><br /></t> <t>The idea is to create an implementation of a Predicate and allow you to give it a name and the values it is comparing against. We also support AND, OR and NEGATE as per a Predicate.</t><br />
<t><br /></t> <t>Let's imagine a small model, a financial Instrument 'Asset' and some basic Predicates. Imagine that we create a predicate that detects instruments that are either Bonds or Commodities but that they should also be Active.</t><br />
<t><br /></t>
Using PrintablePredicate, I can combine 2 predicates and when I print the predicate (in an Excel spreadsheet that I generate automatically, more on that later) I can see a nice string "AssetClass in (Bond, Commodities) AND Active". Here is the code for it:<br />
<t><br /></t><t><br /></t><br />
<t>This tiny class will come with ObjectLab Kit 1.4.1. Enjoy!</t>
<script src="https://gist.github.com/benoitx/14d2af11e46a2f32af3a81f274236038.js"></script>Anonymoushttp://www.blogger.com/profile/09404806683419729860noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-86028084947130027042018-07-22T06:34:00.003-07:002018-07-28T11:31:18.014-07:00Flatpack 4.0.2 released! 50% speed improvement<span style="background-color: white; color: #4e2800; font-family: "verdana" , sans-serif; font-size: 13px;">Dear All</span><br />
<span style="background-color: white; color: #4e2800; font-family: "verdana" , sans-serif; font-size: 13px;"><br /></span><span style="background-color: white; color: #4e2800; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif; font-size: 13px;"></span><span style="background-color: white; color: #4e2800; font-family: "verdana" , sans-serif; font-size: 13px;">It is with great pleasure to announce that, after a while one must admit, we have released a new version of FlatPack, v 4.02.</span><br />
<span style="background-color: white; color: #4e2800; font-family: "verdana" , sans-serif; font-size: 13px;"><br /></span><span style="background-color: white; color: #4e2800; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif; font-size: 13px;"></span><span style="background-color: white; color: #4e2800; font-family: "verdana" , sans-serif; font-size: 13px;">See <a href="http://flatpack.sf.net/" style="color: #b5653b; text-decoration-line: none;">FlatPack Website</a> for more information.</span><br />
<span style="background-color: white; color: #4e2800; font-family: "verdana" , sans-serif; font-size: 13px;"><br /></span><span style="background-color: white; color: #4e2800; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif; font-size: 13px;"></span><span style="background-color: white; color: #4e2800; font-family: "verdana" , sans-serif; font-size: 13px;">The libraries are available on Maven Central and still only required JDK 1.8.</span><br />
<span style="background-color: white; color: #4e2800; font-family: "verdana" , sans-serif; font-size: 13px;"><br /></span><span style="background-color: white; color: #4e2800; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif; font-size: 13px;"></span><span style="background-color: white; color: #4e2800; font-family: "verdana" , sans-serif; font-size: 13px;">The release jumped directly to Java8 as we make use of some cool stream functionalities and Autocloseable features. We have also spent a little bit of time on performance and improved the overall parsing results by about 50%! </span><br />
<span style="background-color: white; color: #4e2800; font-family: "verdana" , sans-serif; font-size: 13px;"><br /></span>
<span style="background-color: white; color: #4e2800; font-family: "verdana" , sans-serif; font-size: 13px;">Enjoy!</span><br />
<span style="background-color: white; color: #4e2800; font-family: "verdana" , sans-serif; font-size: 13px;"><br /></span>
<span style="background-color: white; color: #4e2800; font-family: "verdana" , sans-serif; font-size: 13px;"><br /></span>Anonymoushttp://www.blogger.com/profile/09404806683419729860noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-64707547498613768872014-05-26T14:10:00.000-07:002014-05-26T14:10:01.689-07:00How to efficiently add BigDecimals<span style="font-family: Verdana, sans-serif;">Anyone who deals with monetary values knows that double/float won't cut the mustard and if you deal with prices and FX rates, then BigDecimal is the only real option.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">This comes with a lot of potential issues, BigDecimal methods do not handle null very well (i.e. not at all) and sometimes a bug crops up because BigDecimal returns new instances.</span><br />
<span style="font-family: Verdana, sans-serif;"><script src="https://gist.github.com/benoitx/55edbb246b592c768103.js"></script></span>
<span style="font-family: Verdana, sans-serif;"><br /></span><br />
<span style="font-family: Verdana, sans-serif;">So the <a href="http://objectlabkit.sf.net/" target="_blank">ObjectLabKit Util</a> package will help, but here is a question for you... what is an efficient way to sum a list of BigDecimal coming from a Class.</span><br />
<span style="font-family: Verdana, sans-serif;"><script src="https://gist.github.com/benoitx/1692786a1391a43d760f.js"></script></span>
<span style="font-family: Verdana, sans-serif;"><br /></span><span style="font-family: Verdana, sans-serif;">Assume that we have a list of 500 Test instances and that we need to sum the Test.value and that value could be null.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">We shall run the test 1,000 times.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<br />
<h3>
<span style="font-family: Verdana, sans-serif;">Option 1: Use Total in a for loop</span></h3>
<div>
<span style="font-family: Verdana, sans-serif;"><script src="https://gist.github.com/benoitx/a1a6ac4142b1f276fb3a.js"></script></span></div>
<h3>
<span style="font-family: Verdana, sans-serif;">Option 2: Use Total with java8 forEach</span></h3>
<div>
<span style="font-family: Verdana, sans-serif;"><script src="https://gist.github.com/benoitx/185d9510983c66f0ff63.js"></script></span></div>
<h3>
<span style="font-family: Verdana, sans-serif;">Option 3: Use Total and java8 map()</span></h3>
<div>
<span style="font-family: Verdana, sans-serif;"><script src="https://gist.github.com/benoitx/e1e2350f17d298cadca4.js"></script></span></div>
<h3>
<span style="font-family: Verdana, sans-serif;">Option 4: Use Java8 map and reduce</span></h3>
<div>
<span style="font-family: Verdana, sans-serif;"><script src="https://gist.github.com/benoitx/77db11feb61d730fe9c5.js"></script></span></div>
<h3>
<span style="font-family: Verdana, sans-serif;">Option 5: Use Java8 map, reduce and accumulator</span></h3>
<div>
<span style="font-family: Verdana, sans-serif;"><script src="https://gist.github.com/benoitx/c352dbd0bb140183dd1f.js"></script></span></div>
<h3>
<span style="font-family: Verdana, sans-serif;">Option 6: Use Java8 and home-made Collector</span></h3>
<div>
<span style="font-family: Verdana, sans-serif;"><script src="https://gist.github.com/benoitx/fe5f97b7affdf1b7f4d4.js"></script></span></div>
<h3>
<span style="font-family: Verdana, sans-serif;">Option 7: Use Java8 and ObjectLabKit Calculator</span></h3>
<div>
<span style="font-family: Verdana, sans-serif;"><script src="https://gist.github.com/benoitx/07be573a62bc1f3e4d82.js"></script></span></div>
<h3>
<span style="font-family: Verdana, sans-serif;">Option 8: Use Java8 and Parallel Stream</span></h3>
<div>
<span style="font-family: Verdana, sans-serif;"><script src="https://gist.github.com/benoitx/2aa923f86fbde1255296.js"></script></span></div>
<span style="font-family: Verdana, sans-serif;"><br /></span>
<br />
<h3>
<span style="font-family: Verdana, sans-serif;">So what are the results?
</span></h3>
<span style="font-family: Verdana, sans-serif;">
On my 2012 MacBook Pro for a list of 500 Test instances.
<table>
<tbody>
<tr><th>Algo</th><th>Average (ms)</th><th>Min (ms)</th><th>Max (ms)</th></tr>
<tr><td>Use Total in a for loop</td><td>0.1</td><td>0</td><td>4</td></tr>
<tr><td>Use Total with java8 forEach</td><td>0.1</td><td>0</td><td>40</td></tr>
<tr><td>Use Total and java8 map()</td><td>0.1</td><td>0</td><td>6</td></tr>
<tr><td>Use Java8 map and reduce</td><td>0</td><td>0</td><td>2</td></tr>
<tr><td>Use Java8 map, reduce and accumulator</td><td>0</td><td>0</td><td>2</td></tr>
<tr><td>Use Java8 and home-made Collector</td><td>0.1</td><td>0</td><td>6</td></tr>
<tr><td>Use Java8 and ObjectLabKit Calculator</td><td>0</td><td>0</td><td>2</td></tr>
<tr><td>Use Java8 and Parallel Stream</td><td>0.1</td><td>0</td><td>10</td></tr>
</tbody></table>
<br />
</span><br />
<span style="font-family: Verdana, sans-serif;">First of all, the value generated is the same for every algo, so no bug there it seems.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">The results are quite similar except for the Max value, implying a greater deviation in the results. I've used <a href="http://jamonapi.com/" target="_blank">JAmon</a> for measuring min/max and average time.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">Surprisingly, it seems that forEach has at least 1 execution at 40ms, which is way above the rest. Otherwise using the ObjectLabKit Calculator seems a good compromise between having to write the reduce correctly (! watch out if the BigDecimal on the right is null!) and using the raw map/reduce. </span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">The Parallel Stream is not as efficient, as it takes some time to coordinate the tasks and split the list.
let's see if it gets any different with more data. </span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">On my 2012 MacBook Pro (QuadCore) for a list of 50,000 Test instances and the parallelStream is then becoming the most efficient.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /><table>
<tbody>
<tr><th>Algo</th><th>Average (ms)</th><th>Min (ms)</th><th>Max (ms)</th></tr>
<tr><td>Use Total in a for loop</td><td>1</td><td>0</td><td>20</td></tr>
<tr><td>Use Total with java8 forEach</td><td>1.1</td><td>0</td><td>48</td></tr>
<tr><td>Use Total and java8 map()</td><td>2.1</td><td>1</td><td>40</td></tr>
<tr><td>Use Java8 map and reduce</td><td>1.2</td><td>1</td><td>9</td></tr>
<tr><td>Use Java8 map, reduce and accumulator</td><td>1.2</td><td>1</td><td>10</td></tr>
<tr><td>Use Java8 and home-made Collector</td><td>1.4</td><td>1</td><td>12</td></tr>
<tr><td><b>Use Java8 and ObjectLabKit Calculator</b></td><td>1.2</td><td>1</td><td>11</td></tr>
<tr><td><b>Use Java8 and Parallel Stream</b></td><td><b>0.6</b></td><td><b>0</b></td><td><b>17</b></td></tr>
</tbody></table>
<br />
</span><br />
<span style="font-family: Verdana, sans-serif;">So it looks like, when using single thread, that the RAW use of stream.map and reduce is the most efficient but one has to remember how to write it:</span><br />
<br />
<div class="p1">
<span style="font-family: Courier New, Courier, monospace;"> <span class="s1">final</span> BigDecimal <span class="s2">reduce</span> = <span class="s2">list</span>.stream()</span></div>
<div class="p1">
<span style="font-family: Courier New, Courier, monospace;"> .map(Test::getValue)</span></div>
<div class="p1">
<span style="font-family: Courier New, Courier, monospace;"> .reduce(BigDecimal.<span class="s3">ZERO</span>, </span></div>
<div class="p1">
<span style="font-family: Courier New, Courier, monospace;"> <b>(<span class="s2">a</span>, <span class="s2">b</span>) -> <span class="s2">b</span> != <span class="s1">null</span> ? <span class="s2">a</span>.add(<span class="s2">b</span>) : <span class="s2">a</span></b>);</span></div>
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">Using the parallelStream (when suitable) reduces the average to <b>0.5ms</b> but the max is 18ms</span><br />
<div class="p1">
<span style="font-family: Courier New, Courier, monospace;"> <span class="s1">final</span> BigDecimal <span class="s2">reduce</span> = <span class="s2">list</span>.<b>parallelStream</b>()</span></div>
<div class="p1">
<span style="font-family: Courier New, Courier, monospace;"> .map(Test::getValue)</span></div>
<div class="p1">
<span style="font-family: Courier New, Courier, monospace;"> .reduce(BigDecimal.<span class="s3">ZERO</span>, </span></div>
<div class="p1">
<span style="font-family: Courier New, Courier, monospace;"> (<span class="s2">a</span>, <span class="s2">b</span>) -> <span class="s2">b</span> != <span class="s1">null</span> ? <span class="s2">a</span>.add(<span class="s2">b</span>) : <span class="s2">a</span>);</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">Full code available here at <a href="https://gist.github.com/benoitx/f4248c1419b812f77fd6" target="_blank">GitHub Gist</a></span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>Anonymoushttp://www.blogger.com/profile/09404806683419729860noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-25536247674844255862014-05-26T10:44:00.002-07:002014-05-26T10:44:46.159-07:00ObjectLab Kit 1.3.0 released<span style="font-family: Verdana, sans-serif;">We are delighted to announce the release of ObjectLab Kit 1.3.0.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">See <a href="http://objectlabkit.sf.net/" target="_blank">http://objectlabkit.sf.net</a></span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">The release is available on Maven Central or Under files in SourceForge.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">The Source Code lives at GitHub: <a href="http://github.com/appendium/objectlabkit" target="_blank">http://github.com/appendium/objectlabkit</a></span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">Feel free to fork and contribute!</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">This release fixes a couple of bugs but also:</span><br />
<br />
<ol>
<li><span style="font-family: Verdana, sans-serif;">includes a JDK8 module using java.time.LocalDate; it is the only module requiring JDK8</span></li>
<li><span style="font-family: Verdana, sans-serif;">includes the first official release of ObjectLab Utils a small library with</span></li>
</ol>
<span style="font-family: Verdana, sans-serif;"><ul>
<li>Some caches with expiring/timeout but unlike Guava or EHCache, the cache can be refreshed in its entirety in one go; this is suitable only if you can hold the entire dataset in memory; on the plus side, you would hit the generator/DB only once.</li>
<li>Lots of small utilities for BigDecimal, Integer, Boolean and Collection, mainly to deal with nulls. And if you deal with BigDecimal, Total, Average and WeightedAverage classes will be very useful.</li>
<li>ConsoleMenu a way to create user menus for a console/command line application.</li>
</ul>
<div>
Enjoy!</div>
<div>
<br /></div>
<div>
Benoit & the team.</div>
</span>Anonymoushttp://www.blogger.com/profile/09404806683419729860noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-54005727957979555382014-05-26T06:32:00.001-07:002014-05-26T07:05:52.178-07:00FlatPack 3.4.0 released<span style="font-family: Verdana,sans-serif;">Dear All</span><br />
<span style="font-family: Verdana,sans-serif;"><br /></span>
<span style="font-family: Verdana,sans-serif;">It is with great pleasure to announce that, after a while one must admit, we have released a new version of FlatPack, v 3.4.0</span><br />
<span style="font-family: Verdana,sans-serif;"><br /></span>
<span style="font-family: Verdana,sans-serif;">See <a href="http://flatpack.sf.net/">FlatPack Website</a> for more information.</span><br />
<span style="font-family: Verdana,sans-serif;"><br /></span>
<span style="font-family: Verdana,sans-serif;"><a href="http://flatpack.sourceforge.net/changes-report.html">Or the change log</a></span><br />
<span style="font-family: Verdana,sans-serif;"><br /></span>
<span style="font-family: Verdana,sans-serif;">The libraries are available on Maven Central and still only required JDK 1.5.</span><br />
<span style="font-family: Verdana,sans-serif;"><br /></span>
<span style="font-family: Verdana,sans-serif;">Note that the next release will jump directly to Java8 as we will make use of some cool stream functionalities and Autocloseable features (jdk7).</span><br />
<span style="font-family: Verdana,sans-serif;"><br /></span>
<span style="font-family: Verdana,sans-serif;">here is an example of what is coming with 4.0:</span><br />
<span style="font-family: Verdana,sans-serif;"><br /></span>
<span style="font-family: Verdana,sans-serif;"><script src="https://gist.github.com/benoitx/f54ed700fc83f025b6b0.js"></script></span>
<span style="font-family: Verdana,sans-serif;"><br />Enjoy!</span>ObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-60950353547917243342010-03-12T16:14:00.000-08:002014-07-30T07:10:28.103-07:00Sonar and BlackDuck.com for ObjectLab Kit.A big thank you to Simon from SonarSource.org to include ObjectLab Kit in their demo site.<br />
<br />
Check this out: <a href="http://nemo.sonarqube.org/dashboard/index/250253">http://nemo.sonarqube.org/dashboard/index/250253</a><br />
<br />
But we're going to make it better... reach a higher % of compliance...<br />
<br />
Also thanks to ohloh.net<br />
<br />
<a href="https://www.openhub.net/p/objectlabkit">https://www.openhub.net/p/objectlabkit</a><br />
<br />
If you are using it... vote for it!<br />
<br />
And, yepee, I am ranked 2,400 or something out of 315,000...<br />
<br />
<a href="https://www.openhub.net/accounts/benoitx">https://www.openhub.net/accounts/benoitx</a><br />
<br />
Whatever that means.<br />
<br />
Enjoy!ObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-71506050561930851792010-03-11T12:17:00.000-08:002010-03-11T12:22:01.087-08:00FlatPack 3.2.0 is released!FlatPack on SourceForge: a Java (1.4+) flat file parser that handles CSV, fixed length and custom delimiters. The formats are configured in XML, it is fast and released under Apache license 2.0.<br /><a href="http://flatpack.sf.net"><br />http://flatpack.sf.net</a><br /><br />Changes in this version include:<br /><br /> New Features:<br /><br />o Added a getBigDecimal method on DataSet.<br /><br /> Fixed bugs:<br /><br />o Fixed SF Bug 1869636. The parameters for the XML Map and data file were reversed in the BuffReaderDelimParser.<br />o Stopped the fixed width parser from removing leading spaces in a data element. Added the ParserUtils.rTrim() method.<br />o Added check for duplicate column names when using file header for column names.<br />o Applied patch from Dirk Olmes to prevent duplicate column names in the XML<br /> mapping. IllegalArgumentException is now thrown if a duplicate column name exists in the map. Thanks Dirk...<br />o doParse() on DBFixedLengthParser was returning a null and was never getting a DataSet returned<br /><br />Enjoy!ObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-1432996201921524242009-03-14T03:58:00.000-07:002009-03-14T04:03:19.194-07:00StatCVS 0.5.0 Beta is outA new StatCVS library is available for BETA testing at:<br /><br />StatCVS retrieves information from a CVS repository and generates various tables and charts describing the project development.<br /><br />http://statcvs.sf.net/beta/statcvs.jar<br /><br />Site: http://statcvs.sf.net/beta<br /><br />Manual:<br />http://statcvs.sourceforge.net/beta/manual.html<br /><br />The biggest changes are:<br />- Charts are now quite configurable: colors, size, copyright text, etc<br />- a Twitter Integration: link, embedding last tweets via Flash or HTML<br /><br />have a go!<br /><br />Enjoy<br /><br />BenoitObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-58883411536988570922008-05-04T04:26:00.001-07:002008-05-04T04:29:20.384-07:00StatCVS 0.4.0 released!Hi All,<br /><br />Quick post to let you know that StatCVS, the new member of the family (but by all means not a baby given that it has been around since 2002!) has a new release version 0.4.0.<br /><br />The release is available on <a href="http://statcvs.sf.net">http://statcvs.sf.net</a><br /><br />The changes are described here: <a href="http://statcvs.sourceforge.net/changes-report.html">http://statcvs.sourceforge.net/changes-report.html</a><br /><br />Thanks to everyone who participated by sending patches, suggestions and checking the beta!<br /><br />Enjoy!<br /><br />BenoitObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-66937257884749237552008-04-02T07:39:00.000-07:002008-04-02T07:46:38.679-07:00StatCVS joining the family!Hi All,<br /><br />StatCVS will soon join the family of projects. Jason Kealey (of StatSVN fame) and myself have been added as project admin.<br /><br />Our first goal will be to revitalize the community, go through the patches that have been suggested and consolidate the features between StatSVN and StatCVS.<br /><br />We've already put a <a href="http://statcvs.sourceforge.net/beta">Beta Site</a> together. The jar is also available <a href="http://statcvs.sourceforge.net/beta/statcvs.jar">statcvs.jar</a>.<br /><br />Amongst the significant changes are: <br /><ol><br /><li>The RepoMap and LOCChurn reports have been added to StatCVS.<br /><li>An XML export (-xml) is now available<br /><li>Any comment starting with http://, https:// or simply www. will create an auto-link in the commit report.<br /><li>A few patches applied<br /><li>Eclipse cleanUp and new web site with the usual suspects of QA tools (and QALab of course!)<br /></ol><br /><br />Well, what are you waiting for? If you use CVS, have a look!<br /><br />Thanks<br /><br />BenoitObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-37755883046213233052008-03-24T10:51:00.000-07:002008-03-24T11:28:49.639-07:00ObjectLabKit 1.1.0 released - Date Calculators for Business and FinanceWe are pleased to announce the ObjectLab Kit 1.1.0 release! <br /><br /><a href="http://objectlabkit.sourceforge.net">http://objectlabkit.sourceforge.net</a><br /><br /><hr/><br />Changes in this version include:<br /><br /><span style="font-weight:bold;">New Features:</span><br /><ul><br /><li>Changed JODA dependency to 1.5 <br /><li>Feature Requests item #1832345, make the Tenor Serializable Fixes 1832345. Thanks to Kieron Wilkinson. <br /><li>Added 2 methods on factory to check if a calendar is registered. <br /><li>Added method calculateTenorDates with/without a spot lag to enable calculation of a series of Tenor dates without changing the current business date in the calculator. <br /><li>Added method moveByTenor without a spot lag to allow tenor calculation based on the CURRENT date and not the spot lag. <br /><li>Valid Range via HolidayCalendar. HolidayCalendar should replace the simple Set<E> of dates for holidays. A HolidayCalendar MAY contain an early and late boundary, if the calculation break a boundary, an exception is thrown, if there are no boundaries no exception would be thrown. This would ensure that calculations are not going outside the valid set of holidays. Fixes 1575498. Thanks to Paul Hill. <br /><li>Added a standard Tenor 2D. Fixes 1601540. Thanks to Anthony Whitford. <br /><li>Added new handler type ForwardUnlessNegative: a handler that acts like a Forward handler if the increment is positive otherwise acts like a Backward handler. <br /></ul><br /><br /><span style="font-weight:bold;">Fixed bugs:</span><br /><ul><br /><li>fix NPE issue if the calendar name is null. <br /><li>Deprecated ACT/UST and END/365 Day Count Conventions, which weren't very common. Also added a link to some documentation. <br /><li>The calculation of Spot date should take into account holidays BETWEEN now and spot (aka moveByBusinessDay). Thanks to David Owen. <br /><li>Spelling mistake in the code, sorry for breaking your code with this release. Fixes 1601542. Thanks to Anthony Whitford. <br /></ul><br /><br /><hr/><br /><br />Issues, bugs, and feature requests for ObjectLab Kit<br />should be submitted to the following issue tracking system:<br /><br /><a href="http://www.sourceforge.net/tracker/?group_id=175139">http://www.sourceforge.net/tracker/?group_id=175139</a><br /><br />Have fun!<br />-The ObjectLab Kit development teamObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com1tag:blogger.com,1999:blog-8255455458104156220.post-51134694413003109322007-11-05T23:10:00.000-08:002007-11-05T23:22:47.350-08:00FlatPack 3.1.1. is released.<a href="http://flatpack.sf.net">FlatPack</a> 3.1.1. is released. <br /> <br />It is a simple <a href="http://flatpack.sourceforge.net/multiproject/flatpack/downloads.html">bug fix release</a>: <br /> <br /><ul><li>[1818818] ClassCastException when accessing header or trailer records.</li><br /><li>Fixed bug in delimited parse when using Reader for data and map. Parameters were being reversed in the code.</li><br /><li>[1811210] When parsing multi-line delimited files, blank lines inside the elements were being removed from the result of the parse. Blank lines inside a delimited element were also causing a StringIndexOutOfBoundsException.</li></ul><br /><br />Released on maven Repositories:<br />M1: <a href="http://objectlabkit.sf.net/m1-repo">http://objectlabkit.sf.net/m1-repo</a><br />M2: <a href="http://objectlabkit.sf.net/m2-repo">http://objectlabkit.sf.net/m2-repo</a><br /><br />Enjoy! <br /> <br />Paul & Benoit.ObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-16433847770952358522007-10-10T05:06:00.001-07:002007-10-10T05:12:18.576-07:00J2EE and Swing Jobs @ ObjectLab London.Hi All,<br /><br />Does this qualify as "ObjectLab Open Source News"? may be not exactly... it is simply ObjectLab News, so sorry in advance:<br /><br />ObjectLab Financial recently launched its global portfolio financing product; we’re in the final phases of rolling out Release 1.0 to our first client and already have several additional leads.<br /><br />As such, we are recruiting and have 2 positions in London:<br />• A proficient J2EE Developer: JDK 5, EJB/POJOs, Spring, Hibernate, JBoss, Mule, JMS, ActiveMQ, XML, JAXB etc<br />see <a href="http://www.objectlab.co.uk/jobs/index.shtml?j2ee.inc">http://www.objectlab.co.uk/jobs/index.shtml?j2ee.inc</a><br /><br />• A proficient Swing Developer: JDK 5, Swing, Spring 2 (Spring Rich Client a plus), Jasper Reports, etc<br />see <a href="http://www.objectlab.co.uk/jobs/index.shtml?swing.inc">http://www.objectlab.co.uk/jobs/index.shtml?swing.inc</a><br /><br />Both roles should attract dedicated, hardworking developers looking for a challenging and rewarding job opportunity. Working in a small, delivery-focused team, you’ll have the chance to use your skills and knowledge, to find the best solutions to the challenges presented, as well as shaping the future of a new company with a great product!<br /><br />We will offer a competitive package that will be complemented with performance related bonuses (including <b>stock options</b>).<br /><br />Feel free pass onto experienced Java Developers that would fit the requirements.<br /><br />Please use the links to contact us more privately.<br /><br />Many thanks<br /><br />Benoit.ObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-40292968971481626222007-09-30T11:20:00.000-07:002007-09-30T11:24:01.608-07:00FlatPack 3.1.0 released with Mule ContributionSecond post in 3 days... wow! Things are happening!<br /><br />We are pleased to announce release 3.1.0 of FlatPack for Java 1.4+.<br /><br />FlatPack is the new name for PZFileReader as the project has outgrown the initial scope of reading files...<br /><br />Open Source flat file parser (CSV, Fixed Length, Custom) using XML to configure formats.<br /><br /><a href="http://flatpack.sourceforge.net">http://flatpack.sourceforge.net</a><br /><br />This is an important release with a new name and package structure. Users of previous version should find it easy to migrate as most classes have kept their original name.<br /><br />A major development is the experimental release of writers for exporting DataSets. We would like to thank Dirk and Holger from the Mule Project for their kind contribution to FlatPack. We're looking forward to the result of using FlatPack in Mule, a great Open Source ESB.<br /><br />This release also adds a few convenience methods on a DataSet and the Parser classes, fixes a couple of bugs.<br />More on changes at: <a href="http://flatpack.sf.net/changes-report.html">http://flatpack.sf.net/changes-report.html</a>.<br /><br />FlatPack is released under the business friendly Apache License v2.0.<br /><br />The library is small, lightweight and does not force you to adopt a framework.<br /><br />The implementation is useful to any business that deal with flat files. Not only can it parse very quickly some CSV or any-user defined delimiter, this library can parse FIXED LENGTH files.<br /><br />The library allow you to define an XML mapping (or in a database) of the format of your file. Once this is done, the parsed data can be accessed via a simple name lookup mechanism.<br /><br />It is our aim to publish at some point some well know file formats for your immediate use. Please contribute if you have some standard files...<br /><br />It is available for download via SourceForge or the Maven Central Repository (both Maven 1 and Maven 2). The homepage has some very quick examples.<br /><br />Maven Repositories:<br />M1: http://objectlabkit.sf.net/m1-repo<br />M2: http://objectlabkit.sf.net/m2-repo<br /><br />ObjectLab is not new to the open-source community having used numerous OS projects, It has recently launched the ObjectLab Kit family, including:<br />- QALab (<a href="http://qalab.sourceforge.net">http://qalab.sourceforge.net</a>), a tool that keeps track over-time of the static analysis results from FindBugs, Checkstyle, PMD, Cobertura etc.<br />- DateCalculators (<a href="http://objectlabkit.sourceforge.net">http://objectlabkit.sourceforge.net</a>), a set of generic lightweight and thread-safe Date calculators for Business and Finance.<br />- JTreeMap, (<a href="http://jtreemap.sourceforge.net">http://jtreemap.sourceforge.net</a>), probably the only Java Open Source implementation of treemap/heatmaps, available as a Swing or SWT component.<br />- StatSVN, (<a href="http://www.statsvn.org">http://www.statsvn.org</a>), statistics for your Subversion repo.<br /><br />We would like to thanks our friends and colleagues for their help, reviews and suggestions.<br /><br />Sorry for the long post... <br /><br />Feel free to pass on to people who may be interested.<br /><br />Enjoy!!<br /><br />Paul Zepernick and Benoit XhensevalObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-45492510997395021622007-09-28T10:44:00.000-07:002007-09-28T10:50:43.227-07:00ObjectLabKit selected for Open Financial Market PlatformHi<br /><br />I meant to send this a long long time ago... So here is the not-so-new news.<br /><br />My friend <a href="http://neilbartlett.name/blog">Neil Barlett</a> (Mr OSGi and Eclipse) spotted this mention of the ObjectLabKit (DateCalculator) as part of the proposal for the Open Financial Market Platform.<br /><br /><a href="http://www.eclipse.org/proposals/ofmp/">http://www.eclipse.org/proposals/ofmp/</a><br /><br />I can only say this: Wow!<br /><br />I hope it succeeds as the main reason for creating this little library was our frustration at re-inventing the wheel so many times... I know a couple of big investment banks using it now, so it was worth it!<br /><br />Back to work now...<br /><br /><br />BenoitObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-21513633852845089792007-07-15T09:34:00.000-07:002007-07-16T02:14:59.343-07:00Accessing JavaBeans Nested Properties: testing Spring, BeanUtils and OGNLOne our application needs to access properties from a javabean using reflection<br />e.g. get(“property1”, object)…<br /><br />Rather than re-inventing the wheel, I thought that we should use a library. There are quite a few that do this kind of get/set properties… So the question was: Which One???<br /><br />I know of:<br /><ol><br /><li>Spring beans (2.0.5) <a href="http://www.springframework.org/">http://www.springframework.org</a></li><br /><li>Apache Commons BeanUtils (1.7.0) <a href="http://jakarta.apache.org/commons/beanutils/">http://jakarta.apache.org/commons/beanutils/</a></li><br /><li>my colleague Gerald mentioned OGNL from <a href="http://www.ognl.org/">www.ognl.org</a> (pronounced ‘like a drunken orthogonal’ to quote their documentation).</li></ol><br />So with 3 candidates… which one is the best performing?<br /><br />OGNL seems to be, by far, the most flexible and rich library, but does that means it runs like a dead dog?<br /><br />I limited the problem to accessing a property value: being simple, nested or as part of an array.<br />The Test: I shall access 100,000 a series of 8 properties. The classes are:<br /><pre><br />public class A {<br /> private int intProperty;<br /> private Long longProperty;<br /> private String stringProperty;<br /> private Date dateProperty;<br /> private B b = new B();<br />}<br />public class B {<br /> private int intProperty = 5;<br /> private C c = new C();<br /> private D[] d = new D[10];<br />}<br />public class C {<br /> private String stringProperty;<br />}<br />public class D {<br /> private int intProperty = 1;<br />}<br /></pre><br /><br />The Test creates one instance of A, that contains 1 instance of B which contains 1 instance of C and an array of 10 Ds. I hope this is clear…<br />The set of properties to get are: "intProperty", "longProperty", "dateProperty", "stringProperty", "b.intProperty", "b.c.stringProperty", "b.d[1].intProperty", "b.d[7].intProperty".<br /><br />So… the results?<table><theading></theading><tbody><tr><td style="font-weight: bold;">Library</td><td style="font-weight: bold;">Total time (ms)</td><td style="font-weight: bold;">average per set (micro sec)</td><br /></tr><tr><td>Spring</td><td>1,783 ms</td><td>17.8 micro sec</td></tr><tr><td>Bean Utils</td><td>2,242 ms</td><td>22.4 micro sec</td></tr><tr><td>OGNL</td><td>50,293 ms</td><td>503 micro sec</td></tr><tr><td>OGNL Expression</td><td><b>1,595 ms</b></td><td><span style="font-weight: bold;">16 </span>micro sec</td></tr><br /></tbody></table><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4fgLlsFhUt9LGDOOTfP0Qr-OLbBn9kTS-bOQEDttfjymtkcH3PW58ucjSzmn72vB9naCdGofexpTcGseF7afXhAYcXMyOUTD2IovK7v3pri5ZqFa7NBE3fmtIt4pEpNnvBGZfZbUPnpA/s1600-h/reflect2.PNG"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4fgLlsFhUt9LGDOOTfP0Qr-OLbBn9kTS-bOQEDttfjymtkcH3PW58ucjSzmn72vB9naCdGofexpTcGseF7afXhAYcXMyOUTD2IovK7v3pri5ZqFa7NBE3fmtIt4pEpNnvBGZfZbUPnpA/s320/reflect2.PNG" alt="" id="BLOGGER_PHOTO_ID_5087467522267139410" border="0" /></a><br /><br />What does this tell us?<br /><br />OGNL is at the same time the slowest and the fastest library on my laptop (Lenovo, dual-core) under java 1.5.0_10. OGNL has 2 mechanisms, one is simply to call Ognl.getValue(“pathToProperty”, object) and the other one is to evaluate the expression upfront by Object expression = Ognl.parseExpression(“pathToProperty”) and then Ognl.getValue(expression, object);<br /><br />The second one is the fastest mechanism so, if you have the ability to ‘pre-compile’ your expressions, OGNL is for you… otherwise Spring Beans is doing a good job!<br /><br />The entire source code and Eclipse project is available <a href="http://objectlabkit.sourceforge.net/objectlab/reflection-test.zip">here</a>, feel free to comment and tell us about your experience.<br /><br />Enjoy!ObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-87446193612426619562007-06-08T08:21:00.000-07:002007-07-15T10:01:56.723-07:00Spring prototypes and auto-wire byType are expensive<p>In designing a new, very performance-sensitive part of our systems we investigated the runtime performance of retrieving beans (singleton and prototype) from a Spring bean factory versus creating them via a hand-coded factory. For the Spring code we also measured any additional overhead of auto-wiring beans and doing dependency checks on beans.</p><p>The test repeatedly retrieves 5 beans which are the roots of a highly interconnected object graph (comprising 4 other beans) from a Spring bean factory. In the prototype tests each bean in that graph is a Spring prototype bean, i.e. a new instance is create whenever a bean is needed from the bean factory. In the singleton tests each bean in that graph is a Spring singleton and so the same instance is returned every time a bean is retrieved. By comparison, the hand-coded factory always creates each object in that graph and hence behaves identical to the Spring prototype test.</p><p>The results give the time in nanoseconds for retrieving a bean (which is the root of the object graph) from the factory:<table style="border-collapse: collapse;" border="0" cellpadding="0" cellspacing="0"><tbody style="font-family:courier new;"><tr><td class="xl63">Bean retrieval / nanoseconds</td><br /><td class="xl64"><span style="font-size:85%;">Spring 2.0.5</span></td><br /><td class="xl64"><span style="font-size:85%;">Spring 2.0.4</span></td><br /><td class="xl64"><span style="font-size:85%;">Spring 2.0.3</span></td><br /><td class="xl65"><span style="font-size:85%;">Spring 2.0.2</span></td><br /></tr><tr><td>Spring, prototype, autowire=byType, depend check</td><br /><td class="xl67" align="right"><span style="font-size:85%;">442365</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">500050</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">945551</span></td><br /><td class="xl68" align="right"><span style="font-size:85%;">958805</span></td><br /></tr><tr><td>Spring, prototype, autowire=byName,<br />depend check</td><br /><td class="xl67" align="right"><span style="font-size:85%;">253870</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">255557</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">667352</span></td><br /><td class="xl68" align="right"><span style="font-size:85%;">678782</span></td><br /></tr><tr><td>Spring, prototype, no autowire, depend check</td><br /><td class="xl67" align="right"><span style="font-size:85%;">172412</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">173539</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">624171</span></td><br /><td class="xl68" align="right"><span style="font-size:85%;">639640</span></td><br /></tr><tr><td>Spring, prototype, no autowire,no depend check</td><br /><td class="xl67" align="right"><span style="font-size:85%;">162300</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">162950</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">586144</span></td><br /><td class="xl68" align="right"><span style="font-size:85%;">600320</span></td><br /></tr><tr><td>Spring, singleton, autowire=byType, depend check</td><br /><td class="xl67" align="right"><span style="font-size:85%;">608</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">841</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">1075</span></td><br /><td class="xl68" align="right"><span style="font-size:85%;">1134</span></td><br /></tr><tr><td>Spring, singleton, autowire=byName,depend check</td><br /><td class="xl67" align="right"><span style="font-size:85%;">710</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">840</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">1069</span></td><br /><td class="xl68" align="right"><span style="font-size:85%;">1132</span></td><br /></tr><tr><td>Spring, singleton, no autowire,depend check</td><br /><td class="xl67" align="right"><span style="font-size:85%;">609</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">842</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">1097</span></td><br /><td class="xl68" align="right"><span style="font-size:85%;">1161</span></td><br /></tr><tr><td>Spring, singleton, no autowire, no depend check</td><br /><td class="xl67" align="right"><span style="font-size:85%;">614</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">837</span></td><br /><td class="xl67" align="right"><span style="font-size:85%;">1102</span></td><br /><td class="xl68" align="right"><span style="font-size:85%;">1135</span></td><br /></tr><tr><td>No Spring (hand-coded factory),always create (prototype)</td><br /><td class="xl70" align="right"><span style="font-size:85%;">284</span></td><br /><td class="xl70" align="right"><span style="font-size:85%;">284</span></td><br /><td class="xl70" align="right"><span style="font-size:85%;">288</span></td><br /><td class="xl71" align="right"><span style="font-size:85%;">292</span></td><br /></tr></tbody></table>The numbers speak for themselves, but the shown figures visualise them.<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YdPk6qg74BU/Rml1OZOkaKI/AAAAAAAAAAM/cbAhDIFA4m8/s1600-h/bean_retrieval_creation_nanoseconds_all.png"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_YdPk6qg74BU/Rml1OZOkaKI/AAAAAAAAAAM/cbAhDIFA4m8/s320/bean_retrieval_creation_nanoseconds_all.png" alt="" id="BLOGGER_PHOTO_ID_5073715345360185506" border="0" /></a></p><br /><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YdPk6qg74BU/Rml1qpOkaLI/AAAAAAAAAAU/BrgMPB7nqvc/s1600-h/bean_retrieval_creation_nanoseconds_fast.png"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_YdPk6qg74BU/Rml1qpOkaLI/AAAAAAAAAAU/BrgMPB7nqvc/s320/bean_retrieval_creation_nanoseconds_fast.png" alt="" id="BLOGGER_PHOTO_ID_5073715830691489970" border="0" /></a></p><br /><p>The code we used to perform these measurements and all results are available <a href="http://objectlabkit.sourceforge.net/objectlab/spring-perf-test.zip">here</a>.</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-64561773616306722222007-05-30T14:40:00.000-07:002007-05-30T14:47:56.728-07:00Goodbye PZFileReader! Hello FlatPack!Paul and I have been muling (pun intended... more on that later!) about the name of our parser project. PZFileReader is very useful and originated in the world of "reading files", its capabilities have outgrown the name for quite some time.<br /><br />We then thought about the basics, what does this project do?<br /><br />Well, it parses files, string or messages that are in a delimited format (e.g. csv) or fixed length format (when a field is delimited by an offset and a length). It would even support parsing records that are across multiple lines. Furthermore, the project allowed an XML definition of a given format... Some work is also ongoing to create 'Writers' that would allow you to create such delimited, we hope to reveal more shortly.<br /><br />And so.. enter FlatPack!<br /><br />The common denominator of those files/messages is that they are "flat" and not hierarchical a la xml.<br /><br />We were lucky enough to get the url: <a href="http://flatpack.sf.net">http://flatpack.sf.net</a><br /><br />The packaging and website will be updated soon!<br /><br />Enjoy!<br /><br /><br />Benoit & PaulObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-8526828155529066502007-04-29T03:03:00.000-07:002007-04-29T03:13:35.677-07:00JTreeMap 1.1.0 released!<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jtreemap.sourceforge.net/images/JTreeMapExample.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://jtreemap.sourceforge.net/images/JTreeMapExample.png" alt="" border="0" /></a><br /><p class="MsoNormal">Hi *,</p> <p class="MsoNormal">ObjectLab is very pleased to announce the immediate release of JTreeMap 1.1.0, a heatmap/treemap visual library for JDK 5.0.<span style=""> </span>We believe this is the only open source library of this kind under a business friendly license.</p> <p class="MsoNormal">Towards the end of 2006, ObjectLab got involved with JTreeMap as part of a financial application.<span style=""> </span>Laurent Dutheil had been developing it but found it more time consuming that anticipated.<span style=""> </span>It is where ObjectLab offered some expertise and the result is the new release 1.1.0.<span style=""> </span>We acknowledge and thank Laurent for his great contribution.</p> <p class="MsoNormal">Home page: <a href="http://jtreemap.sourceforge.net/">http://jtreemap.sourceforge.net</a> </p> <p class="MsoNormal">The release is available on SF and on 2 Maven repositories (whilst we’re going through the process of adding it in the official repository).<span style=""> </span>The ObjectLab Open Source repositories are:</p> <p class="MsoNormal"><a href="http://objectlabkit.sourceforge.net/m2-repo">http://objectlabkit.sourceforge.net/m2-repo</a></p> <p class="MsoNormal">and</p> <p class="MsoNormal"><a href="http://objectlabkit.sourceforge.net/m1-repo">http://objectlabkit.sourceforge.net/m1-repo</a></p> <p class="MsoNormal">The question of how to represent and visualize a lot of information at a glance is a hot topic in IT. A Treemap, also known as Heatmap, is an important tool for this. A TreeMap graphically represents a hierarchical structure.<o:p></o:p></p> <p class="MsoNormal">Typically, the hierarchy will involve a tree of nodes of different sizes and different colours.<span style=""> </span>The size and colours are determined by parameters such as the relative importance of a node in comparison to the full size. A well known examples is the Map of the Market on <a href="http://www.smartmoney.com/">www.smartmoney.com</a> but their library is not open source (and very pricey!).</p> <p class="MsoNormal">JTreeMap comes in 2 flavours: JTreeMap for Swing and KTreeMap for SWT.</p> <p class="MsoNormal">Enjoy!</p> <p class="MsoNormal">Benoit & the rest of the ObjectLab Team.</p>ObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-31235339508557769792007-04-19T17:05:00.000-07:002007-04-19T17:30:59.497-07:00Coming QALab: Emma, XML FindBugs, new XML, new Chart & more!I thought that it may be interesting to do something that Microsoft has been doing for years, like announcing a coming release of something... The difference is that, this is not vapo(u)rware, it will turn up!<br /><br /><b><a href="http://qalab.sourceforge.net">http://qalab.sourceforge.net</a></b>.<br /><br />So, what are the items we're working on?<br /><ul><br /><li>Emma support is coming, thanks to the contribution of Robert Crawford.</li><br /><li>Support for the XML output from Findbugs (rather than the xdoc one), some people had to run findbugs twice due to this limitation.</li><br /><li>A new <a href="http://www.statsvn.org/qalab/spidey-summary.png"><b>Spider</b> Chart</a> will show 3 snapshots of multi-dimensional data at 0, 30 and 90 days. You'll be able to see what is happening at a glance!</li><br /><li>Automatic migration of the QALab XML to a new format that will also add the notion of "project" and "module" making it more hierarchical... one step closer to aggregation!</li><br /><li>a bit of code re-org to keep the house tidy!</li><br /><li>Some experimental work with storing QALab stats in a DB</li><br /></ul><br />So... when will it be available? Like cooking, it will be ready when it's ready... but for the impatient type, all these features are in Subversion!<br /><br />Finally, we're willing to add more tools and are welcoming contributions, especially for Clover! Should not be difficult... Our main problem is that there are only 24 hours in a day!<br /><br />Until next time,<br /><br />BenoitObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-76678960363592818542007-04-09T04:28:00.000-07:002007-04-09T05:43:11.804-07:00StatSVN Demos are updatedStatSVN is pleased to announce an update of the demo site.<br /><br /><a href="http://www.statsvn.org/demo">http://www.statsvn.org/demo</a><br /><br />StatSVN demo is designed to show StatSVN capabilities for some well-known open source projects. Some of those are rather large and required some serious initial computing power (first run is rather big if the project has a lot of history).<br /><br />At the moment, we have selected:<br /><ol><br /><li>Subversion itself!</li><br /><li>Spring Rich Client (java rich client library from Spring)</li><br /><li>Hibernate 3 (java persistence)</li><br /><li>Joda Time (cool java time library)</li><br /><li>Log4J (Apache logging library for Java)</li><br /><li>Ruby (yes, the language, in C!)</li><br /><li>Groovy</li><br /><li>Grails</li><br /><li>Felix (Apache OSGi implementation)</li><br /><li>Ant (Apache Ant, had more than 500,000 revisions)</li><br /><li>Mule (The World's most widely used open source ESB)</li><br /><li>Synapse (Apache Synapse, Synapse is a mediation framework for Web Services. Synapse allows messages flowing through, into, or out of an organization to be mediated.)</li><br /><li>QPid (Apache QPid, implementation of AMQP, Advanced Messaged Queuing Protocol)</li><br /><li>QALab A great tool for keeping track of QA statistics over time.</li><br /><li>PZFileReader Parsing of delimited strings or fixed-length strings.</li><br /><li>ObjectLab Kit Date Calculators for Business and Finance.</li><br /><li>JTreeMap Heat Map library.</li><br /><li>AntLibs DotNet.</li><br /><li>AntLibs HTTP.</li><br /><li>AntLibs Manual for Eclipse.</li><br /><li>AntLibs Subversion.</li><br /><li>AntLibs Ant Unit.</li><br /><li>XStream XStream is a simple library to serialize objects to XML and back again.</li><br /><li>JBoss AS No less! Do not try this at home, the first batch of statistics required 102,000 calls to the server... now it is fast!</li><br /><li>JRuby JRuby is an 100% pure-Java implementation of the Ruby programming language!</li><br /><li>ServiceMix The Apache ServiceMix project is an ESB and component suite based on the Java Business Interface (JBI) standard - JSR 208</li><br /><li>Commons-Lang The Apache Commons Lang.</li><br /><li>JDK7 The java JDK version 7! Checkout the very latest changes!</li><br /><li>TestNG TestNG, the new testing framework!</li><br /><li>Maven 1 The Apache Maven 1!</li><br /><li>Maven 2 The Apache Maven 2!</li><br /><li>Maven 2 Plugins The Apache Maven 2 Plugins!</li><br /><li>Continuum The Apache Continuum project!</li><br /><li>Pebble a Blog software!</li><br /></ol><br /><br />If you would like us to add an open source project, please raise an issue on SF and provide us with the following information:<br /><br /><ol><br /><li>Project Name</li><br /><li>Project Home page</li><br /><li>A one paragraph of html describing the project</li><br /><li>URL to anonymous Subversion server for the trunk</li><br /><li>List of tags, versions that should be identified.</li><br /><li>A list of developers, loginId-RealName, URL to homepage, URL to photo and email (all optional)</li><br /></ol>We cannot guarantee inclusion but you never know...<br /><br />StatSVN Team.<br /><br />PS: Support us by checking the Ads on the demo site. Thanks.ObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0tag:blogger.com,1999:blog-8255455458104156220.post-68389623418417545722007-04-06T10:21:00.000-07:002007-04-06T12:37:26.733-07:00First post... why a combined blog?Welcome to the ObjectLab Open Source News.<br /><br />Our company, ObjectLab Financial Ltd is quite involved in some open source projects. We believe that, as a whole, this family of open source projects can help you.<br /><br />So what are they?<br /><br /><ul><br /><li><strong><a href="http://qalab.sourceforge.net">QALab</a></strong>, our first project. It keeps track of QA statistics over time based on Checkstyle, PMD, FindBugs, Cobertura, Simian and more to come!</li><br /><li><strong><a href="http://objectlabkit.sourceforge.net">ObjectLab Kit</a></strong>, a series of Date calculators for business and finance. It is Apache 2.0 so feel free!</li><br /><li><strong><a href="http://jtreemap.sourceforge.net">JTreeMap</a></strong>, the only open source Apache 2.0 HeatMap solution for java!</li><br /><li><strong><a href="http://www.StatSVN.org">StatSVN</a></strong>, a cool way to discover who has done what and when in your Subversion repository (sorry we cannot help on the 'why' they did it!)</li><br /><li><strong><a href="http://pzfilereader.sourceforget.net">PZFileReader</a></strong>, a parser for delimited or fixed-length text. It is not as easy as it sounds... very flexible.</li><br /><li><strong><a href="http://statcvs.sourceforge.net">StatCVS</a></strong>, same as StatSVN but for CVS (we just contributed a bit...)</li><br /></ul><br /><br />So, why a combined blog? So you can keep track of the news for all our projects in one place!<br /><br />All news releases will announced here!<br /><br />Cheers<br /><br />Benoit & the rest of the team.ObjectLab/Appendiumhttp://www.blogger.com/profile/10408712629355326011noreply@blogger.com0