BTI

Wednesday, February 10, 2010

REST Support in Spring 3.0 Part 1


With the release of Spring 3.0 creating a REST-style Web Service has never been easier.


URI Templates

The @RequestMapping controller annotation now supports URI Templates. A URI Template is a URI-like string, containing one or more variable names. When you substitute values for these variables, the template becomes a URI. This proposed RFC for URI Templates defines how a URI is parameterized.

For Example the URI template http://www.bti360.com/services/benefits/{type} contains the variable type. If we assign the variable the value 401k the template becomes http://www.bti360.com/services/benefits/401k.
During the processing of a request, the URI can be compared to an expected URI Template in order to extract a collection of variables.

Assuming the servlet name is services an example @RequestMapping for this URI template is @RequestMapping("/benefits/{type}")

With this support you no longer need to use a URL Rewriter filter to create REST-style URIs for you resources.

Content Negotiation

Another new addition is the ContentNegotiationViewResolver. This is a view resolver that looks at either a request's file extension or Accept headers to determine which view should handle the request. For example the request http://www.bti360.com/services/benefits/401k.pdf or http://www.bti360.com/services/benefits/401k with Accept Headers application/json would be handled by the pdf and json views respectively. Spring 3.0 comes with views supporting text, html, pdf, excel, json, xml, rss and atom out of the box, and it is very easy to add your own view class for any other media type.

Look for my next post where the topic will be REST client support in Spring 3.0.

Tuesday, October 20, 2009

BTI CEO Presents Kanban


CEO MJ Wivell presented Yes You Kanban to the Applications Agile Network. Mr. Wivell's presentation gave software engineers practical techniques to transition from a Scrum development methodology to Kanban.

Kanban is a software development methodology that allows for continuous workflow. Scrum batches work items for timeboxed sprints while Kanban focuses on single work items to flow through the system.

Mr. Wivell explained that "Kanban can help a good team go to great, but not a bad team go to good."

Software development is a team sport. BTI builds disciplined teams that win!

Wednesday, October 7, 2009

From Scrum to Kanban Part 2

Before applying Kanban to your development methodology we must understand the basics of Kanban.

What is Kanban? Kanban is a Japanese word. Kan means visual. Ban means card or signal. Therefore, a Kanban is a visual indicator that triggers action.

For example, a when you go to Starbucks to order coffee, the cashier marks a coffee cup with your order. The coffee cup along with the markings are a Kanban.

Other Kanbans in our everyday life include stop signs, stop lights, alarm clocks, etc . . .

The Kanban Board is a way to provide visual indicators that trigger action for software development team. As we continue with this series we'll see how the Kanban Board uses visual indicators to trigger action.

BTI builds disciplined teams that advance collaboration.

Wednesday, September 30, 2009

New in Edge Rails

I was watching the rails commits and noticed this. They have just added something called orchestra to ActiveSupport. It is an instrumentation tool for ruby and rails. Below is the documentation from orchestra.rb.

Orchestra provides an instrumentation API for Ruby. To instrument an action
# in Ruby you just need to:
#
# ActiveSupport::Orchestra.instrument(:render, :extra => :information) do
# render :text => "Foo"
# end
#
# Those actions are consumed by listeners. A listener is anything that responds
# to push. You can even register an array:
#
# @listener = []
# ActiveSupport::Orchestra.register @listener
#
# ActiveSupport::Orchestra.instrument(:render, :extra => :information) do
# render :text => "Foo"
# end
#
# event #=> ActiveSupport::Orchestra::Event
# event.name #=> :render
# event.duration #=> 10 (in miliseconds)
# event.result #=> "Foo"
# event.payload #=> { :extra => :information }
#
# Orchestra ships with a default listener implementation which puts events in
# a stream and consume them in a Thread. This implementation is thread safe
# and is available at ActiveSupport::Orchestra::Listener.
#

Ruby Enterprise Edition version 1.8.7 has just been released you can download it here.

Check out this blog about an alternative to AutoTest called Watchr

Saturday, September 19, 2009

From Scrum to Kanban Part 1

Scrum has become the most widely accepted agile development methodology throughout industry. As it has gained popularity teams are analyzing the pros and cons of Scrum.

With the help of Mary and Tom Poppendieck's Lean Software Development, my team As my identified the following deficiencies in Scrum:
* WAITING
* PARTIALLY DONE WORK
* TASK SWITCHING
* EXTRA PROCESSES

WAITING
Our team had a two week development sprint ending on Thursdays. On the Wednesday prior to the sprint end date we would have a code freeze. Thursdays were used to test the code and Friday's were spent demoing the product and planning for the next sprint.

In theory this sounds great. But in practice I found software developers are not great testers. Developers found themselves sitting on their hands WASTING most of this time WAITING for new coding tasks.

PARTIALLY DONE WORK
Throughout each sprint our team would have many tasks in the "In Progress" section of our task board. Each task would be 80% done, but NONE of them would be 100% done.

TASK SWITCHING
Since we had a lot of work "In Progress" team members were constantly working multiple items at once. A lot of time was wasted while a developer would switch from one task to another. Each task switch required the developer to recall what the task inquired and re-learning the code during each switch.

EXTRA PROCESS
Each developer had a different definition of what it meant to be DONE. We found inconsistencies in the steps each developer took to complete a task. Some steps were not needed.


KANBAN
As we researched how to solve these issues we stumbled upon Kanban. Kanban is a lean software development methodology that helped us address the issues described above.

In subsequent posts I will describe Kanban in more detail and how we went from Scrum to Scrumban (a Scrum/Kanban hybrid) to Kanban.

BTI builds disciplined teams that advance collaboration.

Tuesday, September 8, 2009

UI Tools

I've been doing some UI work recently and stumbled across these free tools online:

http://www.pixlr.com/editor/
If you are looking for an alternative to Photoshop, this is a great flash app you can use and save your work locally. I've found it to be a great place to create gradients. Easy to use and there are Rest services other apps can use to edit images. The best thing, everything is free!

http://colorschemedesigner.com/
If you are not a color wheel expert like myself, start here! A cool tool to help you come up with a color scheme for your website. The tool will give you corresponding colors to complement your color choices as well as a host of color contrast options. The most useful tool for me is the ability to demo you color choices immediately with the "example" pages.

Enjoy!

Thursday, September 3, 2009

Tidbits

Just a couple of links to some interesting blogs or projects that I've found.

CouchRest which talks about CouchDB, a document oriented database. It's a very interesting concept and I hope to try it out soon.
Bowline is asking for testers and contributors. If you do your programming on a windows box please test it out.