One of the biggest, although non-normalizing, issues that I’ve struggled with is that of the natural versus surrogate keys. Now, I didn’t know what these were a few years ago so on the off chance that you are me in that time period, I’ll briefly explain. A natural key is a unique/primary key that is made up of strictly information that is logically connected with the entity you are storing in the row. The tried and true example is that of a social security number or a detailed title, basically anything that is part of the entity that makes it unique. What makes things hard is choosing the right data to make that storage easier, obviously the same FIRST_NAME occurs in more than one PERSON so you’ll have to use another or more rows (ex. FIRST_NAME, LAST_NAME, BIRTHDATE, BIRTH_PLACE). But it’s a lot easier to use a surrogate key, most often an autoincrementing integer, to just represent each row, because you know that will be distinct.

When instructed in my undergrad database lectures I was told, flat out, to never use surrogate keys. Fortunately, the man I learned this from can now be properly labeled as a “hack” when it came to practical computational theory. He would literally grab his shirt collar and adjust it uncomfortable while making strange, wounded-animal-like noises every time a programmer stuck an extra method call in a constructor or used a surrogate key. His goal was to make us flawless when it came to design practice, but he really just made us terrified that if we did something outside of his strict guidelines he would leap on us with his red pen. Or that the noises he was making was part of the summoning act to bring some giant bird to come and tear our typing fingers off.

Well, we learned to do a pretty good impression of him, and we also learned that what he was saying wasn’t exactly flawless, or even reasonable. The reality of the matter is that it’s OKAY TO USE INTEGER PRIMARY KEYS. First of all, it’s not the end of the world to de-naturalize a piece of data. Plus, not only is it okay, but there are significant benefits in speed and tool interoperability.

The only argument in existence against using a surrogate key is that you are essentially defining rows as being defined by a simple number that has nothing to do with the actual data. Sure, this is a loss, and it’s going to make comparisons between multiple tables a whole lot easier. But what about complex tables that aren’t easy to represent in one or two fields. I remember that same “E” professor made us, for a practical software course, store foreign key relationships to a table using 3 varchar fields. Since we had 2 mappings to said table, this meant 6 varchar fields defining the relationships instead of 2 integer fields that would have been much faster for our thousands of rows and much more readable.

Beyond that, do you know how to fix the entity integrity issue? Really, you can just add a unique key constraint on the same fields you would have used for the natural primary key. By using this method you essentially recreate the exact same restrictions on a faster indexed table for which it is much easier to define relationships.

CAVEAT: But it’s not right to say that a database designer, especially a green one, gets to use surrogate keys off the start. Why not? Because it’s not the best case. To be honest, I think this whole world would (www) be a little bit better off if we could make the initial model work. I will continue to use natural keys whenever it is convenient for the model, but the difference is that I will make a conscious decision about which one to pick.

Call me a glassy-eyed, idealist youth, but I honestly believe that you can test a good programmer not by what he knows but by how he evaluates his options. It’s a fine balance between diving off the board before checking for pool water and hourly, broad-field pH tests, but it’s the one that will make you a solid programmer/architect/designer.

Posted on August 1st, 2008 | Filed under databases, programming | No Comments »

My developer friend, Scott Sloan, has been working on his DB class for some time now and it’s quite a useful tool for doing queries simply. Part of the ongoing movement, between him and myself, is designing a rock-solid set of framework classes that will aid in rapid PHP development. Of course, his project has some stuff to show for it while mine are still awaiting a beta release. But I really do love this class and others from Scott, and I use them in Droplet and contribute as I find need to break them. :D

The most recent change to this DB class was the addition of exception based error handling, making database connections an entirely simpler creature to deal with. This class does a lot of abstraction, and up until now it’s been virtually impossible to debug it, or any db interactions, without stack traces. Unfortunately, every silver lining comes with a dark cloud.

This cloud, not dealing with Scott, happens to be PHP’s development traditions. Just like most functionality, exceptions are good, maybe even necessary, but the implementation of them was very poor from a security perspective. The fact that you can’t disable the printing of the stack trace from an uncaught exception is inexcusable at best. But I can guess how that conversation went:

-Should we have an option to disable stack printing (specifically of method parameter values) for select Exceptions?
-Why?
-Well, maybe they wouldn’t want the end user to see what was passed in a particular method?
-But you just catch the exception!
-But what if you don’t catch the exception? They see everything!
-Are you suggesting that we write code to protect programmers who are breaking rules? Plus, all production servers have warnings/errors disabled for output, unless their people are idiots.
-Oh….I suppose you’re right.

