This blog has moved!

You will be automatically redirected to the new address. If that does not occur, visit
http://blog.xeiam.com
and update your bookmarks.

Saturday, February 8, 2014

Introducing Bitcoin Bounties for Open Source Development

Last week, we started experimenting with offering bounties to help speed up the development of one of our open source projects called XChange. Based on initial success, we've decided to offer bounties beyond the XChange project, and therefore created a centralized page on xeiam.com where all current and paid bounties are listed. Following is the text directly from the bounties page:
Welcome to Xeiam's Bounty Program. Below is a listing of all our current open and past paid bounties. All bounties are paid in Bitcoin, and it's by far the simplest and fastest way to transfer money in today's globally connected community. We'll be posting all new bounties on our twitter feed, so please subscribe to be the first to hear about new bounties!
If you'd like to work on an issue for a bounty, the first thing you should do is claim it by adding a comment on the GitHub issue page where the bounty is defined along with how long you need to finish it. In this way, bounties can be claimed on a first-come first-served manner, but others may attempt it if the original claimer cannot finish it in a reasonable time. To claim the bounty, just leave your Bitcoin address as a comment on the GitHub issue page or in the pull request.
100% of donations to open source projects will be directly recycled back into the project as a bounty or bounties. In you're interested in donating or sponsoring a bounty for a specific feature request, please visit the project on GitHub where you can find the Bitcoin donation address and/or post a new issue.
We have plans to offer many more and higher paid bounties in the near future!

Saturday, January 11, 2014

XChart 2.3.0 Released - Real-Time Charts

XChart, A Charting Library for Java, licensed under the Apache 2.0 license, version 2.3.0 was released today! This release introduces real-time charts and a few bug fixes and behind-the-scenes improvements. For the full change log and to download the jar please visit XChart's change log.

A Swing demo is also available for download along with the main xchart jar here. To run the demo from the command line type the following:
 cd /path/to/xchart-demo/jar/  
 java -cp xchart-demo-2.3.0.jar:xchart-2.3.0.jar com.xeiam.xchart.demo.XChartDemo  

The following image shows a screen shot of a real-time chart from the XChart demo app.


Sunday, October 13, 2013

XChange 1.9.0 Released!

Our Financial Exchange Library for Java, XChange, has seen a lot of active development, mainly new exchange implementations with a few improvements and bug fixes to existing code, since the previous release in July 2013. There were a total of 130 commits in this release and we've added several new contributors to our Contributor's List. The Blockchain.info API is also now implemented, which allows one to get information on Bitcoin addresses including the Bitcoin balance at that address.

The new exchange implementations include:
  • BTC-E Trading and Account API
  • BTC-China Market Data, Trading and Account API
  • Bitcurex Market Data API
  • Kraken Market Data, Trading and Account API
  • Blockchain Info API
  • Bitstamp and BTC-E TradeHistory

The Bitstamp authenticated API accessing code was updated as well to reflect the changes made at Bitstamp.

One major API change in this release is that all API calls now throw checked IOExceptions. This stems from the fact that the REST library we use (ResCU) was 'leaking' all sorts of network-related exceptions and clients of XChange were having to deal with unknown surprises. We decided that ResCU should catch all exceptions internally and wrap them into IOExceptions and throw them further. This future proofs the XChange API. If we ever want to change our REST dependency, it is likely that the future REST dependency will also throw IOExceptions, and no change to the XChange API will be necessary. We also think it's better to throw a checked exception for networking issues rather than unchecked exceptions, because it forces clients of XChange to EXPECT networking issues and handle them properly sooner rather than later.

To see a full list of all the changes in this release as well as download the jars, please visit the XChange Change Log page.

Here's a list of the currently supported exchanges. More detailed info can be found here, which includes planned future exchange implementations.
  • MtGox - polling and streaming market data, trading and account data
  • VirtEx - polling market data
  • BTC-E - polling market data, trading and account data
  • Bitstamp - polling market data, trading and account data
  • CampBX - polling market data, trading and account data
  • Bitcurex - polling market data
  • BTC-China - polling market data, trading and account data
  • Kraken - polling market data, trading and account data
  • BitcoinCharts - polling market data (Bitcoin Exchange Rates)
  • OpenExchangeRates - polling market data (Fiat Currency Exchange Rates)
  • Blockchain Info - polling market data (Bitcoin Address Information)


To finish off this release announcement, we leave you with a screenshot of Mt Gox's market depth or "order book" generated using XChange. The code to generate this plot can see seen here on Github. The charting library used to make the plot is XChart.

 

Sunday, May 26, 2013

