has moved

November 11th, 2009

If you are reading this, then everything is working with my website’s new home in the cloud. I have only moved over the blog, and I am redirecting all traffic from the main url to here. I have not updated the content on the home page in at least three years. I might get to that at some point, but I really doubt it. This blog’s archive is littered with posts of me claiming to update the content there, yet nothing has happened. :)

Oh, and if you try to contact me at an email address that is not scott [at] vaderpi [dot] com, then you will not get me. That is the only personal email address that I am checking anymore.

sudo, Ubuntu, and the PATH environment variable – a love story (of sorts)

November 7th, 2009

I just started setting up a Ubuntu Karmic Koala (9.10) server in the cloud, and I became very frustrated very quickly about the default behavior that is compiled into sudo. Since there is not much info laying around the net on how to solve this problem, I thought I would throw this post together. So if the big search engine in the sky brought you my way, then I hope this helps you.

Sudo on Ubuntu Karmic has been compiled with the –with-secure-path option. This causes sudo to ignore any changes to the path environment variable. And I do mean any changes. Changing the path in the user’s environment ala PATH=$PATH:/opt/other-bin sudo gem will not work. Neither will modifying the path variable in the /etc/environment file. And don’t try to modify the PATH in /etc/profile or /root/.profile or /root/.bashrc because none of those will work either.

If you want to see the path that sudo is using then take a peek at /usr/share/doc/sudo/OPTIONS. There you will see the exact path that was compiled into the sudo command.

This “secure path” can be modified. But before I tell you how, I should insert a word of caution. My research indicated that this was done for your protection. As with many things that are done for your protection, it is annoying as hell. But it evidently makes it harder for trojans to run commands as root. So make sure that you think twice before making changes to the “secure path” that sudo uses when it runs.

Thanks for patiently reading the disclaimer. Now for the juicy details. To modify sudo’s “secure path” you just need to add a line to the /etc/sudoers file. This file is best modified using the visudo command. So fire up visudo and add the following line.

  Defaults        secure_path=<your new path>

I highly recommend that you start with the value that sudo was compiled with and then append to it.

I hope that helps you.

It would have been really nice if this was documented better somewhere. I was only able to piece this solution together after reading a lot of confusing forum posts and after several head-scratching reads of the sudo man page.


October 22nd, 2009

While I have not worked on it in a few weeks, I would like to talk about Cukeness. Cukeness is an open-source project that I started right after attending Agile 2009. I actually started writing features/stories for the application in my Moleskin sketchbook on the plane flight home.

So what is Cukeness?

Cukeness aims to be a web-based user interface for Cucumber.

Wait. What is Cucumber?

Cucumber is a Behavior Driven Development tool that allows developers and product owners to have a conversation about how an application should work. This tool is great for the product owner, because the conversation is held using terms that she understands using plain English (or another natural language, like French or Italian). This tool is great for the developer, because the log of the conversation can be executed against the system under development to evaluate if it meets the product owner’s need.

Okay. And Behavior Driven Development is?

Behavior Driven Development, or just simply BDD, is an approach to software development that primarily focuses on delivering business value, not just technical value.

Got it. Now what does this conversation between product owner and developer look like?

The focal point of the conversation is the “feature”. Some approaches refer to this instead as a “story” and other approaches refer to this concept as a “use case”. The term you use does not matter. What does matter is that the developer and product owner work together to describe how the system is supposed to implement a particular feature. To do this, Cucumber provides the “scenario”. Each feature contains a set of scenarios. Each scenario describes, in detail, how the application is supposed to behave within the context of the feature that the scenario belongs to.

To convey this level of detail, scenarios are written with three kinds of sentences, each starting with either “Given”, “When” or “Then”. Given sentences are used to describe the steps that are taken to establish the scenario. When sentences are used to describe the actions that are performed. Then statements are used to describe the result that is expected from performing the action described in the When statement. These statements are written in a simple text file (example) with a name that ends with “.feature”.