Here’s my beef: you need to plan on some mistakes. No offense, but haven’t you ever forgotten to catch an exception? Since this is a scripting language, you don’t have the parental compile time warnings or blocks, like Java, to say “Yo, you didn’t tell me to do anything when this code freaks, and believe me it can. Fix yo’ code, homes.” (I assume that a PHP compiler would use a similar compile error vernacular). The reality is that there are many production systems that don’t hide warnings/errors, and even if they did you wouldn’t want password information getting written to a log file whenever you fail to connect to a database.

The key here is a “who needs to know” system, just like I talked about in my blog entry about keys. There should never, ever, ever,ever,ever be a way for the language to “accidentally” print a system password to a user. Even if the developer is a complete idiot! If he passes a password or hash into a function,  he’s not going to think about what would happen if that function would error. He’ll fix that when it happens. It probably sounds like I’m defending the Cro-Magnon programmers of the world, but I’m not…..really.

An even worse PHP prospect is the ability to dump a class with private class values onto a page with one motion (i.e. var_dump). I know that these are all helpful tools in debugging, and that private variables were never meant to be a security constraint in this fashion, but the way they did it DOESN’T MAKE SENSE!! That function should not, I repeat ‘NOT’, be able to print private access variables unless there are appropriate accessor functions. That’s what object oriented design is all about.

I wouldn’t be so hard on PHP if it weren’t for the fact that these examples are the ones that give PHP a bad name. When someone’s data gets stolen on a PHP site it isn’t that PHP is a bad language, it’s that the programmer wasn’t thinking about that specific hole. But there are a lot of spots where developers can not know the rules, or forget a step and accidentally release loads of information to an eager hacker. As part of the group defining how the tool gets made, we need to be careful that the tool doesn’t have a cigar cutter that’s big enough for our “baby developers” to fit their arms in.

Anyways, code smarter not harder!

Posted on August 1st, 2008 | Filed under open source, programming, security | No Comments »

I love coding in text editors because I don’t have to think about all the extra stuff. That’s not to say that I don’t love code completion and auto-generation tools, but it’s nice to sit down with just just you, a cup of hot apple cider, and ASCII. There’s no better tool for this than Notepad++, in my opinion.

It boast an expansive built in syntax-higlighting library and great tools for automating some of your frequented commands. But a major problem, aside from the inability to do multi-line regex stuff, is the way comments are set up. I found out that I love the fact that it shrinks them, but I hate that it uses a non-monospaced font. But you can fix it, and fast.

First open up your %APP_DATA%/Notepad++/stylers.xml file in Notepad++. The APP_DATA variable usually points to your ‘Documents and Settings/youruser/Application Data’ folder, but I could be wrong. Then do a find and replace to find “Comic Sans MS” and replace it with “”. That’s right, nothing.  Save and restart Notepad++ and you are ready to rock.

Thanks to Nathan for pointing this out to me. I’m fairly confident that he doesn’t even know I have a website. The only place I don’t talk about it, annoyingly, is at work. :D

Posted on July 24th, 2008 | Filed under software, tips | No Comments »

In a recent article on the blog I link to most, Jeff Atwood took the time to discuss database normalization and its rather blurry scale of reason. As usual, I found myself agreeing with Jeff and questioning a few of my own practices in database design. This is something I encourage all my peers to do, especially those who don’t spend much time contemplating the rules by which you program.

Now, when I say that I agree with the fact that normalization logic is blurred, that doesn’t mean that I abandon it. Quite the opposite, I’m actually kind of a fanatic about getting information nomalized, at least up to about 4NF….because beyond that I think it gets a little masonic, if you know what I mean. But I can also see the reasons that one has for denormalization.  Tools are the biggest one that I deal with because many applications from Oracle and reporting tools cannot deal with complex joins, intricate keys, or other common tricks. There are also speed issues that would get you to commit flattening and other acts of database treason.

The big deal here isn’t the fact that these practices are right or wrong (which they often are…clearly), but rather that there is a lack of openness on the topic in the CS curriculum and among the ‘elite programming circles’. When I got to my first serious development job I saw that people were designing tables with an apparent ignorance to the “Laws of the RDBMS”. It didn’t take me any time to throw my nose up and strut by like a upstart schoolgirl passing a pack of teenage smokers.

