Tuesday, January 12, 2010

Mediocre Programmer's Conundrum

I recently read someone pose the following question, and give a rather brutal answer.

How many mediocre programmers does it take to measure up to one good programmer?

The answer is that no number of mediocre programmers will ever measure up.

Well, that was rather jarring.  It really bruised my ego.

His logic is that, if you could somehow quantify a programmer's work, a single good programmer will always out-perform a single mediocre programmer. (Very true, by the way...  simple math...  if 1a > 1b, then 1a > 1b.)  Also, because programming is such a demanding task in both creativity and technical precision, communication is vitally important when multiple developers are working on the same project.  As you increase the number of programmers, you increase the communication which must occur in order to release an acceptable product.  There is also added overhead with rewriting code to fit in with code written by other people, time spent waiting on critical bottlenecks, etc.

It is impossible to quantify the overhead of working with multiple developers...  Every project is different, every team has different dynamics, and even the meekest of programmers have very strong egos, even if those egos are hidden behind layers upon layers of modesty, and rarely everything works smoothly and an amazing product is released ahead of schedule.  (Don't ever bet on development being smooth, quick, or easy.  You're more likely to get rich by playing the state lottery.)

So, with that in mind, I'm going to pull out a baseless, arbitrary number out of my ass.  Let's say that adding a programmer adds 10% overhead to the team.  With just one programmer, they're free to just work on what they're working on...  one "unit" of production per day.  With two, they each do 0.9 units, a total of 1.8...  with three, that's 0.81 each, or 2.43...  Continuing on with this trend, we find that 9 programmers each do 0.4304ish units, for a total of 3.8742 units...  certainly better than 1 unit only, but at 9 times the cost (if they're all being paid the same).

Overhead is unavoidable.  If developers work in a vacuum, not able to communicate with their peers, then at best the developers will each write their own version of the entire project...  at worst, they'll actually try to reconcile their part of the project with the code written by other people, introduce endless bugs, cause endless delays, and the project will, quite literally, never be finished.

Now, I'm not saying that developers should work alone.  Interns need to do the boring stuff, so that they can learn how to develop instead of just dream...  managers need to manage so that the project will eventually release a product...  senior developers need to mentor the juniors and work their truly amazing magic...  and corporate needs to realize that they're only good at signing the paychecks and very, very, ungodly poor at micromanaging.  (Anything more than "Have the programmers mutinied yet?" "Nope." "Good." is micromanaging, by the way.  Yes, deadlines are good, when they're realistic, based on an understanding of the creative process, and based on the knowledge and abilities of the developers, and based on the nitty-gritty details and scope of the project.  Corporate knows none of this, and is incapable of knowing this first hand, by its very nature.)  Programmers need to work in teams in order to grow and develop their skills (especially people skills, which many programmers (erroneously) believe they don't need).  A programmer who is learning is a happy programmer, and happy programmers make decent programs.

Well, I've strayed from the topic I originally intended to discuss.  What I want to ask is:

How can a mediocre programmer become a good (or even great) programmer?

Well, the obvious is to develop technical skills, including those that delve into hardware.  Understanding how hardware works is a knowledge that is slowly disappearing from the scope of a mediocre programmer's education, yet this knowledge gives insight into shortcuts and tricks that the top hackers understand.  My next "toy" is going to be a build-it-yourself circuit board kit.  (Okay, actually, my next toy will be a trebuchet...  but that's not a professional development toy.)

What is less obvious, and far more vital, however, is to learn a completely set of skills...  non-technical skills...

I already mentioned people skills...  communication is key, and it is easy to see how it effects a team.  This includes diplomacy and being able to recognize or even create win-win situations.  You don't have to learn to be the next great orator, but you do need to recognize how jargon effects people, including the "lesser" people who buy your software and make it possible to have a paycheck...  or the office assistant who brews coffee and who handles your physical mail...  you do like your company expensed copy of Wired to be in good condition, don't you?  Go out, get away from programmers, and hold conversations with people who think that a prototype is a one-of-a-kind car with features that maybe they'll see in a couple years.

