<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DkQFQng4fip7ImA9WhBbFk4.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529</id><updated>2013-05-15T18:11:53.636+02:00</updated><category term="m2eclipse" /><category term="Nexus" /><category term="foto" /><category term="Maven" /><category term="Eclipse" /><category term="random" /><category term="Mac" /><category term="Bitcoin" /><category term="video" /><category term="Windows" /><category term="amphibians" /><category term="Java" /><category term="Oracle" /><category term="beetles" /><category term="Sonar" /><category term="critters" /><title>Obscured Clarity</title><subtitle type="html">a cache for curiosity</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://obscuredclarity.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>212</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/ObscuredClarity" /><feedburner:info uri="obscuredclarity" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>ObscuredClarity</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;DE4BQHcycSp7ImA9WhNbGU8.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-8219609477072413059</id><published>2013-01-20T22:59:00.000+01:00</published><updated>2013-01-23T08:42:31.999+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-23T08:42:31.999+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>Unit Testing with HSQLDB</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://xeiam.com/yank.jsp" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="200" width="200" src="http://4.bp.blogspot.com/-Z6gKksWIJ2I/UPxjztGLpYI/AAAAAAAACvY/ye7_jRadBiA/s200/yank_256.png" /&gt;&lt;/a&gt;&lt;/div&gt;The latest &lt;a href="http://xeiam.com/yank_changelog.jsp"&gt;release (2.0.0) of Yank&lt;/a&gt; - the Ultra-Light JDBC Persistance Layer for Java, finally contains unit-tested code. This blog is about how HSQLDB was used for performing in-memory unit tests using JUnit. Just like most things, once you know the few tricks, it's really easy.&lt;br /&gt;
&lt;br /&gt;
Once nice feature of HSQLDB is that you can set up 100% in-memory tables, which makes unit testing a snap because you don't need to worry about having a database setup on the machine running the database. The following code snippets show how easy it was to setup a unit test for testing the core JDBC persistance layer code in Yank. While this is specific to Yank, this example should help you unit test any of your JDBC code using HSQLDB. After all, the main trick is to have your database properties setup correctly, as shown in HSQL_DB.properties below. &lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;h4&gt;TestBooksTable.java&lt;/h4&gt;&lt;pre name="code" class="java"&gt;package com.xeiam.yank.unit;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;

import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import com.xeiam.yank.DBConnectionManager;
import com.xeiam.yank.PropertiesUtils;
import com.xeiam.yank.demo.Book;
import com.xeiam.yank.demo.BooksDAO;

/**
 * @author timmolter
 */
public class TestBooksTable {

  @BeforeClass
  public static void setUpDB() {

    Properties dbProps = PropertiesUtils.getPropertiesFromClasspath("HSQL_DB.properties");
    Properties sqlProps = PropertiesUtils.getPropertiesFromClasspath("HSQL_SQL.properties");

    DBConnectionManager.INSTANCE.init(dbProps, sqlProps);
  }

  @AfterClass
  public static void tearDownDB() {

    DBConnectionManager.INSTANCE.release();
  }

  @Test
  public void testBooksTable() {

    BooksDAO.createBooksTable();

    Book book = new Book();
    book.setTitle("Cryptonomicon");
    book.setAuthor("Neal Stephenson");
    book.setPrice(23.99);
    int i = BooksDAO.insertBook(book);
    assertThat(i, equalTo(1));

    List&amp;lt;Book&amp;gt; books = new ArrayList&amp;lt;Book&amp;gt;();

    book = new Book();
    book.setTitle("Cryptonomicon");
    book.setAuthor("Neal Stephenson");
    book.setPrice(23.99);
    books.add(book);

    book = new Book();
    book.setTitle("Harry Potter");
    book.setAuthor("Joanne K. Rowling");
    book.setPrice(11.99);
    books.add(book);

    book = new Book();
    book.setTitle("Don Quijote");
    book.setAuthor("Cervantes");
    book.setPrice(21.99);
    books.add(book);

    int[] returnValue = BooksDAO.insertBatch(books);
    assertThat(returnValue.length, equalTo(3));

    List&amp;lt;Book&amp;gt; allBooks = BooksDAO.selectAllBooks();
    assertThat(allBooks.size(), equalTo(4));

    book = BooksDAO.selectBook("Cryptonomicon");
    assertThat(book.getPrice(), equalTo(23.99));

  }
}
&lt;/pre&gt;&lt;h4&gt;HSQL_DB.properties&lt;/h4&gt;&lt;pre name="code" class="java"&gt;driverclassname=org.hsqldb.jdbcDriver