The reality is that young developers can’t come out of college thinking that they hold the keys to the ‘Normal Universe’ just because they took a database class or two.  No, you cut your teeth on your first 5 gut-wrenching projects, and at that point you earn the rights to sidestep a database design or two, but not before. It’s not black and white and it certainly has little to do with mathematics that you may have been taught. I’m not saying the math and theory isn’t important or even necessary to get to that point. I’m just saying that your decisions on who to marry comes less from the math knowledge that adding 1 and 1 returns 2, and more about the experience you gain in what works and what doesn’t after that first step.

Now that I’ve compared database design to marriage, theoretical mathematicians to freemasons, and myself to a snobby schoolgirl, it’s time to say that this isn’t the end of this. In fact it’s just the beginning. Hopefully I’ll have a few posts for you on breaking down the illusions that I’ve struggled with in the real world of database applications.

*Two things: 1) Normalcy, especially in the physical universe, doesn’t exist. 2)Just because compared DB laws to smoking and then some laws are breakable doesn’t mean you should go smoke. If you’re of age and you want to fine, but it’s a gross habit folks. Just like ignorance of design patterns. And you don’t want to be loke those freaks, do you?

Posted on July 22nd, 2008 | Filed under programming | 1 Comment »

Went out with friends tonight to see Wall-e (it’s faster to spell this way, please just roll with it :). By and large, HA, I found this movie to be delightful. Actually, adorable is probably the better term. The two girls 3 girls in our party were constantly “aww-ing” and I did my best to keep mine hidden behind my popcorn container. This was not an easy task, however, as I’m quite a sucker for heart-twanging romance and adorable characters.

One nice feature was the opening cartoon about a magician and his rabbit(I don’t speak Romanian, I assume it says ‘this is a legal showing of this feature, all proceeds go to Pixar’). The rabbit, a good challenger for the adorable characters in the main feature, was probably the most enjoyably cute animal creature I’ve seen since Yakky Doodle. His quest for gestational satisfaction leads him and his magician friend into a particularly clever battle that is both visually and creatively appealing. My only qualm was one or more groin injury jokes, something I’ve always considered in poor taste, but it was quickly over and the good far outweighed the bad. Very clever, and my congratulations are bestowed on the design team.

As for the main feature: very fun. It’s a wonderful romance story between two people who happen to be robots and happen to change the path of humanity. While the beginning was almost entirely given away by the trailer, it develops into a simple but enjoyable plot that would engage most movie-goers. The voice acting was great, proving once again that less really can be more, and I think we all agreed that the emotional connection that you get with the characters is the product of some amazing work at Pixar. I can’t remember the last time I felt so connected to a robot (no…that can’t be right).

The environmental message was obviously strong as the story moved on. While it became a little obvious at times I think it was very appropriate for younger kids without becoming too overpowering. When I came back I started reading some of the reviews with a particular interest in the ‘Christian family’ perspective. While I liked the positive sentiments (especially the fact that there were NO un-family-friendly moments AT ALL), I found that most complaints about this movie drift toward some kind of secret or lobbyist-driven environmental smackdown. But it appears that most, if not all, of these reviews come from clearly pre-viewing biased individuals.

I think this message of environmental responsibility was awe-inspiring for kids, who need to get motivated, and probably nothing more than a peanut m’n'm in the brain candy department for adults. I’m glad it’s out there and presented positively and I hope it does encourage someone to reduce waste, but I won’t hold my breath if that’s okay with you.  (Also, it’s cool to be green right now….however it’s not a mark of the secret ruling class. Please bring yourself back into reality and accept that ‘the man’ isn’t trying to control your brain to make you recycle against your will.)

Another point I have to make is about the morbidly obese population of people who all look the same: implausible but a reasonable caricature. It’s obvious that this was a shock portrayal and that by making a population full of fat people, you’d be setting yourself up for great jokes (like banana bombs from the top of a high tower in Worms). It is still unimpressive, just as in Idiocracy, how the portrayal of future generations falls flat in realism just to make a single, over-simplified point. Call me hard to please (’You’re hard to please!’), but I think that there could have been a little more depth to that plot-point to make it tastier for the thinking-man. I mean, the kids weren’t paying attention to that plot anyways, right?

I mean, do you seriously think that these people wouldn’t ever get bored sitting at their computer screens? At what point does Che Guevera (I know it’s a ridiculous point) grow up to be complacent in a hover chair? Does accidentally breaking the TRANSLUCENT video screens really cause a eureka moment in a fat person’s life. I don’t think so. Everything is cooler on television, if anything they’ll start complaining about how there aren’t enough cool explosions in real life.

