Wednesday, May 18, 2011

Extending the Provenance Commits idea

Context: Refer my 2008 posting, particularly the "Provenance Commits Idea" 2/3 of the way down.

A person who's not a committer, and who's made a change on their (say) Github fork of a project, with a consequential 'pull request' for the originator to consume the change as a contribution, could sign each commit.

Whether the CLA is as I penned it, or one like Apache's or Google's for accepting back contributions, the contributor could a line detailing the hash of the contribution they have made.

It gets merged in too, along with the actual change, and consequentially has a lasting presence in the bottom of a "contributions.txt" file that has the CLA as the first few paragraphs in "we, the undersigned" style.

Source control gets to prove that the contribution is correlated with the CLA signing. Such contributors have to keep re-signing subsequent contributions to cover for the eventuality that they are one day going to change employers.

Full blown committers should be exempt from this process of course, but then they are likely to not do business in nom-de-plume style, be be known to the other developers.

Note also that committers could reject pull requests until the contributor had completed the workflow of adding to the contributions.txt file.

Maybe Github could add some workflow/automation around this....

Update:
A question from an OSS buddy: Is that "sign" as in "cryptographically sign" or some other sense?

The hashes of changes are irrefutable an part of git's way of working. The follow-up addition of that hash to the contributions.txt file would be committed by the same user (by convention), and also hashed as a change in the same way.

Now the person COULD effect both of those without PKI being involved, but they are authenticated as far as Github is concerned, but virtue of other their id/password. Its as good as cryptographic signing to all intents and purposes. Provided Github has no XSS issues (etc) where someone can commit in the name of another.

Wednesday, December 22, 2010

Selenium 2.0-beta-1 (WebDriver) released.

Of course, the 'beta' label for WebDriver is somewhat late, seeing as many companies have been relying on it for at least three years, but the beta-1 was pushed out yesterday.

WebDriver started at ThoughtWorks a few years ago. Its lead, Simon Stewart, and his now Google colleagues have spent a lot of time on it since. The Selenium-1.x team (Jason Huggins, Pat Lightbody, Dan Fabulich, & many more) and new committers and friends have helped production harden WebDriver to the extent where its an admirable replacement for Selenium-RC (1.x).

There is a little brand confusion as to whether this is Selenium 2.0 or WebDriver that will resolve in time, but it is true however that Selenium 1.x will have no more major releases. That means no more Selenium-Core or Selenium-RC (other than bug fix releases). The reverse takeover that is WebDriver emulating the old Selenium is good enough for prime-time usage. Actually it has probably been good enough for some time.

As a side note, when Jason and I charted the course for 'Driven Selenium' (which became Selenium-RC) we noted that it was an ill-advised idea. We were committing to porting driver code to half a dozen languages, and maintaining a JavaScript hairball that was the in-browser 'core' runner. We shuddered at the scale of the Continuous Integration build needed to make that. Simon's fresh start with WebDriver was no less ill-concieved in terms of the hodge-podge of technologies needed to complete it. The reverse take over nature of the merger back then gave us much relief because we knew that sooner or later the 1.x codeline would be dead and we would toast that overdue demise!

Good work Simon and all involved!

Watch http://seleniumhq.org/download/ for updates.

Tuesday, August 31, 2010

JBehave 3.0 released

The team is happy to announce the release of JBehave 3.0. This major milestone has been lead by friend of ThoughtWorks, Mauro Talevi (still no blog) and pushes the usability and nomenclature of JBehave quite a bit.

Read the announcement and release notes.

Summarizing the release notes a little: 7 bugs, 45 improvements, and 11 new features later, JBehave 3.0 is now happily a Git citizen, with repos mirrored from Codehaus to Github.

If thought of as a JUnit plugin (which is an over-simplification) JBehave 3.0 is perfect for "in the box" enterprise development now. Note also there are now plugins for Guice, Spring and PicoContainer to allow Dependency Injection to play a part in the composition of Behavior Driven Development (BDD) tests.

Sunday, July 25, 2010

Frank: Automated Acceptance Tests for iPhone and iPad

Announcing Frank, a lightweight UI automation framework for iPhone and iPad applications.


[Click Here to watch the screencast in a more sensible size!]

Frank sews together several open source tools, notably UISpec, cocoahttpserver, and Cucumber. The goal is to automate basic UI-level acceptance testing of an iPhone or iPad application, integrated into a Continuous Integration system.

You can read more about Frank here.

Tuesday, July 20, 2010

Code Complexity Visualization for Ruby




Image from http://www.osnews.com/story/19266/WTFs_m



WTF implies lack of clarity. Clear code is easier to understand, easier to maintain and easier to extend.

Announcing saikuro_treemap -- an easy to setup tool to generate complexity treemaps of ruby code.

See a demo for yourself.

Thursday, June 3, 2010

Mockpico beta

Mockpico is an interesting tool. It leverages Mockito and PicoContainer to allow easy instantiation of Spring Controllers for unit testing. Often controllers have many dependencies injected into it via constructors, setters, fields. Sometimes these would be annotated with @Autowired, sometimes not (old fashioned XML composition). When in unit tests, you don't really want to have to specify every injectee as the particular request mapping you want to test might not use them all. With Constructor Injection you kinda have to specify them all of course, though 'null' might be an OK thing to specify.

Anyway, Mockpico makes it easier :- http://github.com/paul-hammant/mockpico (scroll down for colorful diagram)

