Candlepin 0.4.11 released

Candlepin 0.4.11 has been released. You can get the bits at:

Make sure you read over the Setup Guide, which is located at

For more information on Candlepin, please visit our project page.

Features & Enhancements


  • group subscriptions based on stacking attribute in the following screens:
    • subscriptions page
    • compliance assistant
    • view available subscription page
  • the cli and gui now denote the state of the subscription: Subscribed, Partially Subscribed, Expired or Not Subscribed.
  • Nag messages now denote the ‘Partially Subscribed’ state.
  • registration with multiple activation keys now supported
  • list --available now shows if a subscription is multi-entitle capable
  • GUI shows an asterisk to denote a subscription is multi-entitle capable
  • config command added to cli enabling editing of the configuration values
  • client tries to optionally heal the system to keep it properly subscribed.


  • the list of consumer’s installed product IDs are now stored
  • the candlepin job status stable now stores the consumer uuid for async bind.
  • configuration added to disable batch jobs on a particular node
  • Moved the translations to

Bugs fixed

729780 non-existent secure objects throw a 404 instead of a 403.
708058 Server 500 error thrown when user auto-subscribes and has no entitlements
728622 Inconsistent enable config entries
728624 Activation keys are successfully being created with invalid chars
728636 Duplicate activation key error is hard to decipher
729125 Adding pools to an activation key should fail when quantity totalQuantity for a multi-entitlement pool
729070 Adding pools to an activation key should be blocked when specifying a quantity>1 for a non-multi-entitlement pool
728721 NullPointerException thrown when registering with an activation key bound to a pool that requires_consumer_type person.
729066 remove logging statement to avoid filling up logs.

tig + mutt = commit review

I spend some of my time reviewing team members commits. Typically I’d use the RSS feed from Google Reader, but it doesn’t have the actual diff to comment on.

Most of the time I use tig to view
the commits. And instinctively I’d want to email the author with my comments, so here’s how to do that. I’m sure there are easier commands but this is what worked for me, your experience may vary.

First thing I did was create a git alias which is useful by itself. It outputs the commit to a temp file, then gets the title and the author’s email address from the same commit passing that to mutt.

    prepmail = !sh -c 'git show $1 > /tmp/commit && mutt -s \"`git show --pretty=format:\"%s\" $1 | head -n 1`\" -i /tmp/commit -- \"`git show --pretty=format:\"%ae\" $1 | head -n 1`\"' -

Now I want to be able to press a key in tig at the diff screen to reply to the author’s commit.

Simply bind a key, in my case I bound s in the diff view to call git prepmail with the commit’s SHA1.

In your $HOME/.tigrc add the following line. Checkout the tigrc man page for more information.

bind diff s !git prepmail %(commit)

Now in the diff view press ‘s’ and tig will launch mutt with the appropriate information.

The email shows up first:

Followed by the email’s subject, notice it matches the commit’s message.

And finally, the diff as an email body allowing you to comment on the changes
to the author.

So a simple git alias in $HOME/.gitconfig, a key binding for $HOME/.tigrc, and you can now review commits using tig. Enjoy!

sm-photo-tool release – 1.20

Version 1.20 of sm-photo-tool is ready to go. You can download it from github:

The following are new configuration options:

  • square thumbs
  • hide owner
  • world searchable
  • smug searchable
  • sort method
  • max size option added to create

Bugs fixed:

  • If filename ends with +, append instead of overwriting log file
  • prompt for password if not in config file
  • invalid login no longer throws a stack trace

Thanks got Lloyd Cha for contributing the fixes for this release.

prompting for password

can I have a do over?

The next webapp I write, I think I’m going with some of the new hotness: NoSQL datastore, RESTful API, and Ruby. On a recent project I chose to use a RESTful API which I really like, but it definitely changes how you think of things coming from the XML-RPC way of doing APIs, but I still like its simplicity.

Unfortunately, I went with Java as the implementation instead of something like python or Ruby, and looking back I don’t know why I did that. I should know by now that python and Ruby are much easier to work with than Java has proven to. Hell even the build environment is a pain: ant – write xml build file from scratch, maven – reminds me of make with lot’s of pom.xml files, or buildr – ruby based maven replacement, annoys all Java people. If I had a do over on this I’d choose Ruby as the implementation language.

Since we’re using Java and needed a database we went with Hibernate. If I had to redo this decision, I most certainly would’ve gone with a NoSQL datastore like MongoDB or CouchDB, this way I could avoid the annoying mapping of domain model to relational tables which is highly annoying.

So if you’re planning a new webapp avoid the boring, traditional webapp design of using a relational database with ORM and compiled languages πŸ™‚

To C or Ruby that is the question :)

I’m trying to decide whether to pick up C again (as it’s been almost 13 years since I’ve done it) or Ruby. I’ve spent the last 13 years in the Java world, as of late I’ve been working with python as much as humanly possible. Ruby keeps me in the web side of things, but C would open up a bunch of Linux opportunities which I find interesting. I know one of my friends would say neither go for Erlang πŸ™‚


Evil Robot Conference (no robots allowed)

On Saturday, I attended the Evil Robot Conference held at Red Hat HQ.

I got there a bit late, but I caught the tail end of Clinton Ebadi’s talk on “UnCommon Web: A Common Lisp Tale of Continuations, Multimethods,
Metaclasses, and Web Applications”. While Lisp can be hard to understand, what you can do with it from a web programming perspective made Java webapps look quite lame considering the amount of code you have to write to make them do anything.

Had lunch at El Cerro with Kevin Smith, from Hypothetical Labs, and a few other folks attending the conference. A good time was had by all, and the salsa was quite spicy but oh so good today πŸ™‚

After lunch, I sat through Dan DeMaggio’s “Anti-databases (NoSQL): Where they came from and where they’re going”. I learned a lot of alternatives to the old school single database setup. There’s a lot of cool stuff out there for this such as redis, Cassandra, couchdb, BigTable.

Dan’s talk was followed by Kevin’s “Intro to Erlang” which was most excellent as well. Kevin seemed very comfortable talking and definitely knows his stuff. Great job!

Last but not least, I got to hear what BRTFS was from Josef Bacik. Very cool stuff, most of the time I forget how much cool stuff goes into OS development compared to the webapps I do for a living.

All in all, it was a great day long conference. I hope we can make it at least a yearly event.

PS. Sorry I missed your talk Max πŸ™‚ and thanks for the donuts.