Moving bookshelf to Goodreads and manage e-books in Calibre

Over the past month I changed my toolset for managing my bookshelf and e-books. In this blog post I’ll explain why.

For the past years I used Shelfari from Amazon to manage the books I want to read, and the ones I’ve read. It was also useful to keep track of what friends are reading to pick up interesting books. There are also user groups, but those communities were not that vibrant. Nowadays some paper books also provide a free download of the e-book, and I didn’t use a tool to manage my e-books.

Now all of that has changed!

Check out Calibre, probably the best free e-book management tool around. After dropping your pdf into the tool it can sync with online services from Amazon, Google, Goodreads,… to get extra info about the book like covers, short description, ratings, and so on. You can apply tags to your books to group them into categories and search trough them. You can keep multiple formats for your books and sync to a range of mobile devices. It’s even possible to convert one format into another. Lots of available plugins can extend the functionality of Calibre. I was hooked immediately.

The other tool I use now is Goodreads. I didn’t realize Shelfari was lacking so many features until I saw Goodreads, for example:

  • you can make additional book shelves and put an RSS feed on the ones you want
  • you can export at any time (unlike Shelfari)
  • authors of the books also have profiles on Goodreads, so you can send them messages, ask questions,...
  • order books on your shelves the way you want them to appear
  • highly customizable widget to put on your website

I also have the feeling the community on Goodreads is a lot more vibrant than on Shelfari. So I’ll leave Shelfari soon, and will try to convince my Shelfari friends to do the same.

This blog post should help a little :-)

Special thanks to Jochen and Yoeri for showing me these great tools.

If you want to join me on goodreads, visit http://www.goodreads.com/pascalmestdach

Teams avatars increase fun!

No matter how ‘challenging’ the project is you’re working on, it’s always important to keep a fun, positive attitude in the team.

One thing that definitely increases the fun factor in a team is introducing team avatars.

These avatars can indicate:

  • who’s working on what for the moment
  • who’s on vacation
  • who’s giving the upcoming product demo
  • who’s responsible for support today

Something like this:

Team Avatars

As you can see we picked The Looney Tunes as our theme. In case you’re wondering, I picked Speedy :-).

Another theme was already taken in our company, The A-Team: “If you have a problem, if no one else can help, and if you can find them, maybe you can hire...”

Other themes that came to mind:

  • The Matrix
  • Ghostbusters ”Ain't afraid of no ghost”
  • Lord of the Rings

Do you know other thankful themes? Please share them…

Pick one, implement it… just because it’s fun and not a lot of work.

RoundhousE experience report

RoundhousE is an automated database deployment and change management system. We started to use it over a year ago, so it’s time for an experience report.

At the current moment we’re using RoundhousE in 3 big projects and 5 smaller ones each deploying new versions and schema updates at least once a month in an automated way to over 25 on-site client installations. And it’s working great!

This year 2 more big projects are planned to start using RoundhousE for database migrations. And each new project that starts, small or big has to use RoundhousE. It has become a company policy.

Developer and integration sandboxes

We provide each project with development sandboxes on the developers machine and a project integration sandbox on the build server. The project databases get rebuild from scratch with every automated build using the MsBuild integration of RoundhousE. Database migration scripts are getting tested over and over on different platforms (sql server 2005/2008 and oracle 10/11).

Deploy into a copy of production

We’ve set up an internal production like environment where new versions are pushed upon and tested first, before being released to production.

We integrated the execution of the RoundhousE console in a self made PowerShell script, that also updates the version of the application (stopping/starting services and websites, copying binaries that kind of stuff).

Deploy into production

Because we have those environments mentioned above, and the deployment is already tested, a production migration rarely fails. And even if it fails on Sql Server, that’s not a big issue, because RoundhousE runs the migration in a transaction. So nothing happened.

Conventions around RoundhousE

We implied 3 conventions to make the process run smoothly:

  • Before we start deploying with RoundhousE on a project, the current databases in production need to have the exact same schema. This is also the hardest part in our process, but once it’s completed it’s a gift from heaven. :-)
  • Only the database user which RoundhousE uses to perform the migration has the right to make schema updates to the database. And the development team does not know those credentials. That way we assure that only RoundhousE performs schema updates.
  • Nothing gets deployed into production before it’s deployed to our internal environment.

To make it perfect

The Oracle integration still needs some work, so maybe a real Oracle expert can contribute to the project, enlightening us with the wonderful internals of Oracle.

General feeling

RoundhousE is still awesome!

20 Questions to help you define the meaning of an 'Agile company'

The agile movement is happening for about 10 years now. A growing number of people and teams pick up the agile principles, methods and practices.

And no one would ever want to go back to the 'old' days. Agile becoming mainstream is definitively a good thing!

From time to time I hear people say that they work in an Agile Company. But what does that even mean?

