Archive

Archive for June, 2009

Mozy’n On

June 27th, 2009 View Comments

Yesterday was my last day at Mozy.

I left Novell and came to Mozy just over a year ago.  For a variety of reasons, I chose to leave Novell even though in my case I had to take a cut in pay to do it.  I don’t regret this decision at all.  I’ve learned tremendously from Mozy, met a lot of really great people, and really loved working at Mozy.  It’s a great company with a great product, but the best part about Mozy is the people – there are some really great people there, many of which I didn’t really get to work with as much as I would have liked, and I’ll definitely miss the opportunity to work with them.

At my one year mark last May, I took a step back to look objectively at my job at Mozy.  This happened to coincide quite closely with EMC’s recently announced employee 5% pay cut, which of course also affected then-current Mozy employees.  (By the way, you have to love how EMC told the press that they were “asking” employees to take the cut – it was more like “we’d like to ask you to take this cut in pay, or leave.”)  I looked at the tradeoff I’d made a year earlier, now with greater insight, along with the adjusted compensation, and realized that I wouldn’t have made the decision to come to Mozy last year after all.

It’s an odd conclusion because I still would have made the decision last year, knowing everything I’d learn and the relationships I’d build.

It was at this point that a great colleague from a former team at Novell, one of the two best teams I’ve ever worked on (the other also from Novell), told me that the company he is now with was hiring, and asked if I would be interested.

Truth is, he and I had discussed this exact position about a few months before, and I’d told him at the time that I was happy where I was.  But then EMC changed the dynamics of our employer/employee relationship, and when he approached me again, by this time I was willing to consider a change.  And as my new employer and I considered it, we both came to the conclusion that it would be a good thing.

I’m really looking forward to this new opportunity.  I’ll learn a lot, I hope to contribute a lot, and know for a fact that the team I’ll be on there is outstanding.  At the same time I’ll miss the cool of Mozy.  It’s still a great place with great people.  Especially if you are considering working there now – the 5% cut does not apply to new hires, and I know they are still looking for great engineers among other things.

Driving Panic

June 25th, 2009 View Comments

People make fun of Utah drivers, for good reason.  But sometimes it isn’t our fault.

twodetours

Two Detour Signs at the Same Intersection - One Points Off-Road Into a Fruit Orchard

Categories: Humor Tags: ,

The Straight-Through-In-Alpha-Order-Music-Listening Experiment Update, Volume 8

June 24th, 2009 View Comments

Time for another update, and we did a lot better this month than I thought I would.  Here’s where we stand:

iron maiden piece of mind cover artCurrent standings:

  • Current artist/album/song:  Iron Maiden/Piece of Mind/Revelations
  • Songs listened to:  3344
  • Total songs:  9829
  • Percentage complete:  34.02%
  • Estimated completion:  September 2010

Hooray!  We moved the completion date up by one month!

This month has been enjoyable.  George Lynch was cool to listen to, as was Guns N’  Roses, Hurricane, INXS, and Iron Maiden.  Oddly I never really listened to Iron Maiden much before, which is hard to explain, I know.

Also, this month I wondered why I have so many Heart songs.

So, looking forward, it’s kinda hard to predict.  I’ve got a week of vacation coming up, and a job change in the works also, so that might have some effect.  But I’m kinda looking forward to Joe Satriani and may even get as far as Journey this month.  Other than that, it’s looking a bit bleak.  Stay tuned…

Categories: Music Tags:

Versioning Containers and Iterators

June 23rd, 2009 View Comments

Uh, this is a programming post.  Just so you know.

The Problem

Okay, so let’s start this discussion with a simple linked list that contains the ingredients for Bill Cosby’s Chocolate Cake for Breakfast:

Fig. 1 - Linked list of ingredients for Chocolate Cake for Breakfast

Fig. 1 - Linked list of ingredients for Chocolate Cake for Breakfast

Normally we’d use a linked list in programming when we know we may have to arbitrarily insert items later on.  For example, I just realized that this cake does not contain chocolate, so I should be able to insert that into the list by shuffling a little bit:

Fig. 2 - Chocolate Cake for Breakfast, with Chocolate Added

Fig. 2 - Chocolate Cake for Breakfast, with Chocolate Added

This seems like a much tastier recipe.  But there can be a slight problem with this.

Suppose the linked list is serving as a model for your recipe view.  You have a UI that accessess the model and then displays the results in some sort of view that you can see on your laptop in the kitchen.  Suppose further that you decide to go even crazier and not just stop with adding chocolate, but you are also going to add sugar and frosting.  INSANE!

This is not a problem yet.  Likely your UI offers the ability to add new ingredients through the UI, so you just add them and the model gets updated, and when your view refreshes you see the new list:

Fig. 3 - Chocolate Cake for Breakfast - Dessert Style!

Fig. 3 - Chocolate Cake for Breakfast - Dessert Style!

That sounds like a great chocolate cake.  But now suppose Mr. Cosby is on stage in Winnemucca doing his Chocolate Cake for Breakfast routine, and for some reason that nobody can understand the teleprompter that reminds him of the routine is using your data model to render the view – right at the exact moment in time that you are changing the recipe.

Uh-oh.

I’ve run into this problem a number of times in my software development career, where I have a data structure that is being accessed by more than one user at the same time.  In our case, we have one read-only accessor and one read/write accessor.  At first glance it doesn’t seem like this should be a problem.  But unfortunately, even though the reader isn’t making changes to the model, the reader still depends on the model having a constant state.

There’s a couple of fairly simple ways to address this problem.

First, we can make a copy of the model for each user.  We can have a resource that provides a copy when a user requests the copy.  Then that user can do whatever they want with the model – read or write.  When they are done, they can either discard their copy, or turn it back to the resource for the changes to be merged into the whole.

This might work for some implementations.  In our trivial example here it would probably be just fine.  But if I have a data structure with two million 50-byte records, this isn’t such a great idea.  It isn’t just that I don’t want to make a copy of a 100 Mbyte (okay, 95 for you technicality folk) data structure – I don’t want to double my memory usage from 100 Mbytes to 200 Mbytes (or 95 to 190, sheesh).  So making a copy won’t always work.

Another option is to lock the structure.  Using some sort of a mutual exclusion primitive I can lock the data structure so that only one user can access it at a time.  I can’t just hold the lock per-access, though – I have to maintain sessions and locks for the entire session.  In other words, I have to make sure that nobody can change the recipe at all throughout the duration of Mr. Cosby’s act.  This high level of granularity in the locking of the data structure makes it hard to use.  And it is particularly frustrating for read-only users who are thinking, “Why can’t I access the structure?  All I want to know is what is in it!”

Versioning

One way I’ve successfully solved this problem in production code is to use a versioned container and versioned iterators for that container.  I used these at Volera, for example, for some reason that doesn’t matter now, because Volera is DEAD.  Anyway, here’s how they work:

Versioned Containers act pretty much like regular containers – vectors, lists, hashtables, etc.  The difference is that each link from one element in the container to the next has an associated version number on the link.  Any given element can have a number of “next” links – even a singly linked list, like in our example.  Each link would have a different version number.  The container itself also has a version number, which corresponds to the highest numbered link in the container.

Versioned Iterators go along with the versioned container.  When you request an iterator from a container, it gives the iterator a version number which corresponds to the current version number of the container at the time of request.  The user requesting the iterator can also request a different version number.

Here’s what our data structure might look like if it were versioned:

Fig. 4 - Chocolate Cake for Breakfast with Versioned Containers and Iterators

Fig. 4 - Chocolate Cake for Breakfast with Versioned Containers and Iterators

This ends up working out pretty cool.  Mr. Cosby can request a versioned iterator of the view when his show begins that displays the model as it is when his show starts.  Let’s say that his iterator is version 1.  That iterator traverses the list by only following links where the version number is less than or equal to the version number on the iterator.  So it first goes to “eggs”, then follows link 1 to “milk”, then follows link 1 to “wheat”, then ends.  It can be doing this at the same time that another user is changing the data structure, first by inserting “chocolate,” which creates the version 2 link from “milk” to “chocolate” and the version 2 link from “chocolate” to “wheat,” and later by inserting “sugar” and “frosting” as version 3.  A version two iterator on the structure would start with “eggs” then follow the version 1 link (remember – less than or equal to the iterator version) to “milk.”  But then it would follow the version 2 link instead of the version 1 link, so now it goes to “chocolate” instead of going directly to “wheat.”

The same goes for the version 3 iterator, which gives us everything in the data structure.

There’s a couple of issues you have to deal with when you implement a structure like this.  First off, you need some sort of a scheme to go through the structure and prune it of old traversal versions.  If I remember correctly, a scheme that will work to do this is to have the container itself remember how many users are accessing it and what versions they are at.  When one iterator goes away, the iterator should report this back to the container.  The container then looks to see if that iterator is the lowest-version-number iterator that it knew about.  If it is, the container can go through and prune all of the links that are versioned at that number and below, as well as nodes in the structure that are only included in the structure by links at that version and below.  So there’s a little bit of housekeeping that has to go on, but the container should be able to do this after iterators go away.