Alright. How does Cucumber actually talk to the system under development?

Feature files (any file with a name ending with “.feature”) are given to the Cucumber command-line utility. Cucumber reads each sentences in the feature files and tries to find a corresponding “step definition”. Each step definition is responsible for talking to the system under development and performing the action that is described by the scenario sentence, or step.

Step definitions are written by the developer in a computer programming language. At this point, many different languages are supported, but ruby is the most common. Product owners should not have to worry about writing the step definitions. They only need to make sure that the step definitions get written.

So why does Cucumber need a user interface?

Perhaps it doesn’t. But not everyone is comfortable using a command-line interface, especially your typical product owner. At the moment, that means that developers become responsible for executing the feature files to determine if the system is behaving correctly. I would like to give this power to the product owner.

How does Cukeness let product owner execute the feature files?

Well, right now, Cukeness still needs a little bit of work, so instead I should talk about how Cukeness will do this.

Cukeness provides wiki-like editing capability for features and scenarios. This gives Cukeness users the ability to read existing features or scenarios and create new ones through a comfortable user interface.

Cukeness users also have the ability to execute the features and see the results of the execution. Users are able to execute all of the features at once, execute a single feature or execute a single scenario. Results are displayed by annotating each scenario sentence with the status that resulted by running the scenario sentence. Furthermore, sentences are colored coded to provide better visual feedback. Cukeness uses the same colors that the Cucumber command-line utility uses.

When can I use it?

Well, like I said, Cukeness still needs some work, and is not ready yet for public consumption. Not even as a beta. However, I encourage any developer that is interested to fork the source code on github and start playing around. I would really like to see someone contribute some patches to move the project further along.

I have been distracted by another side project that I am exploring, and as a result I have not worked on Cukeness in a few weeks. However, I am committed to seeing the project succeed.

What tools were used to develop Cukeness?

Cukeness is a ruby on rails based web application. Application behavior is described using feature files and are executed with cucumber. Tests are written with the rails unit testing framework, although I have been considering switching the rpsec for this.

The State Of Me

September 29th, 2009


There have been a bunch of recent events that I need to catch my friends up on. Some people know some details, but very few people know all of the details. So what better way is there to communicate with the masses than my blog?

I guess there is no better place to start than the beginning.

I can’t stay awake

For the last few years, I have been struggling with a sleep disorder. The diagnosis that best describes my issue is hypersomnia. The basic gist is that I cannot stay awake during the day. This also means that I have trouble getting up in the morning. Not just a little bit of trouble, but a lot of trouble. So much trouble that some days I don’t make it into the office. This got so bad that I was missing about 5-6 days of work a month. If you do the math that is about once a week, sometimes more.

It became clear to me that the quality of my work was severely suffering as a result of this condition. With that in mind, I asked to be placed on medical disability leave. Basically, I hit rock bottom. All this happened about two weeks ago.

A really good friend of mine also made it clear that I needed a change of scenery in order to really get better. I needed a soft place to land and a really good social support network. People to keep an eye on me as I worked through my issues and to be there through whatever treatment is required. His suggestion was to move back home. So I did. I have been living with my parents in the Richmond, VA area for the last 2 weeks.

My parents have been crazy supportive through all of this. They have been helping me monitor my sleep habits, and they have been using their social network to get me in touch with some of the best doctors in the area.


An uncanny coincidence of having to move home was having to face the people of my past. My ten year high school reunion was the same weekend that I actually made the move back to my parents house.

There were a few things that I did before the reunion. I watched the movie Gross Pointe Blank, and I contacted Andrea Goulet, perhaps my best female friend from high school, to find out if she was going to be there.

After much internal struggle about where I was/am in the world, I decided to go to the reunion, and I sought out Andrea. We reconnected and chatted. We reminisced about the past, laughed and share small-talk. Eventually, we confessed that we had crushes on each other in high school, but never acted on them.