It is pushed out as beta-1d as you can see here http://oss.sonatype.org/index.html#nexus-search;quick~mockpico. A Maven/gpg learning curve conspired to make this work on its fourth attempt (a thru d).

Monday, May 10, 2010

ProxyToys 1.0 released

Five or so years in development prior to the 1.0 moment, ProxyToys has finally shipped. Well it was perfectly usable in its 0.21 incarnation, but 1.0 makes ProxyToys fully JDK 5 compatible, and changes much more too:

  • Use JDK 5 language features.
  • Added builder classes for all toys (refer Martin Fowler's FluentInterface).
  • New FutureToy to run methods asynchronously
  • New PrivilegeToy to run methods as privileged actions.
In case you did not know, ProxyToys takes Java Classes/Interfaces and makes specialized implementations like NullObject, Pooled, Multicaster, Decorated. The project was first started by (now ex) ThoughtWorker Dan North, and pushed forward by many others since then.

Sunday, February 21, 2010

PicoContainer 2.10 released

Perhaps the last version of PicoContainer 2.x before focussing on 3.x, 2.10 was released earlier today. Changes:

1. String converters can now be overridden, and added to.
2. There's a new type of method injection that matches on method name.
3. The first piece of JSR 330 compatibility has been ushered it - the @Named annotation is recognized.

Aside from those feature changes, bugs have been fixed in FactoryInjectors and Provided lifecycles.

- Paul

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.

Friday, May 29, 2009

Announcing a new release of SWTBot

You can download the latest and greatest from the SWTBot download page.

A listing of some of the new features available:

Bug 263036 - SWTBot finally has an icon that was missing since two years!
Bug 269919 - Added support for toggle buttons
Bug 271246 - Better support for handling editors. This should serve as a good start towards providing support for multipage, forms based editors
Bug 271132 - Using Display#post() to support sending native click events instead of fake events. This is still work in progress and not all widgets support native events yet.
Bug 273624 - Use native keyboard events for typing. SWTBot currently defaults to using AWT robot. SWT's Dispay#post() is available as well -- it is however buggy across platforms and swt versions. Since SWTBot uses native keyboard events, it needs to understand various Keyboard Layouts.
Bug 267189 - Support capturing screenshots of widgets.
Bug 277093 - Support for Link widgets.

There are also a lot of minor bugs that were fixed in this release.

Wednesday, May 27, 2009

Selenium 1.0 released!!

Well, something that ThoughtWorks started about 5 years ago is now reaching the formal & final 1.0 state.  It is of course already an open source success despite being not 1.0 yet.  

We have had some 20 ThoughtWorks staff work on it over the years, and as many non-ThoughtWorks folks, but principal amongst developers is Jason Huggins who started "Selenium Core" in 2004 when he was at ThoughtWorks.

To herald this wonderful moment, we also have a new documentation set, that is a 10x improvement over the previous set, and has been almost entirely contributed by the user community.

Going forward the Selenium team thinks it will get busy with 1.0.x and 1.x releases, not withstanding the effort already in place for Selenium 2.0 (nee WebDriver) also by a former ThoughtWorker, Simon Stewart. 

There is a Meetup  event in play right now. Watch out for Twitter tags #sfse and more formal event snapshots and write-ups. 

Saturday, March 14, 2009

CruiseControl.NET 1.4.3 Released

CruiseControl.Net 1.4.3 is packaged up and waiting to be downloaded from SourceForge:
http://sourceforge.net/project/showfiles.php?group_id=71179&package_id=83198&release_id=668117

There have been bucket loads of improvements. The highlights:
  • New ccnet.config validation program
  • Source Control errors during GetModifications will now fail the build
  • Email Publisher has been improved again
  • Breakers of a build are listed on the Dashboard and in CCTray
  • Custom Icons now work in CCTray
  • Dashboard Improvements
  • Console/Service Improvements
  • Svn and Cvs updates

More details are available from the release notes:
http://confluence.public.thoughtworks.org/display/CCNET/CCNet+1.4.3+Release+Notes

I want to once again thank your for all your support. It's your questions, bug reports, suggestions and of course patches that make this all possible. The next release, 1.5, is going to have some big features that many people have asked for over the years and the team is very excited about bringing it to you.

Cheers!
Dave Cameron
CruiseControl.NET - http://ccnet.thoughtworks.com
Twitter: @davcamer

Thursday, February 19, 2009

ChromeWatir 1.5.0 Released

I am happy to announce that we have released a new version of ChromeWatir. You can get the gem or source from the project page. We have been working on it for quite sometime and it is me whom you should blame for doing a long spike on Chrome AutomationProxy which I did not complete till now :).

What is new in this release

  • Support for table and file field elements
  • Support for Element Collections like links, images, etc.
  • Refactoring and fixing defects in launcher code.
ChromeWatir is still in alpha but we have got some really good feedback and support make it better. Thanks for everyone who helped and encouraged us.

Now that we are done with the release, I think it is time to start working on C++ code to use AutomationProxy for the next release now ;).

Saturday, January 31, 2009

QDox 1.8 released

QDox with 1.8 released moments ago, is much closer to being a perfect Java 5 citizen now.

New committer Robert Scholte was very busy with a backlog of patches, and fix-ups of his own, and things are looking good for the remaining 12 outstanding issues. Resolving even the very-niche issues and feature requests for the next release is a distinct possibility.

Here are the changes since last release.