In other words, once Mr. Cosby’s show ends, the data structure that previously looked like Fig. 4 should end up looking more like Fig. 3.

Another problem to consider is this:  If the data structure lives for a long time and has lots of accessors, it is possible for the version numbers to overflow.  The overflowing isn’t necessarily a problem, though, as long as you keep track of what is really the oldest version in the data structure.  Another way to do this is, as you prune the table, you can take the liberty of reversioning the table if there are no accessors to the table.  Depending on your situation, you may never have a chance to lock the whole structure in order to reversion it, but the first option should be workable.

Lastly, since you have to version the links themselves, you might not be able to directly use standard containers; for example, if you are using C++ you might have to create your own linked list template with a list of versioned next pointers in each node, instead of implementing your versioned list container in terms of the STL list container.  I never tried this so I’m not sure how it would work.  When I did this, I did it using a tree container that was implemented in STL style, with versioning in the pointers and iterators.  It was pretty cool.

Proposal for the New FIA-less F1

June 23rd, 2009 View Comments

So the word on the street is that 2009 will be the last year of F1 as we know it.  With the FIA holding firm to what the Formula One Teams Association (FOTA) considers to be unreasonable new rules and restrictions for the 2010 season, FOTA decided this weekend that they will be holding their own racing series in the future instead of racing the current F1 series.

I’m not going to say too much about this, because nobody cares about my opinion on the matter.  What I will say is, as far as I’m concerned, it isn’t Formula One without McLaren and Ferrari, and I don’t think I’m the only one.  So the FIA can continue being obstinate if they want to, but I’m willing to bet that without the bulk of the current F1 teams racing with them next year, whatever the FIA tries to put together will be about as meaningful as the AMA Road Racing series is this year.

With that in mind, it occurs to me that FOTA probably is looking for suggestions.  I’d be happy to take the job, for a lot less than what Bernie and Max get paid, and it’d be a good old time.

To show my qualifications, I present my proposed race schedule below.  It’s a longer race schedule – 25 races – not the marathon of drudgery that is the NASCAR season, but a little bit longer than the current schedule to make the season a bit more substantial.  I’ve included sample dates for the 2010 season, but dear FOTA, this is certainly negotiable.  I’d also propose reducing the sanctioning fees for each race to about $10M-$12M US, down from the current amount (around $40M?) and would allow the venues to keep their signage revenue, which makes hosting a Formula One race much more palatable than the FIA’s current bloodsucking scheme.  This means that there’s a lot more venues to choose from; now the series can be picky about choosing interesting, high quality race tracks at both traditional and new venues.

Also, the races will be held on Saturday instead of Sunday, so I can attend without feeling poorly about myself.  And as you’ll notice, the series stops by Miller Motorsports Park, which is probably the best road circuit in all of North America and one of the best in the world, which also happens to be within day-trip distance of my house.

Yeah, this is going to be great.

So, FOTA – feel free to give me a call.  I think the choice is obvious.

Seeping Matter – One of the Internet’s Fastest Growing Blogs

June 21st, 2009 View Comments

I found out today that I have a new blog follower, oddly, since this person also told me, “I don’t really follow racing.”

???

That last sentence – can you even use those words together like that?  It doesn’t make any sense to me at all.

Anyway, this makes me quite pleased, because now I have three followers, including myself and my imaginary friend, and this new person.  We’re talking about 50% growth – now to sustain it!

Categories: Humor Tags: ,

Mr. Mom Time

June 19th, 2009 View Comments

I’m in the middle of doing the Mr. Mom thing this week for the past few days.  I’m doing this because Amber, who volunteers for the local girl’s youth group, is at Girl’s Camp.  For those of you who are not familiar with Girl’s Camp, I will explain it:

  • It is a camp for girls.

And that pretty much explains everything there is to know about Girl’s Camp.  But if this concept is still unclear, just remember that girls and boys are pretty much opposites of each other.  Not that one is better or worse.  The same is true about Girl’s Camp and boy camps – they are opposite.  For example, boy camps are fun.

I remember when I was in high school thinking that sneaking up to find the Girl’s Camp would be great fun.  Then I actually went to Girl’s Camp one time, on invitation, and realized how, uh, opposite it was.

But I digress.  So anyway, I’m here at home with the kids.  Before she left, Amber said this would be good for me to help me appreciate her.  I said that I already appreciate her and so it was not required.

Nonetheless, she was certainly right.  For example, now I understand better why she is so anxious to tell me about the days when Oakley doesn’t take naps.  And I kinda get why she tells me that her days are really busy and yet boring at the same time.  And now I think I realize more why she looks forward to me coming home so much every day.

