Category Archives: Angst

GoToMyPC Saved My Day


I have been working at home now for almost eleven years.  When my job first started, it was the first time that a software developer worked remotely in my company.  There were many barriers before this time but luckily my timing was good.

Currently I am working on a project that is looking at using Cloud-based technology to make it easier for existing customers.  All of my development happens near Brisbane, Australia whereas my nearest office is in Sydney.  This works well with the help of products like GoToMeeting.  In fact, there is a need to use it almost every day.  It is my view into what is happening in Sydney and sometimes I even use it to share what I have at home.

It is so common to use GoToMeeting, it is just part of everyday work.  Without it, it would be much harder to convey important computer-based information.

Anyways, something different happened this last weekend.  On Sunday I was packing up for my trip to Sydney for a three day event in the office.  I was working on a difficult problem at the time and was very frustrated that I could not figure it out before the trip.  Usually this means that I need to move the problem environment to my work machine in Sydney and continue from there.  The problem with that is that my Sydney machine is not as strong as my Brisbane machine and does not have all the things that I need day to day.  In fact, the Sydney machine is a subset of my usual environment.

Usually I just accept this situation. However, the size of the problem and the lack of time made this unacceptable.  In the last hour before I had to leave, I decided that I should try using GoToMyPC to get access to my development machine from Sydney.  I still had an account that I had not used for awhile so I had to reset the password and get things going again.  However, within about a half an hour, it was running.

When I got to Sydney, I connected to my development machine and it worked great.  In fact it was so good to have my native environment I wondered why I had not tried it before.  It takes away the need to duplicate the environment somewhere else and it is quick enough to use without frustration.  The best aspect is that it just works.

Because I still had access to my main machine, it made it so much easier and quicker to solve the problems that happened.  Without access to GoToMyPC, it would have easily taken twice as long to figure this out.  It would have been very hard to reach the deadline in time without it.

This is a true story that recently happened.  I am very glad that this worked and it reduced my stress level in a big way.

Blog Evaluation

BlogStats

This blog has been going for three years with this being the 301st post.  Within the last year, things have slowed down considerably for a number of different factors.  Perhaps the biggest reason is being too busy with the current project (XenClient).  However, there are several other factors as well.

Blogging turns out to be a mostly solitary venture.  It takes a great deal of commitment and time to formulate a blog that gathers widespread adoption.  Even then, I suspect that success breeds pressure to always push harder.  It is difficult to gain that kind of momentum and keep it there.  This kind of stress is similar to anyone trying to hold on to success and fame.  Very few go the distance.  Perhaps very few should.

Originally I had big plans for doing this.  It seemed like a great idea for bringing in new customer requirements.  It also seemed like a good place to try out some ideas of my own.  Quietly, I hoped for a large following.  I tracked the visits per day and experimented with different blog postings to see what would make a difference.  This theory was flawed.  Any particular post might do better than others but overall it really did not make a big difference.

At one point the goal was to have about a hundred visits a day.  There was a blog post almost every day.  This artificially seemed to push up the numbers based on the number of posts but never seemed to bring any kind of long term growth.  It was probably similar to typical sales cycles.  The sales guy can always make things look better based on activity at the end of the month but the same person will never guarantee long term great results.

Later on, it just seemed a bit pointless.  The things I had set out to do just did not happen.  Also, ironically, my visit rate jumped up consistently with complete blog neglect.

It seems a bit like tracking the stock market.  The sooner it is realized that logic has nothing to do with it, the better.

Which brings us back to passion and purpose.  Success is truly an internal event.  It is the belief that one has a passion for doing something that really brings about the best results.  In fact, it is also the belief in letting go and being able to admit to mistakes which clears the way to a better future.

My passion is mostly about making things better.  I enjoy learning how things work (in true engineering fashion) and proceeding to think of ways of making it work even better.  Everything can be improved.  That alone is a major passion of the entire business world.  Some people focus on how much they can get.  Others do it for the thrill of making a difference.

So, what the heck does all this mean?  Well, either it means nothing or it means that I might have finally found new purpose to doing this blog.  I suspect it is the latter.  Time will tell.

For some, this might be seen as some kind of “middle-aged” blog crisis.  Perhaps it is.  At this point I do not even really care. :)

It is perhaps when I am most concerned about what people think that I am the most evasive.

To clear the air and breath fresh, is actually quite good.  Shadows of the mind dance more harsh than the path of the real daylight.  In other words, the thoughts overshadow action.  In fact, thoughts can easily confuse what path to choose.

