Latest articles
-
Detecting and Naming Boolean Parameters
May 04, 2012
After a recent discussion on the Scala-Internals mailing list on the pros and cons of methods that take boolean arguments, the consensus was that they should always be passed as named arguments. The compiler doesn’t enforce this, so it’s up to us IDE and tools developers to provide a solution. The code-analysis branch for the Eclipse Scala IDE can now warn you of such boolean arguments that are passed to Scala methods:
The warning comes with a quick-fix that inserts the parameter name:
Of course, the competition isn’t sleeping either, the IntelliJ Scala plug-in just got a bunch of new Intentions.
-
RailsConf 2012 Wrap Up
May 02, 2012

I was fortunate enough to be able to work out attending RailsConf 2012 in Austin, TX. This was the first time on many years that the conference was not organized by O’Reilly but rather Ruby Central, Inc.
I have to go on record and say I usually avoid cities but the city of Austin is a great place and would not hesitate to return. The people are friendly and there is so much diversity in the city that there is something new on each corner. I noticed an abundance of restaurants with so many different types of food. I can’t say I had a single bad meal during my journey. Everyone I spoke with about the trip said I had to try the BBQ, and they were right…it was fantastic.

Many of the sessions overfilled the room. This on in particular exemplifies what I’m talking about. I bet the fire marshal wasn’t aware of these. Overall the floors were pretty comfortable.
It was often difficult to decide which sessions to attend, with 3 full-tracks there always seemed to be two talks during the same time slot I wanted to take. I usually decide which sessions to attend by how applicable they are to current work.
One of my favorite sessions was by Obie Fernandez about using Redis with Rails. Although the examples of the talk were from his recent startup, they were excellent and showed integrating Redis into a Rails application not to remove ActiveRecord but to compliment it. Obie discussed a gem he released to help the integration called redis_props along with sample code used in the talk. The code is clean and concise…great stuff.
Another talk I found personal value in was the Semi Automatic Code Review by Richard Huang. Richard is the creator and maintainer of the Rails Best Practices gem. In the talk he discusses another related open source project called Railsbp.com which allows for your code to be reviewed when committing to Github. The results will be displayed on the Railsbp.com site where you can change the code right there and commit back to your repo. Very informative details produced from the site, GitHub allows hooks into the service and thoughtfully open sourced. I wasn’t aware of the site before but now I am using it regularly.
The other talk which I took a lot away from was Digging Deep with ActiveSupport::Notifications by Matt Sanders. This talk when into great detail with many examples of using notifications in your applications. It is similar to the event publishing and subscriber model from other platforms such as .NET. Having spent many years writing .NET applications this talk brought back many memories of this pattern. The techniques exemplified here I had never used in Rails but do need this functionality on a new project.
UPDATE (05/03/2012): One talk that was intended to be included here, is from Lori Olson. Her talk titled, Mobile Rage – What causes it & how to fix it (Confreaks), takes the view of web application use on a mobile device from the user’s perspective and how developers can implement very simple techniques to ease the pain. I recommend this one highly, good stuff and some tips I was not aware of. I admit I have some sites that can take advantage of this.