I’ve always thought it must be hard being a mom.  Not only is it a 24/7/365 job with no vacation or sick days, but it isn’t like you can just quit this job and find another one if it is bringing you down.  Having done this recently, I can relate to what this must be like to not be able to quit.

Well, I guess a mom can quit, but she certainly shouldn’t.

However, I did come up with a number of advantages of the mom job:

  • Moms have a lot of control over how their day goes.  I didn’t say complete control.  But I’m noticing that if we want to have a relaxing day watching movies and playing XBox, or a fun day having a picnic at the park, or buckle down and clean up the house, it is pretty much my call.  At work, it takes just one critical bug or unhappy employee to take complete control of my day.  (Speaking hypothetically of course – as if we would have either of those at Mozy.)
  • Moms get to work every day with people they really love.  Not just like – love.  Over the course of my career, one thing I’ve realized is how much the work environment is affected by how much you like the people you work with.  Yesterday when Oakley just walked up to me and gave me a hug, or just now when Taelyn made a special piece of artwork just for me, I realized that no matter how great your friends at work, the chances that you’ll like them as much as a mom loves her kids are pretty slim.
  • The mom job – creating the adults of the future – has to be rewarding, or at least it should be, at least some of the time.  Writing software programs is admittedly not fun all day every day, but the opportunity to create something new and valuable is pretty fulfilling when I stop and think about it.  But computer software is nothing compared to a human life.  Watching your kids grow up and learn is pretty awesome – being the mom that makes all that happen has got to be pretty fulfilling if you step back to think about it.
  • Last but certainly not least, if you are a really lucky mom you might get to be married to someone like me.  This benefit obviously requires no further explanation.
Categories: Family Tags: , , ,

Preparing for Family Visits

June 14th, 2009 View Comments

Last weekend we had some visiting family at our house which was a load of fun.  Of course, the day before they came, I had to ask them whether they planned to eat at our home.

I have to ask this question because my aunt is my mom’s sister, so there is a chance that she will be like my mom.  My parents have a series of unwritten personal rules about travel.  They are not aware that they have these rules and so they can’t explain them to you.  I had to figure them out by observation.  Some of them include:

  • You cannot drive more than 10 minutes without licorice.
  • No visit may last longer than the time required to get there.
  • Never drive at night.
  • Never sleep at anyone else’s house.

Fortunately we do not live very far from my parents; otherwise, they would never, ever be able to visit.

Another rule is:

  • Never eat anyone else’s food.

This rule took a while to figure out.  It was only after a number of parental visits, where we would plan a big meal and buy the supplies and prepare something delicious with enough for two extra adults and they would refuse to eat it, that we began to understand that this was a rule.

Finally my dad helped clarify things for me.  One day when they visited I asked if they would like to stay for dinner and my dad really said (no, I’m not kidding):  “No, we do not want to eat your food.”

To which I say, to each his own.  And also, more for me.  And also, your loss, because my wife makes foods of pure delectitude.  But at least now I know the real reason – they simply do not want to eat anything that we owned right up to the time it was served to them.

And this is why I had to ask.  They could have had some obscure, unwritten, subconscious rule about eating our food, like my parents do.  But apparently, our visitors of last week don’t have this rule.  Instead, it appears their rule is borrowed from Ted Theodore Logan:  “Party on, dudes!”  We look forward to having them come again.

Categories: Rants Tags: ,

More Awesome from MMP

June 4th, 2009 View Comments

ducati truck
Ducati is to motorcycles what Ferrari is to cars – a dominant Italian world champion many times over
ducati 1098R bayliss
… mmmmm, Ducati …
aprilia rsv4 factory
Is it possible that the Aprilia RSV4 Factory is even better looking than the Ducati 1098R?
bmw s1000 rr
Is it possible that the new BMW S1000 RR is as awesome as it looks?
Oh, those are the Germans, in the background, that sat next to us in the Tooele grandstand. Pure coincidence.

Mozy Breakroom Danger

June 4th, 2009 View Comments

The Mozy breakroom is a source of nourishment for Mozy folk (where “nourishment” means “empty calories”).  At least that is true about 2/3 of the time.  Every couple of weeks Mozy buys a couple of truckloads of snackage from the local Costco.  There are many many boxen of snacks, for a few days.
mozy_breakroom
All these boxen led to this situation we see here:  Signs placed on cabinets for the purpose of box-management.  They were placed there by Janell, who runs all of Mozy and scares the crud out of me.
mozy_breakroom_sign
The words say “Please” but the font says “or else.”  Which makes me marvel at the audacity of someone to replace one of the signs with this little number:
mozy_breakroom_sign_sign
Whoever it was, I will miss that person.

Categories: Humor Tags: ,