# 100% in memory DB
myconnectionpoolname.url=jdbc:hsqldb:mem:aname;shutdown=true
myconnectionpoolname.user=sa
myconnectionpoolname.password=
myconnectionpoolname.maxconn=10
&lt;/pre&gt;&lt;h4&gt;HSQL_SQL.properties&lt;/h4&gt;&lt;pre name="code" class="java"&gt;BOOKS_CREATE_TABLE=CREATE TABLE Books (TITLE VARCHAR(42) NULL, AUTHOR VARCHAR(42) NULL, PRICE DECIMAL(10,2) NOT NULL)
BOOKS_SELECT_BY_TITLE=SELECT * FROM BOOKS WHERE TITLE = ?
&lt;/pre&gt;&lt;h4&gt;Ultra-Light JDBC Persistance Layer&lt;/h4&gt;&lt;p&gt;&lt;a href="http://xeiam.com/yank.jsp"&gt;Yank&lt;/a&gt; is a very easy-to-use yet flexible Java persistence layer for JDBC-compatible databases build on top of &lt;a href="http://commons.apache.org/dbutils/"&gt;org.apache.DBUtils&lt;/a&gt;. Yank wraps DBUtils, hiding the nitty-gritty Connection and ResultSet details behind a straight-forward proxy class: DBProxy. "Query" methods execute SELECT statements and return a List of POJOs. "Execute" methods execute INSERT, UPDATE, and DELETE (and more) statements. &lt;/p&gt;&lt;p&gt;Usage is very simple: define DB connectivity properties, create a DAO and POJO class, and execute queries.&lt;/p&gt;&lt;h4&gt;Features&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Depends on light-weight and robust DBUtils library&lt;/li&gt;
&lt;li&gt;~13KB Jar&lt;/li&gt;
&lt;li&gt;Apache 2.0 license&lt;/li&gt;
&lt;li&gt;Batch execute&lt;/li&gt;
&lt;li&gt;Automatic POJO and POJO List querying&lt;/li&gt;
&lt;li&gt;Works with any JDBC-compliant database&lt;/li&gt;
&lt;li&gt;Write your own SQL statements&lt;/li&gt;
&lt;li&gt;Optionally store SQL statements in a Properties file&lt;/li&gt;
&lt;li&gt;Built-in Connection pool&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;What's Next?&lt;/h4&gt;&lt;p&gt;Now go ahead and &lt;a href="/yank_examplecode.jsp"&gt;study some examples&lt;/a&gt;, &lt;a href="/yank_changelog.jsp"&gt;download the thing&lt;/a&gt; and &lt;a href="https://github.com/timmolter/Yank/issues"&gt;provide feedback&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
Piece of Cake!!!&lt;br /&gt;
&lt;/span&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/8219609477072413059/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=8219609477072413059" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/8219609477072413059?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/8219609477072413059?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/cTVvBs_wxfM/unit-testing-with-hsqldb.html" title="Unit Testing with HSQLDB" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-Z6gKksWIJ2I/UPxjztGLpYI/AAAAAAAACvY/ye7_jRadBiA/s72-c/yank_256.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2013/01/unit-testing-with-hsqldb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMAQH44eCp7ImA9WhBRGU0.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-599896596877346911</id><published>2013-01-17T08:46:00.002+01:00</published><updated>2013-03-10T09:17:21.030+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-10T09:17:21.030+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Bitcoin" /><title>XChange Release 1.3.0</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-vIPF_p32Fpk/UPe32Xkj-CI/AAAAAAAACu8/HIhCyJXQS74/s1600/xchange_example1.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="136" width="200" src="http://2.bp.blogspot.com/-vIPF_p32Fpk/UPe32Xkj-CI/AAAAAAAACu8/HIhCyJXQS74/s200/xchange_example1.png" /&gt;&lt;/a&gt;&lt;/div&gt;Our Financial Exchange Library for Java, XChange, has seen a lot of active development since the previous release in October 2012. We went from 2 to 7 exchange implementations thanks mostly to the growing community starting to support the project more. &lt;br /&gt;
&lt;br /&gt;
Here's a list of the supported exchanges. More detailed info can be found &lt;a href="https://github.com/timmolter/XChange/wiki/Exchange-Support"&gt;here&lt;/a&gt;, which includes planned future exchange implementations.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;MtGox - polling and streaming market data, authenticated trading&lt;/li&gt;
&lt;li&gt;Bitstamp - polling market data, authenticated trading&lt;/li&gt;
&lt;li&gt;BTC-E - polling market data, authenticated trading&lt;/li&gt;
&lt;li&gt;VirtEx - polling market data&lt;/li&gt;
&lt;li&gt;CampBX - polling market data&lt;/li&gt;
&lt;li&gt;BitcoinCharts - polling market data (Bitcoin Exchange Rates)&lt;/li&gt;
&lt;li&gt;OpenExchangeRates - polling market data (Fiat Currency Exchange Rates)&lt;/li&gt;
&lt;/ul&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;
Internally, we introduced a new and improved REST interface that sits between our  xchange classes and the HttpTemplate class responsible for fetching JSON. It also gives XChange clients access to the raw unmarshalled JSON data if they want it, which was something XChange needed for a long time.&lt;br /&gt;
&lt;br /&gt;
All exchange implementations have full-coverage unit tests.&lt;br /&gt;
&lt;br /&gt;
We've been able to reduce the number of dependencies a lot. One of the main focuses of XChange is to be very lightweight. Most notably is the outdated org.json jar. We dug into the Socket.io code, and painstakingly swapped out the old code with our already-used Jackson JSON code. This is good news for apps like &lt;a href="https://play.google.com/store/apps/details?id=com.veken0m.cavirtex&amp;hl=en"&gt;Bitcoinium&lt;/a&gt; and &lt;a href="https://multibit.org/"&gt;Multibit&lt;/a&gt;, which both use XChange, for keeping their executable footprint small.&lt;br /&gt;
&lt;br /&gt;
Another major accomplishment with this release, is that the artifacts are now hosted on Maven Central: &lt;a href="http://search.maven.org/#search%7Cga%7C1%7Cxeiam%20xchange"&gt;XChange artifacts on Maven Central&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
We're thinking about adding an arbitrage API within XChange next as the MtGox, BTC-E, and Bitstamp implementations all contain trading functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Relevant Links&lt;/h4&gt;&lt;a href="http://https://github.com/timmolter/XChange/wiki/Exchange-Support"&gt;Detailed Exchange Support&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://github.com/timmolter/XChange/issues"&gt;Bug Reports and Feature Requests&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://xeiam.com/xchange.jsp"&gt;XChange Home on xeiam.com&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://search.maven.org/#search%7Cga%7C1%7Cxeiam%20xchange"&gt;XChange artifacts on Maven Central&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://github.com/timmolter/XChange"&gt;XChange project on Github&lt;/a&gt;&lt;br /&gt;
&lt;/span&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/599896596877346911/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=599896596877346911" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/599896596877346911?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/599896596877346911?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/r8k3rh78pNw/xchange-release-130.html" title="XChange Release 1.3.0" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-vIPF_p32Fpk/UPe32Xkj-CI/AAAAAAAACu8/HIhCyJXQS74/s72-c/xchange_example1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2013/01/xchange-release-130.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QGQ3w4fyp7ImA9WhNUGEw.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-1772268681667459398</id><published>2013-01-10T13:02:00.000+01:00</published><updated>2013-01-10T13:02:02.237+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-10T13:02:02.237+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><title>Very Realistic Robot Face</title><content type="html">&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/knRyDcnUc4U" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/1772268681667459398/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=1772268681667459398" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/1772268681667459398?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/1772268681667459398?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/WfciseWeOn0/very-realistic-robot-face.html" title="Very Realistic Robot Face" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/knRyDcnUc4U/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2013/01/very-realistic-robot-face.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEASHY8eyp7ImA9WhNUFEU.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-3595032319153642394</id><published>2012-12-13T14:52:00.000+01:00</published><updated>2013-01-06T14:57:29.873+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-06T14:57:29.873+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><title>Mechanical Bird Song Device from 1890</title><content type="html">&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/tPKFT_t2rL0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/3595032319153642394/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=3595032319153642394" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/3595032319153642394?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/3595032319153642394?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/qc104Ia3ymE/mechanical-bird-song-device-from-1890.html" title="Mechanical Bird Song Device from 1890" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/tPKFT_t2rL0/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/12/mechanical-bird-song-device-from-1890.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIDRn4yfip7ImA9WhNUFEU.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-8162011911825030171</id><published>2012-11-14T14:51:00.000+01:00</published><updated>2013-01-06T14:56:17.096+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-06T14:56:17.096+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><title>High-Speed Robot Hand</title><content type="html">&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/-KxjVlaLBmk" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/8162011911825030171/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=8162011911825030171" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/8162011911825030171?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/8162011911825030171?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/kgkzqOVuRIo/high-speed-robot-hand.html" title="High-Speed Robot Hand" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/-KxjVlaLBmk/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/11/high-speed-robot-hand.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYNSH86cCp7ImA9WhNSFUw.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-5019881202361823125</id><published>2012-10-29T13:26:00.000+01:00</published><updated>2012-10-29T14:09:59.118+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-29T14:09:59.118+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>Unit Testing Runtime Exceptions with JUnit4 and Hamcrest</title><content type="html">Junit and Hamcrest make unit testing with Java almost enjoyable. In this post, I show how to unit test Exceptions with JUnit4 and Hamcrest. In this over-simplified example, I'm testing a method that always throws an IllegalArgumentException. In real-life the IllegalArgumentException would only be thrown under special circumstances given certain arguments, and those are the ones you want to test with the unit test. &lt;br /&gt;
&lt;br /&gt;
The basic idea is to surround the method you want to test with a try catch block and pass it an argument that will trigger the IllegalArgumentException to be thrown. The fail method call should never be reached, and if it does the unit test should fail. What should happen is that the IllegalArgumentException is caught, followed by a check for the correct message. &lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;pre class="java" name="code"&gt;import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.fail;

import org.junit.Test;

/**
 * The following example code demonstrates how to unit test Exceptions with JUnit and Hamcrest
 */
public class ExceptionUnitTesting {

  @Test
  public void test() {

    try {
      blah("asdf");
      fail("Expected exception");
    } catch (IllegalArgumentException e) {
      assertThat(e.getMessage(), is(equalTo("Argument foo is not valid!")));
    }
  }

  /**
   * @param foo
   * @throws IllegalArgumentException - in this test case always
   */
  private void blah(String foo) {

    throw new IllegalArgumentException("Argument foo is not valid!");
  }
}

