Wednesday, January 20, 2010

JBehave 2.4 released

JBehave continues to push forwards. This time with a 2.4 release, we have better output from scenario runs, new statistics gathering and reporting, and steps classes themselves can now optionally be POJOs (there had to extend a base class before). It is mostly non-ThoughtWorkers and ex-ThoughtWorkers steering JBehave now, but we still remain involved with each release contributing things that are important to us. See the release notes. Great work gang!

Saturday, January 2, 2010

QDox and Paranamer releases

QDox's backlog of issues has been reduced by a decent percentage again by Robert Scholte and it has been released as version 1.10.1. Joe Walnes (who started the project) suggests that Robert becomes lead going forward. Codehaus encourages this sort of thing, and Robert has been defacto lead for much of last year. See the road-map for more information on where QDox is heading.

Paranamer 2.2 has been released too. It often follows QDox as one of the sub-modules uses it. This time though there's a new functionality too. There is a new implementation called AnnotationParanamer that can leverage the @Named annotation of JSR 330 for parameter name data. By nesting Paranamer implementations, you can allow @Named to override the natural parameter name of the method or constructor selectively. Paranamer has also dropped JDK 1.4 compatibility. Strictly speaking it could have remained mixed-mode 1.4 and 5.0 compatible, but by now only laggards are stuck on 1.4, and the old versions of Paranamer are still available. It is a very niche project, but does push the Java bar a little. Enjoy!

Thursday, December 31, 2009

Announcing EventMachine CouchDB (em-couchdb)

I thought it will be a good idea to end the year with a bang.. So here is the announcement for an awesome client for CouchDB based on EventMachine.

People who follow me on twitter (@sai_venkat) know that I am crazy about things like EventMachine, node.js, eventlet and NoSql databases. This is one of my attempts to dive into the NoSql world.

I was looking for clients for CouchDB in Ruby and found most to be using Net/Http and blocking in nature. So I began my quest of writing an asynchronous non blocking awesome EventMachine based CouchDB client inspired by EventMachine::Redis client.

Here is a sample code to enjoy... It creates a database, saves a document inside it, reads the doc, deletes it and then deletes the database.

require "rubygems"
require "eventmachine"
require "../lib/em-couchdb"

# Need to write test for updating doc...
# But before that write example test framework :)
# Also need to implement get all docs in db
EventMachine.run do
couch = EventMachine::Protocols::CouchDB.connect :host => 'localhost', :port => 5986
couch.get_all_dbs {|dbs| puts dbs}
couch.create_db("test-project")
couch.get_all_dbs {|dbs| puts dbs}
couch.get_db("test-project") do |db|
puts db
couch.save(db["db_name"], {:name => "couchd", "description" => "awesome"}) do |doc|
couch.get(db["db_name"], doc["id"]) do |doc|
puts doc
couch.delete(db["db_name"], doc) do
couch.delete_db(db["db_name"]){
EventMachine.stop
}
end
end
end
end
end


The current version supports database manipulation like creation and deletion and document manipulation.

Looks cool but still there are things to improve (a lot of things actually). One to start off with is the Continuation Passing Style.

So the current response to em-couchdb from one of the committers of CouchDb is ...

"em-couchdb looks right-on. Streaming JSON parsing would let large views and docs be processed without memory bloat."

Please feel free to fork and contribute and happy hacking :).

The code is available at http://github.com/saivenkat/em-couchdb

Wednesday, September 30, 2009

ChromeWatir and FireDriver updates

Latest News - ChromeWatir is in github now.

I have finally managed to move ChromeWatir to Github at http://github.com/saivenkat/chrome_watir. I was planning to move to Github as the first Watir project and now I am the last. Anyhow I am now working towards using Chrome's test framework to make the integration with Chrome more stable.

The other project I have been working on is FireDriver (FireWatir + WebDriver). If anyone is wondering why I am doing this please read my blog post on this. In short, this is an attempt to replace the legacy Jssh code with something stable and I am using WebDriver's XPCom based core to do it. The code is at http://github.com/saivenkat/firedriver.

If anyone is interested in contributing, please feel free to fork :).

Sunday, September 6, 2009

Paranamer 2.1 released

Paranamer gives you a String array of parameter names for a Java method:

Method doFoo = Foo.class.getMethod("doFoo",
String.class, String.class);

String[] paramNames
= paranamer.lookupParameterNames(doFoo);

It is very embeddable and can either retrieve this parameter information from a class' debug tables, or from an added static field (added by QDox and ASM).

If you are writing a Java IDE, as web-framework, a SOAP transport, a DI Framework (etc), you are going to want to depend on Paranamer (and maybe consume the 27K or less of bytecode into your jar using JarJar or Maven's Shade).

This release updated QDox and ASM dependencies and added a NullParanamer implementation (NullObject pattern).

See the project site.

Saturday, September 5, 2009

QDox 1.10 released

QDox parses Java source (much like Javac does) but spits out an object model rather than bytecode and does not process method bodies.

QDox remains widely used, and a very neat demonstration of highly decomposed Java project. It is beautifully tested with small snippets of Java code, making tests very readable.

Since Robert Scholte came on board as a committer, QDox has seen it's outstanding feature requests and bugs reduced with each release. The latest is 1.10 leaving only a couple of outstanding minor bugs and a few requests and tasks for the team.

With the next release we may clear both remaining bugs, and leave only a wish-list for a 2.0 version.

Check out the project site

Tuesday, June 30, 2009

CruiseControl.rb 1.4.0 released!

We are happy to announce the release of CruiseControl.rb 1.4.0. This release adds support for three distributed version control systems - Git, Mercurial and Bazaar - in addition to Subversion.

CC.rb remains easy to install, pleasant to use and simple to hack. Since the source has now moved to a git repository, it is easier than ever to fork and contribute. We're looking forward to your pull requests!

Downloads are available from both Rubyforge and Github.