But far, far more vital that soft skills...  just as important as having a firm grasp on the differences between a signed and unsigned integer, or how procedure calls work...  the number one skill that often separates a mediocre programmer from a good programmer is pure, raw determination.

Not motivation...  Anyone can be motivated.  Motivation fades away...  excitement wanes...  the next shiny algorithm is always more appealing than the one you're slogging through right now, and it is easy to be distracted by big dreams.

Determination, however, is a conscious decision that you must follow through with.  When XKCD has a comic about scientists being unable to find the G-spot, determination is what brings you back to your code, happily and ready to work, when otherwise you'd be tempted to search for the news article that spawned the joke.  (Okay, after you've sent the link to your wife via IM, you can go back to your code.)

Changing diapers isn't "maternal instinct"...  there were no diapers during the period of time that formed hominid instincts.  Taking care of the people you love may be somewhat instinctual, but changing diapers is all determination...  and a man can be just as determined as a woman, just as easily.  (Society says that women change diapers...  not genetics...  and except for the final trimester of pregnancy, women are just as capable of hunting and gathering as men.)  (by the way, some of the best programmers I know are women...  as are some of the worst...  It's not genetics, it's society which puts men and women into separate roles...  okay, I'm trying to hammer in the point that yes, us guys can be just as determined as women.  I think I'm doing an okay job of making that point, but I also realize that I'm probably just rambling within my parenthetical side points.)

So...  this determination thing...  it sounds interesting...  and I want to be a good programmer.  What does it take?

Well, I'm glad I asked.  When I know the full answer, I'll post it here.  In the mean time, here's a partial answer that is, so far, working better than anything else I've tried before.


  1. Realize when you're distracted.
  2. Stop being distracted.
  3. Envision the goal and your current position.
  4. Smile (even a fake one) and write the next line of code.
That's it.  Each time you get distracted, look at where you are, where you're going, and take the next step.  There are times to take a deeper survey of your work at the beginning and end of each day, at each team meeting, and while you're laying awake in bed puzzling through interesting problems.  While getting into the "flow" of programming is certainly good for writing huge chunks of code at a time, the flow is fickle and should never be relied on...  rather, simply welcomed when it arrives.  Write the next line, and be happy that you won't have to write that line again.

If you get stuck, there are ways around it...  Work on the problem with a different medium...  White-board the problem, or even get out paper and pen.  (not pencil...  pencils are evil, though they do sequester carbon and increases demand (and thus production) of trees, which further sequesters carbon.)  Grab marbles and iterate through your loops physically...  don't check your RSS feeds, or read an article from Wired...  they answers don't lie there, and your subconscious finds patterns more easily if you're also working on the problem consciously.

Another trick to remove distractions:  Clean your desk.  Daily.  The benefits become self evident after a couple of weeks of this practice.  (While you're at it, clean your desk at home, too... and do the dishes and take out the trash, and vacuum the rugs.  If nothing else, you wife will notice and reward you...  which isn't a bad thing.)  When you're away from your computer, really be away from your computer...  be wherever you are, whenever you're there.

Above all, be determined.  Stay determined.


Tuesday, December 22, 2009

TimeAgent progress 12-22-09

I'm happy to report that I'm making steady progress.  Fewer hours at work may mean slimmer paychecks and more stress about paying bills, but it also means more time available to write code and slog through bugs.

So, here are my changes.

No Marque.

I got rid of the scrolling entirely.  It's gone completely.

However, I didn't get rid of the ability to move items to different places along the bar.  It is still a simple matter to click and drag to rearrange the order that items appear.

This means that I have a bit more work to do, namely I have to add in a way to "snap" items in place.  It's a little hard to explain, since the English language doesn't have a word or short phrase to describe this...  so here's the problem and how I want to solve it:

Imagine that you have three items in your list, and you just don't like the way they're sorted...  You want to exchange item 2 with item 3.  Right now, you can click and drag item 2 over to where item 3 sits, then move item 3 in place...  but it would be a lot easier for every day use if you just dragged item 2, and 3 moves automatically to the space recently vacated.  Understand what I'm getting at?  A sort of "gravity" effect towards the front of the list, items moving to the front in the absence of any other task to keep them in place.