Possibly the most interesting message, and one I believe was missed by some, was the significance of the corporation’s actions in the film. It’s another dark-side tarring view of corporate control, but it’s interesting to see what lengths they’ve gone to in the story line. While it, again, mirrors the advertisement-crazed, thought-blinding control of Brawndo, this movie actually shows the corporate head of BnL in a ‘presidential’ role. While it doesn’t really focus in too closely, it’s clearly a parody to some degree. This makes a significant note about the encroachment of corporate entities in areas of public sector power. Is it earth-shatterning? No, it’s Disney…just be cool, okay?

The main proof I have of it being Disney: the happy ending. So here’s my thinking, and I was alone in this, wouldn’t it have been better if he never remembered? What if she found the boot again and kept it with her as a reminder of how he cared enough about her to sacrifice everything. Yeah, heartwrenching, I know. But imagine the power of that moment. As I discussed (basically was taught) with an old friend, most other countries hate the happy endings that we American’s need in every story. Feel good, yes, but at the cost of realism and power? I know. It’s unrealistic to ask for, but I gues I’ll take the cute happy ending with me for now as I know it’ll still give me those warm fuzzies as i go to bed tonight.

Aside from that, the major plausibility flaws include: size issues between the initial spaceship landing and the larger spaceship, plant flourishing inside an closed refridgerator, artificial intelligence available through a malfunction or sheer will (see the end), gravity control on spaceship, buttons are predominant way of computers communicating in the future despite obvious inefficiency,  return of species on the planet like birds at the end. Other things are suspect, such as the force of a fire extinguisher (even in the future) being able to so drastically being able to create such a significant effect on a creature of Wall-e’s mass,  failure of Wall-e to melt on takeoff while on the outside of the spaceship, communication in space, and the ability of morbidly obese people to procreate easily. This is just more proof that I am a fun-hater, right?

Despite what appears, now, to be a callous review, I did really enjoy this. It’s probably the first of many movies that I’ve seen in theatres that I wouldn’t mind owning some day. Go see it, you’ll enjoy it. And leave a comment, fool. I want to hear how far off I was. I’m not saying I won’t ignore you, I’m just saying I wouldn’t mind hearing it. :D

Posted on July 12th, 2008 | Filed under entertainment | No Comments »

A new section of my personal website has just been opened and will hopefully see a lot of growth in the coming years: the Open Source Section. While I’ve been contributing for a while to a colleague’s open-source projects, this is my first time creating my own projects from the ground up.

I’ve described my reasons for opening this section on the home page and a few others, but it’s really important to hear. Actually, I’ve been really hesitant to make my code open source for a while now, but I realize that it’s not acceptable. After about a year of thinking about it and finding out what my problems were, I’ve decided that it’s in my best interest to break out and try it. That’s not to say that I didn’t have valid reasons to hold me back.

My first concern was credit. While I’m not terribly attached to my code, like other programmers I do feel the need to be at least partially recognized for the work I’ve put in to it. To be honest, it’s from a long line of experiences I’ve had where people have been unsupportive of hours of work or ideas that I’ve created. I’ve grown to hate the idea of someone devaluing or stealing my work. Unfortunately, this has lead me down the path to the Dark Side(see also) of proprietary ideas and opening myself to other opinions.

The fact of the matter is that I’ve benefited from other tools in my work but I’ve never credited the developers then. But there’s a reason why that’s okay. It’s not about the programmer(s)…it’s about the code. While every programmer wants to make a life out of this, it’s not appropriate to take every little action and demand credit for it. If I write something pretty nice, which isn’t quite likely, maybe someone will use it and tell a friend about it: “this is pretty nice“. If I need credit, I can my potential employer “I did this” or “I contributed to this”. But notice that the pride is in the finished product and you can enjoy your work on it…not on the casual afternoon of programming that you have the urge to brag about. I’ve been guilty of this a thousand times over.

The other issue is code quality. While I like to think of myself as a pretty solid programmer, I’m definitely not comfortable with showing my code off to the world. Actually, my first project, Droplet, saw a complete redesign the day before I put it online because I was worried about what my peers might think of my half-decent code. After reading Jeff Atwood’s post on programmers who fear outside eyes, I realized that I was part of my own problem and that this was a good way to break out of that.

In any case, I hope that you check out the open source website and try out Droplet. I really have enjoyed using the software and I hope you do the same. It’s not pretty, and it’s not a money-maker…but it’s a nice tool that you can share with everyone. Please share your comments and suggestions, and write a few lines of code yourself…I’m still waiting on my first user-submitted patch!

If Droplet isn’t your cup of tea, I have a few more on the way including a couple PHP classes and a fun few items in Java.

