how to choose software projects to work on..

[tweetmeme source=”snarayan” only_single=false]

Some time back, I had finished up one of my pet projects and was looking for something new to work on.

It’s amazing to see the number of choices one has right now in terms of choosing a software project to work on. I primarily develop web applications and like to focus on Rich Internet applications. So was looking around for things in that section. Thought of checking out with people to what they tend to choose..

It went like this.. The choices were rails, asp.net mvc, python/django, grails, jquery, spring web, gwt, flex, silverlight, scala/lift, and a few more..

Wow. I mean, look at the list. and its not all.. we’re just getting started.

Each one of them have their own pros and cons, and choosing among them is really interesting and difficult too.. I started to compare some of these to decide where to start. After few weeks, I was still at the same point and had not been able to make any decision. I always felt like missing something.

Then I realized that I was doing it all wrong.

Nowadays, there are so many things that one can’t keep on top of all thats happening. So I started thinking about how I should approach this thing. Sometime later, in one of the podcasts from Joel and Jeff (from Stackoverflow), I listened to an interesting conversation about choosing what to work on, and I totally agreed and understood the concept behind it.

Technology is a means to get something done. If you’ve found what to work on, as in a domain (or) a problem to solve, it’s fine with what technology you’ve chosen.

One needs to find something worth doing, a problem worth solving and then choose the technology that should back that up. Thats the trick.

Frankly, if you’re doing something really good, it doesn’t matter even if its in php.. nothing against php folks.. 🙂

Ok, fantastic. So then I started looking for a good problem to solve. Found couple of interesting ones. Started working on them.

The technology chosen is grails, was a good fit for our kind of team and nature of the project. Well.. lets see how it goes.

Grails-Jasper plugin starter issues..

Jasper is one of the better solutions on the reporting side from the open-source perspective.  Also, Grails has been growing in popularity as the chosen framework to write web-apps which were ought to be written in Java.

In this post, I’ll stick to the grails-jasper plugin. It expects you to know basics of grails and jasper.

Off we go then..

On the editor side, I prefer Eclipse and eclipse-plugin JasperAssistant than iReport. There are many advantages with that. It is much more simple & lightweight.
Regarding the issue with Grails, I went ahead with installing the plugin and was able to generate reports.

One great help was:
after installing the plugin, go to the url
http://localhost:8080/<App-Name>/jasper/admin

It gives few sample implementations of the jasper plugin. Once they’re working, you’re set to use the reports.

Some issues I faced were:

Issue : report/MyReport.jasper or .jrxml not found.

Solution: Need to create a report folder in web-app and copy all the .jasper & .jrxml files there.

Reason : The plugin expects the files to be there. It can be modified by changing the configuration.groovy file.
————————————–

Issue : PDF(output) is empty

Solution: Data is not bound to the report file.

My solution was I created my own Controller to access data and pass it to jasper (instead of the default jasper query)

class ReportController {

 

def testExample = {
// This “data” object in this data model is the data that drives this Jasper report (i.e. what appears in the
// detail band)

List reportDetails = Race.list();

chain(controller:’jasper’,action:’index’,model:[data:reportDetails],params:params)

// here jasper is the plugin provided controller.
// and index is the default method in jasper controller.
// we need to pass the data and the params.

}
}

list.gsp (front end) has the following tag

<g:jasperReport controller=”report”              >> calls the report controller
jasper=”all-races”            >> the jasper file
action=”testExample”        >> the action(method) in the controller
format=”pdf”            >> format can be pdf, excel, etc.
name=”ReportFile”            >> Name of the file exported
/>

all-races.jrxml (report file) has the following lines

// fields provided to the report. They’ll be equivalent to the Object provided in collection.
// e.g. List<Person>, Person class would be available and each field is its attribute.


<field name=”name”/>
<field name=”city”/>

// usage of the field:

<textFieldExpression   class=”java.lang.String”><![CDATA[$F{name}]]></textFieldExpression>
<textFieldExpression   class=”java.lang.String”><![CDATA[$F{city}]]></textFieldExpression>

I hope it helps.