The Actual Cost of Zero Cost Stupidity - Part 1

April 2nd, 2008

Normally, someone would start this article off with “Corporate America is a funny place” - or replace America with some other country. It doesn’t really matter. This has been bothering me for a long time not because it affects me professionally in anyway. But it irritates me how people treat certain other individuals this way.

You might be wondering what I’m vaguely hinting at. I’m talking about IT people. Yes, IT people. The cranky, know-it-all, ultra geeky/nerdy/dorky guys that fix computers. Often looked down upon as socially unfit and awkward - because sometimes they smell. If they’re not fixing computers they’re probably playing D&D or watching Star Trek/Wars or some other show on the Sci-Fi Channel. Yes, those animals…err..I mean people.

If you haven’t caught on, I’m being ironic.

They might be called Systems or Engineering or some other other word that makes a failed attempt to guise the real meaning: IT. Regardless of what they’re called, they’re often misunderstood - and undervalued. There’s also been a trillion articles written about this on the web and in magazines. Obviously I haven’t read all of them. But the many that I have read do not cover the social impact and the cost value associated with IT people. I’m going to borrow a term and maybe completely change it’s meaning: zero cost.

What is “zero cost”?
I’m not sure where the term comes from, I tried googling it - but to no avail. Anyway, in the world of Hai, zero cost means that there is little to no cost whatsoever associated with a particular task. In practice this definition is a lot more complex and we’ll go into details over the next few entries about it.

A while back, I was talking to my friend Chris “Spaceman” Smallfield about this idea. However at that point, I didn’t call it zero cost yet. I was just annoyed. Spaceman had expressed to me that many people often take artist for granted in ways that were some what appalling. Artist do art because they love it - I think that’s true for the most part. But often you run into these situations where some person running a small business will ask a young artist kid to work do some design for them for $20 or something completely ridiculous. Young artist kid not knowing any better will probably do it because it’s money. It takes him some number of hours or days - but he gets it done. He gets his $20. Young artist kid grows up - is now some type of professional doing art. Scenario repeats itself, except this time it’s $100. Unless the artist is absolutely starving, there is no way that several days of work is only worth $100.

But to take a step back, maybe $100 is a lot - depending on where you are. Now for the extreme-but-happens-all-the-time example. Small business person asks semi-professional artist to do some design. They don’t pay them. They justify it saying that it gives them exposure or experience or they’re doing it for the love.

Not only is that wrong on so many levels - but it’s also humanly irresponsible. Whatever world view you choose to uphold - you just exploited someone.

To get to the point - the problem with thinking that someone will do something for you for free or a little amount of compensation is the first part of the zero cost idea. People’s time and energy is worth something monetarily or in compensation. At times without regard to the quality of their output.

You cannot rationalize that you’re somehow doing them a favor when they’re spending hours and days working on something for you. It’s even worse if they’re a professional getting paid a day rate of $400 and you’re asking them to do something that would normally cost $5000 for little to no compensation.

Now, how in the world is this related to IT? Ever asked someone to fix some computer problem you’re having? Or if you’re an IT pro - ever been asked to fix some computer problem someone is having. Starts out as a small problem, next thing you know - you’ve spent a week trying to figure out what’s going on. What do you get in return? Nothing? A cupcake?

Next time: pretty people and zero cost IT work.

What is said and what is heard

February 9th, 2008

I failed to find an example to sufficiently make my point. However, please allow me to try to make it anyway.

After 3 or 4 days of using Windows Vista, now I understand why everyone hates it. In the past few years, Microsoft has often been criticized for security vulnerabilities in their various versions of Windows. To rectify this, Microsoft has decided to make it more difficult and annoying for the user to use their computer. An example of this is the UAC - User Annoying Component. If the confirmation prompt for every option isn’t annoying enough, the flashing is going to send me into an epelitic fit. There’s some poor unsuspecting Japanese children who are going to be in for a nasty surprise when they upgrade.

So Microsoft’s idea of security seems to be: make it very difficult for the user to do anything practical. Perhaps, then the user will not use the computer anymore. Users not using computers will result in less security problems reported. Or so Microsoft hopes.

Yes, and I do get it - I know security problems are very hard to solve. No one needs to be told that, myself included. But no one is shelling out $199 to raise their blood pressure every time they sit down at their computer.

I don’t know what was said at the Microsoft meetings about how Vista’s user experience should be. But it makes me wonder what exactly was heard from the customer side and how it got translated into the product we all know as Vista. Microsoft employs a lot of every intelligent people. I cannot allow myself to believe that these intelligent people were the ones that made the final decisions on Vista’s user experience. To try and draw an analogy, in the visual effects and film industry - the reason why things turn to crap is because, often, a person very far from both the work and the audience decides what’s best for both. We’re all familiar with Kevin Smith’s story about Jon Peters and Superman. So until I’m provided with an alternative, I’m going to believe that Vista’s poor user experience comes from the same sort of roots.

However, I have to say - the install process for Vista, for me, was less painful than the typical XP install. I may be the exception to the rule in this respect though.

