Smidig 2009, Norways very own Agile conference was held on October 22nd and 23rd. I have attended it earlier, and this year I was one of the organizers. The entire experience has been excellent, though a lot of work. Others were working a lot more than me, and I reall have to give them credit for beeing such a positive and active crowd.
Tandberg did an excellent effort of providing us with the video equipment, and enabled us to make the videos available. Even though sometechnical difficulties resulted in loosing some talks (mine included), they did an excellent job, and a big thank you to them.
I held a talk on agile deployment (again), due to some last minute cancellations.
Because my talk was lost I decided to put some details here on how you could get the material if you are interested. So:
My own company, Capgemini had 7 talks, which was a really good effort. To see other videos (Norwegian only) go to http://tcs.java.no .
My JavaZone talks are available. Sorry, only in Norwegian. I’ve scanned through them and I’m fairly satisfied with the performance. Looks like the Rules engine talk doesn’t have video of us up on the stage. Not sure what happened.
I’ll have to go through them for a little retrospective later. Let me know if you have some feedback.
Here they are:
So the big event for Java geeks in Oslo, JavaZone, is over. I had a blast as always, and a little less people. Moving the overflow area helped a lot. The less people was a conscious choice I’ve been told, and I wouldn’t really mind even fewer. But hey, I guess there’s some economics that has to work too.
My company, Capgemini was present as usual, and the bright girls and guys did an excellent job of tweeting and blogging from the conference. If you know norwegian check out our twitter stream and the technology blog.
We also had two full feature talks, and I was really satisfied with how they went. Always something to change, but over all very satisfied. The topics were (sorry only Norwegian slides):
- Smidig Utrulling (Agile deployment) – Slides
- Rules engine vs. Domain logic – Slides
For the Smidig Utrulling talk I spent a lot of time creating code and examples. They contain some simplified Maven setup and a Java program to do deployment from the Maven repo. Check it out at http://github.com/anderssv/agile-deploy/tree/master . Documentation is scarce as always, but let me know if I can make something better. And feel free to use.
The videos will be available later, but if you want to see the ones that are available (of others, some english speakers) you can check them out at http://tcs.java.no . Tandberg delivered the video equipment and it seems like they are doing a hell of a job for the community. Check out the videos, there’s a lot of good talks there.
Now for some vacation, see you. 🙂
I have a new post on this. Go here: http://blog.f12.no/wp/2010/08/06/redommended-android-applications/
I have had my HTC Magic for a little over a month eight months now. I’m still satisfied, though I’m contemplating getting a Google Nexus One next year. I’ve updated my apps list below. Not all of them are necessary for handsets like Hero, but I’m still on Magic so I need some extra extensions. 🙂
- PandaHome – Home screen replacement. Gives me as many home screens as I want and a nice dock.
- Locale – Profiles for your android. Adjusts sound etc. based on location or other parameters.
- AutoLock – Delays the need to draw your unlock pattern.
- Useful Switchers – Easy access to switch on and off the things that consume battery.
- TasKiller – Kill off tasks.
SMS and contacts
- Handcent SMS – iPhone like SMS handling with bubbles and all.
- SMS Popup – Popup covering the screen on SMS instead of just the top bar notifications.
- SMS Templates – Templates for sending SMS.
- SyncMyPix – Get profile pictures from Facebook as contact photos.
- Toggle Data – If you don’t have a free data plan, you really don’t want your Android to go checking the net all the time. This lets you turn off and on data usage.
- Wisync – Automatically turn off data sync when not on WiFi.
- Wifi Analyzer – Nice to have when messing around with my APs to find the free channels.
- WeFi Connect – Scan, connect and test open connections in the area until one succeeds.
- NetSentry – Keep track of downloaded data.
- Bluetooth File Transfer – Send and receive files over Bluetooth (sadly not standard).
- Share Your Board – Takes a snapshot of your whiteboard, corrects the angles, crops and increases contrast. I mail mine to Evernote for search and storage.
- Evernote – Capture anything, for ever. It even does OCR on any images so you can search for what you have written.
- GDocs Notepad – Notepad that Syncs to a folder on Google Docs.
- Remember The Milk – My essential GTD app. Nice widget for displaying list of current tasks. Only works if you are a paying member of RTM.
- Thinking Space – Easy mind maps for Android. Syncs to “the cloud”, but no alternative client for editing (yet?).
- Spotify – Music like I like it.
- Google Listen – Podcasts
- Qik – Stream your video live, and store them when you’re done broadcasting.
- Shazam – Figure out which song is playing on the radio.
- SnapTell – Snap pictures of videos, books etc. and get online quotes and links to IMDB etc. Also supports bar codes.
- Backgrounds – Easy way of finding new ones when you get tired of the one you got.
Travel and location
- Flightstats Lite – Not really a good app (just sends you to the web all the time), but nice shortcuts for getting your flight status.
- TripIt – Keep track of trips and contacts trips. Nice sync option to have everything on your phone before you leave.
- Trafikanten – Bus, train, tram and subway info for Oslo.
- Here I Am – Send your current location via SMS or Mail.
- My Tracks – Get the tracks and stats from your trip and export GPX file for Geotagging.
- MyCityBikes – Status for bikes in Oslo and other cities. Lets me find nearest bike, and nearest free slot.
- Wikitude – Augumented reality and the ultimate show off app. Can also help you find restaurants etc. near by. 😉
- Barcode Scanner – Scan barcodes and open in browser or do a search. Eases installation of applications on the links below.
- Seesmic – Twitter client with twitter lists.
- Transdroid – Add and manage torrents in a variety of torrent clients on your computer.
- Brightkite – Location based social microblogging. The best so far. 🙂
- Bubble – Level anything. 🙂
- Meebo IM – Connect to just about any IM service, and use the same account as meebo.com.
Anything else I should be using? Let me know. 🙂
Wow, it’s been a while. If you’re interested in good links follow me on Twitter: http://twitter.com/anderssv . I usually update there these days.
My talk on “Agile deployment” got accepted for JavaZone this year! I’m extremely happy, but a bit scared too. 🙂 I’ll be talking about rolling out changes in a controlled manner, and one of the things that are usually neglected in this scenario is the database side. I’ll cover stuff like packaging and deploy of the application too, but that’s probably the area where I know the least. The database side of things are really sort of my expertise.
I have written some blog posts on this already, and in relation to the talk and things at work I did a quick search for Java migration tools. DBDeploy I have used earlier, but there are now a couple of other contenders. Here’s my list so far of tools that work on sql deltas that can be checked into SCM:
- DBDeploy – Tried, few features but works well. Ant based.
- DbMaintain – Probably has the most features. Ant based.
- c5-db-migration – Interesting alternative, similar to DBDeploy. Maven based.
- scala-migrations – Based on the Ruby on Rails migrations. Interesting take.
- migrate4j – Similar to Scala Migrations, but implemented in Java.
- Bering – Similar to Scala Migrations, and looks a lot like Migrate4J
I’ll definitely be looking into DbMaintain and c5-db-migration soon. DbMaintain looks promising, or I migh just contribute to DBDeploy some features. I’ll let you know how it went. 🙂
(updated with scala-migrations, bering and migrate4j after first post)
I’m a geek. I’m even a geek that try to stay organized, so I like to know that my data are backed up and available wherever I am. I see I still get some traffic from Google on a post that’s really not relevant any more, so this is sort of an update to that.
Google calendar is the hub of my calendar. Even though you don’t really like or use gcal it’s a great hub because there’s support for it in nearly every program that’s available. So from/to Google Calendar you can use:
For contacts it has always been sort of separate for phone and mail. With more and more happening on my phone it’s quite relevant to join these two registers. For contacts I guess the phone serves as some sort of hub. I use:
- Goosync to sync contacts so they’re available in Gmail
- ZYB to sync and clean up contacts (the merge duplicates feature is pretty nice). ZYB also has the surprising feature of updating your contacts with the latest information from Facebook. This also includes pictures, so suddenly I have avatars for many of my contacts.
I have a Nokia Series 60 phone, but Goosync which is used for both contacts and calendar only requires SyncML so it should work on many phones.
I was reading an interview with Renzo Piano in this fridays issue of D2. He is one of the most revered architects of our time and is responsible for many great buildings, amongst them the Pompidou centre in Paris which was his first big break through. He is known for his innovative ideas, but also his very good technical and functional execution of the designs. He was interviewed in connection with the Tjuvholmen project in Oslo, and one of the quotes was just spot on (my translation):
My fundamental reason has it’s origins in my builder background. To me, architecture is a craft. You can’t separate the idea of a building from the execution of it, even though a lot of architects act like it. This has been catastrophic for architecture. – Renzo Piano
In the software world there seems to be a notion that you can draw the architecture, and then let someone else design the details. Because it is based on high level ideas and sometimes faulty assumptions it becomes a resistance for building a good solution, in stead of enabling a solid foundation. Stop separating the architecture from execution, and make sure it is something that is flexible and evolves as execution moves forward. In other words: Architects need to take part in the execution to see the constraints the architecture imposes, and see new opportunities for the architecture to evolve into.
I’m not going to go into that rant now, that’s content for another post, but that also means that the architecture must be evolvable. And less code is more flexible than a lot of code. Strangely enough most architectural constraints tend to lead to more code, not less. 🙂
On wednesday I did a talk at the Norwegian Java User Group about agile deployment. The slides (in norwegian) are available here as well as embedded on the bottom of this post.
From the comments and questions I got afterwards, I could see how I should have included more detail. That would have made it even more interesting for that kind of crowd. I probably also should have clearified that I had limited time to prepare and that this was just a slightly extended version of a lightning talk I held at XP Meetup last year. I hope to get the chance to correct this in a JavaZone talk with more details. If you did see the talk and have comments please do leave them at the bottom of the page. 🙂
Many of the questions I got revolved around the handling of the database, so I just thought I should give some pointers here to articles that better describes what I have been up to:
Check them out if you’re curious.
I did tweet this, but it was just so spot on I had to put it up here. You can read the full 7 SOA myths article here. Some highlights:
- SOA is a way of thinking about integration, not a product.
- Semantic coupling will always be difficult regardless of the integration technology you use.
- Discover the services through use of the systems, not by up front design.
- SOA is a continuous process that will never get done.
Ever since I read the Domain Driven Design book by Eric Evans I have been wondering a bit about the Repository pattern. Especially the part where a domain object can communicate with a repository. In most Java systems today you will have Hibernate with lazy loading which enables you to think in domain objects, but there might be some situations where you can’t do that. That’s when you need to think about the Repository pattern and how to use it. Reasons for using it might be:
- Large collections, you need to filter before loading for current operation
- External data, it is only available through calling a webservice etc. meaning Hibernate won’t handle the lazy loading for you
So basically you will need to do this in most systems some time, how do you solve this? I had a discussion about this with Johannes a while back, and we didn’t really reach a conclusion. There are several ways to handle this and they all have their benefits and problems. Terminology and some more ideas borrowed from Ben Hutchinson in this post.
The domain has no notion about repositories, but navigate through properties in the domain. This can be achieved through:
- Always passing enough data into methods so the object can make it’s decisions. This can bloat the signature and be a bit of a hassle, but probably the way to go with least magic.
- AOP on the methods that retrieve the data. This enables you to have just plain Java for tests, but enable a different retrieval at runtime. Complicates the understanding and testing of the system, but eases unit testing.
- Events in your persistence layer. When Hibernate loads up an object for you it could inject the external object. Sort of light weight AOP, but not something I think I would do.
The domain knows that it must retrieve information through a service/repository and calls it when it’s needs the information. It can be achieved through:
- Passing the service/repository in with the method call. Again bloats the methods, but is explicit.
- Using a Locator to get the service/repository. The dreaded ServiceLocator from Java EE is back! 😉 But it might have a worse reputation than it deserves. A Locator that checks the ThreadLocal and knows how to retrieve the repository is quite flexible even in Tests. Not very expressive on how and where the information can be found.
- Passing the context in the method calls. Just about the same as passing the service/repository, just another level of indirection that I don’t like.
- Injecting the repository/service into the object before execution. Somewhat like a middle ground between the Locator and passing it in as an argument.
It’s like everything else in computer science, you need to decide what works best in your project. I do however prefer the Independent Domain with passing in the required data in the method. I guess the reason for this is the uttrely horrible code I have seen before where domain and repositories/services are mixed together. A lot of programmers will tend to create integration tests when faced with testing domains that has dependencies to repositories. In many cases that means loading your Spring context waaaay too often, or mocking the repository. And neither are really good unit tests, as well as beeing harder to maintain. I hate mocking even though I have to do it often. I just try to avoid it if I can by designing logic that is independent of infrastructure.