Posted on July 9th, 2008 | Filed under open source, programming | No Comments »

Most every computer science graduate can quote you the 5 layers of the TCP/IP network stack. Chances are they can even program their own tool to communicate on the top four parts. But most people in general don’t understand what happens when they click “Go” on their browser url bar or what’s happening when they try to pull up their friends’ relationship status in Facebook.

You know, for the most part I’m coming to grips with the fact that people don’t know this stuff. Actually, that gives me some sort of value to put on the education I received, but that’s not what I want in the long run. I’d love for everyday users to understand more about how these machines work. That’s why I’m about to tell you, the lay person, the single most hidden facts about computer networks: they’re just like really big, really fast postal systems.

Application Layer

When you want to send data to someone, you need to actually have the data first. It’s a simple rule, but a valid one. The application layer of the computer is what that’s all about. When you get hungry, you need to write a letter to Grandma asking for her Deliciously-Peanut-Buttery-White-Chocolatey-Macadamia-Nut-Cookie Recipe. So you get out a pen and paper and write it down, just a like a computer writes down information in the application layer. Let’s just say that you are a demanding grandchild: “Please send me your delicious Deliciously-Peanut-Buttery-White-Chocolatey-Macadamia-Nut-Cookie Recipe! I need it now!”.

Transportation Layer

So here’s the big question: how do the people on that end (i.e. your grandparents and uncle Fred) know which one of them the letter is for? Should they all read the whole letter until one of them guesses who it’s talking about? Probably not. What if Fred has a Deliciously-Peanut-Buttery-White-Chocolatey-Macadamia-Nut-Cookie Recipe, but his are synthetic cookies for people who have lost the will to live (i.e. they’re healthy cookies)? The easiest way to do this is to put Grandma’s name right at the top of the letter: “Dear Grandma”.

If we put this in place, it makes a lot of sense up until when Grandma tries to figure out who sent the letter. If she doesn’t know who it was then how can she write back? To prevent potentially devastating failure of communication you need only include your name on the bottom “Love, Me”, and at this point this letter is complete and comprehensible (Note: Me is your name, not just “Me”. What are you trying to do, screw this whole lesson up?) . Not only is this a functional letter, but it’s also an exact copy of what happens in the Transportation layer. Ports, just like names, specify who is supposed to get the information on the other machine when the information gets there. You can pick almost any port you want to, but unless you pick someone who exists then you’re not going to get much result. If you write “Dear Uncle Dishwasher”, it’s like sending information to a port that isn’t active. But a computer, like a household, usually has a few entities that are checking the mail.

(An interesting notion here is that of the firewall. If a firewall is ‘on’ it can look at what’s trying to talk to a computer’s port. Just like a nosy secretary, it can see that Little Jimmy isn’t supposed to get any mail because he’s so impressionable. He definitely shouldn’t be getting this letter saying “How to get all the free candy you want just by sharing the shiny card in mommy’s purse!”)

Network Layer

It’s easy to write a letter requesting Grandma’s Deliciously-Peanut-buttery-White-Chocolatey-Macadamia-Nut-Cookie Recipe, sure, but it’s just a piece of paper if we don’t send it. There are millions of Grandmas (numerical ports) in the world, and we need someway of specifying the house (computer) at which the request must arrive. So you grab an envelope and fill in your grandmother’s address in the center. By doing this you’re providing some information that the postal carrier can use to get the letter to where it needs to be. In the real world we have street addresses and cities and states, but in networking we have Internet Protocol (IP) addresses (ex. 72.14.207.99). But like the second name (port) on the letter (application data) we need a return address too, so you put your address in the top left of the envelope.

We can skip ahead and see how this is used later on by envisioning the post office downtown. When they get a letter, they look at the address and start doing some thinking. If it’s a local address they’ll send it out one way, and if it’s a foreign address they’ll send it another way. Each post office that you reach will do the same thing. Actually, you probably have a small networking “post office” in your house, it’s called a router.

Link Layer

You think it’s done, right? Wrong. How does the letter get out of your house? You’ve got to get the letter in the mailbox. In this way, the link layer comes in to play. So you stop, and you ask yourself “This letter is going very far away, and I don’t know how exactly it’s going to happen….but how do I get the process started?” You then remember that by sticking the envelope in the mailbox you can get the mail to the mail carrier. So you do so, and wait.

Some time passes and the mail carrier checks your mailbox for new mail. Oh ho, he thinks to himself, “This letter appears to be going very far away, and I don’t know how exactly it’s going to happen….but how do I get the process started?” He then remembers that it needs to go to the truck first, so he brings it there. When he get’s back to the post office he sees the letter and asks again “This letter appears to be going very far away…” He remembers that he needs to drop the letters off inside for sorting and mailing, and does that.