Thanks For Nothing Microsoft

September 24th, 2007

…I must have missed something somewhere and it’s making my life terribly difficult. Okay, so VS2008 is in beta. I get it. Does that mean I can’t have it on the same machine as VS2005. What if I just wanted to see what it looked like, compile a few projects to test it.

Oh, I can do that?

Well, I can…but do I really want to. The answer is: No. I don’t know what happened - and I will figure it out once I’m done being so frustrated. I just rebuilt one of my applications in VS2005 - after removing…I mean uninstalling…VS2008. When I run an application on a different computer, I get this:

Resolve Partial Assembly failed for Microsoft.VC90.CRT. Reference error message: The referenced assembly is not installed on your system.

There seems to be a bit of a disconnect somewhere. Why would an application I build with 2005 (VC8.0) be referencing assemblies that are used in 2008 (VC9.0)? How do I change it back so that all my VC8.0 code references the correct runtimes? Hmm, the initial hour of Googling shows nothing.

I mean, forget that it’s beta software that you can uninstall. Why in the world did it change the assembly references in an older version of Visual Studio? The only foreseeable way I can fix this is to do a clean install of my OS. Unless I can find something before I decide to do that. What a freaking bloody mess.

I am positive that I missed something somewhere. It just seems like a major oversight to permanently cripple someone’s system just because they installed a beta product.

Oh wait, it’s Microsoft.

Update:
After uninstalling VS2005. Rebooting. Reinstalling. Updating to SP1 - the problem seems to have gone away. There’s a FAQ on the VS2008 site that says that repairing from the VS2005 installation would fix the problem…it doesn’t always.

SIGGRAPH Day 4

August 10th, 2007

I think this is a day late - or two. Went to the Eletronic Theater with all the dudes from Method. Some really inspiring stuff there.

I met some of the people from the Massive Software Team after my coworkers Gil and James did a presentation for the Miller spot we did recently. Massive has two female programmers on their team and from the conversation I had with them - they seem brilliant. I guess the idea that girls can’t program doesn’t hold much water. I had a chance to talk to one of them about the dynamics behind Massive. There was a slight language barrier or a me being retarded barrier there - but we got through the conversation.

The fluids course was really interesting - I’m really glad I sat through it. I had to skip out of the real time part to take care of a few things - but I made it back in time to listen to Robert Bridson wrap it up. It was nice to hear someone who has done quite a bit of research address some problems that I’ve ran across in my own work. Fluids is still fairly young and there’s lots to be researched. This makes it an exciting field of research.

These post seem to be getting shorter and shorter.

SIGGRAPH Day 3

August 8th, 2007

Today was an interesting day. 10 minutes into both of the lectures I was attending I got called to because our mail server was not responding. Since both my boss and coworker were on the road to SIGGRAPH, I had to connect back to the ranch handle the issue with some assistance from my coworker. But that was fine.

In between these things I did manage to run into Robert Bridson at the A.K. Peters booth. I was able to talk to him for 15 or so minutes about some fluid dynamics stuff. I’ve been reading/following his research with a bit of interest. So it a pretty cool experience getting a chance to talk to him.

It was a bit unfortunate - but I had to miss Robert Bridson’s presentation on curl noise becauseĀ  I was trying to figure out what was up with the mail server.

This is a short post since I don’t have any real content.

SIGGRAPH Day 2

August 7th, 2007

Squish, Bounce, and Collide
The first two papers for this presentation were interesting. The last two didn’t seem relevant to the things that I work on so I didn’t stay. However, the first presentation did make me think if the metaballs need to have some sense of volume preservation.

Point Sets
By far, this one has been the most brilliant lecture I’ve been too. I geek out to math - sometimes. But what these guys were doing was amazing. I especially enjoyed the second presentation describing the use of a method called LOP to do geometric reconstruction. The idea was well presented and it really showed that the speaker had tried several different routes before arriving at his/their conclusion. I’m pretty excited about the entire MLS/LOP phenomenon.

The Point Sets papers presentation was inspiring. There’s a lot of research going on in this area. Several techniques have bee developed to raytrace point sets. One interesting thing you can do with this is write a raytracer where you can stream points to it. With the right methods this allows you to do progressive refinement without having to retessellate the representative geometry. Exciting stuff.
I went to the Autodesk Party and ran into a few people I knew from DNA there. Ran into someone I knew from SESI there as well. It was a pretty crazy event. There were Go-go dancers there. Exciting.

I think I’m too tired to try and type out something meaningful.

SIGGRAPH Day 1

August 6th, 2007

I should have written this yesterday - but got caught up doing other things. So I’m sitting in the San Diego Conference Center lobby writing this up now.

Mesh Parameterization
I just sat through my first SIGGRAPH course - ever. It’s actually the first fourth of a full day course. The topic was Mesh Parameterization. The first speaker, Kai, gave a very brief and easy to understand introduction to Differential Geometry. The second speaker, Bruno Levy, gave a talk on some of the applications of methods for texture mapping. Coincidentally, a subset of the problems and techniques they described was used on the Miller job to track the people on the moving mesh across 3D space. A map (texture) was used for look up to maintain the proper UV position within the locality of the triangle as the underlining mesh was changed due to the cloth sim. Since the UV was fixed, a point always mapped proportionately back to the mesh.

