Wednesday, December 31, 2008
Power equipment is not always suitable
Monday, December 29, 2008
Thanks and Gratitude
At the end of October, the well-funded start up with which I was situated shed over 1/3 of its staff. Normally this type of event would be challenging in and of itself, however given that I funded the start up of my own company in 2005, the current poor economic conditions and the recent, rapid increase in living costs, this loss of income for our one-income family was particularly unnerving. My wife and I started planning for situations and circumstances that I would never have predicted only a few years ago and we prepared ourselves for a very modest and rather disappointing winter holiday season.
However, as we began the process of reining in expenses, a largess that we had not ever expected has been given to us that has made our holidays the most profound we have experienced. A multiplicity of support and generosity has been given to us in the form of gifts from our family (my nieces and nephews asked that their holiday gifts be given to our family), school lunches and assistance with our energy expenses, gifts provided to four of our five children from the elementary and middle school, and even an anonymous donation (yes! a check from an anonymous donor was delivered to us) that has enabled us to provide our children with a warm and intimate holiday celebration. We feel that this holiday season has been the most meaningful we have experienced and we owe a tremendous amount to our friends, neighbors and community.
Therefore, we wish to say "Thank you." Thank you to our families and friends; thank you to our neighbors; thank you to our community for all that you have done to help my family.
The generosity we received has also had another effect. Inspired by the spirit of giving, my eleven year old daughter decided to donate her hair to the Locks of Love program. So, she cut off a braid about 12" long and packaged it up. As pretty as she was with long hair, I think she's even prettier with short. Of course, I may be biased.
Wednesday, December 17, 2008
Humor for Programming Geeks
RailsEnvy.com Commercials. These are a series of spoof ads that take off from the Apple Mac/PC schtick.
If programming languages were religions... from the Aegisub blog walks us through a number of programming languages and assigns them to religions. This works on oh so many levels.
The inspiration for "If programming languages were religions..." was the "If programming languages were cars..." blog post. I love the first lisp entry. Oh, and PHP, that made me howl.
Go ahead, look for your favorite languages there.
Monday, December 08, 2008
Replacing ActiveRecord with DataMapper in Ruby on Rails
I recently had an opportunity to do a little presentation and I chose to talk about replacing the ActiveRecord ORM (Object Relational Mapper) with DataMapper in a Ruby on Rails application. DataMapper was incredibly fast at returning records. For a single table look up, it took 0.0150% of the time that ActiveRecord took to return all 10,000 records. Holy Toledo!
Here, check this out. This is a series of benchmark runs between two nearly identical applications. They both have the exact structure, number of pages, etc. and same number of pages. But, one application is using ActiveRecord and the other is using DataMapper.
10,000 Records recalled with ActiveRecord
user | system | total | real | |
---|---|---|---|---|
#1 | 1.050000 | 0.040000 | 1.090000 | ( 1.227590) |
#1 | 1.050000 | 0.020000 | 1.070000 | ( 1.222924) |
#1 | 1.080000 | 0.020000 | 1.100000 | ( 1.250905) |
#1 | 1.100000 | 0.030000 | 1.130000 | ( 1.288719) |
#1 | 0.860000 | 0.020000 | 0.880000 | ( 1.724392) |
Average: 1.342906
10,000 Records recalled with DataMapper
user | system | total | real | |
---|---|---|---|---|
#1 | 0.000000 | 0.000000 | 0.000000 | ( 0.000198) |
#1 | 0.000000 | 0.000000 | 0.000000 | ( 0.000196) |
#1 | 0.000000 | 0.000000 | 0.000000 | ( 0.000204) |
#1 | 0.000000 | 0.000000 | 0.000000 | ( 0.000205) |
#1 | 0.000000 | 0.000000 | 0.000000 | ( 0.000202) |
Average: 0.000201
Datamapper requires 0.0150% as much time as ActiveRecord
One cool thing about doing this presentation is that when I started encountering problems with working on Rails in XP (although I know it is possible for the most part), I decided to create a Linux installation. My first thought was to repartion my hard drive and install Linux there. But, I'm using an older machine and was afraid of data loss (fortunately, I use an online backup solution for recoverability, but there is still all that work to do). Therefore, I ended up creating a persistable Ubuntu 8.10 installation on a 2 GB Flash Drive. That will have to be a topic for another post.
The presentation is available on SlideShare for your viewing pleasure. I walk through the steps in the presentation after a very quick overview of ActiveRecord and DataMapper. The source is available on github.
Please use the SlideShare posting and the github source for your resources. I used the DataMapper web site, of course, as a primary reference. I also used
François Beausoleil's blog, How to Use DataMapper From Rails, Including Migrations and Tests, to get started.
Monday, December 01, 2008
The Dumbification of the American People
- Spent well over 20% more than we should have on the price of homes.
- Built homes that are well over 20% larger than they need to be.
- Purchased 20% more consumer electronics than we needed. (In my case, 300%).
- Extended home ownership rates 20% beyond where they should be (to the mid-to-high risk credit folks).
- Gotten 20% fatter than we should be.
Monday, November 24, 2008
Re-examining Assumptions
You see, the meeting was a first conversation about a position in a company and, truth be told, I was very unsure about the prospects and viability of the company. It has been in existence for over a decade, has a good size staff, but, although a web company, did not have significant traffic and, although established, had significantly lower revenue (and higher percentage overhead) than I had expected and with which I am comfortable. In short, there were warning flags.
My assumptions were that the company was not fully executing on its potential, or that perhaps the competition caught up to it and surpassed it. So that is where I focused my pre-conversation research.
The person with whom I met on Friday impressed me. First, he wasted no time in spelling out that he expected significant growth and he laid out the core thinking to his expectations. He made sense and had a fresh perspective on the problem, which is that the company's traditional domain is no longer its current domain, or more accurately, its current growth opportunity domain. The company has to move from one focus -- let's say "newsletters and messaging for the on-line widget industry" is what the company believes is its current domain -- to a new focus -- let's call that "automated marketplace for connecting widget manufacturers to widget consumers" as its new domain. This person's thinking is revolutionary for the company.
Unfortunately for my "pre-screening interview", it was also revolutionary for me. I assumed that we would be talking about one thing -- the company's market position, brand, existing product line, and immediate growth strategy -- so I didn't scour the information I had sufficiently to anticipate where the conversation would go.
From my project and program management experience, I know that it is critical to identify and document the personal and project assumptions for efforts. One of my favorite books on risk management, "Risk Management, Tricks of the Trade for Project Managers" by Rita Mulcahy is a canon that embodies the assumption identification in the processes. I've used assumption identification to pull out critical risk factors in my product management work; it's been a huge differentiator that has helped me get past personalities and focus on functionality, opportunity and risks in new product development.
So I am more than chagrined that I slipped on this. That made me wonder if assumption examination is part of the professional zeitgeist. It doesn't seem to be. Looking around for conversations on how assumptions are recognized and incorporated into various processes, I found an article from EE Times Asia on Re-examing Assumptions, plenty on assumptions at the software engineering level, a little blurb on program risk management from PgMP by Paul Sanghera in Google Book Search, a news article on SEI from 2003. Much more on the engineering side than the business process side, in my opinion, although New Product Forecasting by Kenneth B. Kahn has a section on assumption management that caught my eye.
There is opportunity here. Seemingly there is need for some assumption evangelism -- how are you going to check into your working assumptions about the important things in your life? I know what I'm going do about it in mine.
Monday, November 17, 2008
How to stay postive when unemployed
Seriously, Fidelity, which had laid off 1,300 announced another 1,700 jobs will be cut. JPMorgan will be cutting jobs. Citibank lays off some 75,000 people over the past few months -- that is three times the size of my suburban community!
So there are a lot of folks who are looking for work. I met a woman who has been looking for another position as an office manager since last July. She wasn't very positive at this point.
No one argues that times are hard. A lot of experts believe that they are going to get harder before they get better. So, no one would fault you for feeling sorry for yourself should you be in the position of needing to find a new position. However, it's the worst thing you can do for yourself.
In just the same manner as sound business theory dictates that one should save cash when times are good and spend when times are bad, one must stay positive when one is in a tough position. If you are depressed, you will simply not be doing the things that you should be doing. You simply cannot afford the luxury of staying depressed.
In the hopes that someone benefits from seeing that they are not alone in tough times, here are some of the things I do regularly to keep myself positive and recommend them enthusiastically:
- Count your blessings. Seriously. Daily. I do. My wife, my children, my health, my skills and experiences, my well-trained dog. Everything. And I do it vocally. Here is what I said to my wife this morning "Good morning, my love. I am so glad that you married me." That wouldn't be too hard for you to do, would it?
- Enumerate your strengths. Call 'em out. Your years of experience. Your doggedness. Your perseverance. Your ability to judge people. Whatever it is that you know gives you power and ability.
- Mitigate your weakness. Whether you feel you procrastinate, or you do not negotiate well, or you do not follow through, or you loose your temper, or whatever, there is a way you can mitigate these failings. First of all, you are in control of your life. You can make amazing things happen. These things you do not like about yourself are not fatal characteristic flaws -- otherwise you would already be dead! They are risks to your positive life style that you can identify, mitigate and control.
- Write down your Values and Goals. List your Abstract Goals (long, healthy life; financial security; etc.), Concrete Goals ("A position as such and such earning so much annually") and your Immediate Goals (Two high-quality job applications today and four follow-up calls). Read daily out loud.
- Exercise. Yes; take time for yourself to do whatever you need to do as exercise. Whether that be walking to the library for a new book, going for a jog, or swimming a mile, get yourself out of the house. There are tons of reasons why exercise is good for you, so only a great fool would deny themself such easy benefits, and you are no great fool, so what are you waiting for?!
I would very much like to hear what you do to get yourself positive when you're feeling down. Please take a moment to click on the "comment" link below and send me your ideas and practices.
Monday, November 10, 2008
Software Development Process and the Start Up
Then you go right back into it the next day.
Which will eventually burn you out.
But greed and excitement are wonderful things, so you muster your energy, take a deep breath and dive back in. The launches are satisfying. The acknowledgment from your peers and management are satisfying. The accolades, press releases, funding efforts, and the promise that you are contributing to the Next Big Idea are all satisfying. But you know that it can't continue forever; that at some point the company will need to cross over from Commando stage to Infantryman stage and then eventually to Policeman stage (use what ever stage names you prefer here).
So here's the question; What do you need in terms of process at each stage?
Let's work our way backwards. No one would be surprised to find a mature CMMI and ITIL led organization at the Policeman stage. Some degree of CMMI maturity would quite natural for a company at the Infantryman stage, say CMMI maturity level 2 or 3; repeatable and documented process, improvement processes and some feed back capability.
But what about Commando? What about start ups? Eventually the commandos will move on and the company will be taken over by Infantrymen, but that could take years. For how long will the Commandos be running on their own gumption?
Those who live by process know the value it brings; reduced flailing, more reliable delivery, lower defect rates, greater alignment to business objectives. However, there is the challenge of perception to overcome. Perception that process interferes with creativity, introduces bureaucracy, hinders agility and is too expensive. Especially within the start up environment, which is often Cowboy development. "We have smart people, we don't need all that process stuff"
Poppycock and balderdash.
This is a simple case of "enough." Just enough process to deliver effective products. Just enough framework so that everyone knows that stages. Just enough practices so that a repeatably effective cycle can be created. Just enough monitoring and feedback to that mistakes are not endlessly repeated. Just enough borders to ensure that goals are repeatedly redefined to the point of ineffective thrashing. The basic check list is short:
- Short, but effective cycles -- this allows for flexibility and redirection without throwing away effort.
- Clear deliverable at the end -- the thrill of victory is a strong motivator
- Clear success factors -- New features in this build? Then only new features. Bug fixes? Then only bug fixes. One new feature and three critical bugs? Fine; do only that. What is the least amount that you can do to be successful in solving todays problems.
- Blessing and direction from senior management -- no sponsor, no work. The stakeholders decide what is the most important thing for them to have.
It is quite possible to respond to the short-cycle real-time demands of a start up. After all, the start up is first an idea. That idea will be tested by your customers, who will then tell you what business you're in.
All that stated, you have product to deliver. There is time pressure, and although there are unending pressures to constantly change, tweak and improve your product, you simply HAVE to launch. You HAVE to get to a launch date and the product MUST be released. Never loose sight of that.
So then the next question is "How can you manage the exchange of endless pressure with the real-time need to deliver?"
This is the job of product management. Product management starts with industry and market knowledge, time to market and market opportunity, cost to develop and return on investment. The funnel of endless ideas must be quickly and efficiently evaluated by a capable product manager. The value of the idea needs to be quantified without romanticism. The cherry picking becomes much easier at this point.
In summary, enough software process in the start up will produce superior products more effectively than ad hoc or heavy handed models. Focusing the development work on valuable efforts comes for successfully vetting the opportunities and defining the critical success factors.
Friday, November 07, 2008
Perfect Business Envelopes with Open Office and the Samsung ML-1430
The key to getting your envelope to print correctly is matching up what the printer expects with what you are telling the printer. That said, here are the specific steps and some thoughts on how you can expand this to other printers.
When you have your business letter printed and are ready for your envelope, I recommend that you create a new document with the envelope format.
TIP: Highlight and copy the recipients name and address from the head of the business letter. That way you have it ready to paste into your envelope wizard.
Insert an Envelope
Select Insert, Envelope to open the Envelope Wizard. The Wizard has three tabs and you need to visit each one!
On the Envelope tab, paste the addressee's information (aren't you glad you copied that instead of having to retype it now?). Make sure the Sender box is checked and that your return address is present. Now select the Format tab. Make sure the Format field in the Size section
is set for "Env. 10" and select the Printer tab. Here is where much of the magic juju happens.
The ML-1430 has a center-feed envelope feeder. The print side faces out and the top of the envelope (into which you slide your letter) is on the right. Therefore, select the icon with vertical envelope orientation that feeds from the center of the print tray and make sure "Print from top" is selected.
Here is what my dialog box looked like:
Now click on "New Doc."
What you will see is horrifically ugly, but will get us to where we need to be. So onward!
Format the New Envelope Document
Select Format, Page to get the Page Style dialog box. Change the Format selection list to "Env. #10" and reduce the top margin to 0.00". You will ge a dialog box warning that the margin settings are out of print range. Say "Yes" to apply the settings nonetheless.
Now click on the line of the text box containing your return address so that it shows the little green handles. Then right click inside of it and select "Frame". In the Position section, set the Horizontal and Vertical positions to 0.39" and click on "OK".
Now do the same for the addressee text box and set the Horizontal andVertical positions to 4.5" from the left and 1.75" from the top.
Still with me? Here comes the easy part. About time, too, right?
Print your Envelope
Put your envelope into the envelope feeder of your printer. As mentioned, it goes print side out, top of the envelope to the right. Snug up the print guides to hold the envelope steady. You might need to take the letter paper supply out of the printer to ensure that the envelope gets picked up by the sheet feeder.
Open the output slot at the front so that your envelope doesn't get mashed up by being rolled to the vertical output tray.
Click on the print icon in Open Office and make sure your envelope feeds correctly. Voila!
Do you need to print with an earlier version of Open Office? Here is some advice that got me started. However, the specifics of the Samsung ML-1430 and Open Office 3.0 were enough that I wanted to document this for electronic posterity.
Save the Envelope as a Template for future use
Oh, one more tip.
TIP: Save your envelope as a template so you can easily print envelopes whenever you want.
Here's how to do that:
Start by replacing the specifics of the addressee field with some generic placeholders. Here is what I used:
Addressee
Title
Company
Address Line 1
Address Line 2
City, State, ZIP
From within your envelope document, select File, Templates, Save. Select "My Templates" as the category and enter a name for the template. I used "ML-1430 Envelope" and click on OK.
The next time you need a size 10 envelope for a business letter, select File, New, Templates and Documents. Click on "Template" and then double-click (tricky that!) on "My Templates". There you will see your ML-1430 Envelope template and you can easily replace the placeholder text with the address information from your letter.
There you have it! I certainly hope that helps you in your quest for perfect business envelopes!
Monday, November 03, 2008
Reflections on a marathon
Monday, June 23, 2008
More on Things Physical
In following up with a number of doctors on the on-going issues related to having been hit by a car while riding my bike, I've had my self assessment changed.
While admittedly no younger, having all those doctors and other advisors say, "Well, you're still young..." as a preamble to their anaysis certainly has had an effect. I'm not feeling quite as old as I did in November when dealing with the injuries was more immediate. I've been through a winter of rehabilitation and have emerged into Spring with renewed passion.
On my first race of the season, even though I was pushed up into the next age group by the reality of my birth date, I was 10 seconds faster than my time last year -- and I did really well on that race last year.
Last night, I went running with my training partner. We ran further and faster together, keeping each other from flagging at different time and turned in a really respectable time for around 8.5 miles. Next week we push up to to around 10 miles.
Yes, I still need to swim, ride and run, plus stretch out and rest to keep my body flexible and strong and hold off the decay of spondylolisthesis. Having been hit by a car and the resulting long term injuries certainly complicates matters and requires significant additional time every day to restore strength and flexibility.
But, gosh darn it, I can do it. I am doing it!
Nothing like a new mind set to undo a year of aging.