Does it mean that everyone in your company knows and uses the agile lingua?
Or that you're doing iterative development with sprint planning and review meetings? 
That teams continuously learn through retrospectives? 
Or that you're applying continuous delivery, pair programming, test/behavior driven development,...?
Or that you’re applying Customer Development?
Or practice Lean and Kanban practices?
Or that your Scrum Masters and Product Owners are certified?
Or all of the above?

Let's take a step back and try to reflect a set of questions on the 4 agile values stated on the well known VersionOne Agile Poster: adaptability, transparency, simplicity and unity.

That way we might figure out for ourselves what an 'Agile Company' really means.

Value 1: Adaptability

  1. How quickly can your company respond to a compelling product from a competitor?
  2. How quickly can you evaluate and implement change requests from your customers?
  3. How quickly can you implement new (government) regulations?
  4. How quickly can you and your customers adapt new proven technologies? Or get rid of deprecated ones?
  5. How easy is it to change the planning for your future product portfolio? And for your current work?

Value 2: Transparency

  1. Do you know how your company is doing financially? What makes most money? What the cost structure is?
  2. Do you know the prospects your company approaches? And what you can do to help in that process?
  3. Do you know the return on investment for your products? What products are doing great? And which aren't?
  4. Do you know what the other teams in your company are working on? And how they are doing?
  5. How open are you in your communication with your customers?

Value 3: Simplicity

  1. How easy is it to jump start new competent people in your teams?
  2. How easy is it to visualize your products architecture? Visualize integrations with other products?
  3. How easy is it to explain in 2 minutes what you do for a living? What your company does?
  4. How much training do your end-users need to work with your products seamlessly?
  5. How easy is it to deploy new versions of your products?

Value 4: Unity

  1. Do you feel all the teams in your company are working to the same overall goals and vision?
  2. How high is the level of colleague finger pointing when something bad happens? Or do they jump in to solve the issue?
  3. Are team, management and stakeholder goals aligned?
  4. Are you helping your customers to achieve their goals?
  5. How high is the general one-for-all / all-for-one feeling?

With these kind of questions you should be inspired to help your company becoming a more agile one.

If you have great questions that should be in this list, please contribute.

Making apps that don’t suck: mind map

Last weekend I really enjoyed watching an InfoQ presentation on Making apps that don’t suck (thx to Nick for ‘making’ me watch it).
During the talk I’ve made a mind map and would like to share it (click to enlarge):
Making_apps_that_dont_suck
And if you would like the XMind format, just ask.
We should all do effort in making apps that suck less, because “The world already has enough crap” like the presenter said.

The power of version control for maintaining a build farm

We’re practicing Continuous Integration at Ihc for about 5 years now. We started small with a few projects on one build server.

Last week we added a third CruiseControl.Net server to our modest build farm and now run about 80 build projects.

We’re proud that we maintain the configuration of this build farm with minimal effort (only a few hours of maintenance per month) and at low cost (it’s open source).

The one thing that really made things a lot more maintainable is putting the CCNet configuration in Subversion.

We basically implemented the solution from this post: http://www.ifunky.net/Blog/post/Cruise-Control-Auto-Rebuild-with-CCNetconfig-in-Source-control.aspx

And added the following:

  1. We structured the configuration into a folder per buildserver to be able to update the configuration per server.
  2. We split the one ccnet.config per server into multiple files, one per team.
  3. CCNet only reloads itself when ccnet.config is touched, so we Touch it now in the build with an Exec task.

So this makes it easy to:

  • create new projects with a simple commit
  • add a new buildserver (provide config + initial checkout on the server)
  • recover from a major buildserver crash (checkdisk removed our configs once)
  • change all configs at once with a tool like notepad++
  • move projects from one buildserver to another

This works quite well for us.

I’m wondering how easy and cheap this would all be in competing tools like TeamCity or Team Foundation Server. Any experiences you would like to share?

The customer decides the quality

… but you can choose your customers.

Last week Michel wrote a nice post about a hot topic: Is focusing on quality stealing from your customer?
I proposed to talk about the same topic at the Belgium Agile Open 2011 and wanted to share the results.


How a developer and a customer think about quality differ a lot.

These are the kind of things developers think about when defining quality:
  • Is the code readable and maintainable?
  • Is the test coverage high?
  • Is there little code duplication?
  • Is the level of technical debt acceptable?
  • Is the code clean?
  • Are best practices applied? No anti-patterns?
No surprise there, we just want to prevent crap because we’ve seen enough of this, and we know it makes projects fail or even can bring a company down. But a customer really doesn’t care about these things. So, what does he care about?


Well basically the customer just wants the working product with the functionality he asks for, and he wants it fast!

