tag:blogger.com,1999:blog-338813292024-03-14T05:42:22.651+01:00Rody MiddelkoopAnonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comBlogger29125tag:blogger.com,1999:blog-33881329.post-27364733692910095532014-06-12T00:25:00.000+02:002014-06-12T18:11:58.043+02:00Just an average workday of a lecturer7:25 Waking up. Breakfast, shower, getting dressed.<br />
8:15 Driving to Arnhem.<br />
8:45 Say hi to the students who are preparing a workshop on <a href="https://www.coursera.org/course/reactive" target="_blank">Reactive Programming</a> for other students. Will have to assess the workshop this morning, best way to assess is to participate myself. Reading mail on my way to the coffee machine.<br />
9:03 Few minutes late for the workshop. Students starting with some short theory on Reactive Programming and <a href="https://rx.codeplex.com/" target="_blank">Rx</a>.<br />
9:30 First programming exercise. Playing with <a href="https://github.com/Reactive-Extensions/RxJS" target="_blank">RxJs</a>, done within a few minutes, but other attendants struggling a bit with some JavaScript thingies and a unknown API. A small timeout for a cup of tea.<br />
10:30 Built my first Reactive JavaScript chat client using web sockets and the ws-echoserver.<br />
11:30 Refactored code to make it talk to a chat server built with C# and <a href="http://msdn.microsoft.com/en-us/data/gg577609.aspx" target="_blank">Rx.NET</a>. Checking if other attendants are able to keep up.<br />
12:00 Small quiz about some Rx concepts, glad I could answer most questions correctly.<br />
12:30 Passing feedback to the organising students, together with my colleague Debbie.<br />
12:45 Helping out students working on a <a href="https://github.com/rodmidde/icaase" target="_blank">JMS</a> assignment.<br />
13:00 Picking up graduation reports, dropping reports in the car. Reading will have to wait until tonight, wait, ehhhh, tomorrow night, maybe next weekend. Answering mail on my way to the lunchroom.<br />
13:00 Small lunch, eating on my way back to the office. Discussing names of some potential colleagues with members of the selection committee. We still have vacancies. Talking to several colleagues about assessment criteria and delivering course descriptions on time. Still on my way to the office. <br />
13:30 Finishing mail: some stuff about handing in assignments, making some appointments for next two weeks. Agenda is filled up with graduation presentations, project assessments and teammeetings. Planned to go to <a href="http://gotocon.com/amsterdam-2014" target="_blank">Goto Amsterdam</a>, but what was I thinking: going to a conference does not match the two busiest weeks of the year. Better luck next year....<br />
14:00 Welcoming guest lecturers about <a href="http://www.gprolog.org/" target="_blank">Prolog</a>, getting coffee and water.<br />
14:15 Start of the guest lecture. Cool subject, but I'm almost dozing off. Maybe answering some questions will keep me focussed.<br />
15:30 End of guest lecture, heard this presentation before several times but still got new insights of how this funny language works.<br />
15:30 A quick run to the coffee machine, students are waiting in line for a grade on their JMS implementation of the <a href="http://sanderhoogendoorn.com/blog/index.php/october-8-9-2009-workshop-pragmatic-modeling-using-uml-and-beyond/" target="_blank">Dare2Date</a> case. Also a late grade for a Spring-WS implementation, nice work using DI, ServiceLocator pattern, too bad it's not unittested.<br />
17:00 Finishing class, dropping laptop and other gear at the office. <br />
17:05 Small meeting about the information night for new students.<br />
17:25 Few minutes for some sandwiches and a coke.<br />
17:45 Preparing laptop and slides (thanks Gerrit for mailing the last version) for the first session.<br />
18:05 First guests coming in for a chat and to attend the session about the <a href="http://www.han.nl/gebied/informatica-media-communicatie/" target="_blank">three different ICT studies</a> we host at the HAN University.<br />
18:15 Start of first session. Mixed audience, small group but some good questions asked and answered.<br />
19:10 Drink. Check whether I'm done for today, it was supposed to be a quiet evening but the second session already has some audience waiting for me.<br />
19:30 Start of second session. Almost no empty chairs. Again a mixed audience. Again lots of questions about graduation assignments, whether to start with media design or software development, which laptop to buy...<br />
20:30 Done. Well, almost done. First grab a drink. My feet hurt. On my way to the car.<br />
21:00 Came across a colleague and friend. Had a very similar day like me, so I guess this was just an average day.<br />
21:30 Home. Taking my shoes off. Say hi to my wife. Maybe I should write a blog about my day...<br />
22:00 Watching TV. Should I really write this blog now?<br />
22:30 Starting with the blog. Does anybody care to read this at all? Well, first write, crossing out later.<br />
00:11 Done. Saving blog. What the heck, publish the damn thing. Sleep. Well. Sleep well. <br />
Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-47212118806600837282014-05-27T16:51:00.000+02:002014-06-12T18:11:56.411+02:00Creating JIRA tasks right out of Apple MailBeing a developer and lecturer I have lots of things on my mind, never a dull moment during programming, coaching or teaching. I sometimes feel like a juggler trying to keep as much as balls in the air as possible, so a few years ago I decided to adopt the <a href="http://en.wikipedia.org/wiki/Getting_Things_Done" target="_blank">Getting Things Done</a> time-management method and apply it to my mailbox.<br />
<br />
The result is a highly organized Apple Mail application with every day at most 5 unanswered e-mails, but most of the time the mailbox is empty and e-mails are answered or marked because action is needed. Recently I started doing extra projects having lots of small tasks that I have to do myself or tasks that need my supervision. Communication about these projects is done by e-mail, so I looked for a way to couple these emails to issues in a planningboard.<br />
<br />
I decided to keep track of my tasks in <a href="https://www.atlassian.com/software/jira/agile" target="_blank">JIRA Greenhopper</a>, but after a few days I started to hate the context switch and the copy-pasting of issue contents so I took Automator for a test drive ending up with a nice extra context menu item that enables me to create JIRA tasks directly from Apple Mail. I took <a href="https://bobswift.atlassian.net/wiki/display/JCLI/Examples" target="_blank">JIRA CLI</a> for the heavy lifting instead of the JIRA SOAP API.<br />
<br />
The Automator script outline looks like:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFXaNVflIB_-fWfwFZsjddLkiaNvvo97t-M7lWWS5IDTArcGh_JNVKkXqQiRkQPnsrxwcleAfebE6IBJbYHOVBPHMCaALjh_GuuSez2_Rkdgt9XHmO7d6ySEEqDW1mr5OBrWEi/s1600/outline.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFXaNVflIB_-fWfwFZsjddLkiaNvvo97t-M7lWWS5IDTArcGh_JNVKkXqQiRkQPnsrxwcleAfebE6IBJbYHOVBPHMCaALjh_GuuSez2_Rkdgt9XHmO7d6ySEEqDW1mr5OBrWEi/s1600/outline.jpg" height="307" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Outline of the Automator script</td></tr>
</tbody></table>
There are three major parts in the script:<br />
<ol>
<li>Three blocks combining <i>"Ask for Text"</i> and <i>"Set Value of Variable".</i> This leads to three variables, IssueDescription, IssueTitle and JiraProject holding the description and title of the issue and the project key to add the issue to.</li>
<li>The Run Shell Script, preceded with three stacked blocks holding the variables. This leads to having three parameters in the Shell Script, the IssueDescription, the IssueTitle and the Project.</li>
<li>Passing the result of the Run Shell Script through the Clipboard to the Display Notification.</li>
</ol>
<div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4kyGddCEAF1ks6uyJcjhFZs4eDUiCQN8xQNOuyHRCRimN3IdsXaGzNmhYyr4dlsdQv9QoGuz3UE4JqabhPjqP_sXXvwqDdN0Y7I81LLRhy0JFt0lJz8gyyQWK2HNmKV1OKPs6/s1600/running+jira-cli.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4kyGddCEAF1ks6uyJcjhFZs4eDUiCQN8xQNOuyHRCRimN3IdsXaGzNmhYyr4dlsdQv9QoGuz3UE4JqabhPjqP_sXXvwqDdN0Y7I81LLRhy0JFt0lJz8gyyQWK2HNmKV1OKPs6/s1600/running+jira-cli.jpg" height="272" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 13px; text-align: center;">Run Shell Script</td></tr>
</tbody></table>
</div>
<div>
<br />
This leads to a nice extra Context Menu Item that can be used to add the issue "Write blog about Automator and JIRA" to my personal project:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBHxnYY3Y877mNqa8wlrQBEdULq6NClVxlya1rd7app2jbpIKhMPmatxS-PjXY7q-iTpubR72MnqERluvZ52mQz_0OynT64368zXnyzpMiZ-sD87DY0RJjdxTWHTz6vyvEfPXF/s1600/Screen+Shot+2014-05-27+at+16.42.59.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBHxnYY3Y877mNqa8wlrQBEdULq6NClVxlya1rd7app2jbpIKhMPmatxS-PjXY7q-iTpubR72MnqERluvZ52mQz_0OynT64368zXnyzpMiZ-sD87DY0RJjdxTWHTz6vyvEfPXF/s1600/Screen+Shot+2014-05-27+at+16.42.59.jpg" height="129" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb6CVfPQqe0QJGJHtrYxY_uj_AxWrg_ZJ0BIp1yeQyU_8Zm-NJBxC1FasUKcSEec0x5V7uvHMEntpHJnJB0Cn37ZqBHX1WOUKEbxh7s-NvtVEiePIAgNlPUJRy61RiFVAa3xqX/s1600/Screen+Shot+2014-05-27+at+16.43.25.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb6CVfPQqe0QJGJHtrYxY_uj_AxWrg_ZJ0BIp1yeQyU_8Zm-NJBxC1FasUKcSEec0x5V7uvHMEntpHJnJB0Cn37ZqBHX1WOUKEbxh7s-NvtVEiePIAgNlPUJRy61RiFVAa3xqX/s1600/Screen+Shot+2014-05-27+at+16.43.25.jpg" height="164" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh70afryrhICXg_Jd2FOAHEvX3nx38nQT1GbABQPKDOEXTit2_1UxBjDYsYoGJaqh6i876_Q0w9wdrWiZ4PyR0XiHQ58RIoVNC0YQ_CHB1XIGi2TyfQfKB4EhhnT3BRuDOhvvi4/s1600/Screen+Shot+2014-05-27+at+16.43.38.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh70afryrhICXg_Jd2FOAHEvX3nx38nQT1GbABQPKDOEXTit2_1UxBjDYsYoGJaqh6i876_Q0w9wdrWiZ4PyR0XiHQ58RIoVNC0YQ_CHB1XIGi2TyfQfKB4EhhnT3BRuDOhvvi4/s1600/Screen+Shot+2014-05-27+at+16.43.38.jpg" height="149" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiuGufzucJfqQvQldSOX8ReSOh4-but6qpRveupo6ckAdORR8qszAivi99mjqp0Lsp6OuFK1MwsOFlYm3wUza16aKGcGpLajqcNSS3bsrNkur4JoZ7F8ivKtqOBDMYMnxZLn_j/s1600/Screen+Shot+2014-05-27+at+16.43.51.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiuGufzucJfqQvQldSOX8ReSOh4-but6qpRveupo6ckAdORR8qszAivi99mjqp0Lsp6OuFK1MwsOFlYm3wUza16aKGcGpLajqcNSS3bsrNkur4JoZ7F8ivKtqOBDMYMnxZLn_j/s1600/Screen+Shot+2014-05-27+at+16.43.51.jpg" height="156" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEmDCXTdMoTKHrTu19qSOePunxL-owZZCRk96rnHRCKFeYgEQDsNBjWcw66r45FUESVAsTHJjZa6A35_nIGYhp46OvOHUqxu2M0w0TWFtZO1xccyfnmfNFjGPBo23MApz5rWpn/s1600/Screen+Shot+2014-05-27+at+16.44.46.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEmDCXTdMoTKHrTu19qSOePunxL-owZZCRk96rnHRCKFeYgEQDsNBjWcw66r45FUESVAsTHJjZa6A35_nIGYhp46OvOHUqxu2M0w0TWFtZO1xccyfnmfNFjGPBo23MApz5rWpn/s1600/Screen+Shot+2014-05-27+at+16.44.46.jpg" /></a></div>
<br />
If you need the source for the Automator project, please feel free to drop me an email or a comment on the blog.<br />
<br /></div>
<div>
<br class="Apple-interchange-newline" /></div>
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-86065884713198970992012-11-11T22:38:00.002+01:002012-11-21T12:55:37.223+01:00Kickstarting your Android project with Maven and Androidx86Let's assume you want to develop Android applications and you want high quality code and high productivity. I just found out two tools that really help kickstarting your Android project.<br />
<br />
<h3>
Prerequisites</h3>
<br />
<ul>
<li>Java 6 installed</li>
<li>Android SDK installed</li>
</ul>
<h3>
AndroidKickstartR</h3>
<div>
<a href="http://androidkickstartr.com/" target="_blank">AndroidKickstartR</a> is a simple tools that creates an Android project together with a <a href="http://maven.apache.org/" target="_blank">Maven</a> project with all required dependencies:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_HsNMXdm9KMeysYtdWAZCDA5WNHgYo5EP831qnqO0iUniYRPEIlkdleiX-trtgZLed9ey4sKnGcDxAk72-y41nVM6o3tb3oyfjjxugIRIST1dFO2zr5MiYrpXdtPqrcy2oBXY/s1600/AndroidKickstartR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_HsNMXdm9KMeysYtdWAZCDA5WNHgYo5EP831qnqO0iUniYRPEIlkdleiX-trtgZLed9ey4sKnGcDxAk72-y41nVM6o3tb3oyfjjxugIRIST1dFO2zr5MiYrpXdtPqrcy2oBXY/s320/AndroidKickstartR.jpg" width="320" /></a></div>
<div>
<br /></div>
<div>
Just fill in your ApplicationName, packagename and Main activity, enable the Maven option and click Download it! Extract the zip file and run <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">mvn clean install android:deploy eclipse:eclipse</span>. Notice that when you didn't start any emulator or forgot to create an AVD this step fails, but don't worry. The first thing you're going to hate when developing Android applications is the slow emulator, however there is a nice alternative using <a href="http://www.android-x86.org/" target="_blank">Androidx86</a> that can be executed using VirtualBox: </div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnz7xqymJMZ6jo0NQCHm-Rw9x9iawbFihEZnqsbzEZfCHOFywx0IQCiax19EAWtDTCci8JQB7oGJ9lETulRVWTUN2yMbtVJuMQNPkpybgAkXeflbUeKQ5xegzsszNRFreKX4ri/s1600/Androidx86.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnz7xqymJMZ6jo0NQCHm-Rw9x9iawbFihEZnqsbzEZfCHOFywx0IQCiax19EAWtDTCci8JQB7oGJ9lETulRVWTUN2yMbtVJuMQNPkpybgAkXeflbUeKQ5xegzsszNRFreKX4ri/s320/Androidx86.jpg" width="320" /></a></div>
<div>
<br /></div>
<h3>
Androidx86</h3>
<div>
Create the <a href="https://www.virtualbox.org/" target="_blank">VirtualBox</a> image using the <a href="http://www.bobbychanblog.com/2011/07/faster-android-emulator-alternative-using-virtualbox/" target="_blank">directions</a> and get the ipaddress of the emulator, in my case that's 192.168.0.104. Start the adb process and connect it to the Android VirtualBox image: </div>
<div>
<br /></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">adb connect 192.168.0.104</span></div>
<div>
<br /></div>
<div>
Now we can re-run our maven targets: <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">mvn clean install android:deploy</span>. Open up your Android VirtualBox image, and run your favourite app!</div>
<h3>
Conclusion</h3>
Using AndroidKickstartR you can use Maven for deployment, codequality (i.e. <a href="http://www.sonarsource.org/" target="_blank">Sonar</a>, <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">mvn sonar:sonar</span>) and continuous integration (i.e. Jenkins). Androidx86 speeds up the development process, every android:deploy really redeploys the app.<br />
<div>
<br /></div>
<div>
Last hint: don't use too much IDE features from Eclipse or IntelliJ and use your IDE just for coding, let Maven handle the build, deployment en quality part. </div>
Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-71390662911219281032012-01-21T13:13:00.000+01:002012-01-21T13:13:04.070+01:00Push based builds using Jenkins and GITRecently we switched to Git as our Version Control System solution and I still like it. Coming from “(good) old” CVS we used Jenkins as CI server polling CVS for changes. Besides other nice features and advantages, Git also brings nice commit hooks (well, CVS also does but I finally got to use this nice feature).
<a href="http://blog.avisi.nl/2012/01/13/push-based-builds-using-jenkins-and-git/">Read more....</a>Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-69332281062348364832010-08-13T19:46:00.004+02:002010-08-13T19:56:30.251+02:00How to add calendar controls to a Joomla administrator componentBeing home during summer holiday means doing some "home development". Being forced to do a re-make of the <a href="http://www.feestbordindetuin.nl/">feestbordindetuin</a> I found a nice component for showing products and categories (<a href="http://dj-extensions.com/dj-catalog2/overview-files">DJ Catalog</a>), without having to implement a whole e-commerce-solution. One of the disadvantages is that is doesn't support the administration of customers and reservations so I built that myself using the MVC structure for Joomla components. Customers can make a reservation for a product, having a start-date and an end-date and of course a reference to the product itself. I wanted to be able to edit the dates myself but I also wanted a calendar-control, well that was easy:<br />
<code><br />
<input class="text_area" type="text" name="date_from" id="date_from" size="32" maxlength="250" value="<?php echo $this->item->date_from;?>" /><br />
<img id="date_from_img" alt="calendar" src="/templates/system/images/calendar.png" class="calendar" onclick="return showCalendar('date_from','%d-%m-%Y');" ><br />
</code><br />
<br />
Just add an image next to the input type and don't forget to add the calendar behaviour on top of your form:<br />
<br />
<code><br />
JHTML::_('behavior.calendar');<br />
</code><br />
<br />
Tada:<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNzBjUtU-crr-Pn6PwGdTSwPmsNJMPLgBhkPypP2nL-qigZI4ZRysM3iV6u9bjkjWF38H5k7fb2oDnmHCbj-HcKjA4QFRdYrRvh9c0h1ZyPgQuYx9ikDdx0h18eFZ2gGuXtkaU/s1600/Screenshot+1.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNzBjUtU-crr-Pn6PwGdTSwPmsNJMPLgBhkPypP2nL-qigZI4ZRysM3iV6u9bjkjWF38H5k7fb2oDnmHCbj-HcKjA4QFRdYrRvh9c0h1ZyPgQuYx9ikDdx0h18eFZ2gGuXtkaU/s640/Screenshot+1.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Making a reservation for a product using the Joomla built-in calendar control.</td></tr>
</tbody></table>Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-51112074849790662942010-05-05T18:45:00.005+02:002010-05-06T00:51:27.469+02:00How to (not) manage a one-person software development project<span xmlns=""><h1>Introduction<br /></h1><p>As a consultant and as a lecturer I am constantly working on quality both on the softwareproduct and the softwareprocess. On the one hand I try to (let my colleages) deliver software using a small <a href="http://avisi.nl/display/avisinl/2010/01/29/Lancering+ontwikkelstraat+InSight">software factory</a>, on the other hand I try to convince students to deliver sofware using the right process. This article will give some background on choosing the right process for a very small project-team (to be specific, a size of one) for a softwareengineering-project. This article is written mainly from the point of view of a lecturer, but I can't help drawing parallels between education and "real" life.<br /></p><h1>Academy of Communication and Information Technology (ICA)<br /></h1><p><em>"HAN University of Applied Sciences' Academy of Communication and Information Technology (ICA) offers state-of-the-art study programmes in the fields of Computer Science, Information Technology, Business Information, Media and Communication Systems." </em>[HAN10]<em><br /> </em></p><p> Although ICA uses a graduation-assessment based on levels of <a href="http://www.hbo-i.nl/default.aspx?pageID=28">standardized competencies</a>, there are five key aspects to consider:<em><br /> </em></p><ul><li>Process: is the student capable to choose it's own process and use it wisely?<br /></li><li>Product: is the student capable to deliver the required product (mostly software, but can also be a report or a visual prototype)?<br /></li><li>Presentation: is the student capable to present his product and process and answer questions about his own choices?<br /></li><li>Report: is the student capable to write a structured report that contains the most important information about the project?<br /></li><li>Reflection: does the student knows his own strengths and weaknesses and is he able to use his strengths and to minimize his weaknesses?<br /></li></ul><p>Before graduating, ICA students have followed a unique program with three semesters of their own choice. Each semester focusses on a specific professional task within the field of Computer Science, Information Technology, Business Information or Media and Communication Systems. Some tasks are better performed using Scrum, other tasks have a better match with Evo, Unified Process, UCD or Prince2. Most of the tasks are performed in a team consisting of five, so students don't have that much experience in choosing a process for a one-person project like the graduation assignment which is performed by the individual student.<br /></p><p>Because <em>Process</em> is one of the five aspects to determine whether the student succeeds graduating, they need more help in choosing the right process. Scrum is one of the most popular processes among students, however Scrum is also the process that is understood and applied badly by students and other junior professionals. The same applies more or less for Unified Process and other agile methods like Evo and XP: very popular, often misunderstood.<br /></p><h1>What process to pick?<br /></h1><p>At ICA several softwaredevelopmentprocesses are used during 8-week Software Engineering projects:<br /></p><ul><li><a href="http://wiki.icaprojecten.nl/display/PUBL/Home">Scrum</a> combined with XP best practices (semester Develop a Distributed OO Application, DDOA);<br /></li><li>Evo (semester Make a High Performance Network Application, MPNA);<br /></li><li>Unified Process (semester Develop an Information System, DIS).<br /></li></ul><p>Most students tend to stick to what they (think they) know, and I think that's good when you're a junior professional. That means that most of the students wil pick one of (or a combination of) the above mentioned processes. In the next paragraph Scrum, UP en XP will be discussed using a short introduction and some principles that can be used to determine what (not) to do.<br /></p><h2>Scrum<br /></h2><h3>Short introduction<br /></h3><p>Scrum was formalized as a softwaredevelopmentprocess in 1995 by Jeff Sutherland and Ken Schwaber. In Scrum, a team delivers a "potentially shippable product" every increment ("sprint") of 2-3 weeks, using several recurring ceremonies, like the daily stand-up, sprint planning, sprint review and sprint retrospective, like described in Figure 1.<br /></p><p><img alt="" src="http://blog.mdlware.nl/images/050510_1645_Howtonotma1.jpg" /><br /> </p><p><span style="color: rgb(79, 129, 189);font-size:9pt;" ><strong>Figure 1: Recurring activities during a sprint [ONEDOTO10]<br /></strong></span></p><p>The team consists of a:<br /></p><ul style="margin-left: 38pt;"><li>ScrumMaster: "… primary job is to remove impediments to the ability of the team to deliver the sprint goal/deliverables. The ScrumMaster is not the leader of the team (as the team is self-organizing) but acts as a buffer between the team and any distracting influences." [SCR10]<br /></li><li>ProductOwner: "... represents the voice of the customer. He/she ensures that the Scrum Team works with the "right things" from a business perspective. The ProductOwner writes customer-centric items (typically user stories), prioritizes them and then places them in the product backlog." [SCR10]<br /></li><li>Teammembers: "… has the responsibility to deliver the product. A team is typically made up of 5–9 people with cross-functional skills who do the actual work (design, develop, test, technical communication, etc.)." [SCR10]<br /></li></ul><h3>Do's and don'ts for a one-person project<br /></h3><p>It might look strange to run around in the field alone with a rugbyball in your hands, however with a pragmatic approach Scrum can be applied to a one-person project. Some principles also yield for "ordindary Scrum teams":<br /></p><div><table style="border-collapse: collapse;" border="0"><colgroup><col style="width: 318px;"><col style="width: 301px;"></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px;"><p><strong>Do</strong></p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 18pt;"><strong>Don't</strong></p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>1. Assign/find a ProductOwner. Let the customer-disharmony be his or her problem, not yours.<span style="color:black;"><strong><br /> </strong></span></p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">1. Be your own ProductOwner. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>2. As a teammember be your own ScrumMaster:<br /></p><p style="margin-left: 54pt;">a. Estimate work.<br /></p><p style="margin-left: 54pt;">b. Manage impediments.<br /></p><p style="margin-left: 54pt;">c. Log and re-estimate work and manage your velocity.<br /></p><p style="margin-left: 54pt;">d. Use lightweight tooling like a <a href="http://wiki.icaprojecten.nl/download/attachments/721351/Empty+Sprint+Backlog.xls?version=1&modificationDate=1260731525000">spreadsheet</a> or (a little less lightweight) dashboard.</p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">2. Hold your own private daily stand-up, instead you could still pick a regular moment every day to manage impediments and (re)gain focus on your work. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>3. Choose a fixed length for your sprints. You are the one and only developer so two weeks can be problematic. </p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">3. Keep the sprint-length fixed, even when you're not capable of delivering value through product increments. Also see 5. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>4. Create a high level design on a whiteboard during the first sprint. Take pictures. Detail the design every upcoming sprint in case you build something difficult or risky.</p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">4a. Create a big design up front (BDUF). Although you are the one and only developer and you need some structure, BDUFs don't increase the business value of your project.<br /></p><p style="margin-left: 36pt;">4b. Be a cowboy-coding idiot. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>5. Focus on a architectural slice during a sprint, each slice should be able to operate independently of another slice. </p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">5. Build your application completely layer for layer. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>6. Write a manageable <a href="http://wiki.icaprojecten.nl/display/PUBL/Definition+of+Done">definition of done</a> (DoD) [GUP08]. Focus on code complete with just enough design to keep your product maintainable with help of other parties. </p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">6a. Freeze your DoD during the project. Tune the DoD during the sprints, after two of three sprints it should be solid.<br /></p><p style="margin-left: 36pt;">6b. Cut down unittests. Although time saving, you need (automated) testcases every time there's a nasty bug in your software. Because your team lacks reviewers, your testcases might be your safetybelt. Never cut down quality. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>7. Perform Sprint Reviews. Show demo's of your potentially shippable product and let a key user get some feeling of the product. </p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">7. Use Sprint Reviews to "just show what you've got". Remember, Scrum is about commitment, if you can't commit, lower your amount of user stories, rethink your DoD of lengthen your upcoming sprints. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>8. Use a fully integrated IDE (buildtools, versioncontrol, formatting, etc.). </p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">8. Dress up a continuous integration environment. With a professional IDE you have sufficient tooling in most cases. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>9. Concrentrate on two Scrum values: Commitment and Focus.</p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">9. Be disrespectful to your customer representatives and hide all your problems.</p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>10. Perform Sprint Retrospectives. Find out what you've done well (and what not) and how to improve. Adapt.</p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">10. Think there is no need to change and that the world around you will change in favor of you. </p></td></tr></tbody></table></div><p><br /></p><h2>UP<br /></h2><h3>Short introduction<br /></h3><p>Unified Process (UP) is a use-case- and risk-driven, architecture-centric, iterative and incremental software development process framework. There are several implementations or refinements of UP available, among which:<br /></p><ul><li>Rational Unified Process (RUP): developed by Ivar Jacobson, Grady Booch and James Rumbaugh when working for the Rational company, currently part of IBM. RUP is fact the first known refinement of UP, you could say that UP was retracted from RUP. Simply put: UP = RUP minus Rational tools, artifacts and templates that support the process (like versioncontrol, requirements management, documenttemplating, processcomposing, etc.).<br /></li><li>Agile Unified Process (AUP): Simplified version of RUP, developed by Scott Ambler [AMB09]. AUP has less disciplines and conforms to the principles of the <a href="http://www.agilealliance.org/">Agile Alliance</a>.<br /></li><li>Enterprise Unified Process (EUP): Instead of simplifications like AUP, EUP is an extension for UP, developed by Scott Ambler [AMB09-1]. EUP solves the problem of the lack of system support and eventual retirement of a software system, so new phases and new disciplines were added.<br /></li><li>Open Unified Process (OpenUP): "OpenUP is a lean Unified Process that applies iterative and incremental approaches within a structured lifecycle. OpenUP embraces a pragmatic, agile philosophy that focuses on the collaborative nature of software development. It is a tools-agnostic, low-ceremony process that can be extended to address a broad variety of project types." [OPENUP09]<br /></li></ul><p>All refinements can be visualized in the same way, however the disciplines on the left may differ:<br /></p><p><img alt="" src="http://blog.mdlware.nl/images/050510_1645_Howtonotma2.gif" /><br /> </p><p><span style="color: rgb(79, 129, 189);font-size:9pt;" ><strong>Figure 2: Iterative development in UP using phases and disciplines [UP10]<br /></strong></span></p><p>Being part of one of the first RUP-projects in the Netherlands in 2001, I found out that UP tends to be heavy-weight when you apply all the disciplines, roles and artifacts so the first thing we learned was how to make a good Development Case and Software Development Plan.<br /></p><h3>Do's and don'ts for a one-person project<br /></h3><p>So, how do you pick your predefined flavor of UP and how do you tailor this flavor? Well, for a one-person project it figures that full EUP and RUP are not an option, OpenUP should be tailored to your needs and AUP could be the closest to what you need but could still need some adjustments. Regardless of the refinement of UP you want to apply, there are some pragmatic principles that apply:<br /></p><div><table style="border-collapse: collapse;" border="0"><colgroup><col style="width: 319px;"><col style="width: 300px;"></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 18pt;"><strong>Do</strong></p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 18pt;"><strong>Don't</strong></p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 18pt;"><span style="color:black;">1. Develop iteratively. All phases can be performed more than once, use risk as the driving factor. Create a Risk Plan. </span></p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;"><span style="color:black;">1. Consider Inception as Requirements, Elaboration as Design, Construction as Build and Transition as Test. It's NOT a traditional waterfall process. Instead, use Inception to determine whether your project is feasable and use Elaboration to build and executable architecture that proves your high-level design. </span></p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 18pt;">2. Use templates specificly for requirements management and software architecture.</p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">2a. Re-invent the wheel.<br /></p><p style="margin-left: 36pt;">2b. Use the templates in a dogmatic way. Instead, remove what you don't need and add what you do need. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 18pt;">3. Manage your changing requirements, preferably using use cases. Create cross-references from use-case, through design, implementation and test to delivery. Obtain traceability, a small spreadsheet will do. </p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">3a. Build software that does not relate in any way to the requirements. You want unhappy or even no customers? Please continue.<br /></p><p style="margin-left: 36pt;">3b. Consider all your requirements equally important, they're not. Instead, <a href="http://www.dsdm.org/knowledgebase/details/165/moscow-prioritisation-briefing-paper.html">prioritize</a> [DSDM10] and <a href="http://www.ibm.com/developerworks/rational/library/4706.html">categorize</a> [EEL05] them. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 18pt;">4. Use UML. Even for a one-person project use the following diagrams, preferable on a whiteboard:<br /></p><ul style="margin-left: 54pt;"><li>Use Case Model (also write brief use cases, optionally create expanded use cases for risky or hard stuff) with stereotypes. Consider using <a href="http://www.accelerateddeliveryplatform.com/SmartUseCase.ashx">smart use cases</a> [HOO10] for better planning and estimation.<br /></li><li>Class Diagram (Domain Model), you might skip the conceptual level, but invest in getting to know the business domain and think about assigning responsabilities to the right class.<br /></li><li>Sequence Diagram, especially on the <a href="http://www.agilemodeling.com/artifacts/sequenceDiagram.htm">architectural-level</a> [AMB09-2]. It helps you to identify components. </li></ul></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">4a. Stick to the UML meta-model. Instead, create diagrams that illustrate the tricky parts of your software, if you need usecase-elements in a sequencediagram, draw them.<br /></p><p style="margin-left: 36pt;">4b. Model all parts of your software, even the obvious ones.<br /></p><p style="margin-left: 36pt;">4c. Reverse engineer diagrams from code and call it "design". It can be useful to have a picture of how your software is structured, but I consider that as code visualization. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 18pt;">5. Track issues, like technical issues and project risks. </p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">5. Pretend that nothing can go wrong. In a way, that can be the case when you've done this kind of project over and over and over, however: will you need process then?</p></td></tr></tbody></table></div><p><br /></p><h2>XP<br /></h2><h3>Short introduction<br /></h3><p>Starting in 1996, Extreme Programming (XP) has grown to a broadly used agile sofware development method. XP emphasizes teamwork and states several rules that must be followed. Most of the rules also apply to one-person projects, some do not: pair-programming is going to be hard and your code is always immediately integrated (unless you work on different branches).<br /></p><p> XP is an iterative development process, which is illustrated in Figure 3:<br /></p><p><img alt="" src="http://blog.mdlware.nl/images/050510_1645_Howtonotma3.gif" /><br /> </p><p><span style="color: rgb(79, 129, 189);font-size:9pt;" ><strong>Figure 3: Activies during an XP managed project [WEL00]<br /></strong></span></p><h3>Do's and don'ts for a one-person project<br /></h3><div><table style="border-collapse: collapse;" border="0"><colgroup><col style="width: 311px;"><col style="width: 308px;"></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px;"><p><strong>Do</strong></p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 18pt;"><strong>Don't</strong></p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p><span style="color:black;">1. Write user stories including acceptance criteria. Perform acceptancetests on a regular basis and publish results. </span></p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;"><span style="color:black;">1. Leave out acceptance criteria. Instead, discuss with the customer what criteria the software should meet and use UI mocks whenever possible.</span></p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>2. Create a release planning with small releases. Divide the project into several iterations and start iteration planning each iteration.</p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">2a. Constrain your activities to coding only. Instead, also focus on communication and feedback (two of the five XP values).<br /></p><p style="margin-left: 36pt;">2b. "Try to catch up by working harder or longer, that's the fastest way to get further behind. Instead call for a planning meeting, accept how far you have come and create a new plan." [WEL00]</p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>3. Set a sustainable pace and measure velocity.</p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">3. Hold your own private daily stand-up, instead you could still pick a regular moment every day to manage impediments and (re)gain focus on your work. Also when you're the one and only developer you can't "move people around".</p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>4. Use a simple design and a system metaphor. Assign responsibilities to the right classes. Create spike solutions and refactor continuously.</p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">4. Use CRC-cards. Instead, use GRASP [LAR04] patterns. You can do without CRC-cards in a one-person project. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>5. Have the customer always available. That's hard in a one-man project, however you may decide to make the customer's office your office. Face to face communication is faster and more reliable that anything else. </p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">5. Work iteratively without showing the results to your customer. Why work iteratively?</p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>6. Apply to coding standards. Use available standards and/or modify it to your own needs. </p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">6. Break rule 6. Even in a one-man project, you need coding standards to make your code readable, understandable and debuggable. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>7. Code the testcase first.</p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">7. Write testcases afterwards. In a projectteam that sometimes is an option, but only when the developer of the testcase is not the same developer as the code under test. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>8. Use an integration computer.</p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">8. Believe that when it works on your computer, it works on another computer as well. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>9. All code must have unit tests and all code must pass all unit tests before it can be released. When a bug is found, tests are created. </p></td><td style="padding-left: 7px; padding-right: 7px;"><p style="margin-left: 36pt;">9. Break rule 9. However, you could negotiate the test coverage. Is it really important to have 100% coverage?</p></td></tr></tbody></table></div><p><br /></p><h1>Wrap up<br /></h1><p>We have seen three processes in more detail, each described using simple principles that can guide you what to do and what not to. These processes have a some characteristics in common that makes every process valuable, even for a one-man project:<br /></p><ul><li>Adaptive: every process can be tailored, even if it's not made to be. You might start a holy war by changing the process, but if it works for you and your project it can't be a crappy process, can it? Some (parts of) processes can even be combined, like <a href="http://www.infoq.com/minibooks/scrum-xp-from-the-trenches">XP and Scrum</a>, or <a href="http://www.ibm.com/developerworks/rational/library/feb05/krebs/">Scrum and UP</a>.<br /></li><li>Agile: every process is iterative, some are incremental. Only when the customer refuses to participate in an agile process or when requirements are well known up-front and fixed during the whole project you could consider a more waterfall-like approach. Most of the graduation assignments are projects with lots of unknown factors, you risk failure when choosing a waterfall-approach.<br /></li><li>Quality: every process focuses on high-quality software, sometimes explicitly through defining the definition of done or by requiring a simple and/or visual design.<br /></li><li>Transparency: every process gives several stakeholders insight through velocity, issuetracking, backlogs, acceptancecriteria or –tests.<br /></li></ul><h1>References<br /></h1><div><table style="border-collapse: collapse;" border="0"><colgroup><col style="width: 92px;"><col style="width: 527px;"></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px;"><p>AMB09 </p></td><td style="padding-left: 7px; padding-right: 7px;"><p><a href="http://www.ambysoft.com/unifiedprocess/agileUP.html">http://www.ambysoft.com/unifiedprocess/agileUP.html</a><br /> </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>AMB09-1</p></td><td style="padding-left: 7px; padding-right: 7px;"><p><a href="http://www.enterpriseunifiedprocess.com/">http://www.enterpriseunifiedprocess.com/</a><br /> </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>AMB09-2 </p></td><td style="padding-left: 7px; padding-right: 7px;"><p><a href="http://www.agilemodeling.com/artifacts/sequenceDiagram.htm#Figure2ServiceLevel">http://www.agilemodeling.com/artifacts/sequenceDiagram.htm#Figure2ServiceLevel</a><br /> </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>DSDM10 </p></td><td style="padding-left: 7px; padding-right: 7px;"><p><a href="http://www.dsdm.org/knowledgebase/details/165/moscow-prioritisation-briefing-paper.html">http://www.dsdm.org/knowledgebase/details/165/moscow-prioritisation-briefing-paper.html</a><br /> </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>EEL05 </p></td><td style="padding-left: 7px; padding-right: 7px;"><p><a href="http://www.ibm.com/developerworks/rational/library/4706.html">http://www.ibm.com/developerworks/rational/library/4706.html</a><br /> </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>GUP08 </p></td><td style="padding-left: 7px; padding-right: 7px;"><p><a href="http://www.scrumalliance.org/articles/106-definition-of-done-a-reference">http://www.scrumalliance.org/articles/106-definition-of-done-a-reference</a><br /> </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>HAN10</p></td><td style="padding-left: 7px; padding-right: 7px;"><p><a href="http://www.han.nl/start-en/corporate/about-han/faculties/academy-ict/">http://www.han.nl/start-en/corporate/about-han/faculties/academy-ict/</a><br /> </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>HOO10 </p></td><td style="padding-left: 7px; padding-right: 7px;"><p><a href="http://www.accelerateddeliveryplatform.com/SmartUseCase.ashx">http://www.accelerateddeliveryplatform.com/SmartUseCase.ashx</a><br /> </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>LAR04 </p></td><td style="padding-left: 7px; padding-right: 7px;"><p>Apply UML and Patterns, Craig Larman, Prentice Hall, 2004. </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>ONEDOTO10</p></td><td style="padding-left: 7px; padding-right: 7px;"><p><a href="http://www.1dot0.com/dev_process.html">http://www.1dot0.com/dev_process.html</a></p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>OPENUP09 </p></td><td style="padding-left: 7px; padding-right: 7px;"><p><a href="http://epf.eclipse.org/wikis/openup/index.htm">http://epf.eclipse.org/wikis/openup/index.htm</a><br /> </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>SCR10 </p></td><td style="padding-left: 7px; padding-right: 7px;"><p><a href="http://en.wikipedia.org/wiki/Scrum_%28development%29">http://en.wikipedia.org/wiki/Scrum_(development)</a></p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>UP10 </p></td><td style="padding-left: 7px; padding-right: 7px;"><p><a href="http://en.wikipedia.org/wiki/Unified_Process">http://en.wikipedia.org/wiki/Unified_Process</a><br /> </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>WEL00 </p></td><td style="padding-left: 7px; padding-right: 7px;"><p><a href="http://www.extremeprogramming.org/map/project.html">http://www.extremeprogramming.org/map/project.html</a><br /> </p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px;"><p>WIK10 </p></td><td style="padding-left: 7px; padding-right: 7px;"><p><a href="http://wiki.icaprojecten.nl/display/PUBL/Scrum">http://wiki.icaprojecten.nl/display/PUBL/Scrum</a><br /> </p></td></tr></tbody></table></div><p><br /></p></span>Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-68076485973879995372010-02-21T22:04:00.004+01:002010-02-21T22:35:13.239+01:00Thinking of developing for the Hudson CIAt <a href="http://www.avisi.nl/">Avisi</a>, we started working with <a href="http://hudson-ci.org/">Hudson</a> some year ago and I must say, Hudson does the job well. Having a "real" monitor on our company fridge keeps all developers and non-developer eager to commit quality code.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZtHCRZJnT8zMWHpgeG-CWxx8WSJVZuYRLr2Dv5EOMHbSlSeZRvs3_ns8BD0hRBZQuKHomM_usUcl9LEsvJin6Dz3x0zX8vtGOI9MNQ-BQZadCV0M-IEBJjtAtMKc-3HG-TctK/s1600-h/hudsonbuildmonitor.jpg"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZtHCRZJnT8zMWHpgeG-CWxx8WSJVZuYRLr2Dv5EOMHbSlSeZRvs3_ns8BD0hRBZQuKHomM_usUcl9LEsvJin6Dz3x0zX8vtGOI9MNQ-BQZadCV0M-IEBJjtAtMKc-3HG-TctK/s320/hudsonbuildmonitor.jpg" alt="" id="BLOGGER_PHOTO_ID_5440812610005309810" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />For about half a year ago we had a student team from the <a href="http://www.han.nl/ica">HAN University</a> doing an <a href="http://wiki.icaprojecten.nl">internship</a> for 8 weeks, they developed a nice quality plugin (QSE) for Hudson, which - for now - is only used in our company. Lots of people have been developing plugins for Hudson, and we're using some of them (like the Checkstyle, PMD, Findbugs, Cobertura and Green Ball-plugin). One nice plugin is the Jira Plugin which is able to update Jira with comments that contain a link to the Hudson-build that built the code with the Jira-issue as check-in comment. As with every piece of software it does not work exactly as you thougt it would, this specific plugin adds comments publicly visible (so our customers see them). I think I'll join the developers and fix some <a href="http://issues.hudson-ci.org/browse/HUDSON-1489">issues</a>, gain profit for our company and commit it to the community.<br /><br />Wow, I guess this is my first open source project I am really "committed" to.Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-53415387171799452052009-10-23T22:10:00.007+02:002009-10-24T15:33:00.291+02:00SOA Symposium 2009 RevisitedRight. So far for making plans. After having visited enough conferences, I had to know that plans may still change just before the sessions start. Kind of like agile development I could have postponed some decisions to a later moment. For some stuff the YAGNI acronym counts.<br /><br />For starters, this edition was much better organized than the 2008 edition. Better sessions, better food, better facilities (Amsterdam Arena as soccer stadium is still questionable, but as a conference facility it really sucks, liked Rotterdam WTC much more).<br /><br />Some specific highlights of the sessions I visited:<br /><br />Stuart Boardman made a clear distinction between User Identity Context and Service Identity Context in his session about Identity in the Cloud. He also explained concepts like PEP, PDP and Claims Bases Access Control. Also native speaker so didn't take extra effort to understand, did also participate in the debate on Agile development of SOA.<br /><br />Clemens Utschig-Utschig brought some German friends who did not add anything viable to the session about Next Generation SOA. Gladly Clemens mentioned some clear solutions to problems like stale data and shaping data into events (EDA) and he endorsed my impression that he is a passionate presenter.<br /><br />In "an in depth session on Service Oriented Modeling and Architecture" the depth was a bit disappointing. Ali Arsanjani did a good presentation, however stayed too long at the global level of SOMA. I hoped to learn more about Service Identification but I wil surely take some time to take a peek at the SOMA, specificly the SOMA Agile Profile.<br /><br />Wondering how you can do a SAP-project on time, on budget and a happy customer? Sander Hoogendoorn and Twan van de Broek presented their experience with doing a SAP project in a agile way using smart use cases and a development process which mixes Scrum and Smart. Nice session, however not within time. Let's say that doing an agile SAP project is easier than doing an agile presentation.<br /><br />Thoughtworks is known to have splendid architects and engineers that can present in a authentic and attractive style. Ian Robinson opted in his session for a new way to identify and prioritize services measured by added business value. Finally a PowerPoint without bullets and a nice story about the distinction between what and how using stories, capabilities, services and contracts.<br /><br />After a good diner and a few beers with some of the EAD students, I had a good sleep (sleep late, hurray), breakfast and appeared reasonably fresh at the second day. I decided that I could use a wake-up call (actually not used to sleep late so I stated "reasonably" fresh) and visited Jim Webbers' session being "not a REST talk". Again a Thoughtworks representative with a loose style of presenting, I actually think Jim could succeed as a stand-up comedian as well, had a good laugh and learned a lot in little time. Good emphasis on high cohesion over loose coupling, the (not) need for an ESB, power of the web and French bridges.<br /><br />The effect of the wake-up call disappeared when visiting John Davadoss' talk about Software and Services. John talked about Monetization, Experience, Composition/Mashup, Federation and Delivery of Services, however his talk a bit looked like it was a Mashup of other peoples' ideas. Nevertheless, I liked the example that illustrated that services - when concentrating on what instead of how - do not necessary have to be used in an equal way by different user profiles. A manager might have to use Outlook/Exchange/AD because of required audit tracing, a production worker might be better satisfied with Gmail or Live Mail.<br /><br />Again a session by Ian Robinson illustrating the "power of the web" with a good old D&D game. Again no bullets, only images and codefragments that show the power of hypermedia. A bit disappointing was the fact that didn't mention how to define your own contracts using user defined hypermedia, but he got save by Jim Webber in the late session on "Hypermedia, the confusing bit in REST". Great humor, catchy example on Restbucks. Didn't expect too see pictures of Hillary Clinton here, her name has a much positive association for me now after attending Jim's talk.<br /><br />Between the 'Thoughtworks-talks' I did visit a session on Building .NET Services for Collaboration and Composition from Herbjorn Wilhelmsen. First session that shows some actual code. So far for being positive: non-inspired and non-persuasive speaker and a non-cohesive presentation.<br /><br />After all two great days with lots of new insight on software architecture, especially by the way Grady Booch performed a keynote session through SecondLife, really impressive (including the yawning caused by the difference in timezones :)). Let's see whether the organization can uphold or improve the quality of this 2009 edition.Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-50043459597739091682009-10-20T22:37:00.004+02:002009-10-23T22:10:28.167+02:00Plans for SOA Symposium 2009After a succesful SOA Symposium in 2008, I'll visit the 2009 edition next thursday and friday. I am thinking of visiting the following sessions:<br /><ul><li>"Identity In The Cloud" Speaker: Stuart Boardman (CGI) </li><li>"Cloud Computing and The Missing Trust Relationship" Speaker: Andor Demarteau (Capgemini) </li><li>"A Case Study: Combining Services, Events and Rules" Speaker: Art Ligthart and Michael Widjaja (Accenture) </li><li>"Mission impossible? Applying Agile to the World of SOA and ERP" Speaker: Sander Hoogendoorn, Capgemini and Twan van den Broek</li><li>"The Future's In Scope, But Where Do We Start?" Speaker: Ian Robinson (ThoughtWorks)</li><li>"This is Not a REST Talk" Speaker: Jim Webber (ThoughtWorks)<br /></li><li>How Smart Use Cases Drive Service-Oriented Projects" Speaker: Sander Hoogendoorn (Capgemini)</li><li>"Real-Life Use Cases of SOA Design Patterns at the Dutch Tax and Customs Administration" Speaker: Brian Lokhorst (Dutch Tax and Customs Administration) </li><li>"Introducing Transactions to REST" Speaker: Michael Musgrove (Red Hat)<br /></li><li>"Event-Driven SOA in a Dredging Environment" Speaker: Alexander den Hartog (Royal Boskalis Westminster N.V.) and Linda Terlouw (ICRIS) </li></ul>I will publish my findings around these sessions in a next blogpost, or follow me on <a href="http://twitter.com/rodmidde">twitter</a>.Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-10684972587873750222009-03-08T20:44:00.005+01:002009-03-09T23:04:15.372+01:00J-Spring here we come!Zojuist bericht gehad van de paper-commissie van de NL-JUG dat de inzending van Sander Hoogendoorn en mij is <a href="http://www.nljug.org/pages/events/content/jspring_2009/sessions/00018/">goedgekeurd</a>. Exacte details volgen nog, maar hieronder ons voorstel:<br /><br /><u>Titel </u><br />Pragmatic model driven development in Java with smart use cases and domain driven design<br /><br /><u>Naam / namen van de spreker(s)<br /></u>Sander Hoogendoorn, Principal Technology Officer Capgemini<br />Rody Middelkoop, Technical Evangelist Avisi<br /><br /><u>Korte omschrijving van de sessie (minimaal 100 woorden)<br /></u>Model driven development has a promise of high productivity. However, many approaches fail to deliver. Sander Hoogendoorn (Capgemini) and Rody Middelkoop (Avisi) will present a very pragmatic approach to model driven development, based on modeling smart use cases and domain models in UML. The speakers elaborate enthusiastically on this approach and the techniques used, and they will model and generate a fully deployable Java applications live on stage!<br /><br /><u>Niveau (beginner / intermediate / advanced)<br /></u>Intermediate<br /><br /><u>Track waarbinnen deze kan worden geplaatst (zie boven)<br /></u>This highly interactive session can be placed in the New & Cool, Methodology or Tools tracks.<br /><br /><u>Vereiste voorkennis</u><br />Although some knowledge around use cases, domain driven design and Java is preferable (for everyone), it is not required for this session.<br /><br /><u>Een structurele beschrijving van de opbouw van de presentatie<br /></u>In this unstable economy, organizations target software development at shorter time-to-market and high productivity. Model driven development has a promise of raising productivity in projects. However, many approach fail to deliver this promise. During this high-paced, interactive talk speakers Sander Hoogendoorn (Principal Technology Officer and agile thought leader at Capgemini) and Rody Middelkoop (Technical evangelist at Avisi, and lecturer at the Hogeschool Arnhem Nijmegen) share their very pragmatic approach to delivering software using model driven development. First, Sander will elaborate on the modeling and code generation approach, that relies on smart use cases and smart use case stereotype, a solid software architecture and domain driven design. Next, Rody will take the stage and demonstrate how this approach effects building Java web applications, generating a fully deployable Java EAR live on stage! Although other architectures and frameworks can be applied, Rody will use open source Java frameworks such as Ant, FreeMarker, Struts2, Spring and JPA/Hibernate3.Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-52971792487517880532009-03-04T11:07:00.004+01:002009-03-09T23:04:59.214+01:00Software AND ServiceLast February I represented Avisi at a SAAS conference in Zoetermeer. It went well and afterwards we were informed that the session was rewarded as one of the best presentations at the conference.<br /><br />Highlights of the presentation:<br /><ul><li>What is SaaS (tagcloud)</li><li>Why SaaS?</li><li>10 Questions to ask your SaaS-supplier?</li><li>Avisi's vision on SaaS: Software AND Service.</li></ul><p>If you want to re-experience the session please visit: <a href="http://www.slideshare.net/rodym/Saas-1059030">http://www.slideshare.net/rodym/Saas-1059030</a> and <a href="http://avisi.nl/pages/nieuws/avisi-kijkt-terug-op-een-succesvol-saas-congres.php">http://avisi.nl/pages/nieuws/avisi-kijkt-terug-op-een-succesvol-saas-congres.php</a>. Next station on the conference-trip is a session at the J-Spring 2009, I did a sessionproposal with Sander Hoogendoorn on <a href="http://sanderhoogendoorn.org/blog/?p=129">Pragmatic Model Driven Java Development</a>, let's hope we can do our presentation there. </p><p></p>Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-37324002703114010472009-02-10T19:57:00.006+01:002009-10-23T22:08:37.465+02:00Generating Java with Tobago MDAIn the past two years we have been investigating several alternatives to kick start our Java applications. Most important requirements for the kickstart-tools for use were:<br /><ul><li>Model based, we prefer UML</li><li>Adjustible and flexible stack so other frameworks can be applied</li><li>Code quality equal to our handwritten code quality</li><li>Based on Ant, rather than Maven2</li></ul><p>After having looked at JBoss Seam and AppFuse, we tried CapGemini’s Tobago MDA. The generator comes with a simple but powerful objectmodel and an easy to understand templating mechanism. Tobago is able to parse an UML XMI metamodel containing smart use cases and a UML class diagram containing business classes, value types and smart reference and applies our own templates (instead of the ADP templates for .NET projects) to the parsed metamodel.</p><p>In January 2009 we did present our own Java templates which took me about two months to develop. We applied these templates to two small business cases, and the results are promising: we can generate a fully deployable Java EAR using several open source Java frameworks like Ant, Freemarker, Struts2, Spring and JPA/Hibernate3. The templates implement several patterns from the ADP like the Smart Reference, Factories and Value Objects which are used in components like EJB3 business services and JPA business entities.<br /></p><br /><br /><p></p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiKvCR2EduDv-RZDBkinTDg8o8BsjC0Rs8hczJYMogFJJH5e_3wq3cAKYYgvAhyCvdDUNd07iZ508rkTYYXLRbveXkgiTMTxgBjHg1d5_eEy_jPn6QlDF-85REDmLwvBHoeTOJ/s1600-h/avisistack.JPG"><img id="BLOGGER_PHOTO_ID_5301246579662817858" style="width: 453px; height: 273px;" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiKvCR2EduDv-RZDBkinTDg8o8BsjC0Rs8hczJYMogFJJH5e_3wq3cAKYYgvAhyCvdDUNd07iZ508rkTYYXLRbveXkgiTMTxgBjHg1d5_eEy_jPn6QlDF-85REDmLwvBHoeTOJ/s400/avisistack.JPG" border="0" /></a><br /><br /><p><br />When you are interested in our progress, please keep up with the wiki <a href="http://wiki.trinidadplatform.org/GeneratingJava.ashx">http://wiki.trinidadplatform.org/GeneratingJava.ashx</a> or visit the Avisi website <a href="http://www.avisi.nl/">http://www.avisi.nl/</a>. </p>In reference to the previous post I can announce the I am working together with Sander Hoogendoorn on a proposal for several Java oriented conferences in the Benelux, so we can share our experience with other developers.Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-44149053842667369552008-11-12T23:43:00.006+01:002009-03-09T23:06:41.319+01:00JFall: "Elk nadeel hep zun voordeel"Although I promised myself to blog in English to train myself in using the language and to offer non-Dutch-speaking people to read the posts, I have no better way of expressing my feelings about the second NL-JUG conference this year, the fall edition, JFall. It isn't even proper Dutch, but it is based on a quote from Johan Cruijf who obviously was a better soccerplayer than he spoke Dutch. Let's say that 'every con has its pro'.<br /><br />Let's face the facts, we do have a lot of qualified Java developers in Holland. Lots of them were visiting the fall edition of the NL-JUG event and some of them were presenters for the sessions. Despite all the available ingredients for a nice conference day, I wasn't all that great for me.<br /><br />Con: Most sessions were to basic or to badly presented (I'll make an exception for Jeroen Benckhuijsen)<br />Pro: I'm thinking of being one of the speakers for the next conference to show that I can do better. I have about half a year to think about a nice subject which I do like myself.<br /><br />Con: The number of attendants is maximized on 1000, which means that 't Spant is quiet busy when changing sessions or having lunch.<br />Pro: I see a recurring group of attendants which makes the conference a nice social event to meet with former colleages and potential partners for one of my employers. Also I have to thank the NLJUG-board for inviting 70 HAN students to the conference.<br /><br />Con: The conference aimed to much at JavaFXScript and Flex.<br />Pro: Adobe brought nice goodies and some 'representative' people (I say one word: nurse) with good communication skills, my kids are happy with the little duckies that can be used in the bathtub.<br /><br />Conclusion: you can whine and be a pessimist, one can see chances and improve and be an optimist. For now I am optimist, hoping that the next conferences will have less cons and more pros.Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-31393786179630927932008-10-21T19:03:00.013+02:002009-03-09T23:03:34.350+01:00Model driven development of Java Web ApplicationAt Avisi, I have been experimenting with the development of Java webapplications based on UML. UML in, deployable Java app out. With thanks to the Advanced Develivery Platform (ADP) of CapGemini, we are allowed to use Tobago MDA, a tool which enabled model driven developement. Tobago takes an XMI 1.1 compliant UML model (smart use cases and a domain model) and builds an internal object-tree on which you can run several templates to generate all kinds of files.<br /><br /><div><div><div><div><div><div><div>For the last two weeks I have been developing templates for Tobago which enables the generation of a Java webapplication based on the stack we use at Avisi: Freemarker, Sitemesh, Struts2, Spring, JPA Entities en JBoss appserver. We use a standard Ant build.xml, standard Eclipse-project (which by the way can be generated too) and some standard markup templates for Freemarker/Sitemesh. </div><ol><li>Create a UML-project in Enterprise Architect and model smart use cases and a domain model. No platformspecific types are used, these are mapped within the templates.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9v32Y9KFzKwJ_OqnvMQlzMc4RBVCvK-sA2sRovZwxaoalq6Cf2N6kHhoWILVIlEcLS6i9WhriM8mnbPYiIfIs2Zk0k22L6BX-t5HATODCnEBAN3TJFHtMwSdxn7YrrW_2VQ8g/s1600-h/hrvisi-ucdiagram.jpg"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr1Izj7EZXyvbY1t44QYn0z3DEHdbBtj_34vZwHQPR_xu9uWpn3c2sSKDmcELIKv7daVhzrJ7Kh2ZsRaMjfJVAiWC_Cp3EFXF5Ev_hAt4HmOLSwSlbNxSiIW5VmS-vOPQvkSTY/s1600-h/hrvisi-ucdiagram.jpg"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZTAA9Hd1KRJ6McasFjnbiGNQxK5uLlHM5Rwe2Yvxa_lIbi53hWpHoTCZLgFmKJJhIxaR8l-NHCJBMQKRBWweIYc6JWb3qtIgPHjoB7EYMgVXc_qtbtMq_Cxfpfi04973cryPI/s1600-h/hrvisi-ucdiagram-medewerker.jpg"><img id="BLOGGER_PHOTO_ID_5261075508090473250" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 213px" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZTAA9Hd1KRJ6McasFjnbiGNQxK5uLlHM5Rwe2Yvxa_lIbi53hWpHoTCZLgFmKJJhIxaR8l-NHCJBMQKRBWweIYc6JWb3qtIgPHjoB7EYMgVXc_qtbtMq_Cxfpfi04973cryPI/s400/hrvisi-ucdiagram-medewerker.jpg" border="0" /></a><br /></li><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAuutcP1akYoDyIymOPCbVn2wUrggkVOnjnPQDgtIQoGBbklbtlUk_UdO_P747JvNVq-VFi55MnI6Yceb5_7LIruqplSlBfuBXC8lfaCpjisIBw2GgxoZtn7wZGn1u9SSI7eJS/s1600-h/hrvisi-clsdiagram.jpg"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVS0J8LgEb2zlAkEZqQGFGahy_Mp75V8KvtDwimu6-uhd_gl5fVxBK1HBYPsfqlddNS7Dz3HRMrqkC85_hN7MoL7SF2swl4G08-GO8ra1L4P3kQIQvNqo-Uctw9dt9uKW5FkOj/s1600-h/hrvisi-clsdiagram.jpg"><img id="BLOGGER_PHOTO_ID_5261075727355630146" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 310px" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVS0J8LgEb2zlAkEZqQGFGahy_Mp75V8KvtDwimu6-uhd_gl5fVxBK1HBYPsfqlddNS7Dz3HRMrqkC85_hN7MoL7SF2swl4G08-GO8ra1L4P3kQIQvNqo-Uctw9dt9uKW5FkOj/s400/hrvisi-clsdiagram.jpg" border="0" /></a><br /><br /><li>Export the UML project as XMI</li><li>Create/Generate an Eclipse project with empty folders/packages and predefined build.xml and markup-templates for Freemarker/Sitemesh decoration.</li><li>Import the XMI-file into Tobago MDA</li><li>Generate sources using Tobago templates for Freemarker pages, Struts2 Action classes, Spring applicationContext.xml, EJB3 Stateless Session Beans for Services/DAO and JPA Entities.<br /><br /><span style="font-family:courier new;">package nl.$Class.Model.Name.Lower$.dao;<br /><br />import javax.ejb.Local;<br />import nl.$Class.Model.Name.Lower$.model.$Class.Name$;<br />import java.util.List;<br /><br />@Local<br />public interface $Class.Name$Dao {<br /></span><span style="font-family:courier new;">void create($Class.Name$ $Class.Name.Lower$);<br />void save($Class.Name$ $Class.Name.Lower$);<br />void remove($Class.Name$ $Class.Name.Lower$);<br />void remove(Long id);<br />$Class.Name$ find(Long id);<br />List<$Class.Name$> findByName(String name);<br />List<$Class.Name$> findAll();<br />}</span><br /></li><li>Run build.xml</li><li>Deploy war on JBoss 4. </li></ol><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR4es57U_hyphenhyphenLE02WtTsQg0xqecfsRH9EPdET0AGOqZUtfaq90UOq8IjrjjXY6GlO8_5EMvCLxmXzp0354_FmVWMzABp35m3exwK4zSpGbA7DCZKE1ukDiVmha5MDEPJizjwYZO/s1600-h/hrvisi-screenshot.jpg"><img id="BLOGGER_PHOTO_ID_5259698008996139554" style="CURSOR: hand" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR4es57U_hyphenhyphenLE02WtTsQg0xqecfsRH9EPdET0AGOqZUtfaq90UOq8IjrjjXY6GlO8_5EMvCLxmXzp0354_FmVWMzABp35m3exwK4zSpGbA7DCZKE1ukDiVmha5MDEPJizjwYZO/s400/hrvisi-screenshot.jpg" border="0" /></a><br /><br /><br /><div></div><br /><br /><br /><div></div><br /><br /><br /><div>In the first phase (which I've just completed) we are able to generate CRUD-functionality, in the next phases we are implementing security, validation (using Value Types and Smart References) and master-detail relations. The last thing we want to investigate is the possibility to support process-oriented design (like flowcharts) using activity- or state-chart diagrams. For now we are happy with the results, which in the future will possibly presented in some other blogs, seminars or conferences. </div></div></div></div></div></div></div>Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-68270103548550576192008-10-08T21:44:00.003+02:002008-10-09T13:01:21.361+02:00Two days of SOA stuffAs I announced recently we (lecturers and students) were going to visit the first SOA Symposium held at the Amsterdam Arena Conference Centre. Today was the last day, so play time is over and back to school again.<br /><br />Before I move from listening state to talking state again, I want to share my impressions. Let me first start with the conference location. Besides the FC is not my favourite one, the location is not suitable at all as a conference location because of the conferencerooms in which - in most cases - I missed major parts of the powerpoint slides. Only when you were seated at the front or second row, you had a clear view.<br /><br />Now the content of the conference. In order of viewing:<br /><br /><em>Thomas Erl: The Architecture of Service Orientation</em><br />Apparently a man with lots of experience, but talks as he writes. Uses to much words to make a point and a boring (sorry) speaker. The session however learned me that service have to be stateless not because they have to be stateless but because of scalability, also he made a good point on how much detail you have to put into your service contract: detailed service contracts (e.g. XSDs) offer tighter service descriptions (interfaces), the downside is that more changes on the service are expected which leads among others to versioning. Visited the session because we use one of his books, we might consider using books that are more to the point. <br /><br /><em>Radovan Janecek: The criteria for the decision, REST, SOAP or both</em><br />I always have trouble understanding not native speakers, so I had a hard time this session. Radovan spoke about several criteria which you can use to determine which strategy to use to implement webservices. Key considerations were requirements, scalability, legacy and organization (time, budget) and to my surprise "REST wins!". First of all the speaker claimed to not have any competition, second if you do any way of competition you have to issue the right arguments and use correct examples, which in my opinion were not used. Questions were handled not that gracefully and often not assessed well. Despite these issues, I learned that the comparison as indicated in the title is like comparing apples to oranges, also indicated by the speaker. It's better to not compare REST to SOAP, but you can compare REST ws. WSDL, URIs vs. parameterized operations, uniform vs. arbitrary interfaces or as I quote "simple mechanism and hard to build vs. complex mechanism and easy to build".<br /><br /><em>Umit Yalcinalp: Enterprise Mashups with SOA</em><br />A lot of talking and lots of words on lots of slides. In a nutshell: the reintroduction of fat and rich (also called 'fit') clients enables composite services on the client and on the server. Client services are more datacentric, serverside services are more businessprocess-like. You need publish-subscribe models which introduces a mini-ESB on the client, implemented with mostly Javascript libraries. You also need policies which made me think how WS-Policy relate to composing services on the client. The session ended with an example, which to my opinion had to be on the first slide.<br /><br /><em>Jim Webber: Starbucks Example</em><br />On of the best speakers at the conference, together with Mark Little from Redhat. Highly motivated, funny, well informed, a bit arrogant and being able to inform me with good examples about his journey throught web service standards, falling in love and web abuse. Jim showed me how you can be sure you get <a href="http://www.infoq.com/articles/webber-rest-workflow">bad coffee</a> for to much money using a resource based state machine using links and microformats. Further, he managed to clarify the principles of REST/HTTP without using the term REST, nice.<br /><br /><em>Toufic Boubez: The future of SOA Security</em><br />Let me first recall the fact that we attended the conference with 14 bachelor ICT student, who are almost graduated. Most of them have not learned the PPK-principles of cryptograpy. Toufic managed to push loads of information about the weaknesses of WS-Security (we are going to cover that in the next course) and strengths of specifications like SAML, WS-Policy and WS-Trust. I learned from this session that having services connect to each other using different ways of transport (HTTP, SMTP, JMS), the security cannot be in the transportprotocol, but has to be in the message. Also you need to decouple security from the service consumer and provider using a kind of mixing board (analogy to monolithic audio devices and loosely connected components like the tuner and cd player that can be of a different brand communicating with each other using standardized media and protocols). Toufic referred to the mixing board as Policy Enforcement Points (PEPs) which can sit on the side of the consumer and provider liks stubs or proxies. Heavy session for me, most of the students got blown away I guess.<br /><br /><em>Mark Little: Web Services and Transactions</em><br />I recently saw Mark speak at the <a href="http://www.infoq.com/articles/webber-rest-workflow">CapGemini Java Night</a> and he impressed me by his detailed knowledge on distributed systems and his way of speaking. This session was all about how to relax the parts of the ACID acronym, Atomicity, Consistency, Isolation and Durability. The analogy used to explain two-phase commit (2PC) couldn't be better chosen by referring to the marriage procedure: brooms says yes, bride says yes, priest says you're married now. It's about first stating that you want to commit and later actually get committed by a coordinator. Mark explained the role of the coordinator in the standards Atomic Transactions (AT), Business Activity (BA) and Coordination. I learned from this session that ACID transaction only work on closely coupled environments and short duration activities, which are in most cases not the preconditions for a web service transaction. As a result, you must be able to commit early and define compensation activities.<br /><br />I also went to other sessions but they're not worth blogging about it. As multiple students asked me: why is the school bugging us with presentation skills when several people on this conference are presenting even worse by staring at the floor and serving powerpoints? Well, let's say that being smart and experienced does not automatically make one a great speaker. Most students can present well enough, but about what? :)Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-65162143621477048102008-09-15T20:21:00.003+02:002008-09-15T21:00:49.619+02:00SOA Symposium 2008On October 7/8 I am going to visit the <a href="http://www.soasymposium.com/">SOA Symposium </a>in Amsterdam, together with a group of students who attend the minor Enterprise Application Development (EAD). This minor is part of a bachelor study on Computer Science at the <a href="http://www.han.nl/ica">HAN University </a>and focuses on state-of-the-art (or maybe 'avant la lettre'?) integration and software-architecture issues like service oriented architectures, SOAP and REST webservices, object relational mapping, messaging/queueing and ESB.<br /><br />Comments and feedback about the symposium will be added to this blog, students will write about their experiences on the confluence-website from EAD: <a href="http://wiki.icaprojecten.nl/display/EADPUBL/Home">http://wiki.icaprojecten.nl/display/EADPUBL/Home</a>.Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-88844161202098624812008-09-09T21:30:00.003+02:002008-09-09T21:45:14.293+02:00More on quality and auditingAs a consultant 'devoted' to delivering high quality work, we (Avisi) are developing a model on auditing software quality. We intend to develop several levels of detail in which we can audit <em>software</em> or a <em>project developing software</em>. It's fun to see that how more detail is brought into the audit, the more interpretable the results are: it's easier to fill in a yes/no checklist which results in a mark then to audit software on a code level. What's good quality code anyway?<br /><br />The first thing I am trying to do in the next two months is to set up a checklist which has low code detail and focuses on learning from mistakes from the past made in choosing the development process, defining scope (requirements and financial), etc..<br /><br />Does the project run for more than one year?<br />Is the project estimated on more than €100K? <br />Isn't there a SAD available?<br />Does the project concern more than one or two handsful of developers?<br /><strong>That's a minus!</strong><br /><br />If you have any comments, recommendations or questions, feel free to <a href="mailto:r.r.middelkoop@avisi.nl">e-mail</a> me or comment this blog!Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-27954241237242799932008-08-21T11:37:00.004+02:002008-08-21T12:10:30.685+02:00"Crossing the Hudson river"Sinds ik begonnen ben bij Avisi heb ik als belangrijkste taak het verhogen van de kwaliteit van de software en het softwareontwikkelproces. Na het introduceren van enkele qualitychecks op de software middels PMD, Checkstyle, Cobertura, FindBugs en JavaNCSS en in het inbouwen van deze checks in onze manual builds, was het vandaag tijd om ons buildproces te automatiseren.<br /><br />Nadat we al eerder CruiseControl hadden is er nu gekozen voor Hudson voor nightly en continuous builds. In een later stadium zal ik wat meer details uit de doeken doen, vooralsnog ben ik blij met de foto: een echte buildmonitor waarop iedereen de status van onze lopende projecten kan zien en de betrokken developers notificaties krijgen.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzftr6HTtrm0LJg5FM5q7g6nH9hSSz_8ETK_JqDl7Z01XprSabIkpGjHJ4bbQoM1tFY1ALOqtYmHJLPPHN00LSmXdMEhgwzIW0d62jiyD16mDqm4tj5dNtecFw2b-M2DekON8i/s1600-h/hudsonbuildmonitor.jpg"><img id="BLOGGER_PHOTO_ID_5236910731379408994" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzftr6HTtrm0LJg5FM5q7g6nH9hSSz_8ETK_JqDl7Z01XprSabIkpGjHJ4bbQoM1tFY1ALOqtYmHJLPPHN00LSmXdMEhgwzIW0d62jiyD16mDqm4tj5dNtecFw2b-M2DekON8i/s320/hudsonbuildmonitor.jpg" border="0" /></a>Verder zijn we blij met de grafische elementen van Hudson waarin we o.a. het verloop van de SLOC en de andere kwaliteitsattributen zien.<br /><br />Later zal ik nog een post wagen aan een custom Ant-task die ik geschreven heb die alle verschillende kwaliteitsmetrieken in een formule gooit, waar een eindcijfer tussen 0 en 10 uit komt. We zijn druk doende om alleen software te releasen die minimaal een 7 haalt, alle cijfers hieronder breken de build.Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-92096606551868125772008-06-10T20:25:00.002+02:002008-06-10T20:51:25.920+02:00Spring Webservices in NetBeansVoor een nieuwe minor Enterprise Application Development ben ik bezig met het uitzoeken hoe Spring Webservices werkt. Vanwege de handig archetypes is Maven-support in een IDE wel praktisch dus mijn keuze viel op NetBeans. Nu heeft NetBeans standaard wel Spring 'support' maar geen wizards voor Spring WebServices. Iets wat een beetje helpt is de New Project-wizard voor Maven. Wil je meerdere Spring Webservices Projecten maken maak dan een Custom Archetype:<br /><ul><li>Kies voor New Project->Maven, Maven Project</li><li>Kies voor Add en kies voor<br /></li><ul><li>groupId: org.springframework.ws</li><li>artifactId: spring-ws-archetype</li><li>version: 1.5.0</li></ul><li>Finish</li></ul>Je kunt ook je de Mevenide plugin van Maven voor NetBeans volledig updaten, je krijgt dan alle archetypes die beschikbaar zijn in de remote repositories, de eerste keer is dit enorm langzaam, daarna heb je er vol profijt van!Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-64495001972340190562008-03-20T11:32:00.001+01:002008-03-20T11:33:43.903+01:00Managers vs Engineers...Gezien in een nieuwsbrief die ik ontving:<br /><br />A man in a hot air balloon realised he was lost. He reduced altitude and spotted a woman below. He descended a bit more and shouted, "Excuse me, can you help me? I promised a friend I would meet him an hour ago, but I don't know where I am."<br /><br />The woman below replied, "You're in a hot air balloon hovering approximately 30 feet above the ground. You're between 40 and 41 degrees north latitude and between 59 and 60 degrees west longitude." "You must be an engineer," said the balloonist. "I am," replied the woman, "How did you know?" "Well," answered the balloonist, "everything you told me is technically correct, but I've no idea what to make of your information, and the fact is I'm still lost. Frankly, you've not been much help at all. If anything, you've delayed my trip."<br /><br />The woman below responded, "You must be in Management." "I am," replied the balloonist, "but how did you know?" "Well," said the woman, "you don't know where you are or where you're going. You have risen to where you are due to a large quantity of hot air. You made a promise, which you've no idea how to keep, and you expect people beneath you to solve your problems. The fact is you are in exactly the same position you were in before we met, but now, somehow, it's my fault."Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-38746922692771127322008-03-19T12:39:00.004+01:002008-03-19T12:48:54.831+01:00java.lang.IllegalAccessError: tried to access method org.apache.tools.ant.launch.Locator.decodeUrijava.lang.IllegalAccessError: tried to access method org.apache.tools.ant.launch.Locator.decodeUri(Ljava/lang/String;)Ljava/lang/String; from class<br />org.apache.tools.ant.AntClassLoader<br /><br />Deze foutmelding leverde eclipse mij op na het runnen van een ant-taakje. Dezelfde build-file deed het prima vanaf de command-line maar niet vanuit de IDE. Na lang zoeken bleek er eem mix te zijn tussen jars van verschillende ant versies (in mijn geval 1.6 en 1.7).<br />Oplossing: zorg voor compatibele ant jars. Mijn ant.jar bleek 1.7 te zijn, de rest 1.6, resultaat: IllegalAccessError.Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-44030114211053683462008-03-17T22:26:00.002+01:002008-03-17T22:29:19.794+01:00Java Programming PuzzlesAangestoken door een collega van <a href="http://www.avisi.nl/">Avisi </a>zit ik in mijn spaarzame vrije tijd programmeerpuzzeltjes te maken op <a href="http://www.javabat.com/">http://www.javabat.com/</a>. Mijn vorderingen zijn te volgen op <a href="http://www.javabat.com/done?user=rody.middelkoop@han.nl&tag=706724411">http://www.javabat.com/done?user=rody.middelkoop@han.nl&tag=706724411</a>. Ik doe mijn best :)<br /><br />Ook handig voor solicitatiegesprekken, assessments en tech-days!Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-4408987515264087662008-02-20T10:31:00.002+01:002008-02-20T10:35:59.509+01:00Cobertura: java.lang.IllegalArgumentException: Unknown attribute type SignatureWanneer je Cobertura gebruikt icm. JUnit en Ant kan het voorkomen dat Cobertura warnings geeft over java.lang.IllegalArgumentException: Unknown attribute type, bij kwamen types voor als Signature en RuntimeVisibleAnnotations. <br /><br />Cobertura gebruikt ASM voor bytescodeweaving, in het product waar we cobertura voor codecoverage gebruiken wordt een andere versie van ASM gebruikt, deze staat vooraan in het classpath. <br /><br />Oplossing: gebruik alleen de met Cobertura meegeleverde asm-versie en/of zet een oudere versie van ASM achteraan in het classpath.Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-50883465214935730892008-02-20T09:46:00.007+01:002008-02-20T10:08:10.321+01:00java.lang.NoClassDefFoundError: net/sourceforge/cobertura/coveragedata/HasBeenInstrumentedIk was aan de slag met een ant build file waarbij junit en cobertura gebruikt worden:<br /><br /><target description="Run JUnit tests" depends="compile" name="test"><br /><mkdir dir="${dir.report}"><br /><mkdir dir="${dir.junit}"><br /><junit showoutput="yes" printsummary="yes" haltonfailure="no"><br /><sysproperty file="${dir.cobertura}/cobertura.ser" key="net.sourceforge.cobertura.datafile"><br /><classpath><br /><pathelement location="${dir.instrumented}"><br /><pathelement location="${dir.build}"><br /><pathelement location="${tmp.dir.classes}"><br /><pathelement path="${java.class.path}"><br /></classpath><br /><formatter type="xml"><br /><batchtest todir="${dir.report}/junit"><br /><fileset dir="${tmp.dir.classes}"><br /><include name="**/*Test.class"><br /></fileset><br /></batchtest><br /></junit><br /><junitreport todir="${dir.report}/junit"><br /><fileset dir="${dir.report}/junit"><br /><include name="TEST-*.xml"><br /></fileset><br /><report todir="${dir.junit}" format="frames"><br /></report><br /></junitreport><br /></target><br /><br />Effect: verschillende NoClassDefFoundErrors in de junit-reports als ik de ant task run vanuit Eclipse, maar ook vanaf de command-line. De unittest draaien via de JUnittest wizard gaat prima.<br /><br />Oplossing: Ant gebruikt de ant-junit-task om unittests uit voeren en voor 1.6.* wordt het boot-classpath genegeerd. Alle classes die de task dus nodig hebt moet je in geval van ant command line in de ANT_HOME/lib folder zetten, voor Eclipse moet je dezelfe classes toevoegen via Preferences->Ant->Runtime.Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.comtag:blogger.com,1999:blog-33881329.post-30902436403949185362007-12-28T14:39:00.001+01:002007-12-28T14:49:11.521+01:00Verandering van spijs... doet eten zeggen ze. Vanaf 1 januari zal ik op parttime basis in dienst treden van <a href="http://www.avisi.nl">Avisi</a> als consultant met verschillende aandachtsgebieden: software kwaliteit, softwareprocesmodellen, architectuur en software generatie. Een van de meest concrete klussen is onderzoeken of de <a href="http://www.nl.capgemini.com/samenwerking/tools/trinidad/">Tobago MDA tool</a> van CapGemini gepoort kan worden naar een J2EE oplossing met een passende referentiearchitectuur. Toboga maakt tot op heden gebruik van .NET en een of tasks, factories en entities gebaseerde referentiearchitectuur, ik zal gaan kijken of we iets dergelijks kunnen doen met bijvoorbeeld Struts2, Spring, JPA en bijpassende helper classes en interfaces. De eerste stappen zijn al gedaan door Maarten Zaagman en het LARK Projectteam van de <a href="http://www.han.nl/ica">Hogeschool van Arnhem en Nijmegen</a> die de frameworks toepassen voor de herbouw van een HR-pakket van Avisi.Anonymoushttp://www.blogger.com/profile/02275956559376000123noreply@blogger.com