In fact, writing this out is helping me to form a plan...  have a "shadow" of the task stay in place, until the middle that task is more than 50% to the other side of another task...  then have a short animation of the tasks switching place.   The animation lets the users know what is really happening.  Also have a shadow of the task you're dragging attached to the cursor, so that the user knows that the program is responding to their actions. (Note to programmers world-wide:  always let the users know that the program is listening and responding.)

Task Windows

I have also added pop-up windows, after the task is clicked on.  (The windows do not appear if the user dragged the tasks at all...  I'll have to do some tuning on this, as right now, it is ultra sensitive, and not everyone uses track balls like me.  Mice are such imprecise tools that should be thrown away at the soonest possible moment.  This means that for most people who have never learned the joy of control that a trackball gives, it might be a chore to click on a task without inadvertently dragging the task a pixel or two over, turning the click into a click-and-drag.)

The task windows show a description of the task, hopefully more in-depth than the task's short title which appears in the app bar...  but it can be as concise or elaborate as the user wants...  it can even be completely empty.  The windows, right now, have 5 buttons with the following functions:

  • Set the task to inactive
  • Set the task to "currently working" (or back to the normal, "active" mode, if you're taking a break)
  • Edit the task
  • Open a web page associated with the task
  • Close the window
The first button, to set the task to inactive, will be the button to push when you're done with the task...  at least, done for now.  If it's a one-time task, i.e., pick up mom from the airport, then the task will remove itself afterwards.  (Future versions will have an option to log the task for statistics, but this isn't a feature planned for the 1.0 release.)  If it's a recurring task, i.e., check email, then the task will be removed from the app bar until it is scheduled to reappear.  (It will still be available in the main list of tasks, so that it can be edited.)

The second button, to switch a task's status to currently working, will be for marking a task as the one you're working on right now.  It will move the task into a special area on the app bar, and provide quick buttons for marking the task as done and opening its web page.  This is a bit of forward thinking, which will tie into the statistics tracking in future versions, but in version 1.0, it will just be a handy shortcut and reminder for the easily distracted like myself.  Only one task can be the working task at a time...  if any other task is set to currently working, it will automatically demote the working task back to a normal active status before setting the new one's status up to currently working.

The third button, to edit a task, is pretty self-explanatory.  Clicking it opens the task editor, and loads the task, allowing you to do anything you want to that task.  (Future versions...  {far, far future versions, like 3.0 server edition versions...  yeah, it'll be a while...}  will have client/server support, and you can only edit tasks that you have permission to edit...  but that will be quite a while, as the soonest I'm planning on writing a server for this is version 3, a few years down the road.  No firm plans on when to release a server edition, so please don't hold your breath.)

The fourth button will open a web page associated with the task, if appropriate.  Obviously there is no web page for a task telling you to pick weeds or go to the store...  but if the task is to write a post in your blog, or check your email, then the button will open that page for you.

And the final button will let you close the window.  Simple, sweet, and easy.

Program Options

I've added a window for setting program options...  things like the default position of the app bar (top of the screen, bottom, or the last position used), where to save the data files, etc.  Nothing works on it yet, mainly because I won't be working on saving files (and program options require configuration files) until I'm confident that there won't be any major changes in the structure of tasks.  Still, having the window allows me to add the options in as they become relevant, rather than taking notes somewhere and hoping I check them a few months down the line.

Up Next

As much as I want to tackle the interesting task of snapping tasks into place when other tasks are moved, I really need to get the the more meaty, and more boring, parts of the program.  Mainly, I need a way to create and edit tasks, without changing the source code...  So next up, it's time to make a window for managing my tasks.

On another note...

I installed a program today to add virtual desktops to my computer...  kinda sorta like having multiple monitors...  but not quite.  Unix and Linux users know what I'm talking about, but I don't have the time to explain what it is here.  Well, I'm running into an interesting problem: When TimeAgent is running, and I switch desktops, my program disappears from the screen, but it doesn't release the screen real-estate.  I'd like to find a way to address this within TimeAgent itself, so that there is never a problem with other people's computers, but I'll probably have to find a way within the virtual desktops program, and give instructions on how to get around it.

Sunday, December 6, 2009

TimeAgent out of prototype phase

I suppose that it would help if everyone knew what TimeAgent is.

I'm writing time management software.  Some people who have followed me on my previous blogs will remember me mentioning it before.

The Problem (that TimeAgent will solve):

I have worked with a few time management applications and methods of tracking my daily tasks before...  with mixed results.

I have used Google Calendar with great results...  when I would actually check it.  It never became a habit, never caught on, so despite its great number of features and ease of use, it failed because I wasn't checking it often enough to be reminded.

I have used programs installed on my computer that pop up reminders at certain times, including Microsoft Outlook.  After a couple of weeks, I'd either uninstall them or remove all of my tasks, because they were just too annoying; their reminders would pop up no matter how important the task, would interrupt my work flow, and cost me at least 15 minutes of quality development time, as I'd have to get myself un-distracted and back into the flow of programming.

I have also used no-tech solutions, such as pen and paper, even buying fancy day planners and such...  and after a couple of weeks, I'd stop updating them because I'd get tired of writing the same things over and over again.

The "product" with the best results so far have been to-do list widgets on my iGoogle page...  I check that page daily (it's my home page), and I have found lists that allow me to mark tasks as done without the task being deleted.  However, these lists are always there, and they don't have any distinction between different days...  if I leave a task marked completed one day, then it stays completed the next.  If I have tasks that I only perform on days that I work, or on my days off, then the tasks will still appear on my list regardless.  After a while, I tend to ignore the lists.

The Solution (that I hope TimeAgent provides)


So, what I want and need is a program that will be ever-present, but never annoying.  It has to have as little tedium as possible, yet robust enough to know when to remind me of a scheduled task should be worked on.

I hope to achieve the ever-presence by having TimeAgent run primarily as a deskbar application...  That is, it takes up an edge of the screen just like the Windows Task Bar does, or the Google Desktop application, if anyone has used that.  When a task is scheduled, it will appear as a button on this bar, allowing me to take action on it.

To prevent the program from becoming annoying, it will not pop-up reminders (okay, maybe in a future version a few years down the road, high importance tasks might pop-up, if the user wants them to), it will not make any attention-grabbing sounds, it will just sit there either quietly congratulating the user on having completed all of their tasks, or silently displaying what tasks they still have to accomplish.

The lack of tedium will come by allowing people to create a schedule on when the task will appear again, so that once a task is added, it won't be deleted when you're done, or when the next day begins...  schedules like daily (i.e., for cleaning your cat's litter box), hourly or minutely, or even at certain times throughout the day (i.e., for checking your email...  for the neurotic, it can be set to every minute, every 15 minutes, every 90 minutes, or even every 27 minutes for the truly random...  for the more laid-back, every 4 hours, or just after you wake up and just before you normally go to sleep), certain days of the week (i.e., monday-friday for getting your kids off to school, or tuesday nights for getting the trash cans out to the curb), certain days of the month (such as for paying bills), or even certain days of the year (for birthdays, anniversaries, or even multiple days of the year for quarterly reports or such activities).

For true robustness, though, I am adding in project scheduling, where individual tasks can have their own schedule, but the tasks are grouped together, and follow an even larger schedule...  For instance, if you have team meetings at work every Monday at noon, but this Monday is a work holiday, then the task won't show up...  since you won't be at work, and all, and nobody will be at the meeting no matter what the computer may say.  This would be especially important for someone who has a rather...  unpredictable work schedule (like me...  monday-friday is vastly over-rated).

My Progress So Far (and a look at how it is designed)


Well, I'm pleased to announce that after a couple of years of slowly prototyping and tinkering, I'm entering a phase of real and earnest development.  I have a solid plan on how the program is to act, what it is to look like, and how people will interact with it.  I have completed my basic prototype which, while it is technically useless right now, it is a great place to start further development.

My next, most immediate step, is to create a development plan, complete with deadlines.  That includes not just thinking about the features I want, but actually writing them down, organizing them, and making a plan for when and how to implement them.

The step after that will be to make a functional GUI...  create panels to display detailed information about the tasks, open web pages in different browser windows, and create a way to actually make and schedule tasks without making users muck around with source code or cryptic data files.  After that, create a file structure (probably XML) to save the tasks in...  since until I actually have all of the features implemented in their final form, I have at best a great guess at exactly what data I'll need to save, and how to save it...  and if I guess wrong, I don't want multiple versions of datafiles floating around to confuse and cripple my program...  I don't want my first release to have to worry about backwards compatibility with the development versions.

Once all of that is finished, I'll start with some user-testing.  Not quite beta-testing, because I won't be leaving the program out for people to intentionally break it...  I'll be testing people's first looks at the program, as far as how easy it is to use each feature, i.e., add a new task, change a task's schedule, open a web page related to the task, etc.  After all, I'm the developer...  I have to assume that all of my assumptions about how easy the program is to use are completely wrong, since I'm the one who will have written the thing.  For me, adding a task is as simple as clicking this menu item, selecting that panel, and entering the information...  when the reality is that most people won't even know that the menu item exists, much less that there is a panel where information can be entered.  (Honestly, if it weren't for the precedent set by Windows 95, who would know that the little circle with a flag in it, in Windows 7, is actually a system menu useful for shutting down the computer, running programs, or accessing the nuts and bolts of the machine?)

Then, my final step will be to call in a favor with a GUI artist, and make the program look clean and polished. I'm leaving that as the last step because I want the base program to be as rock-solid as possible, and I want as few major changes remaining as possible, before I worry about its shelf-appeal.  I'll enlist the help of the artist as soon as I'm ready to release a beta product.

Then, I'll spend a few months chasing down bugs that appear in the beta version, put a little more spit and polish on the thing, and I'll finally have a released product that might...  just maybe... be good enough to bring a little extra income.  That last step is still quite far down the road...  with an average of 20 hours per week of development time, if I'm lucky, I'm looking at least a year down the road, probably even two years.

Provisional timeline:

So, with that being said, I'm going to stick my neck out and make a guess on when TimeAgent will meet its milestones.

Now: Complete a plan (making this estimated guess obsolete, since I'll be basing my plan on researched data), finish in a couple of days.  Enter "Core Development" phase where nothing actually works, but all of the pieces are being fit together.

1 month: Semi-useful GUI.  I'll be able to add and remove tasks, and manage their schedules.  The heart of core development.

3 months: "Complete" GUI.  Adding and managing tasks will be old hat...  I should have a very reliable scheduling system in place.  Begin Alpha Testing.

6 months: Chase down most of the annoyances, begin user testing.  Late Alpha phase.

7 months: Finish initial user testing, implement changes and incrementally engage in more user testing as each change is made.

9 months: Contact GUI artist, begin limited Beta testing among trusted developers.

11 months: Finish polishing look and feel, begin open Beta.

13 months: RTM (release to market).

14 months: After action review, begin collecting data for next version.

Now, none of this portrays my marketing...  Honestly, that's the part that is the most daunting to me.  I know that I'm going to be producing a product that fills a need...  but if I tip my hand too early, I'm afraid that someone will steal my idea (you can't copyright ideas, only implementations)...  Since I'm just one developer, and most of my time is spent on other projects, I can't compete with developers who already have a market base.  If I start my marketing too late, then the launch will be slow, and I'll lose out on valuable beta testers, and major bugs might leak into my RTM version.

I could  protect myself by making this open source, in which case nobody will steal the idea (why compete with that which is free?), and I'll get high quality testers...  but I lose control over the code, I'll get burned out on the project, and nobody will pick it up...  the idea dies.  If, however, I keep it proprietary, I'll be able to focus on upgrades and fixes, and I'll have motivation to keep on producing it, as well as produce other, more ambitious software...  hire employees and contribute to the economy, saving people time (which equates to money, especially if you have hourly employees), and improving everybody's standard of living by 0.0000000001%.

Tuesday, October 20, 2009

My Favorite Charity

Hackers for Charity is an organization created and led by Johnny Long with two main goals:

  • Assist charities with technical issues
  • Spread computers to African schools to help education and self-sufficiency
Before I go too far, let me share their definition of the word Hacker.

Someone who enjoys delving into the guts of a process or technology, usually able to find ways to use that process in ways other than the originally intended purpose.

The definition says nothing about a person's morality or motives.  In fact, within the "hacker community" there are a wide range of moral stances, including justice-seeking vigilantes, people hired by law enforcement agencies, and even a few rare, but somewhat dangerous, "bad guys."  Hackers are found in all walks of life, from grocery store clerks living in their parents' house, to billionaires like Bill Gates, to the quiet happily married couple next door.  (It's far more likely that a hacker is a well-adjusted member of society, than to be living in a basement or controlling a personal economy.)

Hackers aren't always male, either...  even though the most common trait among hackers is a goatee and an allergy to ties.  Even my father, a well respected member in the professional network security world, pastor, and all-around goody-two-shoes, grows light hair on his chin and he is quite happy that his ties are covered in dust.

So, don't flinch at the word "Hacker."  A hacker is someone who just keeps hacking away at a problem until they fully understand it.

Now, on with talking about Hackers for Charities again...

So far the work on the first goal, to assist other charities, has gone in fits and spurts.  One month, there will be dozens of requests for help, usually asking for help on their web site.  The next three months will be silence.  Obviously being a good publicist isn't a requirement to be a hacker.  There are dozens of volunteers chomping at the bit for some work to do, and hundreds waiting in the wings to help in little ways.  The work is free, the experience is enlightening, and the quality is excellent.

If you know of any charities that could use a bit of help on the technology side, send them on over to HFC.

Johnny does take donations...  he can't do everything on the backs of highly skilled, willing volunteers, working through the public Internet...  HFC's second goal, to help African communities with education and self-reliance requires things that can't be (honestly and legally) hacked for free...  like trips to Africa, shipping of computer parts, including wrestling with customs, and having enough food and shelter to survive the trip.  You can't exactly send a person through email to a different room, much less a different continent...  Sending a couple dozen computers to Africa isn't as easy as stowing them as carry-on luggage on your plane.  There is man power in Africa, both from people who grew up there, and from volunteers making trips, and there are logistics chains in the US from trusted volunteers, but it wouldn't be feasible to ship the equipment in ourselves, especially since we don't have planes or boats capable of making the trip (which, we'd have to pay for fuel and maintenance anyways), so HFC needs money for shipping.  The money that isn't used for shipping is used for more computer parts.  The money that isn't used for more computer parts is used for food and shelter for the volunteers in Africa (the volunteers pay for their own plane ticket, and must also have enough money to buy enough food to keep themselves alive...  but there is a distinct value in having enough food to thrive versus just survive.)

Best of all...  Johnny is transparent in all of his work.  If he needs a vehicle, he lets people know before hand. If he lost his multi-tool, he complains about it, and admits his mistake.  He takes pictures of the bad cables he crimps, a real badge of shame among network professionals, but proof that he's human, he's trying, and most of all (though he hadn't thought of this) that he's honest.

Bottom line:  If you know of a charity that could use some technical help, send them on over to Hackers for Charity.  If you want to help one of the poorest regions in the world to become more self-sufficient and prosperous (and end those "send 45 cents a day to keep this kid alive, but never really improve his quality of life" commercials), then consider donation used equipment or cash.  (I have a box in my garage full of used computer parts...  after I upgrade my computer, I'll go through, test those parts, and send the working pieces out to help repair a computer in Africa.  (Heck, after I get enough disposable income, I'm planning on buying enough parts for a dozen high-end systems to send on over...  but that will be a few years still.)

Friday, October 16, 2009

Second impression of Wave

Alright, I've had Google Wave for over 24 hours, and it's time to post what I've learned.

First, Wave is NOT for the casual user...  yet.


However, it will be.

There are currently 2 versions of Wave running.  There is the Developer Preview version, also called the sandbox, and there is an invitation-only Beta version.

That causes a problem with extending the functionality.

You see, if you get an invitation, you'll get to join the Beta.  From what I understand, it's more stable and more user-friendly than the sandbox, but the sandbox has been around longer, and all of the third party developers have been playing with it, building their robots and gadgets there.

Therefor, it is very difficult to add a gadget, and all of the robots you can add aren't guaranteed to work.

Plus, the good guys at Google are still working on stability and speed.  Admittedly, stability and speed are far more important than extra functionality...  wiz-bang extensions are useless if the service is down, or it takes too long to access it.

So, the robots and gadgets are hard to find, and need to be improved on.

The core of Wave itself, however, is excellent.  Adding conversations is easy, replying is simple, and once you realize that you can double-click, editing is a snap.  Communicating with other Wave users is as fast as advertised, and if you can make something in a normal web page, you can make it in a wave too.

These two capabilities combined make it perfect for working with other people on any sort creative project.  The benefits for any company, especially small companies with employees in different countries, are immediately apparent.  Even independent workers can greatly benefit, such as bloggers keeping in touch with contributors.  The possibilities are endless.

Bottom Line

So, Google Wave is great, as it is today, especially for businesses and independent creative types, but if the basics aren't deal-makers, you're probably better off waiting until Wave is out of beta.

Thursday, October 15, 2009

New Google Wave User

Great news.  A round of invites to Google Wave was sent out today, and I was among the lucky few to get one.

I have two contacts, and I plan to send out invites as soon as I'm able to...  I'll keep people posted through here, Twitter, and Facebook when I have some invites available to send.

Right now, my priorities are to send invites to family and my boss first, then co-workers, then friends, then acquaintances.  I will not send invites to people who randomly ask, so please at least introduce yourself first if you don't want to be completely ignored.

First Impressions

It's spartan.  It's empty.  Sudoku is hard to find.

Of course, my impressions were colored by watching Google's 1h20m long video on the presentation they gave at the first unveiling at Google IO...  I already knew what I wanted to do, but I had no idea how to do it.

Fortunately, you have a message waiting for you in your inbox that helps ease you in to Wave.  It's welcoming title is "Welcome to Google Wave."

Please resist the urge to click on the New Wave link in the middle of the big, blank, uncomfortably attractive area to the right.  Click on the message from Dr. Wave, and read through.  Click on the messages that they recommend.  Watch the videos.  Take some time to see what is possible, and most importantly, how to do what you want.

If you're like me, and just start clicking around, making your own wave, then don't worry, you'll eventually make your way back to the tutorials.  They're not only useful, but they're the fasted way to find a game.

What Wave Is

Right now, I can't even begin to explain Wave, in any way that can be really understood.  Head over to Google Wave's front page and watch the video.

The short answer is...  It is email and instant messages on speed...  Google Docs on steroids...  a psychic version of Blogger...  Wikipedia without the Colbert Nation...*  and once the games get made, it will be Facebook on a permanent adrenalin high.

You can send a message to a group of friends to plan a weekend trip...  add in a map...  add in the weather forecast, which updates auto-magically as the predicted weather changes...  add in a Yes/No/Maybe list to see who can make it...  Send messages to a small set of your friends without fear of the rest of the group knowing (i.e., "Man, I'm glad Bob clicked no.")...  and anyone can edit any part of the conversation, such as to update times or locations, AND everybody can see those edits and who made them, which prevents Bob playing one of his "practical jokes" that the rest of the group is tired of.

Then, when the whole thing is done, post your pictures into a wave, invite the group, and they can post their pictures in as well.  A couple of clicks later and it can become a blog post as well.

In fact, I think that will be my next project.  I'll try to write my next blog post using only Wave.

*Note: Yes, I consider myself part of the Colbert Nation...  but you have to admit that claiming elephant populations have doubled over a 6 month time period?  Yeah, Gullible.info wasn't too happy with it either, when they got duped.

Wednesday, October 14, 2009

Hello, World

This is the obligatory first post on this blog.

I am a computer nerd, focusing on both software development and networking.

I love movies, and I'll talk about them quite frequently.

I also enjoy social engineering... figuring out how the brain works, crowd mentality, and brain hacks.

This is my site. Enjoy!