XChart 2.2.0 Released!

XChart, A Simple Charting Library for Java, licensed under the Apache 2.0 license, version 2.2.0 was released today! This release brings many exciting features most notably a MATLAB theme, CSV import/export, and high-resolution chart exporting. The newest features of the XChart library include:
  • Themes - XChart, GGPlot2, MATLAB
  • CSV import and export
  • High resolution chart export

For more features, see XChart 2.0.0 Released! and XChart's home page.

A Swing demo is also available for download along with the main xchart jar here. To run the demo from the command line type the following:
 cd /path/to/xchart-demo/jar/  
 java -cp xchart-demo-2.2.0.jar:xchart-2.2.0.jar com.xeiam.xchart.demo.XChartDemo  

The following three images show the three themes that are currently implemented - XChart, GGPlot2, and MATLAB.





Finally, here's how you can save a chart in high-resolution format specifying the DPI. This is useful when you want your charts to appear in printable material such as PDFs or books.

    BitmapEncoder.savePNG(chart, "./Sample_Chart.png");
    BitmapEncoder.savePNGWithDPI(chart, "./Sample_Chart_300_DPI.png", 300);

The difference is resolution is very clear in the following images.

Friday, May 10, 2013

Configure Travis CI to Deploy Snapshots to a Maven Repo

In order to deal with the amount of different projects Xeiam is currently managing, both open source and commercial, we jumped at the opportunity to move all of our OSS projects over from an in-house Jenkins CI to a free hosted Travis CI service. Doing so frees us up from having to maintain our Jenkins server, deal with it hanging, updating it, etc. This is just one more step in streamlining project development and management. The only disadvantage by doing this was the loss of our Sonar code quality analytics, but I suspect something of the sort will soon become available as a plugin to Travis CI.

What we needed Travis CI to do though was a bit non-standard, and we wanted to write what we learned here for future reference, but also to help other get their Maven builds deploying snapshots to a repository. This article assumes you've already setup your Travis CI account and have followed the standard setup procedures and configurations linking your Travis CI and GitHub accounts and projects. Make sure to enable the Travis CI hook in GitHub too. The example configurations contain stuff relevant to our project XChart, and you'll have to adapt your configurations to your specific project's properties.

References

Our initial inquiry on Travis Google group
Travis gem and secure variables
Xeiam's XChart project on GitHub
XChart's Travis CI page

settings.xml

Simply add another branch to your project called `travis`, remove everything from it, and place the following `settings.xml` file in it.
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository/>
  <interactiveMode/>
  <usePluginRegistry/>
  <offline/>
  <pluginGroups/>
  <servers>
    <server>
      <id>sonatype-nexus-snapshots</id>
      <username>${env.CI_DEPLOY_USERNAME}</username>
      <password>${env.CI_DEPLOY_PASSWORD}</password>
    </server>
  </servers>
  <mirrors/>
  <proxies/>
  <profiles/>
  <activeProfiles/>
</settings>

Generate Encrypted Variables

The artifact repo requires a username and password of course, and we don't want to have those as plain-text in the above `settings.xml` file. Therefore we use the following commands to generated the encrypted keys. You'll need to run these commands on a machine where ruby is installed and the travis gem is installed. Obviously replace `timmolter/XChart` with your own github account name and project name.
travis encrypt -r timmolter/XChart "CI_DEPLOY_USERNAME=username"
travis encrypt -r timmolter/XChart "CI_DEPLOY_PASSWORD=password"

.travis.yml