Most people don’t know about this process in networking, but if you’ve heard of something called a ‘MAC address’ then you at least know a little bit. A MAC address is pretty much like the idea of what to do next in order to get to the final destination. This is a little different than how a mailman always puts the mail in the truck, but it’s not that big of a difference. Just imagine that if a mailman were “linkman” he would basically get the letter and stand in one place screaming “WHO KNOWS WHERE I SHOULD PUT THIS?” He would then listen closely for someone to shout back “Put it on the truck, you idiot!” He would do that and then shout “OKAY NOW WHERE?” and someone would shout back “Go to the flippin’ post office with it!” Good thing that’s not the way it works or we’d have a lot of annoyed mailbox owners.

Physical Layer

This one is actually cheap, because we’ve already talked about it. Remember when the mailman walked the letter from the box to the truck when he remembered that first short step? It also happened when the truck drove to the post office; that was the physical layer. It’s just the process of sending the letter over a distance without thinking about it. In technical terms, it’s what happens when you send the data through the cable from one plug to another. Essentially this step is carried out by two types of cable in the networking universe: copper (”networking cable” or ethernet, short range) and fiber (looong range).

When accidents happen, say on the road between two mail trucks, a kind of non damaging explosion happens. The mailmen both go to the hospital and the trucks explode with your letter and the letter in the other truck (Note: only one letter per truck and only one lane [shared] per road. I know it’s hard to swallow, but that’s the way it works. Think about if the gas only cost 1/1000 of a cent per gallon and it cost trillions to build roads.). Anyway, the news would tell everyone “Don’t use the public mail for a while, stuff just blew up.” and they’d air it non-stop all week and people would hold off for a while during the quiet time and then send their letters again.

Summary

It’s important to emphasize that there are lot of holes in this comparison, but it’s not altogether that far off from what you need to know as a layperson. The biggest difference is the speed that happens when you do this. A letter can take several days to get somewhere and spends most of the time in transit on the physical layer (by car/truck, walking, flying, etc). A “packet” can take only a few seconds to get somewhere and often much less, and the slowdown typically happens in the routing process (i.e. post offices).

There are countless other issues too, including personal favorites: “How do people know when to send the mail again after mail-collision?” and “How did I get Grandma’s address?” (the latter saved for another analogy). But really this is the core of it all. Just remember that not everything comes as one letter; things like movies are basically like the postal carrier parking outside Grandma’s house with a SASE Gatlin Gun and firing through the front door until Grandpa and Uncle Frank run out the back door screaming (read: angry roommates hate your bandwidth usage).

Please feel free to leave comments about this explanation. I hope it helps you relate to your boyfriends and girlfriends again. Maybe they’ll even start speaking to you again after the time you tried to explain RISC during a romantic evening out.

Posted on June 5th, 2008 | Filed under Uncategorized | 2 Comments »

For a while now I’ve been fairly interested in the ideas and methodologies available in telecommuting. Much less than the actual technology involved, I’m fascinated by its effect on the modern markets, everyday lifestyles, and the way that people view work in the coming years. It’s a concept that has an incredible amount of potential, but still only a fraction being used.

When I began writing about it for my last undergraduate term paper (it also happened to be my first, but that’s neither her nor there), I started to see the magnitude of the impact. Many different sectors could and would see change:

  • Transportation costs become zero for average worker (work related travel)
  • Decreased national fuel consumption
  • Increased productivity per worker
  • Shift in work-personal life attitudes
  • Technological revolution in bandwidth and security
  • ’Worker’ identity shift – contractor vs. employee
  • Decreased cost to employers from wage reduction (opportunity costs balance out)
  • Local housing market stabilizing
  • Simplified business models
  • Business needs analysis leads to reduced redundancy in services
  • Global market competition in near truest form
  • On and on and on…

However, businesses still need to get on board with this new strategy. They need to see the benefits to their workers (essentially ‘clients’ in a way) and to themselves. They also need to find a way to change the way to make the most out of their resources.

Employers need to explore their preconceptions and ideals toward work and, more importantly, productivity assurance. Realistically, how does a manager know, I mean really know, that their employees are working when they’re at home? They’re probably just goofing off, right? If they are, then it doesn’t work. But if you can realize that employees at work goof off, then you realize that it’s not the location that causes the problems. Only a micromanaging toad needs to look over their employee’s shoulder, and since that’s not the model then why are we allowing it to limit our expansion into new concepts