What else could I do? I had to ask her out on a date, I just had to. There was really no option. My heart was pounding faster than the beat of the bar stereo system, and every muscle in my body was shouting that it was the right thing to do. Her response, “Here’s to finally growing a pair.”

So we went out on a few dates, and it was not long at all before we decided that we were not interested in dating anyone else. Of course we had to make things official by changing statuses on Facebook.

I am happier than I have been in a long time. Andrea is aware of my current situation, more aware about details that I am not yet comfortable sharing in a public forum, and she has not run away. She is staying by me, and she is being really supportive. Just another node in the support network that my good friend told me I needed to go find.

We have a lot in common, but we are are also really different. Seems like the perfect match. And, hey, she has a thing for geeks. :)

The Future

What’s next? I am not sure. I am working with my doctors to get to the bottom of my problem. In my spare time, I am trying to stay fit both physically and mentally. Physically, I have been riding my bike, running, and going on hikes. Mentally, I am keeping my programming skills sharp by working on cukeness, a project that I am sure to write more about in a later post.

Where am I going to end up? I am feeling a really big pull to stay in the Richmond, VA area. I really missed being here. The pace of life is so much different than it was in the Washington, DC area or the Roanoke, VA or the Blacksburg, VA area. I am glad to be back, and I think that … no scratch that … I am going to stay.

Twitter Updates for 2009-09-26

September 26th, 2009
  • A late night trip to Waffle House caused me to wake up with really bad indigestion. Let’s hope the Fruit Loops I just ate help. Any bets? #

Powered by Twitter Tools.

Twitter Updates for 2009-09-25

September 25th, 2009
  • I have a giant smile and it is @andreagoulet’s fault. :) #
  • @andreagoulet Heros was pretty good. It was a big distraction, though. I did not get much done on cukeness because of it. #
  • At InLight in Richmond with @andreagoulet. #

Powered by Twitter Tools.

Twitter Updates for 2009-09-22

September 22nd, 2009
  • Watching Heros and working on cukeness. #

Powered by Twitter Tools.

Twitter Updates for 2009-09-20

September 20th, 2009
  • I sing in the car like it’s my job. :) #

Powered by Twitter Tools.

Twitter Updates for 2009-09-14

September 14th, 2009
  • Everyone should watch Gross Pointe Blank to prepare for their 10 year high school reunion. #
  • @emalamisura I would create a thin wrapper around the web service client that knows how to retry any call if there is a timeout exception. #
  • Cukeness is a tool that I am working on to provide a web GUI for editing/running Cucumber scenarios. #
  • @emalamisura Nope. I will have to check it out. #

Powered by Twitter Tools.

Twitter Updates for 2009-09-03

September 3rd, 2009
  • Waiting in a doctor’s office waiting room is always a fun experience. #
  • @sensibletron Consider using Helvetica or Verdana #

Powered by Twitter Tools.

Twitter Updates for 2009-08-29

August 29th, 2009
  • Wheels down in Washinton, DC (IAD). #

Powered by Twitter Tools.

Twitter Updates for 2009-08-28

August 28th, 2009
  • #agile2009 is almost over. The bar stereo is playing Another One Bites The Dust. #
  • @rslawrence I would like to help with cuke4nuke. I have already forked the github repo. What is the best way to collaborate? Twitter? Chat? #
  • Agreed! RT for #agile2010 it would be nice 2 have 60-90s vid preview of by the presenters (via @hroark) #
  • @rslawrence I think the attributes read better than the lamdas. And for assertions, I recommend the nunit Assert.That().IsEqualTo() syntax. #
  • In a taxi heading towards the airport. Goodbye #agile2009. I hope to see everyone in Nasville, TN for #agile2010. #
  • Ugh. For some reason I cannot install the nokogiri them under Snow Leopard. I think it has something to do with the native extensions. #
  • Ugh. For some reason I cannot install the nokogiri gem under Snow Leopard. I think it has something to do with the native extensions. #

Powered by Twitter Tools.

Twitter Updates for 2009-08-27