&lt;/pre&gt;&lt;br /&gt;
Piece of Cake!!!&lt;br /&gt;
&lt;/span&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/5019881202361823125/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=5019881202361823125" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/5019881202361823125?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/5019881202361823125?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/lKBTYQo700g/unit-testing-runtime-exceptions-with.html" title="Unit Testing Runtime Exceptions with JUnit4 and Hamcrest" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/10/unit-testing-runtime-exceptions-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AGQXs7cSp7ImA9WhJaEEo.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-25797888110159761</id><published>2012-10-01T10:22:00.000+02:00</published><updated>2012-10-01T10:22:00.509+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-01T10:22:00.509+02:00</app:edited><title>Import a Maven Git Project Into Eclipse</title><content type="html">&lt;h3&gt;The Easy Way&lt;/h3&gt;&lt;br /&gt;
&lt;b&gt;Prerequisites&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://obscuredclarity.blogspot.de/2012/04/hello-world-maven-m2eclipse-and-eclipse.html"&gt;Install M2Eclipse&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Step 1: Clone or create Git Repo. First, you need to clone a Git repo into an empty folder in your workspace. You need to use a Git client such as &lt;a href="http://www.sourcetreeapp.com/"&gt;SourceTree&lt;/a&gt; or &lt;a href="http://code.google.com/p/tortoisegit/"&gt;TortoiseGit&lt;/a&gt; for this. Create you workspace first if it isn't already, and clone the git repo directly into a new folder labeled with the project name.&lt;br /&gt;
&lt;br /&gt;
Step 2: Import Into Eclipse. In the Package Explorer view, right-click and choose Import... In the wizard choose Maven -&gt; "Existing Maven Projects" as the project type. Search for the project home directory and click though the wizard.&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;h3&gt;The Hard Way&lt;/h3&gt;&lt;br /&gt;
&lt;b&gt;Prerequisites&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://obscuredclarity.blogspot.de/2012/04/hello-world-maven-m2eclipse-and-eclipse.html"&gt;Install M2Eclipse&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://obscuredclarity.blogspot.de/2011/04/install-egit-for-eclipse.html"&gt;Install egit&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Step 1: Right-click in the Package Explorer area and select Import..., select Maven -&gt; Check out Maven Projects from SCM, and click Next. &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-cqARdZ3x1bg/UGlKkpgU8YI/AAAAAAAACsc/zcmQV3EZ4yc/s1600/Screen%2Bshot%2B2012-08-08%2Bat%2B3.40.56%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="400" width="384" src="http://2.bp.blogspot.com/-cqARdZ3x1bg/UGlKkpgU8YI/AAAAAAAACsc/zcmQV3EZ4yc/s400/Screen%2Bshot%2B2012-08-08%2Bat%2B3.40.56%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Step 2: Choose "git" as the SCM connector next to "SCM URL:" and type in the Git repo URL. If there are no connectors to choose from you have to first install that Eclipse plugin. To do that, click on the "m2e Marketplace" link in the lower right hand corner of the dialog box.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-LOwZpsFesTE/UGlKjyvs_kI/AAAAAAAACsQ/LcBR5KfQQWM/s1600/Screen%2Bshot%2B2012-08-08%2Bat%2B3.41.14%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="336" width="400" src="http://3.bp.blogspot.com/-LOwZpsFesTE/UGlKjyvs_kI/AAAAAAAACsQ/LcBR5KfQQWM/s400/Screen%2Bshot%2B2012-08-08%2Bat%2B3.41.14%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Step 3: Check m2e-egit and click Finish.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ycBI-aSD_6w/UGlKi_UDbrI/AAAAAAAACsE/b73nYfu1FbE/s1600/Screen%2Bshot%2B2012-08-08%2Bat%2B3.44.41%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="145" width="400" src="http://2.bp.blogspot.com/-ycBI-aSD_6w/UGlKi_UDbrI/AAAAAAAACsE/b73nYfu1FbE/s400/Screen%2Bshot%2B2012-08-08%2Bat%2B3.44.41%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Step 4: Select "git" as the SCM connector and type in the Git repo URL.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-9lK2M5HVdE0/UGlKiUPBIBI/AAAAAAAACr4/mRbx07J6eWM/s1600/Screen%2Bshot%2B2012-08-08%2Bat%2B4.51.20%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="400" width="384" src="http://2.bp.blogspot.com/-9lK2M5HVdE0/UGlKiUPBIBI/AAAAAAAACr4/mRbx07J6eWM/s400/Screen%2Bshot%2B2012-08-08%2Bat%2B4.51.20%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Step 5: After asking you for the passphrase for ssh access to the Git repo, it will download and import the Java project as a Maven project into your workspace.&lt;br /&gt;
&lt;br /&gt;
Piece of Cake!!!&lt;br /&gt;
&lt;/span&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/25797888110159761/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=25797888110159761" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/25797888110159761?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/25797888110159761?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/mSTjfcFQSB8/import-maven-git-project-into-eclipse.html" title="Import a Maven Git Project Into Eclipse" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-cqARdZ3x1bg/UGlKkpgU8YI/AAAAAAAACsc/zcmQV3EZ4yc/s72-c/Screen%2Bshot%2B2012-08-08%2Bat%2B3.40.56%2BPM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/10/import-maven-git-project-into-eclipse.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04BSHs_eyp7ImA9WhJbE0g.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-1569209153361487251</id><published>2012-09-23T00:12:00.002+02:00</published><updated>2012-09-23T00:12:39.543+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-23T00:12:39.543+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><title>Bird Brains</title><content type="html">&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/ZRz7Xwi1ypU" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/1569209153361487251/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=1569209153361487251" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/1569209153361487251?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/1569209153361487251?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/tVBEtMV62k0/bird-brains.html" title="Bird Brains" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/ZRz7Xwi1ypU/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/09/bird-brains.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQARnc6fSp7ImA9WhJbEU4.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-2438218377573952128</id><published>2012-09-20T11:29:00.001+02:00</published><updated>2012-09-20T11:29:07.915+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-20T11:29:07.915+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><title>Bacteria as a Superorganism</title><content type="html">&lt;object width="526" height="374"&gt;&lt;param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;param name="bgColor" value="#ffffff"&gt;&lt;/param&gt;&lt;param name="flashvars" value="vu=http://video.ted.com/talk/stream/2009/Blank/BonnieBassler_2009-320k.mp4&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/BonnieBassler-2009.embed_thumbnail.jpg&amp;vw=512&amp;vh=288&amp;ap=0&amp;ti=509&amp;lang=en&amp;introDuration=15330&amp;adDuration=4000&amp;postAdDuration=830&amp;adKeys=talk=bonnie_bassler_on_how_bacteria_communicate;year=2009;theme=evolution_s_genius;theme=medicine_without_borders;theme=unconventional_explanations;theme=animals_that_amaze;event=TED2009;tag=MacArthur+grant;tag=bacteria;tag=biology;tag=communication;tag=disease;tag=evolution;tag=health;tag=human+origins;tag=microbiology;tag=science;&amp;preAdTag=tconf.ted/embed;tile=1;sz=512x288;" /&gt;&lt;embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="526" height="374" allowFullScreen="true" allowScriptAccess="always" flashvars="vu=http://video.ted.com/talk/stream/2009/Blank/BonnieBassler_2009-320k.mp4&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/BonnieBassler-2009.embed_thumbnail.jpg&amp;vw=512&amp;vh=288&amp;ap=0&amp;ti=509&amp;lang=en&amp;introDuration=15330&amp;adDuration=4000&amp;postAdDuration=830&amp;adKeys=talk=bonnie_bassler_on_how_bacteria_communicate;year=2009;theme=evolution_s_genius;theme=medicine_without_borders;theme=unconventional_explanations;theme=animals_that_amaze;event=TED2009;tag=MacArthur+grant;tag=bacteria;tag=biology;tag=communication;tag=disease;tag=evolution;tag=health;tag=human+origins;tag=microbiology;tag=science;&amp;preAdTag=tconf.ted/embed;tile=1;sz=512x288;"&gt;&lt;/embed&gt;&lt;/object&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/2438218377573952128/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=2438218377573952128" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/2438218377573952128?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/2438218377573952128?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/bOBqr_GYHcU/bacteria-as-superorganism.html" title="Bacteria as a Superorganism" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/09/bacteria-as-superorganism.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUDQ3c_fSp7ImA9WhJbEU4.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-8119273077404922351</id><published>2012-09-20T11:10:00.002+02:00</published><updated>2012-09-20T11:11:12.945+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-20T11:11:12.945+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><title>Good Overview of Superstring Theory</title><content type="html">&lt;object width="526" height="374"&gt;&lt;param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;param name="bgColor" value="#ffffff"&gt;&lt;/param&gt;&lt;param name="flashvars" value="vu=http://video.ted.com/talk/stream/2005/Blank/BrianGreene_2005-320k.mp4&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/BrianGreene-2005.embed_thumbnail.jpg&amp;vw=512&amp;vh=288&amp;ap=0&amp;ti=251&amp;lang=en&amp;introDuration=15330&amp;adDuration=4000&amp;postAdDuration=830&amp;adKeys=talk=brian_greene_on_string_theory;year=2005;theme=unconventional_explanations;theme=peering_into_space;event=TED2005;tag=physics;tag=science;tag=universe;&amp;preAdTag=tconf.ted/embed;tile=1;sz=512x288;" /&gt;&lt;embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="526" height="374" allowFullScreen="true" allowScriptAccess="always" flashvars="vu=http://video.ted.com/talk/stream/2005/Blank/BrianGreene_2005-320k.mp4&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/BrianGreene-2005.embed_thumbnail.jpg&amp;vw=512&amp;vh=288&amp;ap=0&amp;ti=251&amp;lang=en&amp;introDuration=15330&amp;adDuration=4000&amp;postAdDuration=830&amp;adKeys=talk=brian_greene_on_string_theory;year=2005;theme=unconventional_explanations;theme=peering_into_space;event=TED2005;tag=physics;tag=science;tag=universe;&amp;preAdTag=tconf.ted/embed;tile=1;sz=512x288;"&gt;&lt;/embed&gt;&lt;/object&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/8119273077404922351/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=8119273077404922351" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/8119273077404922351?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/8119273077404922351?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/fCO_dWXodEc/good-overview-of-superstring-theory.html" title="Good Overview of Superstring Theory" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/09/good-overview-of-superstring-theory.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08DSX48eSp7ImA9WhJbEEU.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-953143525298910236</id><published>2012-09-19T23:24:00.004+02:00</published><updated>2012-09-19T23:24:38.071+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-19T23:24:38.071+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><title>What Is Life Really?</title><content type="html">&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/6jIeHsefCPk" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/953143525298910236/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=953143525298910236" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/953143525298910236?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/953143525298910236?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/1wvKY6yWmZg/what-is-life-really.html" title="What Is Life Really?" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/6jIeHsefCPk/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/09/what-is-life-really.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYFQn4_fyp7ImA9WhJUE0g.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-4112334766657702889</id><published>2012-09-11T10:45:00.000+02:00</published><updated>2012-09-11T10:45:13.047+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-11T10:45:13.047+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><title>Avoiding Name Collisions When Organizing Imports in Eclipse</title><content type="html">Is there any way to get Eclipse to automatically give preference to a preferred import when organizing imports? Thankfully, the answer is yes.&lt;br /&gt;
&lt;br /&gt;
For example, I'd like to be able to write:&lt;br /&gt;
&lt;br /&gt;
    List&lt;String&gt; myList = new ArrayList&lt;String&gt;();&lt;br /&gt;
