Wednesday, April 14, 2010
So, this week I'm taking another week of paternity leave. I'm calling it the, "catch up on sleep and give mommy a break" week. So far the results have been excellent. I've been watching Tommy while Jenna does a variety of appointment and takes some time for herself. Also, Tommy has gotten in on the game by deciding to sleep seven hours between feedings at night. That means we can put him down at nine and not have to get up again until four or five. The other benefit is that we can go back to sleep after he wakes up at four.
It's funny how much sleep matters. I feel like a fog has lifted. I'm thinking more clearly and more interested in the world around me. I highly recommend this strategy to other new dads, and am grateful that someone suggested it to me before Tommy was born.
Friday, January 22, 2010
After several months of wrangling with both companies, we've finally received payments for some of our possessions that went missing during the packing / shipping that Oceanair was responsible for. I believe that the packers at Oceanair deliberately manipulated my packing manifest and shipping inventories to allow them to steal thousands of dollars worth of electronics from me during this move.
Essentially anything we shipped by sea that was an electronic item, never made it back to California. This included:
- 2 macbook pros
- 1 sony vaio
- 1 asus eeepc
- 1 nabaztag
- 2 sony psps
- lots of various minor electronics (digital picture frames, ipods, etc...)
- Do your own inventory. Don't let the packers seal a single box, until you have seen what is in it.
- Count each box that goes out the door and compare that count to your own inventory. If your inventory doesn't match the number of boxes going out the door, tell the packers to empty their truck and find the missing boxes.
- Make sure there is someone in the room with every packer at all times. Don't trust them.
- Make a photo inventory and capture serial numbers on all of your valuables, and submit it to the moving company before they pack.
- Add a call-home application to any computer that is going to be shipped, and make sure it has an encrypted drive and requires authentication to boot up. Even better, erase the hard drive on any computer that will be out of your control.
Thursday, September 24, 2009
The house is great, Jenna and I are working like mad to get settled. Every night I try to do three tasks to get us closer to that end, and Jenna does several more during the day. We've been hanging pictures, setting up AV systems, organizing, and putting away.
She has been a surprisingly good dog over the last week. She hasn't destroyed much, and hasn't had any accidents in the house (given that the shelter warned us that she wasn't house trained is a little amazing from my perspective).
She did destroy a bathroom yesterday by ripping apart every roll of toilet paper and tissue box in the room, but it really wasn't her fault. We normally keep her in a crate while we are out, but she doesn't like it. Yesterday we used the bathroom out of desperation because she refused to go in the crate. BTW, if any of you have good tips on getting a puppy to like the crate, I'm all ears.
Life is hectic right now, but in a good way. We are bringing order to chaos, and looking forward to a visit from my Mom and Dad next month.
Monday, June 1, 2009
By all accounts, this is a great time to buy a house. When we contacted our old friend and real estate agent, Roger Knapp, we were surprised that he sent us so many properties that met our requirements.
Roger sent us 140 possible properties for us to look at. Of those we choose 19 to visit on this trip, and we're hoping to buy one of those 19 this week.
The last time we bought a house, we approached the task in a very loose way. We visited the properties, took some pictures, and discussed them afterward, but we mostly relied on our feelings to tell us which house to buy. We don't have that luxury on this trip, so we've been more rigorous about collecting and collating data on each property we want to consider.
Google Spreadsheets has been a huge help in this. First we created a spreadsheet with MLS number, address, and price. Then we added a gadget to the spreadsheet to create a map with all the properties on it. This spreadsheet had the added advantage that we could share it with Roger, and our families to get their opinions on the properties we are looking at.
We realized pretty quickly that there were many more properties than we could possibly look at, so we introduced a simple subjective rating system. For each property on the list, Jenna and I looked at the MLS page for it, and gave it a rating of 1-5. We decided that we would only look at houses with a 4 or 5 rating.
Next we decided that we should derive some metrics from the data we had in the spreadsheet. So we created a sheet to calculate the monthly mortgage payment for each property with a fixed down payment, and added a price per square foot column to help us understand the underlying cost of each property.
After that we added some formulas to color the cells for our metrics. In each case we sorted the sheet by the metric in question, and divided the different between the lowest number and the highest number by 3. We assigned green, yellow, and red to the cells based on which third of the spread their contents fell in. This allowed us to get a really great overview of the properties, and showed us how some of our favorites were great values and some weren't.
Finally we created a form in the spreadsheet, that we could access from our iPhones while we are visiting the properties. It's got about 20 questions on it, where we ask ourselves to enter a rating of 1-5, and it is keyed off of MLS number. This means that as we are touring a property, Jenna and I can each answer the questions individually, and then send the data back to our spreadsheet.
We'll combine the survey data for each property and the metrics we calculated before to develop a ranking for our potential houses. That data should help us to understand which house is really our favorite across several considerations.
Once this is all done, I'll post the spreadsheet for others to see, but until then, wish us luck.
Sunday, March 22, 2009
Wednesday, March 4, 2009
I stumbled across Shell Sink the other day. It's an appengine app that allows you to capture and tag all of the commands you run from a command prompt. That means that you can synchronize your bash history for several machines, and tag and annotate commands in the web interface.
This is such a great idea. I often find myself looking for some huge complex command that I ran on one machine, to run again sometime later. Of course I could manually search through all of my bash_history files, but then I would have to remember which machine I ran the command on.
Shell Sink allows you to save all of those commands in one place and search for them, so I don't have to worry about where I ran that complex command the next time I need it.
There are a couple of things I wish Shell Sink supported:
- Should allow people to delete old commands. If I run a command with some sensitive data on the command line (even though I know I shouldn't) I'd like to be able to delete that command from the Shell Sink history. Shell Sink does give me the option to disable command collection for a time, but I'm afraid that I'll forget to do that.
- It should aggregate commands. Right now it just lists your history as it would in a plain text file. It would be great if it actually aggregated your commands so that there is only one entry for 'ls' in my history.
- If it aggregates, it would also be great to have a counter for each command. So if I only have one 'ls' entry I can know that I ran it 500 times.
If you are a command line addict, then check out Shell Sink, and let the author know you like it.
Below you'll find an updated example that does work for Mac. Basically you have to add the yaml lib directory to the sys.path.
#!/usr/bin/python import code import getpass import os import sys DIR_PATH = "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine" EXTRA_PATHS = [ DIR_PATH, os.path.join(DIR_PATH, 'lib', 'yaml', 'lib'), ] sys.path = EXTRA_PATHS + sys.path from google.appengine.ext.remote_api import remote_api_stub from google.appengine.ext import db def auth_func(): return raw_input('Username:'), getpass.getpass('Password:') if len(sys.argv) < 2: print "Usage: %s app_id [host]" % (sys.argv,) app_id = sys.argv if len(sys.argv) > 2: host = sys.argv else: host = '%s.appspot.com' % app_id remote_api_stub.ConfigureRemoteDatastore(app_id, '/remote_api', auth_func, host) code.interact('App Engine interactive console for %s' % (app_id,), None, locals())
That's all it takes. Hope you find it helpful. I'll also drop a line to the appengine team to let them know about these changes.
Friday, February 27, 2009
I don't log in after I've come home for the day, and I don't work on the weekends, and I don't carry a blackberry. There are, of course, rare times when I do all of those things (except for the blackberry), but its not very often. I'm also happy to say that the same statements apply to my teams at work.
Yes, some people stay later than me, some come in earlier, but generally we are all pretty balanced with work, and I actively throw people out of the office in the evenings because I don't want them to work crazy hours.
There are people, however, who put in long hours, check email every few minutes, and log on all weekends. I'm willing to bet that this isn't really required, and in my mind is a symptom of one of two possible team problems:
Its either a lack of distributed knowledge, or a lack of trust.
In the first case, the obsessive emailer has become a locked source of knowledge in the team. Everyone comes to her with their questions, and she feels compelled to respond so that others aren't held up. On the surface she feels like she is helping the team, but in the long run she is hurting the team. She is training people to rely on her when they don't immediately know the answer to their own questions. In effect, she has become the safety net. This leads to her working longer hours because she has to handle disruptions during the day and her own job at night.
In the second case its a lack of trust or empowerment in the team. In this case the obsessive emailer has become a locked source of decision making for the team. He has to weigh in on every decision no matter how small, and will become offended if others take action without consultation. He ends up working long hours because sometimes its just easier to do it yourself.
In both of these cases the obsessive emailer is really suffering from the idea that they are more important to the project than they actually are or they have made themselves critical where they don't need to be.
In my teams, I encourage everyone to use mailing lists, wikis, and documentation to overcome the first problem. If you are going to answer someone's question, make sure at least one other person learns from your answer, that helps to distribute knowledge throughout the team and makes it much easier for individuals to rotate in or out.
I also avoid weighing in on every decision in my teams. I encourage people to make their own decisions. Yes, sometimes they'll screw up, and that is ok. The best people you can have in your teams are the ones who screw up in a new way every time. That means that they are taking risks, and learning from their mistakes.
Don't let yourself become a team bottleneck, and don't loose your own work / life balance. Take a step back and see what people do without you. I'll bet you find that they get on ok.