The final keynote of day one was from a non-Ruby developer, Rich Hickey, which seemed to be out of the ordinary. Maybe he was there to pull some Ruby developer to the Clojure world. It appears Rich is trying to convince these two Rubyist that LivingSocial would be better with Clojure. I wish I could have overheard the conversation.
There were three very large, two-sided, white boards used for companies to post jobs, and they were pretty full of opportunities. I noticed there were far too many companies attempting to make the next Facebook or Twitter and not enough companies creating really useful applications. There were exceptions from what I could see, but too few. I remember the same thing happening around 2000 and then the bubble burst. Apparently we are not better from this event in history because we have not learned from it.
I finally met face-to-face many friends I only knew from various social networks with lively hallway track discussions. I think this is the #1 reason to attend conferences. The materials from the talks are available everywhere and with Confreaks recording all the sessions, you can watch the show later. You can’t however, experience meeting new friends and seeing old ones without attending.
I recommend every Rails developer attend just one of these events, well worth the time and effort. The next on is in Portland, OR from April 29 to May 2, 2013.
-
Looking for 100 Agile Voices we should hear more from
Apr 24, 2012
In the past few years a number of Agile people I respect have published top 100 or even top 200 lists. While I like many others appreciate the attention they’ve brought the whole idea seems very anti-agile. Agile promotes a democratic meritocracy. These lists do the opposite, they create “hero’s” people whose ideas are more important others. Instead I think we should be widely read in the Agile community often reaching outside our immediate realm. To that end I’m asking for your help creating a list of voices we should hear more from. My goal is find ~100, the limit is more from my time and energy than the lack of more people we could find.Some simple ground rules:
- Nominees have to be a track record of doing something Agile for at least a year
- Not the top 100 of any previous list
- There are no algorithms involved – when I discuss backlog ranking/ordering in my Scrum training I suggest that human ordered lists have more value than those ordered ROI calculations
- I’m most interested in people who write about their experiences (good or bad)
- Please don’t suggest yourself
- I will reject suggested people for no visible reason Ok this one is poorly phrased, the only point is that if I don’t include someone I won’t write a paragraph about why.
- Inclusion in this list is completely arbitrary, based entirely on my judgement (there is no appeal board :-)
When you suggest someone please tell me:
- Who they are and why they’re interesting
- Where they write blog (or some other source)
- Twitter ID, Google+ link, etc…
If you suggest someone but don’t include their blog it makes hard to find their writing, please make it easy for me. This list will only be about Agile people. Another time I will shine a light on interesting sources outside the Agile community. Suggested #100Agilelessorknowns – not perfect but its shorter.
In the spirit of inspect and adapt I’m open to suggestions that will make this better.
Update: “I will reject suggested people for no visible reason” – It was suggested that this was poorly said. Agreed. When I other talked to the authors of other lists they say they use stats to make the decision to avoid controversy and having to justify their choices. This list will come from the heart and might not include someone who you think should be there. My only point was that when I do exclude people I don’t want to spend the time writing about why. I acknowledge the list is arbitrary as is any human curated list that’s what will make it interesting.
-
Joining MarsEdit and Dropbox
Apr 20, 2012
I use MarsEdit from Red Sweater Software as my exclusive blogging tool on the Mac and have over the last couple years. I tend to write lots of draft posts on my desktop Mac Pro that never get published or I work on them when I can before pushing out to my WordPress blog.
I also use MarsEdit on my MacBook Air when I travel or even if I am working on the couch in the evenings. All of the drafts in MarsEdit are saved locally on the computer I am going the writing and once I want to be able to edit from the other computer I end up pushing as a draft to the blog and pulling it down via MarsEdit. This is a tedious task and has problems. I don’t know how many times I pushed up a draft and forgot I did a few days later only to work on an old draft locally.
I then had the idea of possibly setting up MarsEdit to save local drafts to Dropbox but there didn’t appear to be an option in MarsEdit to change the location of local storage.
But…there is usually a way to do anything.
The steps below worked great for me, you mileage may vary. If Dropbox is installed in its default configuration then these instructions should work for you. I configured my systems with my Mac Pro being the “main” system and my MacBook Air as the secondary. I had local drafts on my Mac Pro but NOT on my MacBook Air. If you follow these steps exactly and have local drafts on each system them you will lose data.
Without further ado, follow these steps. I assume you know how to open a terminal sessions and feel comfortable typing command.
1. Make sure you quit MarsEdit from each system you are going to change the location of local drafts.
2. Find local MarsEdit drafts on your main system – A bit of spelunking reveals where they live in:
~/Library/Application Support/MarsEdit/LocalDrafts
3. Create folder for drafts in Dropbox.
mkdir ~/Dropbox/Library
mkdir ~/Dropbox/Library/MarsEdit
4. Move the local drafts from the main computer to Dropbox, enter these two commands:
cd ~/Library/Application\ Support/MarsEdit
mv LocalDrafts ~/Dropbox/Library/MarsEdit/LocalDrafts
5. Now let’s fool MarsEdit into thinking nothing has changed. Symlink the old name to the new location.
ln -s ~/Dropbox/Library/MarsEdit/LocalDrafts ./LocalDrafts
Now, on each of the other machines start with step 6.
6. Remove the local draft folder (if it’s not empty and delete you will lose data).
rm -rf ~/Library/Application\ Support/MarsEdit/LocalDrafts
7. Time to fool MarsEdit here too. Symlink the old name to the new location.
ln -s ~/Dropbox/Library/MarsEdit/LocalDrafts ./LocalDrafts
Repeats steps 6 and 7 for each computer you need to share local drafts.
Once you start up MarsEdit on each of these machines, you should see the same local drafts. If not, then double-check the steps above.
-
vikashazrati
Apr 11, 2012
This one solved it for me
Filed under: Java
-
ScrumMaster Tales – New People on the Team
Apr 11, 2012
After six months ScrumMaster John has finally found someone to fill the role of Senior Software Developer on the team. The goal is to find someone who can round out the team and play many roles (see: Bottlenecks). After many interviews they’ve settled on Kirby[1] who has over 20 years experience developing software, both server side and GUI. He is a self proclaimed expert in most of the technologies the team uses and that’s where the problems start. In addition the team members assume that he is being very well paid, perhaps better than any of the rest of them.Attempting to learn the basics of the code base in his first few Sprints, Kirby takes on GUI, Middle tier, Server and Testing Tasks. He asks his teammates for code reviews and the code is pretty good, however it becomes clear that he can be touchy on some subjects and isn’t eager to receive negative feedback. On the subject of feedback he says: “I’m a Senior Developer, I don’t need to learn from you, it should be the other way round”. At first the team just try to accommodate his needs, but after five to six weeks tensions begin to rise. Ian (the Middle Tier guy) feels threatened, he sees Kirby trying to occupy the niche he has occupied on the team. To compensate Ian spends more time doing server side work, which in turn causes Doug some concern. Even Tonia feels a little bit threatened as Kirby starts doing some automation work.
Seven weeks into Kirby’s tenure, during a daily stand-up (Daily Scrum), he is describing about his work to display book prices in the local currency when Ian (usually a calm individual) blurts out: “He’s stealing my work”. John swings into action saying: “Ian thanks, this seems important could we discuss after Standup and let Kirby finish”, Ian agrees sheepishly. John turns back to the team and just says why don’t we pickup again with Kirby. After standup John grabs Ian and says lets go out for coffee. Over coffee they chat and John hears Ian’s view on the situation:
- Kirby isn’t open to suggestions or comments about his code
- Kirby is pushing him out the work that he does regularly
- Kirby often denigrates the quality of the existing code
- Kirby makes it clear that the other developers should be learning from him
After coffee with Ian, John goes for a walk with Kirby to hear his point of view:
- Kirby sees that the code doesn’t have the quality (see Technical Debt) he would expect of it
- Kirby is aware that he’s sometimes seen as pushy and isn’t sure how to solve that problem
- Kirby understands how Ian feels push aside but isn’t sure that this is his problem to help solve
John spends the rest of the day, buying coffee and tea for the rest of team, talking to one person at a time. While they don’t feel as much pain as Ian they feel some of it.
The question is what to do now?
Analysis
First and foremost John can’t take sides here. He can look to find the positives he sees going on but can’t champion anyone’s viewpoint. As soon as he starts to do that he will erode his credibility as a neutral ScrumMaster. The best he can do is get the various players talking and see if they can resolve the problem. To see some of the problems here read Brian Buzzoto’s: “Watch for Triangles”.
My viewpoint as Editor: Many of the things Kirby is doing: working across the code base, doing testing work, writing unit tests, generally raising the code quality are good for the team. The problem is that in doing this he comes across as a know it all.
The key here is remember Tuckman’s Model of Team Formation (Forming, Storming, Norming, Performing). When even a single team member changes the team reverts to forming and after seven weeks they’re rediscovered storming. Storming part of process can’t be avoided, skillful ScrumMastering aka interference, in fact interference make it last longer.
Story
The next day John gets Kirby and Ian to sit down and talk. He sets out ground rules: talk about your feelings, talk about events, use “I” statements not “You” statements. He suggests the goal isn’t to solve any problems today just understand how the other feels. Even if they still disagree, they need to understand the other person’s viewpoint. In future Ian suggests that checkin every day with how their working relationship is with the other person.
… The story could/should continue for weeks. At this stage lets assume that they’ve at least started to understand each other. Maybe we will see hints of this story in future posts.
Analysis
It’s striking that this problem occurred in part because the team weren’t involved in the interview process. Hiring well is a very difficult problem, its even harder when the people who will spend the most time with the new hire haven’t met them before. I find it very effective to involve team members in the interview process. I would even get the potential hire to pair program with the rest of the team as part of the interview. There is nothing like a few hours of coding (spread across the entire team) to get a sense of what working with them will be like.
[1] Any resemblance to the author of this blog is purely accidental as Kirkby is purely a fiction of my imagination.
[2] To make this work the team need some basic interview training so they avoid the various legal pitfalls. Ragnwald had some great examples recently in: “I hereby (fictionally) resign”