Results-based management is the key to ensuring success in the coming years, and from my limited experience I can honestly say that I haven’t seen it. Employees need to get the work done and that’s that (especially if they’re salaried employees, but that’s another topic). If they meet the requirements then a performance review should state very plainly: “Met Requirements.” If they didn’t, then consider action to resolve this issue through discipline, and if they exceeded expectations then say “Exceeded Expectations.” I know this sounds confusing (please see my sarcasm), but you have to realize that it is just that simple. The trick is measuring the output.

For a lot of companies, especially companies in which IT is merely a department and not the main focus, project management isn’t part of the flow. People in those positions don’t see the necessity of measuring and enforcing productivity constraints just because it’s a fluid topic. “Make the system work and keep improving it” is not an acceptable guideline for a department much less a project group or individual. No wonder they have a hard time trusting their employees to be working: they don’t actually have a blueprint for the work! Management must set up well-defined goals with project managers; they’ll get it done and take care of the issues from there. If your management can’t handle it then they lose out, and if project managers can’t handle it then THEY lose out, and when an employee can’t handle it then THEY LOSE OUT. (smiles)

But really, this is the future of the workplace. If you have the resources to have a friendly, welcoming workplace then you take advantage of that. If you have the networking infrastructure and know how to allow for workers to VPN in to work then take advantage of it. And if you have a large campus with restaurants and gyms, then take advantage of that. It’s about your competitive edge as a company. There is no reason for an employee to have to come to work for reasons of “teamwork” and then not see the company encourage it in any way.

I’m not saying there’s no room for the traditional daily commute, far from it! Offices need to smell the coffee, but a good direction could just be making the most of what you’ve got without revolutionizing the world. My employer, for example, will most likely never allow much by way of telecommuting. But they’ve got a lot of changes to make from the 5′5” high cubicle walls and closed atmosphere. Every employee is an island here, which is fair in the sole case of personal privacy. But when you’re sitting in a beige box with a scenic view of ceiling tiles you have to ask yourself “How is this different from working from home? All I see is that I have to keep an ironing board in the living room and pay $30+ a week in gas to get here.”

Posted on May 29th, 2008 | Filed under Uncategorized | No Comments »

In a recent Wired article, Brandon Keim confessed the following:

Longtime Wired Science readers know that I’m less bothered than many science writers at the possibility of evolution being under-taught in science and biology courses: so long as a teacher imparts a sense of wonder and curiosity, the details will follow. However, teaching creationism or intelligent design alongside evolution, as if religious explanations had even a fraction of the scientific validity of evolution, is unacceptable: it promotes fatally flawed, uncritical thinking. (source)

I stand slightly to Keim’s left on this issue, but I honestly feel as though he made a slam dunk for reason. He explained the key issue (in a calm and clear way) very well: “as if religious explanations had even a fraction of the scientific validity of evolution.” My only concern, as with several others, is that this debate exists now and for as long as it takes to make it clear. I think Keim doesn’t feel quite as strongly about having a strong education on the topic as I do. I don’t know if either of us is right, but I guess we’ll see.

My stipulation is that the goal is to direct, not to steer, our kids. The major difference here is whether or not we stick blinders on them when we start pulling the reins. One of the major draws I had to this topic when I was younger was how the scientists who were looking into intelligent design were saying “We don’t know why nobody told us about this in high school, or even undergraduate studies.” This isn’t something we should be hearing from people!

Students should hear that the issues about where life came from are addressed fully in college or maybe even high school. There are some missing pages to the story of the universe, but we can encourage our students to go and find them. Isn’t it possible for us to show them the whole story, including the speculation (emphasis on the speculation part) of intelligent design theorists? The suggested main focus would be on WHY the scientists think the way they do. EXPLORE the evidence (or in this case, lack thereof), and then EXPLAIN how the scientific method works when it comes to theories and peer review.

Going back to my days in high school, I would have killed for a professor to say to me: “….Okay, so that’s the gist of evolutionary theory. It’s possibly the largest cornerstone for modern science and new discoveries support it even more every year. But there are still a few things left to figure out (maybe you can find the answer some day), like –this– or –that– and even –the other thing–. There are some scientists that believe –this thing–, but it’s a very small minority and it’s shrinking. Which brings us to our next topic: how do scientists figure this out? We’ll look at what process scientists use to get their ideas out there and into these textbooks and why -this other theory- isn’t in there. It’s a big process. Let’s talk about it….”