Place a file called `.travis.yml in the root of the project on the branch you want to be deployed. You'll need to modify this .travis.yml file as shown here. The whitelist specifies that we only want the build to run on the `develop` branch. Replace the keys below with your generated codes from the previous step.
language: java
before_install: "git clone -b travis `git config --get remote.origin.url` target/travis"
script: "mvn deploy --settings target/travis/settings.xml"

# whitelist
branches:
  only:
    - develop

env:
  global:
    - secure: "R7i6miE4AIbj1o6E8fwWvKwjvygha172QSdKM0Jto/Qq3AyLuWMCthYAxevq\nX+I64lw3exhmEiOHXHjh1lGTnGZ9kXklIU+q4vo9QfdYH7WU47chE0KZfQtd\n64EoFo8KmSD4VQjyiNv7ReLdoqksRAj2dL386fWrBAUWkwhxD4w="
    - secure: "UL4rCDPPBrk7cju9f+fNi1qfGWb+q/36wJYUEeuINDa2a4c4oHvdOX0aYOIV\nbBDeaReKMtl6mpjG2uxCZwaz7N3/VADDMrqA+wbTbWKgyWeTACzAz/Z/6w8E\noOAkS8EUCZgDiXeHuirYvQQ47KbzYmf2m4/EUAQm+VIHFbO1ssE="

Test It

Now that everything is setup, all you need to do is push a change on the `develop` branch to GitHub, and Travis CI will build the Maven project and deploy the artifacts to a snapshot repo automatically!

Piece of Cake!!!


Other Travis CI Tidbits

1. Pushes that have [ci skip] anywhere in one of the commit messages will be ignored.
2. Embed a Travis CI build badge in REAME.md file: `[![Build Status](https://travis-ci.org/timmolter/XChart.png?branch=develop)](https://travis-ci.org/timmolter/XChart.png?branch=develop)`

Saturday, April 27, 2013

XChange 1.6.0 Released!

Our Financial Exchange Library for Java, XChange, has seen a lot of active development, mainly improvements and bug fixes, since the previous release in early March 2013. Ironically, we had to remove the three exchanges we added in the previous release: Bitcoin-24, Bitfloor, and BitcoinCentral as they either indefinitely or permanently shut their doors. There were a total of 75 commits in this release and we've seen the number of forks and contributions from new people skyrocket.

One major area of improvement within XChange was the streaming data capabilities via Websockets. We ditched the buggy socket.io code we had and refactored everything to use the 3rd-party project Java-Websockets, which coincidentally was finally mavenized. We also added a mechanism called "ReconnectService" that attempts to establish a new connection if any type of websocket error occurs and streaming is interrupted. It also appears that MtGox updated their streaming infrastructure and it is working better than ever. Before it was pretty much unusable, and now it's actually quite impressive. To see it yourself, just run MtGoxWebSocketMarketDataDemo.java.

The polling mechanism we use to fetch JSON over HTTP was also stripped out of XChange and encapsulated into its own project. Mmazi created this new project called ResCU, and XChange now depends on its first version.

To see a full list of all the changes in this release as well as download the jars, please visit the XChange Change Log page.

Here's a list of the currently supported exchanges. More detailed info can be found here, which includes planned future exchange implementations.
  • MtGox - polling and streaming market data, authenticated trading
  • Bitstamp - polling market data, authenticated trading
  • BTC-E - polling market data, authenticated trading
  • VirtEx - polling market data
  • CampBX - polling market, trading, and account data
  • BitcoinCharts - polling market data (Bitcoin Exchange Rates)
  • OpenExchangeRates - polling market data (Fiat Currency Exchange Rates)
To finish off this release announcement, we leave you with a screenshot of Mt Gox's market depth or "order book" generated using XChange. The code to generate this plot can see seen here on Github. The charting library used to make the plot is XChart.

 

Sunday, March 10, 2013

XChange 1.5.0 Released!

Our Financial Exchange Library for Java, XChange, has seen a lot of active development since the previous release in January 2013. We added three more exchanges bringing the total exchanges covered to ten! A big thanks to mmazi and veken0m for their efforts! In addition to the new three exchanges: Bitcoin-24, Bitfloor, and BitcoinCentral, trading and account data was added to the CampBX exchange. Furthermore, several small behind-the-scenes improvements and minor bug fixes were added.

 The next major area of improvement within XChange is going to be our streaming data capabilities via Socket.io and Websockets. After this is cleaned up and made more robust, we plan on implementing the streaming APIs of the current exchanges. This will allow for more complex trading bot systems to be built using XChange.

 The polling mechanism we use to fetch JSON over HTTP is going to be stripped out of XChange and encapsulated into its own project. Mmazi created a new project called ResCU, and he will be repackaging and adding features to this super lightweight REST client library. We're looking forward to using ResCU in the future and perhaps our next XChange release will depend on the first version of ResCU. Here's a list of the currently supported exchanges. More detailed info can be found here, which includes planned future exchange implementations.
  • Bitcoin24 - polling market, trading, and account data
  • BitconCentral - polling market, trading, and account data
  • Bitfloor - polling market data
  • MtGox - polling and streaming market data, authenticated trading
  • Bitstamp - polling market data, authenticated trading
  • BTC-E - polling market data, authenticated trading
  • VirtEx - polling market data
  • CampBX - polling market, trading, and account data
  • BitcoinCharts - polling market data (Bitcoin Exchange Rates)
  • OpenExchangeRates - polling market data (Fiat Currency Exchange Rates)
To finish off this release announcement, we leave you with a screenshot of Mt Gox's market depth or "order book" generated using XChange. The code to generate this plot can see seen here on Github. The charting library used to make the plot is XChart.