It’s our job as developers to ask the right questions to get a grasp of the quality the customer wants:
  • Will the code be thrown away after 3 months?
  • How extensible should the product be?
  • How do you expect to scale?
  • What is likely to change?
  • How will the product be maintained?
The bad news is that it should be the customer who decides what level of quality he wants. It’s a business decision.

The good news is that you don’t need to work with a client who doesn’t care about continuous integration, iterative development, automated testing,... That is also a business decision. :-)

In the end we just need to find the sweet spot of course.

Welcome to the world of Android.

images

Recently my spouse and me decided to invest some money in 2 smartphones. After some research and asking around we decided the best quality for the money was the HTC Wildfire running the Android.

A lot of articles on the best droid applications have already been written:

So I wont write another one, but wanted to share what applications we decided to use and how it all integrates.

Contacts are stored with pictures,mobile,e-mail and so in Gmail. We use Gmail itself for e-mail and can edit each others calendar and show both Google calendars on our phones. Integrates all really fine. No wonder there, right?

The only thing that didn’t sync well was the GList app with the Gmail tasks. So we switched to Cloudlist instead for keeping grocery lists and small to-do lists.

Advanced Task Killer is also something you want to manage your apps so that they don’t hurt performance or battery life. In the settings you can specify that apps get killed automatically when not used every hour or so.

HTC Peep was the standard twitter app and it works fine for now.

Some things I did change in my daily use:

  • Switch from Microsoft OneNote to Evernote for taking notes, because Evernote has a great droid app. Now my notes are synched between Pc/Mac at work and our phones.
  • Switch from Juice to Google Listen for listening to podcasts. It also integrates with Google Reader. (thx to Jochen for this one)
  • I keep using KeePass for my personal passwords, but now a KeePass file is stored in DropBox. Both are available on android also, but a little warning here: beware that you put your passwords in the cloud, so secure your file with a highly secure password, and maybe don’t save super sensitive passwords in there such as your home bank account or your PayPal account.

I also advice you to install some kind off anti-theft tool. We choose LMaxi Anti Theft Lite. You can ask the location of your phone, let an alarm go off or even wipe the phone all by sending SMS messages to the phone. But I suggest you change the standard text messages.

I don’t want viruses on our phones, so Risk Detector also made the list.

Another handy tool is the Astro File Manager for browsing the content on your SD card.

That’s about it, just some gadgets I installed to show off against iPhone users: Barcodescanner, Layar, Shazam, RunKeeper :-)

One thing I miss right now is a personal kanban tool that integrates with an online one. If you know one?

What apps do you use that are really handy? Any apps which are better than the ones we use now? Let me know…

How SCOM can disturb your build farm

In our automated builds databases get build up from the ground with RoundhousE. We even deploy nightly to a Quality Assurance environment. And this works quite fine for about a year now.

But recently we get build failures with nice messages like: Could not obtain exclusive lock on database 'model'. Retry the operation later. CREATE DATABASE failed.

Strange message at first sight, but it makes sense.

When SQL Server creates a new database, "The SQL Server uses a copy of the model database to initialize the database and its metadata". Also, users could create, modify, drop objects in the Model database. As such, it is important to exclusively lock the model database to prevent copying the data in change from the Model database. For more info on creating the database see: http://msdn.microsoft.com/en-us/library/ms176061.aspx

No exclusive lock? Who’s holding a lock then? Execute following query to find out. You should have no results.

SELECT spid
FROM master..sysprocesses
WHERE dbid = DB_ID('model')

But in our case it turned out that Microsoft’s SCOM is holding connections open to the Model DB. So each time SCOM is monitoring the build fails miserably.

We managed to add an exclude for the Model DB in the SQL Server Management Pack, but connections are still being made and stay open to long. SCOM is kind of a big black box, at least to us it is.

Our solution for now is to disable the SQL Server Management pack for our QA servers until Microsoft fixes the issue. Bummer.

How far should you take the monitoring of servers in a build farm? What do you think?

Making a presentation with prezi.com

Soon I’ll give an internal presentation on Balsamiq Mockups, a wonderful tool for making wireframes in the early stages of software design.

As I was looking for an alternative to powerpoint presentations, I remembered seeing a really cool zooming presentation by Gojko Adzic on Specification By Example. He made it with prezi.com.

So let’s give this a try. It’s free if you want to publically share the presentations you make. After signing up and watching the 6 minute tutorial, you’re ready to make a presentation. It’s really intuitive and easy.

You just type in your ideas, upload some pictures, maybe link to video’s on YouTube. Play with the zooming and add some frames. The frames allow you to group items for zooming. The last step is making the presentation path by clicking on the items in the order you want them to show up.

In a couple of hours I made my first prezi: http://prezi.com/kbu_fak6srfl/wireframing/

Let me know if you like this, or if you know other cool alternatives to the boring powerpoint presentations.