&lt;br /&gt;
hit &lt;b&gt;Ctrl&lt;/b&gt; + &lt;b&gt;Shift&lt;/b&gt; + &lt;b&gt;O&lt;/b&gt; and have Eclipse add:&lt;br /&gt;
&lt;br /&gt;
    import java.util.List;&lt;br /&gt;
&lt;br /&gt;
And not always ask me which List I want to import:&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-wASYTRYEYR0/UE74mgAqMuI/AAAAAAAACrA/JnpmRYp2IEo/s1600/Screen%2Bshot%2B2012-09-11%2Bat%2B10.30.35%2BAM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="214" width="400" src="http://1.bp.blogspot.com/-wASYTRYEYR0/UE74mgAqMuI/AAAAAAAACrA/JnpmRYp2IEo/s400/Screen%2Bshot%2B2012-09-11%2Bat%2B10.30.35%2BAM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
To tell Eclipse not to ever consider java.awt.List, for example, go to Preferences --&gt; Java --&gt; Appearance --&gt; Type Filters menu. Click add and enter Types you do not want Eclipse to consider for automatic insertion of import statements.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-SXzWrPZu8jE/UE75g3S3utI/AAAAAAAACrM/AO5e-pai9Ao/s1600/Screen%2Bshot%2B2012-09-11%2Bat%2B10.45.04%2BAM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="324" width="400" src="http://3.bp.blogspot.com/-SXzWrPZu8jE/UE75g3S3utI/AAAAAAAACrM/AO5e-pai9Ao/s400/Screen%2Bshot%2B2012-09-11%2Bat%2B10.45.04%2BAM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Piece of Cake!!!&lt;br /&gt;
&lt;/span&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/4112334766657702889/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=4112334766657702889" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/4112334766657702889?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/4112334766657702889?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/KRxtaVJ6MVw/avoiding-name-collisions-when.html" title="Avoiding Name Collisions When Organizing Imports in Eclipse" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-wASYTRYEYR0/UE74mgAqMuI/AAAAAAAACrA/JnpmRYp2IEo/s72-c/Screen%2Bshot%2B2012-09-11%2Bat%2B10.30.35%2BAM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/09/avoiding-name-collisions-when.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4GQXk-fCp7ImA9WhBRGU8.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-952092519196439061</id><published>2012-08-28T23:42:00.001+02:00</published><updated>2013-03-10T14:08:40.754+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-10T14:08:40.754+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Bitcoin" /><title>XChange - Open Source Java API for MtGox Bitcoin Exchange</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-f9U-bGII0Rc/UD00_4UHIsI/AAAAAAAACqY/uQfMY4FOMZY/s1600/xchange_256.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-f9U-bGII0Rc/UD00_4UHIsI/AAAAAAAACqY/uQfMY4FOMZY/s200/xchange_256.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
UPDATE March 9, 2013: &lt;a href="http://blog.xeiam.com/2013/03/xchange-150-released.html"&gt;Version 1.5.0 released&lt;/a&gt;. Support for 10 exchanges.&lt;br /&gt;
&lt;br /&gt;
UPDATE Jan 31, 2013: Version 1.4.0 released. Support for Canadian Virtual Exchange. Mostly bug fixes.&lt;br /&gt;
&lt;br /&gt;
UPDATE Jan 16, 2013: Version 1.3.0 released. Support for many more exchanges. See &lt;a href="http://xeiam.com/xchange_changelog.jsp"&gt;release notes&lt;/a&gt; and also &lt;a href="http://obscuredclarity.blogspot.de/2013/01/xchange-release-130.html"&gt;XChange Release 1.3.0 Announcement&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
UPDATE Oct 11, 2012: Version 1.2.0 released. Support for Canadian Virtual Exchange.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://github.com/timmolter/XChange/wiki/Exchange-Support"&gt;Supported Exchanges&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Together with other members from the Bitcoin community, I've recently created a new open source Java library called XChange. XChange is a Java library providing a simple and consistent API for interacting with a diverse set of financial security exchanges including Bitcoin. The first exchange implemented is the world's largest Bitcoin exchange - Mt Gox. The plan is to add more Bitcoin exchanges and other traditional financial exchanges offerring trading APIs such as Interactive Brokers.&lt;br /&gt;
&lt;br /&gt;
As of the most recent release 1.1.0, Xchange offers the following functionality:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Support for MtGox Bitcoin Exchange (public) polling market data (ticker, depth, trades, etc.)&lt;/li&gt;
&lt;li&gt;Support for MtGox Bitcoin Exchange (private) polling trade data (account info, market order, limit order, cancel order open orders, etc.)&lt;/li&gt;
&lt;li&gt;Support for MtGox Bitcoin Exchange (public) streaming market (ticker)&lt;/li&gt;
&lt;/ul&gt;&lt;span class="fullpost"&gt;Next up on the todo list is:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Support for MtGox Bitcoin Exchange (public) streaming market (depth, trades, etc.)&lt;/li&gt;
&lt;li&gt;Support for MtGox Bitcoin Exchange (private) streaming trade data (account info, market order, limit order, cancel order open orders, etc.)&lt;/li&gt;
&lt;/ul&gt;&lt;h1&gt;Relevant Links&lt;/h1&gt;Project Home - &lt;a href="http://xeiam.com/xchange.jsp"&gt;http://xeiam.com/xchange.jsp&lt;/a&gt;&lt;br /&gt;
Code on Github - &lt;a href="https://github.com/timmolter/XChange"&gt;https://github.com/timmolter/XChange&lt;/a&gt;&lt;br /&gt;
Example Code - &lt;a href="http://xeiam.com/xchange_examplecode.jsp"&gt;http://xeiam.com/xchange_examplecode.jsp&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Examples&lt;/h1&gt;The following examples demonstrate getting Ticker data from MtGox, first using the polling API, and second using the streaming API.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Ticker via Polling API&lt;/h3&gt;&lt;pre class="java" name="code"&gt;package com.xeiam.xchange.examples.mtgox.v1.polling;

import com.xeiam.xchange.Currencies;
import com.xeiam.xchange.Exchange;
import com.xeiam.xchange.ExchangeFactory;
import com.xeiam.xchange.dto.marketdata.Ticker;
import com.xeiam.xchange.service.marketdata.polling.PollingMarketDataService;

/**
 * Test requesting polling Ticker at MtGox
 */
public class TickerDemo {

  private static PollingMarketDataService marketDataService;

