it's the end of the year, an absolutely fantastic one, which in my case it's been focused on learning, especially with others.
I started the year attending more local meetups than ever, and it has proved a fantastic source of experience and learnings. I have enjoyed very much the local Irish and Dublin groups, and all the other stuff we have organised such as hacking evenings and code retreats.
Probably the most intense experience of the year were the code retreats. Participating, organising, or facilitating, it's an experience that I wouldn't let pass you given a chance if you have not experienced it yet.
I also have to mention the great time I had attending the TDD courses in Madrid for XPWeek. Carlos is a fantastic coach and the courses were really enjoyable.
It has also been a great year 'online' with all the projects we've done with Open Wonderland, and I'm hoping to have more time for it in the new year.
The most important event of the year, personally, was leaving work a couple of weeks ago. After four fantastic years working for TCD I have decided to take a break, focus on my PhD for a couple of months, and see what life has in store for me after that.
Hope you all have a fantastic 2012!
Showing posts with label craftsmanship. Show all posts
Showing posts with label craftsmanship. Show all posts
Saturday, December 31, 2011
Thursday, May 19, 2011
Mutant-Java and the KataLonja
Another month and another Kata with the 12meses12katas crowd. This time the kata is in Spanish, and it was created by the agilismo.es guys for the professional track of XGN2011. If anyone needs/wants a translation, do get in touch and I'll produce one. You can find the original version in github: KataLonja.
The Kata is about a Galician chap who wants to make some money by selling Scalops, Octopus, and Spider Crabs in a hired van. We are given a series of prices that markets in different cities will pay for the goods, alongside with distances, transport costs, and depreciation rates for the food, and we need to provide the most interesting route to get a best sale for our intrepid entrepreneur.
As a Galician immigrant myself, this is the simplest kata ever: I would drive the van right into my garage and the goods straight into my fridge; as easy as that!
Sadly this is not going to happen so let's get back to the kata. I'm certainly nowhere near finishing it, I only gave it a first go last night before bed but some cool stuff is already coming up out of it.
As I mentioned in a previous post, I use Katas to refresh some concepts that I haven't seen in a while, or that although I might use them in my day job, I've never gone deeper at them than the old getting the job done.
Last month I choose JavaScript for the bowling kata, and because I started way too late (the last day of the month!), that was the only implementation that I practised on the day. I will try and get this one practised in both Java and JavaScript, starting with the former.
Java has no associative arrays and it's generally accepted that you will use Maps instead. Maps can be very straight forward if you are using an immutable object as the key for your pair, but can get tricky if you decide to use your own class. So that's exactly what I did. It might not be the best fit for the problem at hand, or yield the leaner and cleaner code possible, but no one will have to maintain this code and it's going to be thrown away anyway so better have a bit of fun with it!
So I have created an immutable class for Seafood that I will be using as a key for at least two maps I'm using in other classes. That means overriding equals() and hashcode(), and being careful with state and escaping references to this. But as I said above, the code is nowhere near written, so what's the point of the post you will be asking yourself? I just wanted to share 3 links that have been helpful in digging a bit deeper in the adventure so far. They are:
In them you will find good advice on stuff such as when to create immutable classes and how, uses of immutability including the flyweight pattern, overriding equals() and hashcode(), and a great discussion on how to keep the equals() contract on extended classes, adapted from the book Programming in Scala into Java.
I will be digging a bit more, hopefully in the next couple of days, in topics such as choosing the right map implementation and a couple more things that I want to try (I'd like to write my cucumber step definitions in Ruby instead of Java but I'm not sure I can do that, so will have to find out!).
I also intend to write another post if I ever get to practise the Kata in JavaScript. Comparing both implementations would be cool so let's hope for that!
The Kata is about a Galician chap who wants to make some money by selling Scalops, Octopus, and Spider Crabs in a hired van. We are given a series of prices that markets in different cities will pay for the goods, alongside with distances, transport costs, and depreciation rates for the food, and we need to provide the most interesting route to get a best sale for our intrepid entrepreneur.
As a Galician immigrant myself, this is the simplest kata ever: I would drive the van right into my garage and the goods straight into my fridge; as easy as that!
Sadly this is not going to happen so let's get back to the kata. I'm certainly nowhere near finishing it, I only gave it a first go last night before bed but some cool stuff is already coming up out of it.
As I mentioned in a previous post, I use Katas to refresh some concepts that I haven't seen in a while, or that although I might use them in my day job, I've never gone deeper at them than the old getting the job done.
Last month I choose JavaScript for the bowling kata, and because I started way too late (the last day of the month!), that was the only implementation that I practised on the day. I will try and get this one practised in both Java and JavaScript, starting with the former.
Java has no associative arrays and it's generally accepted that you will use Maps instead. Maps can be very straight forward if you are using an immutable object as the key for your pair, but can get tricky if you decide to use your own class. So that's exactly what I did. It might not be the best fit for the problem at hand, or yield the leaner and cleaner code possible, but no one will have to maintain this code and it's going to be thrown away anyway so better have a bit of fun with it!
So I have created an immutable class for Seafood that I will be using as a key for at least two maps I'm using in other classes. That means overriding equals() and hashcode(), and being careful with state and escaping references to this. But as I said above, the code is nowhere near written, so what's the point of the post you will be asking yourself? I just wanted to share 3 links that have been helpful in digging a bit deeper in the adventure so far. They are:
In them you will find good advice on stuff such as when to create immutable classes and how, uses of immutability including the flyweight pattern, overriding equals() and hashcode(), and a great discussion on how to keep the equals() contract on extended classes, adapted from the book Programming in Scala into Java.
I will be digging a bit more, hopefully in the next couple of days, in topics such as choosing the right map implementation and a couple more things that I want to try (I'd like to write my cucumber step definitions in Ruby instead of Java but I'm not sure I can do that, so will have to find out!).
I also intend to write another post if I ever get to practise the Kata in JavaScript. Comparing both implementations would be cool so let's hope for that!
Friday, January 14, 2011
Open Wonderland Development Course at P2PU
I am organising an 'Open Wonderland Development course' at P2PU. This is a course that follows a peer to peer approach, it is all community based, and totally free.
About P2PU
The Peer to Peer University is a bit different. All work is done through p2p collaboration. Courses generally run for 6 weeks (next batch starting on the 26th of January 2011). You do not need to be an expert to organise a course, mainly because of the fact that you will be a facilitator, as opposed to a teacher/lecturer. All you need is a collection of open accessible resources to run a course (you can also create your own).
I think this model fits perfectly the software profession, if you compare it with the individualised approaches of any 'normal' university. You will not get a degree after finishing a course, but you might get much more out of it...
About Open Wonderland
Open Wonderland is a toolkit to create virtual worlds. It is 100% Java, it has a relatively small core, but its extensibility through 'wonderland modules' makes of it a platform to do pretty much whatever you want within the 3D environment. Out of the box you can share X11 apps within the world (Open office, Chrome, Eclipse, or freemind work pretty well), communicate through text, voice, or even the telephone, and drag and drop all kinds of digital materials such as pdf files, images, etc.
You can also write your own modules. One of the available modules is an scripting engine based on "JSR 223: Scripting for the Java platform". Using this module you can script objects inside the virtual world using any language supported by the specification (Javascript, PHP, Ruby, and so on).
The project was initially born at Sun Microsystems in 2007, but support from Sun/Oracle stopped earlier last year(2010). It was an open source project from inception and although most people envisioned its death after Oracle laid off the team, it has been quite a different story since then. The community has taken control of the project through the creation of the Open Wonderland Foundation (non-profit), and all kinds of meetings inworld have been happening ever since. All Wednesdays at 1pm (EST) there are development meetings in which the community share an instance of Netbeans and hack on code as a group (every avatar can take control of the instance and start driving).
I do have to say that things are going a lot slower, no doubt of that, but there are more users now than ever before, and development continues at a steady pace.
Motivation
So, why am I doing this, what's in it for me? The experience really. I was not part of the initial wonderland team and my association has not been other than as a volunteer in the community for the last few months. I thought this would be a good way to give back to the community.
I am also a researcher in IT in Education, and this is just a way for me to experiment with ideas, mostly taken from Software Craftsmanship.
I see a few different ways that learning can be organised around the wonderland system (apart from development work which will also be covered).
Although it is a fairly big system (with a small core), test automation is almost inexistent. One of my goals would be to start inspecting the system by testing it from within, and see where that leads us. There is a test harness in place, but it hasn't been used much and it would be great to inspect that too.
Another course for experimenting is the building system. Ant scripts exist for the system but dependency management is not explicit. The build is also way too dependent on netbeans.
These are two scenarios that people are quite likely to find in their everyday job. So, what's in it for you? Well, the experience really! :)
Some people might find attractive the fact that some out of the office learning can being organised (to a point) by someone else. I say 'to a point' because, as mentioned earlier, this is a peer to peer experience, I am not an expert, and learning is ultimately the responsibility of the participants themselves.
This is a 'distance learning experience', and I do not expect people meeting face to face, but I do expect meetings avatar to avatar. It is definitely not the same (nowhere near!) but in my opinion is the closest experience to the real thing that I've had so far.
In a nutshell
So, as a summary, if you are interested in learning through technology, be it software development, testing automation, scm, and so on, and you want to do it within an existing system, and more importantly, in a collaboratively, community-based way, please have a look at the course.
Link to the course: http://www.p2pu.org/general/open-wonderland-development-java
Dates: starting on January the 26th (2011)
Pre-requisites: Please read through the sign-up task (main page of the course) before applying.
About P2PU
The Peer to Peer University is a bit different. All work is done through p2p collaboration. Courses generally run for 6 weeks (next batch starting on the 26th of January 2011). You do not need to be an expert to organise a course, mainly because of the fact that you will be a facilitator, as opposed to a teacher/lecturer. All you need is a collection of open accessible resources to run a course (you can also create your own).
I think this model fits perfectly the software profession, if you compare it with the individualised approaches of any 'normal' university. You will not get a degree after finishing a course, but you might get much more out of it...
About Open Wonderland
Open Wonderland is a toolkit to create virtual worlds. It is 100% Java, it has a relatively small core, but its extensibility through 'wonderland modules' makes of it a platform to do pretty much whatever you want within the 3D environment. Out of the box you can share X11 apps within the world (Open office, Chrome, Eclipse, or freemind work pretty well), communicate through text, voice, or even the telephone, and drag and drop all kinds of digital materials such as pdf files, images, etc.
You can also write your own modules. One of the available modules is an scripting engine based on "JSR 223: Scripting for the Java platform". Using this module you can script objects inside the virtual world using any language supported by the specification (Javascript, PHP, Ruby, and so on).
The project was initially born at Sun Microsystems in 2007, but support from Sun/Oracle stopped earlier last year(2010). It was an open source project from inception and although most people envisioned its death after Oracle laid off the team, it has been quite a different story since then. The community has taken control of the project through the creation of the Open Wonderland Foundation (non-profit), and all kinds of meetings inworld have been happening ever since. All Wednesdays at 1pm (EST) there are development meetings in which the community share an instance of Netbeans and hack on code as a group (every avatar can take control of the instance and start driving).
I do have to say that things are going a lot slower, no doubt of that, but there are more users now than ever before, and development continues at a steady pace.
Motivation
So, why am I doing this, what's in it for me? The experience really. I was not part of the initial wonderland team and my association has not been other than as a volunteer in the community for the last few months. I thought this would be a good way to give back to the community.
I am also a researcher in IT in Education, and this is just a way for me to experiment with ideas, mostly taken from Software Craftsmanship.
I see a few different ways that learning can be organised around the wonderland system (apart from development work which will also be covered).
Although it is a fairly big system (with a small core), test automation is almost inexistent. One of my goals would be to start inspecting the system by testing it from within, and see where that leads us. There is a test harness in place, but it hasn't been used much and it would be great to inspect that too.
Another course for experimenting is the building system. Ant scripts exist for the system but dependency management is not explicit. The build is also way too dependent on netbeans.
These are two scenarios that people are quite likely to find in their everyday job. So, what's in it for you? Well, the experience really! :)
Some people might find attractive the fact that some out of the office learning can being organised (to a point) by someone else. I say 'to a point' because, as mentioned earlier, this is a peer to peer experience, I am not an expert, and learning is ultimately the responsibility of the participants themselves.
This is a 'distance learning experience', and I do not expect people meeting face to face, but I do expect meetings avatar to avatar. It is definitely not the same (nowhere near!) but in my opinion is the closest experience to the real thing that I've had so far.
In a nutshell
So, as a summary, if you are interested in learning through technology, be it software development, testing automation, scm, and so on, and you want to do it within an existing system, and more importantly, in a collaboratively, community-based way, please have a look at the course.
Link to the course: http://www.p2pu.org/general/open-wonderland-development-java
Dates: starting on January the 26th (2011)
Pre-requisites: Please read through the sign-up task (main page of the course) before applying.
Labels:
3D,
course,
craftsmanship,
java,
open source,
open wonderland,
virtual worlds
Sunday, November 7, 2010
breakable toys
A couple of weeks ago I watched this talk in which Corey Haines tells us all about the software craftsmanship movement.
Although I haven't heard about the movement before (where have I been for the last couple of years???!!!) some of the things he talked about there felt very familiar.
A bit more digging out took me to the Apprenticeship Patterns book. And there again, a lot of familiar concepts, and even real physical situations clicked with me straight away.
One of the patterns that I enjoyed a lot is breakable toys. I have been doing this kind of small projects for years now, although I never called them toys but prototypes or spikes. Also the level at which I was getting involved with these projects was different from the one in the pattern. In my case they used to be pretty much a couple of hours work to get some framework installed and getting a hello-world kind of project out of it. The pattern goes much deeper than that. One of the examples they use is to create a wiki, and although it might seem a bit over-engineered at the beginning, they assure that it cat teach you about "HTTP, REST, parsing, web design, caching, full-text search, databases, and concurrency". That sounds a lot cooler than my 2 hours testing framework approach to toys.
I have also enjoyed the interconnection among patterns, and how some of them can lead to others. It is a great read and although the book is available online, I had to buy a copy. And of course, recommend it here; you should certainly go and buy it now!
Subscribe to:
Posts (Atom)