With that in mind, it is time to start over.  The blog needs renewing and obviously refocus as well.

Knowing What Matters

There is nothing more important.  More important than what?  What current preoccupation is that important?  Well, it seems that important so therefore it is.

It’s a judgment call,  and clearly not all the facts are known.

Largely, the computer industry is driven from very important factors.  Much like life, there is plenty of activity both on the development and consumption.  The desire for more is always there.  The hunger for bigger and better goes on and on.

There is clearly a parallel with how automobiles were first developed.  Initially cars were very complicated and costly.  The user had to know every control and quirk.  The industry was fairly small with not much sympathy for the amateur.  Even today, this is still mostly true.

The truth is that computers are not important.  The same is true of automobiles.  It is what these tools can accomplish for the user that brings value.  Functionally, different cars only add value based on what the drivers can derive as a benefit.  

What I am getting at is that the computer experience needs to be much more transparent.  Sitting at a monitor with keyboard and mouse is not conducive to being easy.  The hardware needs to blend in with the environment to the point that the user/consumer does not even have to think about it.  This is the mantra of ubiquitous computing.  The difficult aspect is thinking outside the range of current thinking.

I was talking with my Dad over the weekend and we started talking about airplanes.  In the 60′s to 80′s, he worked as a pilot and navigator.  He pointed out that modern control systems on planes make it very difficult for a pilot to override potentially very dangerous automated decisions.  We talked about centralizing the power in the computers, it actually takes away from the experience and thinking of pilots.  From talking about this, it became clear to me that pilots should see the plane as an extension of themselves.  The computers should be used like how the brain controls the body.  The brain is the pilot and the body is the plane.  Ideally, this would be true except for cases for when the pilot cannot process the information fast enough.  Dad mentioned that planes have an automated system for landing.  It is well known and a perfect application for planes since there is actually more risk having the pilot do it.  He explained that a pilot could easily cause a “Dutch roll” in specific situations. If bad enough, this condition can be catastropic.

This comes back to an interesting idea.  Since our computers are still very dumb, it is unwise to put too much faith in them in unknown situations.  The lack of intelligence is often forgotten due to the speed of how computers figure out known problems.  It is fine for it to focus on something that can be digitized and programmed, but completely helpless with sketchy data and an unknown state.  Most faults in computer systems can either be tracked to hardware failures or software that could not recover from an unknown state.  Lately I would tend to think that most problems are in software.  It is very hard to write software that will work in all cases forever and ever.  Things change.  

So, this brings us back to what matters.  First of all, we should not put too much trust in our existing frameworks to carry us forward to the more casual computing model.  The hidden message is that basing computers solely on digital on/off switches limits their abilities considerably.  By now, we should be looking more seriously at technologies that better duplicate intelligence.  Perhaps the most revolutionary idea is that it is okay not to know things.  Much like life, we have to accept that we don’t know everything and that the computer should be allowed to learn.  This puts the computer more in the category of having a real brain.  Obviously a computer also needs to ability to link multiple locations together (or unlink) so that it can more easily find connections.  This should be done more like our neural networks and made to accept unknown states.

The best analogy is this.  You are walking down the street and suddenly something amazing happens.  For whatever reason, gravity no longer works.  You have not been programmed :) to handle this situation but you quickly try to find an idea that will help.  If you were a robot, there is a perfect chance that you were never programmed to handle this.  So, either your software faults or you just keep on doing what you were doing.

So, what would happen if gravity just stopped?  I would guess that you’d be thrown (slowly?) off the earth based on inertia and the earth’s rotation.  I don’t know.  The point is that if it did happen, at least I would be trying something.  At the very best, it is clear that I should not fault.   Even if I did fault (pass out), most likely I would reset just fine (perhaps floating off to space).

I like the idea that people usually don’t fault.  It implies that we are much too accepting of existing models and hardware.

Please excuse the tangents.  It’s hard to think clearly due to my fuzzy programming :) .

What really matters is that our faith should be shaken to usher in something new.  In fact, given the success of the web, we have largely solved the act of exchanging information.  What we have missed is realizing that many our designs are based on 1960′s (or even earlier) thinking.  

We’ve come a long way.  We still have a long ways to go.  A key goal is removing the importance of the computer in how separate it is from everthing else around us.  Things should be more specialized, simple, and transparent.  It is a process that should be much more evolutionary than it currently is.  Competing models should be allowed to win and lose based on what the environment allows.