  public static void main(String[] args) {

    // Use the factory to get the version 1 MtGox exchange API using default settings
    Exchange mtGox = ExchangeFactory.INSTANCE.createExchange("com.xeiam.xchange.mtgox.v1.MtGoxExchange");

    // Interested in the public polling market data feed (no authentication)
    marketDataService = mtGox.getPollingMarketDataService();

    // Get the latest ticker data showing BTC to USD
    Ticker ticker = marketDataService.getTicker(Currencies.BTC, Currencies.USD);
    double value = ticker.getLast().getAmount().doubleValue();
    String currency = ticker.getLast().getCurrencyUnit().toString();
    System.out.println("Last: " + currency + "-" + value);

    System.out.println("Last: " + ticker.getLast().toString());
    System.out.println("Bid: " + ticker.getBid().toString());
    System.out.println("Ask: " + ticker.getAsk().toString());

    // Get the latest ticker data showing BTC to EUR
    ticker = marketDataService.getTicker(Currencies.BTC, Currencies.EUR);
    System.out.println("Last: " + ticker.getLast().toString());
    System.out.println("Bid: " + ticker.getBid().toString());
    System.out.println("Ask: " + ticker.getAsk().toString());

    // Get the latest ticker data showing BTC to GBP
    ticker = marketDataService.getTicker(Currencies.BTC, Currencies.GBP);
    System.out.println("Last: " + ticker.getLast().toString());
    System.out.println("Bid: " + ticker.getBid().toString());
    System.out.println("Ask: " + ticker.getAsk().toString());

  }

}
&lt;/pre&gt;Result:&lt;br /&gt;
&lt;pre class="java" name="code"&gt;Last: USD-5.14739
Last: USD 5.14739
Bid: USD 5.12011
Ask: USD 5.1299

Last: EUR 4.07
Bid: EUR 4.0527
Ask: EUR 4.07

Last: GBP 3.3452
Bid: GBP 3.3
Ask: GBP 3.34091
&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Ticker via Streaming API&lt;/h3&gt;&lt;pre class="java" name="code"&gt;package com.xeiam.xchange.examples.mtgox.v1.streaming;

import java.util.concurrent.BlockingQueue;

import com.xeiam.xchange.Currencies;
import com.xeiam.xchange.Exchange;
import com.xeiam.xchange.dto.marketdata.Ticker;
import com.xeiam.xchange.mtgox.v1.MtGoxExchange;
import com.xeiam.xchange.service.marketdata.streaming.StreamingMarketDataService;

/**
 * Test requesting streaming Ticker at MtGox
 */
public class TickerDemo {

  public static void main(String[] args) {

    TickerDemo tickerDemo = new TickerDemo();
    tickerDemo.start();
  }