Posted on May 21st, 2008 | Filed under Uncategorized | 2 Comments »

Idea behind a debate: “I’ve got ideas, and you’ve got ideas. I think you’re a wrong for thinking the way you do, and I’m going to try to explain it to you. I’m also giving you a chance to explain your side to me, but I’m really doubting that you’ll change my mind. We’ll see.”Idea behind debates on Slashdot or Digg (or online forums in general): “I’ve got an idea, and it’s the right idea. You, for some stupid reason, disagree with me. I’m going to tell you what I think, and your points are all invalid. If you argue, you’re proving that your side is ignorant and belligerent.”

When two people meet, they’re going to disagree about something. Maybe it’s religion, maybe it’s politics, or maybe it’s the color shirts that each other has on. Regardless (note the lack if the ir- prefix), it’s going to happen: everyone is different. But it’s how they address those differences that will determine the relationship. You can probably tell that I’m fairly biased when it comes to this sort of thing, but I do feel that I’m being quite accurate. The main problem I have is the way it’s done. Do you know the big difference between these two statements? That’s right, the phrase “We’ll see.”

Let’s quick get our definitions straight:

Intolerance is bigotry: hating the idea, hating the philosophy, or hating the person. While technically being a violent way of thinking, it does not mean that it has a violent physical manifestation. It just means that you do not tolerate that belief system.

Acceptance is quite the opposite and is the acceptance of the other person’s ideals and welcoming of that pattern of thought. This would be someone who is an atheist talking to someone who holds traditional Hindu beliefs. In a conversation like that, an accepting person would be supportive of Hindu beliefs if pressured by someone who was intolerant.

Tolerance is in the middle of the two and IS NOT THE SAME as either. This is the major problem in modern conversation. A person who is tolerant merely believes that a person’s belief does not necessitate hate. If they agree or disagree with the point of view, they are STILL tolerant. It isn’t until they help or hate that they become acceptant or intolerant. It’s totally fine to be tolerant and not supportive or damaging. It’s actually the cornerstone of modern civilization!

So what am I getting at here? Well, it has to do with the debate. The problem is that everyone in the world disagrees, but the loudest people with the smallest ears(Slashdot comes to mind) are unfortunately the common representatives. Well, how do we slow that down? Math or, specifically, logic saves the day.

Case in point, if ‘you refuse to listen to an argument supporting a point of view’ then that implies ‘you are intolerant’. It’s true! Any problems? If not, try this: if ‘you are intolerant’ does not mandate that you can’t listen to an argument. This is also true: ‘p implies q’ does not mean ‘q implies p’. But as soon as you do not listen to another person’s side of an argument you sacrifice your claim to tolerance or acceptance. I propose that if you’re intolerant and shut up you’re fine, and maybe nobody even knows that you are. However, the moment you open your mouth…you lose that shield.

Why is it that so many people on these public forums claim to be tolerant when they are guilty of this simple logic flaw? Have you read some of the debates between Microsoft and Open Source Developers? What about computer science versus business and marketing? What about Intelligent Design ideas vs. Evolution principles?

That last one, I confess, is my favorite. I’ve been on both sides of that debate for years, but every time I look for more information I get nothing but intolerant hands trying to break each other with the sound of their typing (all capital letters, usually). While finally disagreeing with the Intelligent Design theorists a little while back, it still kills me to see that the blogger or poster from the “intolerant, religious right” typically winds out being the most tolerant person in the room.

Here’s the tragic part: in the worst case someone who is tolerant and incorrect is actually the bastion for truth , while an intolerant, correct person is the one trying to stifle truth.

Can you see what I mean? So if you are right, try tolerance: true exchange of ideas in debate! They’re actually willing to have the debate, folks, so have one. You’ll quickly notice that if someone doesn’t have a leg to stand on, but is willing to have an honest discussion….is going to lose and possibly change his/her mind! All it takes is someone to calmly, coolly, collectedly walk them through it.

The same thing is true of Open Source developers like me and my ignorant Microsoft friends. The fact is that they might be right for some cases, but they refuse to join the debate. Shouting obscenities from dark caves you quickly realize that they don’t know what they’re talking about, and you can dismiss the argument…it’s over. But until you realize what their attempt at the argument is, you can never be able to respect yourself as an intolerant, open-minded individual.

Go ahead, keep shouting and don’t prove anything. You might be right, but you’re making your whole team sound stupid, and if it’s a professional environment then me and my professional colleagues are going to take you to the cleaners.

Posted on May 15th, 2008 | Filed under Uncategorized | No Comments »