Agent of Change

Sometimes I struggle to start the next blog post.  Tonight is one of those kind of times.  There are many different potential topics but it seems that not one of them is more important than the others.  Instead of fussing over this, I’ll just to coax out a topic in the first few paragraphs.

One topic is under the category “what would I do if I was in charge?”.  This is an affliction that hits many software engineers.  My case is historically bad because at one point I actually did have a lot of sway in what we did.  A part of me wants to be able to influence things again and perhaps that is why I started blogging.  I’m the kind of person that is attracted to causing a positive change and usually I am willing to voice opinions about what would help.

Sometimes this is seen as a negative attribute.  People in charge typically don’t like being told these kind of things and the more people you have, the more likely conflict will erupt.  In my own naive way, I usually ask if the decision is better for the customer or if it is better for Citrix.  Sometimes it works out to be better for both.

I do have a tendency to highlight problems and also can get a bit dramatic if it seems like no one is listening.  I’ve had some classic moments.  Back in the early days, I said something which was considered too damaging and that it could have been a CLM (career limiting move).  This happened back at IBM working on OS/2 around 1992.  I had been concerned about the perception of “Workplace Shell” by the market.  I had tried to argue with other people including the leader of the project, Tommy Steele (sp?).  The message didn’t seem to get through so instead I dropped a bomb stating that I thought that “Workplace Shell” was a mistake.  It was easy to see that saying this was a mistake after I had said it.

Later my manager, Barbara Odle, explained to me the seriousness of what I had just done and suggested that it might have been a CLM.  She was very patient with me even though I did have a lot of passion about what I thought OS/2 should be.

It didn’t take long to realize that I was on an ocean liner and that any kind of big change in direction was simply not possible.  All of IBM was like that at the time.  When the call came in for Citrix in late 1992, it sounded really good.  After visiting the office, it seemed like heaven compared to OS/2 development.  So, I just left.

The early years at Citrix were full of energy and also an abundance of passion.  We knew what we were shooting for and we went for it.  We took big risks and they paid off.  We disagreed at first on things but we always came together in the end after the debate was over.    Even if you lost, you still felt like you had your chance and that the others were aware of your concerns and your ideas.

As the years progressed, it became harder and harder to make a big difference.  It has gotten to the point that sometimes that I am on that big ship again.  Decisions are made and instead of listening to concerns, it is instead often viewed that the person doing the objections needs to be re-educated about the value of the decision.   Most decisions are held to the top most layers of the company.  From what I understand, projects are controlled in a big way by the Finance department.  In other words, funding is not under the control of the engineering group but rather the central planners.  It is incredibly difficult to build a team to do a project unless Finance understands the value of such a project.  I don’t know details but I do know enough to conclude that this is mostly true.  It is very rare to have a project solely based on input from the engineering group.  I find this odd considering that it assumes that other departments know more about the technology than the group that is going to implement it.

My favorite new word to apply is delegation.  The engineering groups should be able to budget new projects without having to prove everything to the highest levels.  It should be possible to build skunk projects based on business opportunities seen at the customer layer.

There are quite a few examples I could give of things that I don’t think make sense.  Somehow it is just expected that either we will see sense in it or that we will just keep quiet and do it anyways.

One of my worst project experiences comes from how Product Managers  (PMs) are handled.  They are supposed to play a certain role but it is often hard just to get their attention.  It is common for PMs to be re-assigned many times during a project.  Historically, it has been very difficult to get them to produce what we need.  Many times, we have had to build our own requirements documents simply because we couldn’t any PM to work on it.  When they do get involved, it is often too late and with many dubious requirements.  The overall message I get is that they are completely unaccountable.  I would almost classify them as being untouchable.  I’ve never heard of any PM getting in trouble for missing deadlines or making major mistakes.  Part of the problem seems to come from the fact that PMs report to different groups.  I would almost swear that the switching happens between PMs to reduce the exposure to any one PM.  It is incredibly frustrating to see your project deflated by a defective PM.  It happens way too often.  Even when you get a good PM, you are often not allowed to keep them based on some weird internal policy that I don’t understand.  I know of a project close to home that has had at least 15 different PMs.  Honestly, how can this be allowed?  How can any PM be effective if he or she doesn’t stick around?

Obviously there are two important steps to fix this.  First, the PM needs to report to the same group at the same location as the engineering departments.  Second, the PM should be assigned for the duration of the project.  Any changes should only be a special exception.  Accountability and reliability are the goals.