  private void start() {

    // Use the default MtGox settings
    Exchange mtGox = MtGoxExchange.newInstance();

    // Interested in the public streaming market data feed (no authentication)
    StreamingMarketDataService streamingMarketDataService = mtGox.getStreamingMarketDataService();

    // Get blocking queue that receives streaming ticker data
    BlockingQueue&lt;ticker&gt; tickerQueue = streamingMarketDataService.requestTicker(Currencies.BTC, Currencies.USD);

    // take streaming ticker data from the queue and do something with it
    while (true) {
      try {
        // Put your ticker event handling code here
        doSomething(tickerQueue.take());
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }

  /**
   * Do something fun with the streaming data!
   * 
   * @param ticker
   */
  private void doSomething(Ticker ticker) {

    System.out.println(ticker.toString());
  }

}
&lt;/pre&gt;Result:&lt;br /&gt;
&lt;pre class="java" name="code"&gt;Ticker [timestamp=2012-08-26T20:09:13.202Z, last=USD 10.6, bid=USD 10.55248, ask=USD 10.6, tradableIdentifier=BTC, volume=3078691906206]
Ticker [timestamp=2012-08-26T20:09:18.651Z, last=USD 10.6, bid=USD 10.55248, ask=USD 10.6, tradableIdentifier=BTC, volume=3068691906206]
Ticker [timestamp=2012-08-26T20:09:19.568Z, last=USD 10.6, bid=USD 10.55248, ask=USD 10.6, tradableIdentifier=BTC, volume=3068691906206]
Ticker [timestamp=2012-08-26T20:09:23.152Z, last=USD 10.6, bid=USD 10.55248, ask=USD 10.6, tradableIdentifier=BTC, volume=3068691906206]
Ticker [timestamp=2012-08-26T20:09:23.975Z, last=USD 10.6, bid=USD 10.55248, ask=USD 10.6, tradableIdentifier=BTC, volume=3068691906206]
Ticker [timestamp=2012-08-26T20:09:24.790Z, last=USD 10.6, bid=USD 10.55248, ask=USD 10.6, tradableIdentifier=BTC, volume=3068691906206]
Ticker [timestamp=2012-08-26T20:09:25.205Z, last=USD 10.6, bid=USD 10.55248, ask=USD 10.6, tradableIdentifier=BTC, volume=3068691906206]
Ticker [timestamp=2012-08-26T20:09:26.018Z, last=USD 10.6, bid=USD 10.55248, ask=USD 10.6, tradableIdentifier=BTC, volume=3068691906206]
Ticker [timestamp=2012-08-26T20:09:26.543Z, last=USD 10.6, bid=USD 10.55248, ask=USD 10.6, tradableIdentifier=BTC, volume=3068691906206]
&lt;/pre&gt;Piece of Cake!!!&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/952092519196439061/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=952092519196439061" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/952092519196439061?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/952092519196439061?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/B8iE63MOEu0/xchange-open-source-java-api-for-mtgox.html" title="XChange - Open Source Java API for MtGox Bitcoin Exchange" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-f9U-bGII0Rc/UD00_4UHIsI/AAAAAAAACqY/uQfMY4FOMZY/s72-c/xchange_256.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/08/xchange-open-source-java-api-for-mtgox.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEHRnc9fip7ImA9WhJVEEo.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-6654504902707375004</id><published>2012-08-27T16:43:00.000+02:00</published><updated>2012-08-27T16:43:57.966+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-27T16:43:57.966+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>Running Average and Running Standard Deviation in Java</title><content type="html">Today I needed to generate statistics for a simulation in real-time, which forced me to code a class that calculates the running average and running standard deviation of incoming data. I remember doing this a long time ago for another project based on MATLAB, but today I needed a Java implementation. The following code example shows how to calculate the running average and running standard deviation for streaming data. Thanks to &lt;a href="http://subluminal.wordpress.com/2008/07/31/running-standard-deviations/"&gt;Subluminal Messages&lt;/a&gt; for the simple math implementation!&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;h1&gt;The Code&lt;/h1&gt;&lt;pre name="code" class="java"&gt;public class RunningStatDemo {

  public static void main(String[] args) {

    RunningStatDemo rsd = new RunningStatDemo();
    rsd.go();
  }

  private void go() {

    RunningStat rs = new RunningStat();
    rs.put(1);
    System.out.println("ave: " + rs.getAverage());
    System.out.println("std: " + rs.getStandardDeviation());

    rs.put(1);
    System.out.println("ave: " + rs.getAverage());
    System.out.println("std: " + rs.getStandardDeviation());

    rs.put(10);
    System.out.println("ave: " + rs.getAverage());
    System.out.println("std: " + rs.getStandardDeviation());

    rs.put(20);
    System.out.println("ave: " + rs.getAverage());
    System.out.println("std: " + rs.getStandardDeviation());

    rs.put(50);
    System.out.println("ave: " + rs.getAverage());
    System.out.println("std: " + rs.getStandardDeviation());

    rs.put(50);
    System.out.println("ave: " + rs.getAverage());
    System.out.println("std: " + rs.getStandardDeviation());
  }

  public class RunningStat {

    private int count = 0;
    private double average = 0.0;
    private double pwrSumAvg = 0.0;
    private double stdDev = 0.0;

    /**
     * Incoming new values used to calculate the running statistics
     * 
     * @param value
     */
    public void put(double value) {

      count++;
      average += (value - average) / count;
      pwrSumAvg += (value * value - pwrSumAvg) / count;
      stdDev = Math.sqrt((pwrSumAvg * count - count * average * average) / (count - 1));

    }

    public double getAverage() {

      return average;
    }

    public double getStandardDeviation() {

      return Double.isNaN(stdDev) ? 0.0 : stdDev;
    }

  }

}
&lt;/pre&gt;&lt;br /&gt;
&lt;h1&gt;Results&lt;/h1&gt;&lt;pre name="code" class="java"&gt;ave: 1.0
std: 0.0
ave: 1.0
std: 0.0
ave: 4.0
std: 5.196152422706632
ave: 8.0
std: 9.055385138137417
ave: 16.4
std: 20.354360712142253
ave: 22.0
std: 22.794736234490628
&lt;/pre&gt;&lt;br /&gt;
Piece of Cake!!!&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/6654504902707375004/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=6654504902707375004" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/6654504902707375004?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/6654504902707375004?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/-_OaFBxNld4/running-average-and-running-standard.html" title="Running Average and Running Standard Deviation in Java" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/08/running-average-and-running-standard.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8CSXgycSp7ImA9WhJVEEw.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-4718188743963538519</id><published>2012-08-26T23:34:00.001+02:00</published><updated>2012-08-26T23:34:28.699+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-26T23:34:28.699+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Maven" /><title>Create Javadocs for a Multi-Module Maven Project</title><content type="html">In this tutorial, I show how to create Javadocs for a multi-module Maven project. Creation of Javadocs requires the use of the Maven maven-javadoc-plugin plugin and running "mvn javadoc:aggregate" on the parent pom.xml. For the sake of this tutorial, I'm taking some excerpts from one of my current Open Source Projects - &lt;a href="http://xeiam.com/xchange.jsp"&gt;XChange&lt;/a&gt;. &lt;br /&gt;
&lt;h1&gt;Relevant Links&lt;/h1&gt;&lt;a href="https://github.com/timmolter/XChange"&gt;XChange on Github&lt;/a&gt; - To see an actual working example&lt;br /&gt;
&lt;a href="http://xeiam.com/xchange/javadoc/index.html"&gt;Javadocs for XChange on xeiam.com&lt;/a&gt; - To see what the generated Javadocs look like.&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;h1&gt;How To&lt;/h1&gt;Step 1: Add the following to the parent pom.xml file:&lt;br /&gt;
&lt;br /&gt;
&lt;pre name="code" class="java"&gt;&amp;lt;build&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;pluginmanagement&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupid&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactid&amp;gt;maven-javadoc-plugin&amp;lt;/artifactId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;2.8.1&amp;lt;/version&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/pluginManagement&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;plugins&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupid&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactid&amp;gt;maven-javadoc-plugin&amp;lt;/artifactId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/plugins&amp;gt;
&amp;lt;/build&amp;gt;
&lt;/pre&gt;Step 2: Run the following mvn command:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="unix"&gt;mvn javadoc:aggregate&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Piece of Cake!!!&lt;br /&gt;
&lt;br /&gt;
See also: &lt;a href="http://obscuredclarity.blogspot.com/2012/05/maven-project-compiles-in-eclipse-but.html"&gt;Maven Project Compiles in Eclipse but Maven Build Fails&lt;/a&gt;&lt;br /&gt;
See also: &lt;a href="http://obscuredclarity.blogspot.com/2012/05/using-maven-offline.html"&gt;Using Maven Offline&lt;/a&gt;&lt;br /&gt;
See also: &lt;a href="http://obscuredclarity.blogspot.com/2012/04/hello-world-maven-m2eclipse-and-eclipse.html"&gt;Hello World - Maven, M2Eclipse and Eclipse&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/4718188743963538519/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=4718188743963538519" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/4718188743963538519?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/4718188743963538519?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/MNCOGRTKPno/create-javadocs-for-multi-module-maven.html" title="Create Javadocs for a Multi-Module Maven Project" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/08/create-javadocs-for-multi-module-maven.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQMQHw6eyp7ImA9WhJWGU0.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-5049239968962524246</id><published>2012-08-25T17:20:00.002+02:00</published><updated>2012-08-25T17:26:21.213+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-25T17:26:21.213+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>Java XChart Library Now Supports Error Bars</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-7uejQIVF19E/UDjroxiQaPI/AAAAAAAACp4/IEW3kuq5HAo/s1600/xchart_example8.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="148" width="200" src="http://2.bp.blogspot.com/-7uejQIVF19E/UDjroxiQaPI/AAAAAAAACp4/IEW3kuq5HAo/s200/xchart_example8.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://xeiam.com/xchart.jsp"&gt;XChart&lt;/a&gt; provides a super light-weight and dependency-free charting API for Java. It is open source, hosted on Github, and is licensed with an Apache 2.0 license. I created it over a year ago because I was looking for and couldn't find an easy-to-use plotting library for Java that was similar to the MATLAB's charting tool. I tried JFreeChart of course, but I found that the learning curve was very steep. Like MATLAB's charting functions, I just wanted to simply pass my data to an API, and after a few lines of code, have a plot. &lt;br /&gt;
&lt;br /&gt;
I just recently added support in XChart for making plots with error bars, which is what this post is about. The following demo, shows how to add error bars to an XChart chart. BTW, if you have any feature requests for XChart, please feel free to open a new issue on Github &lt;a href="https://github.com/timmolter/XChart/issues"&gt;here&lt;/a&gt;. For more XChart exmaples go &lt;a href="http://xeiam.com/xchart_examplecode.jsp"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;h1&gt;XChart - Open Source Charting API&lt;/h1&gt;To use XChart, you first need to get the XChart jar, which is available &lt;a href="http://xeiam.com/xchart.jsp"&gt;here&lt;/a&gt;. If you use Maven, just add the following to your dependencies in pom.xml:&lt;br /&gt;
&lt;pre name="code" class="java"&gt;&amp;lt;dependency&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;com.xeiam&amp;lt;/groupId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;xchart&amp;lt;/artifactId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;1.1.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
The XChart artifacts are currently hosted on the Xeiam Nexus repository here:&lt;br /&gt;
&lt;pre name="code" class="java"&gt;&amp;lt;repositories&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;repository&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;xchange-release&amp;lt;/id&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;releases/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://nexus.xeiam.com/content/repositories/releases&amp;lt;/url&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/repository&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;repository&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;xchange-snapshot&amp;lt;/id&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;snapshots/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://nexus.xeiam.com/content/repositories/snapshots/&amp;lt;/url&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/repository&amp;gt;
&amp;lt;/repositories&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;h1&gt;Error Bars Example Code&lt;/h1&gt;&lt;pre name="code" class="java"&gt;package com.xeiam.xchart.example;

import java.util.ArrayList;
import java.util.Collection;

import com.xeiam.xchart.Chart;
import com.xeiam.xchart.series.Series;
import com.xeiam.xchart.series.SeriesColor;
import com.xeiam.xchart.series.SeriesLineStyle;
import com.xeiam.xchart.series.SeriesMarker;
import com.xeiam.xchart.swing.SwingWrapper;

/**
 * Create a Chart with error bars
 * 
 * @author timmolter
 */
public class Example8 {

  public static void main(String[] args) {

    // generates data
    int size = 10;
    Collection&lt;number&gt; xData1 = new ArrayList&lt;number&gt;();
    Collection&lt;number&gt; yData1 = new ArrayList&lt;number&gt;();
    Collection&lt;number&gt; errorBars = new ArrayList&lt;number&gt;();
    for (int i = 0; i &lt;= size; i++) {
      xData1.add(i);
      yData1.add(10 * Math.exp(-i));
      errorBars.add(Math.random() + .3);
    }

    // Create Chart
    Chart chart = new Chart(600, 400);

    // Customize Chart
    chart.setChartTitleVisible(false);
    chart.setChartLegendVisible(false);
    chart.setAxisTitlesVisible(false);

    // Series 1
    Series series1 = chart.addSeries("10^(-x)", xData1, yData1, errorBars);
    series1.setLineColor(SeriesColor.PURPLE);
    series1.setLineStyle(SeriesLineStyle.DASH_DASH);
    series1.setMarkerColor(SeriesColor.GREEN);
    series1.setMarker(SeriesMarker.SQUARE);

    new SwingWrapper(chart).displayChart();
  }

}
&lt;/pre&gt;
&lt;h1&gt;Resulting Plot&lt;/h1&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-saDxyicO2ZI/UDjrWDq2CLI/AAAAAAAACps/i8bb5Y8hT9k/s1600/xchart_example8.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="295" width="400" src="http://1.bp.blogspot.com/-saDxyicO2ZI/UDjrWDq2CLI/AAAAAAAACps/i8bb5Y8hT9k/s400/xchart_example8.png" /&gt;&lt;/a&gt;&lt;/div&gt;Piece of Cake!!!

See also: &lt;a href="http://obscuredclarity.blogspot.com/2011/08/java-web-apps-integrating-charts-into.html"&gt;Java Web Apps - Integrating Charts into a Servlet&lt;/a&gt;

&lt;/span&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/5049239968962524246/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=5049239968962524246" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/5049239968962524246?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/5049239968962524246?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/NyjrM4rpKKA/java-xchart-library-now-supports-error.html" title="Java XChart Library Now Supports Error Bars" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-7uejQIVF19E/UDjroxiQaPI/AAAAAAAACp4/IEW3kuq5HAo/s72-c/xchart_example8.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/08/java-xchart-library-now-supports-error.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QER3kyeip7ImA9WhJWFUg.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-1322497841846822513</id><published>2012-08-21T14:15:00.001+02:00</published><updated>2012-08-21T14:15:06.792+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-21T14:15:06.792+02:00</app:edited><title>Jeff Hawkins on Brain Science</title><content type="html">&lt;object width="526" height="374"&gt;&lt;param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;param name="bgColor" value="#ffffff"&gt;&lt;/param&gt;&lt;param name="flashvars" value="vu=http://video.ted.com/talk/stream/2003/Blank/JeffHawkins_2003-320k.mp4&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/JeffHawkins-2003.embed_thumbnail.jpg&amp;vw=512&amp;vh=288&amp;ap=0&amp;ti=125&amp;lang=en&amp;introDuration=15330&amp;adDuration=4000&amp;postAdDuration=830&amp;adKeys=talk=jeff_hawkins_on_how_brain_science_will_change_computing;year=2003;theme=inspired_by_nature;theme=tales_of_invention;theme=how_the_mind_works;theme=what_s_next_in_tech;theme=technology_history_and_destiny;event=TED2003;tag=AI;tag=brain;tag=cognitive+science;tag=computers;tag=intelligence;tag=memory;tag=science;tag=technology;&amp;preAdTag=tconf.ted/embed;tile=1;sz=512x288;" /&gt;&lt;embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="526" height="374" allowFullScreen="true" allowScriptAccess="always" flashvars="vu=http://video.ted.com/talk/stream/2003/Blank/JeffHawkins_2003-320k.mp4&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/JeffHawkins-2003.embed_thumbnail.jpg&amp;vw=512&amp;vh=288&amp;ap=0&amp;ti=125&amp;lang=en&amp;introDuration=15330&amp;adDuration=4000&amp;postAdDuration=830&amp;adKeys=talk=jeff_hawkins_on_how_brain_science_will_change_computing;year=2003;theme=inspired_by_nature;theme=tales_of_invention;theme=how_the_mind_works;theme=what_s_next_in_tech;theme=technology_history_and_destiny;event=TED2003;tag=AI;tag=brain;tag=cognitive+science;tag=computers;tag=intelligence;tag=memory;tag=science;tag=technology;&amp;preAdTag=tconf.ted/embed;tile=1;sz=512x288;"&gt;&lt;/embed&gt;&lt;/object&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/1322497841846822513/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=1322497841846822513" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/1322497841846822513?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/1322497841846822513?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/Fd4qqzb5n1k/jeff-hawkins-on-brain-science.html" title="Jeff Hawkins on Brain Science" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/08/jeff-hawkins-on-brain-science.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cHQn07eSp7ImA9WhJXFUw.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-3101002613673626255</id><published>2012-08-09T13:17:00.003+02:00</published><updated>2012-08-09T13:17:13.301+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-09T13:17:13.301+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><title>To Infinity and Beyond</title><content type="html">&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/iBsywDWmwyA" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/3101002613673626255/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=3101002613673626255" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/3101002613673626255?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/3101002613673626255?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/_7lipQLxNBE/to-infinity-and-beyond.html" title="To Infinity and Beyond" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/iBsywDWmwyA/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/08/to-infinity-and-beyond.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAFSH4-fSp7ImA9WhJXFEw.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-1708282264987553745</id><published>2012-08-08T10:31:00.002+02:00</published><updated>2012-08-08T10:31:59.055+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-08T10:31:59.055+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><title>Richard Feynman - The Pleasure Of Finding Things Out</title><content type="html">&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/Bgaw9qe7DEE" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/1708282264987553745/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=1708282264987553745" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/1708282264987553745?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/1708282264987553745?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/1CmSdVrKANM/richard-feynman-pleasure-of-finding.html" title="Richard Feynman - The Pleasure Of Finding Things Out" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/Bgaw9qe7DEE/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/08/richard-feynman-pleasure-of-finding.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YCQX8yeip7ImA9WhJVEEk.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-3390505929148216274</id><published>2012-08-06T12:11:00.001+02:00</published><updated>2012-08-27T08:32:40.192+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-27T08:32:40.192+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><title>Curiosity Rover Lands Successfully on Mars!</title><content type="html">&lt;!-- Start of guardian embedded video --&gt;&lt;br /&gt;
&lt;!-- To prevent the video from auto playing set 'a=true' in the following line of code--&gt;&lt;br /&gt;
&lt;iframe src="http://gu-embedded-video.appspot.com/?a=false&amp;i=brightcove/poster/2012/8/3/120803challengesofmars_6500096.jpg&amp;f=brightcove/2012/8/3/120803challengesofmars-16x9.mp4&amp;u=/science/video/2012/aug/03/curiosity-terror-nasa-mars-video&amp;tn=Curiosity\'s seven minutes of terror on Nasa mission to Mars - video:Video:1782926" style="border:0; overflow:hidden;" scrolling="no" width="460px" height="397px"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;!-- End of guardian embedded video --&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/4ddtoZNidIM" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/gwinFP8_qIM" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/gZX5GRPnd4U" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/fJgeoHBQpFQ" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/3390505929148216274/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=3390505929148216274" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/3390505929148216274?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/3390505929148216274?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/tHF7tXfaQ2Y/curiosity-rover-lands-successfully-on.html" title="Curiosity Rover Lands Successfully on Mars!" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/4ddtoZNidIM/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/08/curiosity-rover-lands-successfully-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YEQXs4eCp7ImA9WhJXF0o.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-3922524866399888808</id><published>2012-06-10T22:00:00.001+02:00</published><updated>2012-08-12T15:45:00.530+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-12T15:45:00.530+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="critters" /><category scheme="http://www.blogger.com/atom/ns#" term="amphibians" /><title>Bergmolch</title><content type="html">&lt;h1&gt;Bergmolch &lt;/h1&gt;Oberstdorf, Germany (June 2012)&lt;br /&gt;
&lt;a href="http://de.wikipedia.org/wiki/Bergmolch"&gt;Wikipedia Aricle&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/-0M4FgTWRVt0/T9T8kqkxKoI/AAAAAAAACns/8TBbOr2aWtM/s1600/IMG_8566.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="267" width="400" src="http://2.bp.blogspot.com/-0M4FgTWRVt0/T9T8kqkxKoI/AAAAAAAACns/8TBbOr2aWtM/s400/IMG_8566.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-2jBqwxtgTJE/T9T8lBUkq6I/AAAAAAAACn4/ceP6LCiUFms/s1600/IMG_8550.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="300" width="400" src="http://3.bp.blogspot.com/-2jBqwxtgTJE/T9T8lBUkq6I/AAAAAAAACn4/ceP6LCiUFms/s400/IMG_8550.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-znLpy_3Td8w/T9T8ltQwh7I/AAAAAAAACoE/7wAamaqS2kg/s1600/IMG_8598.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="267" width="400" src="http://1.bp.blogspot.com/-znLpy_3Td8w/T9T8ltQwh7I/AAAAAAAACoE/7wAamaqS2kg/s400/IMG_8598.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-T9AN_NK0ugE/T9T8l5w1JdI/AAAAAAAACoQ/OCnC8kLHREw/s1600/IMG_8584.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="267" width="400" src="http://3.bp.blogspot.com/-T9AN_NK0ugE/T9T8l5w1JdI/AAAAAAAACoQ/OCnC8kLHREw/s400/IMG_8584.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/-Awv7s-k7UYE/UCezFHHqp4I/AAAAAAAACpI/OFbzcFtddcc/s1600/IMG_9260.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="267" width="400" src="http://4.bp.blogspot.com/-Awv7s-k7UYE/UCezFHHqp4I/AAAAAAAACpI/OFbzcFtddcc/s400/IMG_9260.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/3922524866399888808/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=3922524866399888808" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/3922524866399888808?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/3922524866399888808?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/fRHZbY_gfQc/bergmolch.html" title="Bergmolch" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-0M4FgTWRVt0/T9T8kqkxKoI/AAAAAAAACns/8TBbOr2aWtM/s72-c/IMG_8566.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/06/bergmolch.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QMSHY8fSp7ImA9WhVaE0g.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-3873540686854043510</id><published>2012-06-10T21:08:00.000+02:00</published><updated>2012-06-10T21:09:49.875+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-10T21:09:49.875+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="beetles" /><category scheme="http://www.blogger.com/atom/ns#" term="critters" /><title>Schwarzer Rüsselkäfer - Otiorhynchus coecus</title><content type="html">&lt;h1&gt;Schwarzer Rüsselkäfer - Otiorhynchus coecus&lt;/h1&gt;Oberstdorf, Germany (June 2012)&lt;br /&gt;
&lt;a href="http://de.wikipedia.org/wiki/Schwarzer_R%C3%BCsselk%C3%A4fer"&gt;Wikipedia Aricle&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-Aoq7KIqJIpE/T9TvvGk455I/AAAAAAAACmg/YVN6KxPgB_k/s1600/IMG_8776.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="266" width="400" src="http://3.bp.blogspot.com/-Aoq7KIqJIpE/T9TvvGk455I/AAAAAAAACmg/YVN6KxPgB_k/s400/IMG_8776.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-tzEa2p-SFKU/T9TvvpK2biI/AAAAAAAACms/_DzK-3lVEqc/s1600/IMG_8722.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="266" width="400" src="http://3.bp.blogspot.com/-tzEa2p-SFKU/T9TvvpK2biI/AAAAAAAACms/_DzK-3lVEqc/s400/IMG_8722.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/-pXJfKL0vqGg/T9TvwNUtvWI/AAAAAAAACm4/b0uv21EzTEc/s1600/IMG_8781.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="266" width="400" src="http://4.bp.blogspot.com/-pXJfKL0vqGg/T9TvwNUtvWI/AAAAAAAACm4/b0uv21EzTEc/s400/IMG_8781.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-ht8I2DcYCsU/T9TwS1HfJNI/AAAAAAAACnc/Vaohs20hHV0/s1600/IMG_8693.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="278" width="400" src="http://1.bp.blogspot.com/-ht8I2DcYCsU/T9TwS1HfJNI/AAAAAAAACnc/Vaohs20hHV0/s400/IMG_8693.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-02aP5CrwpAY/T9TvxAy2mPI/AAAAAAAACnQ/Yof0L2fXMro/s1600/IMG_8650.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="400" width="267" src="http://1.bp.blogspot.com/-02aP5CrwpAY/T9TvxAy2mPI/AAAAAAAACnQ/Yof0L2fXMro/s400/IMG_8650.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/-rzNUxVzdWxU/T9TvwYR07qI/AAAAAAAACnE/zbhWWxanDn8/s1600/IMG_8659.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="318" width="400" src="http://4.bp.blogspot.com/-rzNUxVzdWxU/T9TvwYR07qI/AAAAAAAACnE/zbhWWxanDn8/s400/IMG_8659.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/span&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/3873540686854043510/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=3873540686854043510" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/3873540686854043510?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/3873540686854043510?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/IMVxPknwOZ0/schwarzer-russelkafer-otiorhynchus.html" title="Schwarzer Rüsselkäfer - Otiorhynchus coecus" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-Aoq7KIqJIpE/T9TvvGk455I/AAAAAAAACmg/YVN6KxPgB_k/s72-c/IMG_8776.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/06/schwarzer-russelkafer-otiorhynchus.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8HR3g6eyp7ImA9WhVaE0g.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-8309089107972886081</id><published>2012-06-10T19:53:00.002+02:00</published><updated>2012-06-10T19:53:56.613+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-10T19:53:56.613+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><title>Ultra Slow Motion Video of Saw Blade Cutting Steel</title><content type="html">&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/mRuSYQ5Npek" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/8309089107972886081/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=8309089107972886081" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/8309089107972886081?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/8309089107972886081?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/OZVCVfqSqKs/ultra-slow-motion-video-of-saw-blade.html" title="Ultra Slow Motion Video of Saw Blade Cutting Steel" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/mRuSYQ5Npek/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/06/ultra-slow-motion-video-of-saw-blade.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQDQHo6fSp7ImA9WhVaGUk.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-6472448541874773516</id><published>2012-06-10T11:08:00.000+02:00</published><updated>2012-06-17T17:36:11.415+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-17T17:36:11.415+02:00</app:edited><title>Alpine Tubifex Worms</title><content type="html">Yesterday, while my cousin and I were hiking in the German alps, we stumbled upon some very bizarre creatures in a small permanent puddle in a cow pasture at around 1500m above sea level. What we at first saw was what looked like a colony of tiny red things undulating together and anchored to the silty bottom of the puddle. &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/-L8xDOU93TS8/T9RgNsy7K_I/AAAAAAAACls/pgO6LpdBdWk/s1600/_MG_3671.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="267" width="400" src="http://4.bp.blogspot.com/-L8xDOU93TS8/T9RgNsy7K_I/AAAAAAAACls/pgO6LpdBdWk/s400/_MG_3671.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;br /&gt;
After poking the moving red mat, it quickly receded and disappeared under the surface leaving little holes.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-xAgdrDay2eA/T9RgOEo228I/AAAAAAAACl4/olAkHF4t21k/s1600/_MG_3675.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="267" width="400" src="http://1.bp.blogspot.com/-xAgdrDay2eA/T9RgOEo228I/AAAAAAAACl4/olAkHF4t21k/s400/_MG_3675.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/-Rhhcg220SYA/T9RgOiMF0AI/AAAAAAAACmE/arfeH2bXwQY/s1600/_MG_3676.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="267" width="400" src="http://2.bp.blogspot.com/-Rhhcg220SYA/T9RgOiMF0AI/AAAAAAAACmE/arfeH2bXwQY/s400/_MG_3676.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-2TxnwH_oUZw/T9RgO5a75yI/AAAAAAAACmQ/t6o2CTUR1U0/s1600/_MG_3677.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="267" width="400" src="http://1.bp.blogspot.com/-2TxnwH_oUZw/T9RgO5a75yI/AAAAAAAACmQ/t6o2CTUR1U0/s400/_MG_3677.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Here's what the red things turned out to be - little red worms.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-yntkPmRrfEo/T9RgNTJB6cI/AAAAAAAAClg/_jP3rgkRP7g/s1600/_MG_3668.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="334" width="400" src="http://1.bp.blogspot.com/-yntkPmRrfEo/T9RgNTJB6cI/AAAAAAAAClg/_jP3rgkRP7g/s400/_MG_3668.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
After taking pictures and doing some online research at home, we determined that they must have been Tubiflex worms. Here are the links to the &lt;a href="http://de.wikipedia.org/wiki/Tubifex"&gt;German&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Tubifex"&gt;English&lt;/a&gt; Wikipedia pages. &lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/6472448541874773516/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=6472448541874773516" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/6472448541874773516?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/6472448541874773516?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/ktjZ7apbkBI/alpine-tubiflex-worms.html" title="Alpine Tubifex Worms" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-L8xDOU93TS8/T9RgNsy7K_I/AAAAAAAACls/pgO6LpdBdWk/s72-c/_MG_3671.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/06/alpine-tubiflex-worms.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQFQXw9eSp7ImA9WhVbFUg.&quot;"><id>tag:blogger.com,1999:blog-4650152229438238529.post-6300362993582077989</id><published>2012-06-01T15:11:00.002+02:00</published><updated>2012-06-01T15:11:50.261+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-01T15:11:50.261+02:00</app:edited><title>Load a logback.xml Configuration File Programmatically</title><content type="html">Today I had a unique situation where I needed to load a logback.xml file programmatically for Logback logging rather than via the standard "from the classpath" way, and here's how I did it. It was quite simple.&lt;br /&gt;
&lt;br /&gt;
The following snippet shows how to load a logging configuration file such as logback.xml programmatically:&lt;br /&gt;
&lt;br /&gt;
&lt;pre name="code" class="java"&gt;
LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
try {

  JoranConfigurator configurator = new JoranConfigurator();
  configurator.setContext(context);
  configurator.doConfigure(logFilePath); // loads logback file
} catch (JoranException je) {
  // StatusPrinter will handle this
} catch (Exception ex) {

  ex.printStackTrace(); // Just in case, so we see a stacktrace

}
StatusPrinter.printInCaseOfErrorsOrWarnings(context); // Internal status data is printed in case of warnings or errors.

&lt;/pre&gt;&lt;br /&gt;
Piece of Cake!!</content><link rel="replies" type="application/atom+xml" href="http://obscuredclarity.blogspot.com/feeds/6300362993582077989/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4650152229438238529&amp;postID=6300362993582077989" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/6300362993582077989?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4650152229438238529/posts/default/6300362993582077989?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ObscuredClarity/~3/_HuhdXNqAnc/load-logbackxml-configuration-file.html" title="Load a logback.xml Configuration File Programmatically" /><author><name>Tim Molter</name><uri>http://www.blogger.com/profile/09117791052747688044</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_eIoDncf-Rgo/SPJImgjxWgI/AAAAAAAAAng/HzSmpiSedBI/S220/Tim3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://obscuredclarity.blogspot.com/2012/06/load-logbackxml-configuration-file.html</feedburner:origLink></entry></feed>
