Latest articles
When Pow Eats Up the Clock Cycles
Feb 16, 2012
I have been a huge fan of Pow to serve my Rails applications for development on my Mac. Â I wrote my love for Pow a while back and have been using it ever since, but all has not been a perfect experience along the way. Â After upgrading to the 0.3.2 version I started to have my applications appear to lock up in the browser and finally timing out.
The only solution I could reliably make work was to open up Activity Monitor and kill the pow process manually. Â It worked..until the next time and I would have to do it again and again. Â It seemed like I was doing this many times a day.
It turned out this was a bug reported to the development team and is a confirmed issue. Â The cause of the problem is determined to be the dns resolver, ndns. Â Â A pre-release version, 0.4.0-pre is reported to resolve the issue. Â Install it with the command:
curl get.pow.cx | VERSION=0.4.0-pre sh
I did this and have not had to manually restart pow once. Â I’m not sure why the official release has not been updated to include the fix to this issue which seems to effect many users.
Â
Homebrew Upgrade Woes
Feb 15, 2012
I ran into an interesting problem recently after updating my installation of Homebrew on my Mac Pro. Â Starting with the update command, which ran successfully:
$ brew update
I then attempted to update my redis installation to the latest:
$ brew upgrade redis
I was greeted with this message:
Error: undefined local variable or method `brew_install' for main:Object
Trying several things on my own to no avail, led me to a Google search result pointing out a known issue and solution. Â It appears there is an issue with a brew_upgrade.rb artifact being left behind after a brew update. Â The following commands from the Homebrew wiki fix the problem:
$ cd $(brew --prefix)/Library/Contributions/examples
$ git clean -n # if this doesn't list anything that you want to keep, then
$ git clean -f # this will remove untracked files
I hope this helps someone with the same problem.
Blog Note
Feb 09, 2012
Due to an unfortunate mistake on my part the RSS feed hasn’t been updating correctly since the beginning of November. You should now see 7 posts that you missed in that time.
ScrumMaster Tales – The Team Gets Bottlenecked
Feb 07, 2012
Its day four of the sprint and ScrumMaster John is studying the Story + Task wall to see how the sprint is progressing. After a few minutes he sees three things that standout:
Analysis
The team is currently blocked on Doug’s database related tasks. However even if that bottleneck were resolved they would still be blocked on Ian’s tasks.
The team isn’t respecting its own WIP limits.
Risks
Story
John raises this as an impediment at the Daily Scrum and asks for quick meeting right afterwards. He shares the three observations and asks the team what they think. Team members say things like: “Database work isn’t my speciality/skill†and “I wouldn’t be as productive on thatâ€. As a result they say that they moved onto lower priority work. To get through the sprint without another disastrous ending (see: The Story of an Incomplete Sprint), John asks what they can do to offload Doug and Ian allowing them to unblock higher priority work. Among other ideas the team decide:
During the retrospective the team focused on the problems with only one team member being able to do certain key tasks (Database work, Business Logic). Rather than address it piecemeal Doug suggests that they create a Skills Matrix:
Image Credit: Jon Miller – gemba pana rei
That shows the inventory of skills across the team. (Ed note – when I facilitate one of these we spend 15-20 minutes coming up with a list of potential useful skills for the team). After an hour of work the team assembled a matrix that helped spot many areas where they only had one person who could do the work. It turns out the gaps are larger than can be addressed in the next couple of sprints, so the team decides to focus. They choose:
To grow skills in those areas they agree to us a mixture of pair programming, interactive workshops and one on one coaching. While these activities will slow the team down in the next few sprints, the benefits of getting higher priority work done faster will soon out weigh.
Finally the team posts the skills matrix in the team area and commits to revisit it in six to eight weeks.
Part of an ongoing series called Scrum Master Tales. The series covers ScrumMaster John and his team as they develop an online bookstore. Tell me what problems you would like to see John tackle next.
Blog update
Feb 05, 2012
I took the opportunity of a 10-hour flight to finally re-import all of my blog’s old entries into Octopress, fiddling around with a semi-automated process of Ruby and shell scripts and some creative Emacs macros (check out the archives if you care, even though I have no idea why you would). So if this worked, all of the old stuff should be preserved, even though most of it now only has historic value (and prevents Google searches to hit a 404). I’ve also taken the risk of moving the whole stuff back to its old location, and will redirect the temporary one back once I’m sure everything works. One less excuse to not take up blogging again …
Move Class, Object and Trait Refactoring for Scala
Feb 03, 2012
After lots of bug fixing and improvements of existing refactorings in the Scala IDE, I took a few days off between Christmas and New Year to finally implement a completely new refactoring: Move Class.
Move Class (see Fowler’s description if you’re unfamiliar with it) moves a top-level Class, Object or Trait definition into a different package. And if there exists more than one declaration in the file, you can choose to split-off one of the declarations or to move them all. The refactoring will move all the necessary imports along, and also update all the references to the moved implementation (other imports, or qualified names) in the project.
The refactoring can either be invoked from the menu, or by drag-and-dropping a file in the Package Explorer. Here are some screenshots of the refactoring in action:
It’s also possible to create a new package during the refactoring:
As usual, the changes can be previewed. In this case, the class is removed from the original source file and an import is added to its new location:
Looking at the created file, we see the changed package declaration (a copyright notice in the original file would also have been copied along to the new file) and some imports to types of the originating package:
There are a few limitations: the refactoring works only on Scala code, and it simply ignores visibility issues, so moving might result in compilation errors (cursory tests showed that this also happens in Eclipse JDT — my gold standard for refactoring implementations).
The Move refactoring will be part of the 2.1 release of the Scala IDE, for which there are nightly builds available.
How Do We Track Bugs? Check In a Failing Test!
Jan 23, 2012
I’ve always tried to avoid bug tracking tools and have several times deleted the entire content in such tools (reported bugs) to great success. However, that’s not what I want to talk about here, but if this sounds weird to you go check out Gojko’s post on the subject.
What I want to talk about here is one issue that came up during my team’s retrospective meeting on Friday. One of the improvement points that came up was bugs. Not that there where too many or that we should find more, but that some bugs where fixed and then reappeared as bugs again on a later stage. The suggested solution was: Instead of having the tester pull the buggy story from test and back into dev, he would write a test (integration or unit) that would replicate the bug and check it into source control.
Since we’re doing Kanban, what would the effect of the above action be? It will effectively stop the “assembly lineâ€. In practice CI will report a failing test and the team will stop what they are doing to fix the failing test.
This is of course something we’ll adopt for all bugs, not just bugs that gets reported twice. I’ll leave it up to you to figure out all the benefits (and drawbacks if any) as well as why this solves our problem at hand. I’m looking forward to see how this will work out in practice.
![[image]](http://mowser.com/img?url=http%3A%2F%2Fapi.tweetmeme.com%2Fimagebutton.gif%3Furl%3Dhttp%253A%252F%252Fagilepainrelief.com%252Fnotesfromatooluser%252F2012%252F02%252Fblog-note.html%26style%3Dnormal%26b%3D2)
![[image]](http://mowser.com/img?url=http%3A%2F%2Fapi.tweetmeme.com%2Fimagebutton.gif%3Furl%3Dhttp%253A%252F%252Fagilepainrelief.com%252Fnotesfromatooluser%252F2012%252F02%252Fscrummaster-talesthe-team-gets-bottlenecked.html%26style%3Dnormal%26b%3D2)