My final CLM option of tonight is the name changing game.  Engineers work hard to build new products.  Projects are usually designated by a codename until it gets closer to being released.  Towards the end, but not too late, a marketing name is announced.  This happens for most projects but sometimes things go a bit wrong.  In the same project that had so many PMs, it had several name changes.  Most people that create name changes must assume that it has zero cost.  The truth is that it can be quite expensive since things are reworked with the new names, built, and tested.  Sometimes the name changes actually lead to breaks.  It can take around a week to clear a name change through the process.  Don’t quote me on that.  The concern happens when the name keeps on changing.  It becomes clear that nobody is quite sure what the name should be and instead of waiting for some kind of final decision, someone pushes the name change button with the hopes that it will stick.

This game is a crazy game to play.  Not only does it waste a lot of time, it doesn’t get any closer to what the real name should be.  The image of people getting together and fighting over names doesn’t seem good for the project.  It can get worse when different levels of management fight over it.  The early victors lose to higher level managers.

It is just a name.  I guess that is why it is easy to dictate changing it.  It would be much harder to get involved with technical aspects and have some good input at the beginning of the product cycle.

The engineering group concluded that it would be far better if only one name was ever specified.  This would force the managers to have their act together and only fire the button once basically to announce what the real name is going to be.

No one ever seems to get in trouble for excessive name changes.  In fact, in the last couple of years it seems to be encouraged behavior.  It seems that this thinking should not be tolerated and that names should be preserved during the product lifetime as much as possible.  Besides confusing customers, changing names can be an expensive marketing proposition.  Just think of all those materials that need to be tossed and new ones printed.

My ending comment is this.

Have you noticed that the Citrix dots have gone black?

Internally it was a point of contention last year.  Since then, radio silence.  Obviously the dark dots won.  Accept it :) .

Recovery

My main development machine is recovering.  I had an exception in Winlogon which is always fatal.  I had tried to fix the machine but things were not looking good until today.  After many different attempts, it turned out that doing a full Windows repair was the trick to solve the trap.

I had already proven that some of the files in Windows were corrupt.  Recent power outages were most likely the reason why.  Many of these files are used during the logon process but I was never able to find out which file was causing the problem.  Most likely it was a collection of files and I just couldn’t find all of them.

Given the nature of operating systems today, it is a surprise that it is not common practice to not only check for the existence of files but also their integrity.  The concept of how to do this is fairly straight-forward  and I would imagine that it has already been included in other operating systems.  Maybe it is already part of Windows and you need to configure it for that.  Regardless, it would make sense from both a security and stability point of view.

The reason why Winlogon traps are so nasty is that even though it is a user mode process, it is considered fatal if it dies.  You can never login to do anything and the machine is stuck in this limbo state until you decide to do something drastic.

Usually people just reinstall everything from scratch.  I didn’t want that and luckily I got my way.

It does seem now that space isn’t much of a concern (remember needing to use disk compression?), it would make sense to have operating systems that can heal themselves.  This would be a combination of signing and version control but the idea is to have directories to the side that maintain the “perfect” state of the operating system files.  These files could even be used as references.  If you have more copies of the same thing, the more likely it will stay intact.

The human brain, for example, copies information to many different places with lots of duplication.  Once you have the luxury of space, there is no need to be so stringent on the number of copies left around.  If I heard correctly, this idea is also true in DNA.  If a single part was damaged (brain or DNA), there is a good chance it would still function as a whole.  I would declare this as one of the next big leaps in computer science to realize that duplication can sometimes be a good thing.

As a student at university, it became evident that efficiency was the most important.  Nature doesn’t work that way (copying and more copying) and perhaps it is time for something like Windows to pick up the clue.

Amazing as it is, the Internet can be seen as a rudimentary brain.  Lots of duplication and of course lots of information.  It is better suited for survival because it is not incredibly efficient.  The chaos of the web actually makes it more resilient to going down.

Along this line of thought, Windows could use the Internet to get trusted copies of corrupt binaries.  Instead of a DLL failing to load based on corruption, Windows could be smart enough to use multiple sources to correct the error and avoid the pain and suffering of having a unworkable machine.

If any of you are aware of solutions in this space, I would love to hear about who is doing it and how it works.

This is my first official Citrix Blogger post on WordPress.  Thanks for following me to this new location.  Everything has gone very smoothly and I am quite happy that it is over.  I had been thinking about doing this for months and when it came time to do it,  there was very little pain and everything just worked.