August 27th, 2009
  • #agile2009 The cucumber session was great. cuke4duke is a great extension. I can’t wait to work on cuke4nuke. #
  • Heading for open jam to see if scrum is evil. What do you think? #agile2009 #

Powered by Twitter Tools.

Twitter Updates for 2009-08-24

August 24th, 2009

Powered by Twitter Tools.

Twitter Updates for 2009-08-23

August 23rd, 2009
  • My flight to Chicago was canceled, but I was rebooked, luckily. I hope the rest of #agile2009 goes better. #
  • Just landed in Philly. Next Chicago. Let’s hope this one exists. #agile2009 #
  • Yippie. This flight exists. I am on the plane. Hmmm….. any odds on my luggage being in Chicago when I get there? #agile2009 #
  • Wheels down in Chicago. Anything going on tonight? #agile2009 #
  • @athought @Morendil Glad I have a Sprint 3g card with me. #
  • My bags beat me to the airport. I guess I should have been on the same flight. Oh well. This screw up could have been a lot worse.#agile2009 #
  • At the bar and looking for Agilists. I have a hat with a goomba (from Super Mario) on it. #agile2009 #

Powered by Twitter Tools.

Twitter Updates for 2009-08-04

August 4th, 2009
  • I just pre-ordered the Mac Box Set Family Pack that comes with Snow Leopard. I can’t wait for it to come in. :) #
  • i !<3 meetings #
  • Figuring out how to get unordered lists to display text content with vertical alignment is not fun. The secret. Set height = line-height. #

Powered by Twitter Tools.

Twitter Updates for 2009-08-03

August 3rd, 2009

Powered by Twitter Tools.

Twitter Updates for 2009-07-30

July 30th, 2009

Powered by Twitter Tools.

Twitter Updates for 2009-07-29

July 29th, 2009
  • @quspork Thanks! I will be back in the Roanoke area at some point in the near future, but I am not sure exactly which weekend. I will le … #
  • @quspork I will let you know. Thanks again. #
  • @emalamisura We will definitely have to get together soon. Email me and we can set up a time. #
  • Getting into the coding groove with Walls by All Time Low – #
  • Strangest. Song. Ever. Worms Make the Dirt by The Aquabats #
  • I ordered 3 Zolof the Rock and Roll Destroyer albums from Interpunk Monday night. I can’t wait for them to come in. #
  • SkaZilla! #

Powered by Twitter Tools.

Twitter Updates for 2009-07-28

July 28th, 2009
  • The chorus for Cannibal by Reel Big Fish rocks. Lyrics not so much. Odd. I still like it. #
  • Why is My Skateboard by The Aquabats so awesome?! Random loves me; it is ska Tuesday. #
  • Jasmin Wagner oder Bluemchen ist die beste Sanger die alle Zeit! #
  • I am pretty sure that Potshot sings in English, but I am not able to understand any of the words they sing because of thick Japanese accent. #
  • “Your a legend in this room, only in this room.” “Same shit different day, same shit.” #
  • You know what today is? “How was I supposed to know / If the writing on the wall was so clear / Why couldn’t I read it” #
  • I hate opening a file that has not been touched for a while and finding commented out lines of code! They are evil and should be dealt with. #
  • @bradley178 of course! I feel just as bad about deleting commented lines as I do killing roaches. I am really allergic to roaches, too. :) #
  • Ugh. I keep typing ‘’ when I should be typing ‘new Object()’. I think I am becoming a rubyist. :) #
  • I wonder if I know anyone else that is going to be attending #agile2009. #
  • I am bringing my trumpet to #agile2009 so I can rock Muzik Masti like last year. This time I don’t have to get it through Canadian customs. #
  • @emalimisura Cool. Too bad you can’t make it. It will be cool to see Cathy again, though. #agile2009 #
  • @emalamisura Cool. Too bad you can’t make it. It will be cool to see Cathy again, though. Sorry Eric! I spelled your name wrong #agile2009 #

Powered by Twitter Tools.