Practical Least Squares
The second part of the day was spent in the Practical Least Square Methods course. There were a surprising number of people in this course. Both in the first and second part of the course it was difficult to find a seat. I think SIGGRAPH has some weird no standing policy for the courses. The SIGGRAPH volunteers wouldn’t let people stand in the back of the room. Probably some fire safety thing. The math for the course was a bit hit and miss. There were a few interesting things that I haven’t had read across yet. So at the very least there will be some new reading material. Overall, the course wasn’t as in-depth and practical as I was hoping. However, it reminds me that I should really make a point to understand both the Jacobian and Hessian in Vector Calculus.

I wish I had brought my camera with me. There are some beautiful things to take pictures of. I’ll just have to steal pictures from Spaceman. Speaking of cameras - SIGGRAPH also seems to have a no camera policy as well. The program guide said if you were caught filming or taking pictures of certain things - your credentials would be revoked and you would be asked to leave. I think I understand where they’re coming from.

So today is Monday - so that means that most people who didn’t register for Full Conference are showing up today. I was told to expect everything to be a bit more packed. I haven’t ran into anyone that I worked with at DNA yet. There is the Autodesk User Group Meeting tonight - so hopefully there will be a few familiar faces there.

Also, there’s a surprising number of attractive girls here. By surprising I mean greater than 5. Maybe 10 is a limit though. =)

Nothing like nerd parties.

untitled01.cpp

July 23rd, 2007

It’s a bit difficult to get things done when you have relatives in town.

Sometime last week, in a half awaken state - I realized that the design I had previously done for a major part of our software wasn’t going to work like I had expected. I ended up spending about two to three days redesigning it so that it was simpler and cleaner. Also to prevent the next person who has to work on it won’t want to hurt me because it’s so complicated.

Multiple inheritance
I’m not sure when all the madness of anti-multi-inheritance started. Maybe it was around the time of Java or Eifel or one of those other completely OOP is languages. For better or for worse, multiple inheritance has a place in the C++ home. But it’s one of those things you have to be a bit careful when using. I don’t think there’s any particular evilness to it - as some others might try to convince the world of. It simplifies certain designs if you know what you’re doing with it. If you don’t you’re probably looking to be in a world of pain somewhere down the road.

So I guess it’s for better and not really for worse.

C++ Multithreading Goodness

July 14th, 2007

I’ve been updating an application that is used at method studios internally - and is available for purchase from Bare Knuckle Software - to include some new features. As we all know, with new features comes new code. With new code comes more problems to solve. In this round, these problems included multithreading.

I remember a few years back when I worked at a place that didn’t do so much C++. The company didn’t do so much C++ - I tried to do it as much as I could outside of work. However, there happened once upon a time when I was having a conversation with the two other developers that I was working with. I told them I wanted to buy a book on multithreading but specific to C++. They both looked at me like I was crazy. I think they managed to convince me that I was. Fortunately, I had friends like Andrew to set the record straight. The short of it is, yes - the idea of multithreading is virtually the same in any language. However, the nuances of what one can and cannot do is very particular.

For instance, one of the questions I found myself asking this week was, “Can I pass boost::shared_ptr between threads - and if so, how?” While I did find some answers to this particular question - I haven’t found one that I can immediately generalize yet. Most of them seem to be pathological cases of someone’s specific problem.

It’s After July 4th

July 6th, 2007

Aside from Independence Day, there isn’t anything significant about July 4th. I figured it was an appropriate title since it’s July 6th now

GPU Goodness
I got started on the GPU stuff. Started out in the world of Cg and made my way over to GLSL. I wrote some toy geometry shaders and made a class that wraps up all three shader types into a manageable class. The thing to add is the discovery of parameters. I’m in the middle of doing the Jos Stam stable fluids implementation in GLSL. But lack of sleep has made my coding desires a little less than what they usually are.

I made some extensions onto an existing Framebuffer Object class to make it easier to swap between floating point and integer data types.

I’ve been pondering doing a playback application for image sequences using the GPU some how. I ran across someone’s thoughts on doing decompression on the GPU - but it looked too complicated and I was too tired to make any attempts to figure it out.

One of the things that I keep threatening to do is to use the GPU as a way to handle meshing of metaballs. I have some ideas running around in my head of how to read the metaballs positions and radii. However, some of these ideas don’t conceptually resolve in my head either so I’ve been a bit hesitant to try them out. Maybe this weekend, I’ll sit down and give it a shot to see what I can come up with.

More C++ Things
I looked through Pete Becker’s book regarding the TR1 stuff that’s coming to C++. It’s a shame I don’t have a TR1 compliant compiler to mess with that stuff yet. Although Boost does have a TR1 implementation. Maybe I should check that out.