Friday, September 30, 2011

Painting The Outside Of Our Duplex


Jessi and I are in the middle of getting our duplex painted. Pretty exciting and badly needed. We should have done it last summer, but you can only spend so much money each year...

Anyways, we are in the middle of a "Great Experiment":

Last summer we did 100% everything ourselves. It was a TON of time. This summer we hired out all our big projects. It was a TON of money.

The question we're trying to answer is "What hurts more?" Spending a TON of time on projects... really a slow bleed of energy that adds up over time. Or, getting it all over at once by writing a HUGE check.

We'll let you know in a bit (with before and after painting pictures).

Monday, September 26, 2011

A. Lincoln: A Biography [Book Review]

This last week I finished listening to A. Lincoln: A Biography by Ronald White. This particular audiobook lasted 40 hours. This is the type of book I never would have finished if I was forced to read it with my eyes.

Again, I enjoy listening while doing relatively think-free activities: driving, mowing the lawn, running, and washing dishes. You'd be amazed at how much you can listen to when taking advantage of these opportunities. (Jeez, I can be positive to a fault...). A couple thoughts/tips about listening to audiobooks:

  • Even if I'm only going on a 10 minute drive, I'll listen. Some people like to wait for big chunks of time, but I find that I listen frequently enough, that small chunks of time work just fine. Plus, 10-20 minutes here and there start to add up.
  • My iPhone has a cool "repeat the last 30 seconds" feature which I tap twice when I start listening. That gives me a good rolling start into the new section.
  • I got an AM/FM transmitter so I can listen through the speakers in my car instead of driving around with headphones on.
  • I've heard the iPhone's audible app is pretty good. Though, for whatever reason, I've stayed with the built in iPod app. It works great for me.

Wait. What was the point of this post? Oh yeah.

This biography on Lincoln is awesome. It starts with his parents and goes all the way through his death. You get to see is character develop as a youth. Then witness his presidential election win. The way he got nominated was brilliant too. It was a similar "delegates set-up" as today, but they kept voting round after round after round until someone emerges with the majority of delegate votes.

Lincoln asked each delegate to vote for him second if their favorite candidate clearly wasn't going to win. So, at the beginning Lincoln was way behind. Then, as others dropped out, Lincoln started gathering those votes. As more dropped, Lincoln got more votes. Eventually, his win became inevitable. Brilliant.

As you probably remember, it was during his presidency that the US had its civil war. This book goes into great detail of these events from Lincoln's perspective. For example, Lincoln originally asked Robert E. Lee to lead the Union army. Lee said he would think about it, and then a week later was announced as the leader of the Confederate army. For almost 3 years Lincoln struggled to find a commander who was even close to Lee's genius on the battle field. If it wasn't for the shear number of people the Union army recruited, the Union would not of won.

Another amazing aspect was listening to his speeches and his logic. Lincoln really had an excellent grasp on America and what it represented. It felt like Lincoln was really coming into his own those last couple of years too. When he died, the civil war had just been won and he has just been re-elected. Given how delicately and masterfully he handled the political landscape during the war, it would have been amazing to see what he could have accomplished the next four years during the transition away from slavery.

If you're into American history, this book is definitely worth reading.

Thursday, September 22, 2011

Put Cash In Your Car's Glove Box... Just In Case



Here's a LifeHacker.com worthy tip. Credit goes to my friend Julie for sharing it with me the day we went to watch a movie and their credit card machine was busted:

Put a small amount of cash in your car's glove box... just in case. Just in case the movie's credit card machine breaks. Just in case you find yourself unexpectedly crossing a toll bridge. Basically, for those times you need cash because for whatever reason, the dream of a cashless society came crashing down on you.

I put $11 in each vehicle. One $5 bill. Five $1 bills. And four quarters. Enough to cover 99% of the situations I find myself in, but not enough to worry about it being stolen (but seriously, don't steal from me, friends).

When I use the cash, I leave myself a note on RememberTheMilk.com to refresh it the next time I visit the bank.

There you go. A simple tip to get you out of a plastic pinch.

Monday, September 19, 2011

My Sister's 21st Birthday Party


This weekend Jessi and I drove down to California for my sister's, Lisa, 21st birthday party. Yeah, it was a long drive, but it was worth it. We left Thursday afternoon, arrived Friday morning, and return Sunday afternoon/evening. We really enjoyed seeing everyone and just "getting away" for a bit. Here's some pictures of the weekend:


Friday afternoon, Jessi got to ride on a motorcycle for the first time. She said she really liked taking the turns. It'll probably be a while (if ever) before we think about getting a motorcycle... especially while living in rainy Oregon.



Saturday morning drank mimosas with sour dough pancakes. Super fun!


Saturday afternoon my Dad, brother and I did some shopping around town. We made sure to spend some time drooling in the Lego Store.


Lisa made an upside down tired birthday cake. Each tier was a different flavor. It was extremely delicious! Those are M&M's on the outside of the cake. Lisa has some true baking skills.


The party was at Nono's Pizza in Los Gatos. Basically, it's some of the best pizza in the world (yeah, I just said that). The atmosphere was awesome, the weather was perfect, seeing family was a blast.





Sunday morning before we left, Jessi made sure I got a photo of Vinnie standing with a wooden wiener dog made by my dad when he was a kid. Not shown in this photo is Boots, Lisa's cat. Boot's probably had the worst weekend of everyone. She was NOT a fan of an energetic puppy sniffing everything. She spent the weekend standing rigid in a corner glaring at Vinnie. Any time he got close to her, she would start making this intimidating growling/howling noise.


And finally, driving back home. It was warm during parts of the ride, but Vinnie was a trooper. Of course, he did have the whole back to himself with blanks and pillows. What a spoiled little doggie.


Thursday, September 15, 2011

How To Boost Productivity

academicproductivity.com
I recently listened to a call from someone named Andrew Cass. I don't know much about him, other than what I found on his website, but he had some great insights into being more productive. I like to think I'm a fairly productive person and wanted to share his thoughts, and some of the things I do.

Do NOT Multi-Task
This one took me a while to figure out. I used to have multiple desktop widgets, multiple websites open, a movie playing on my phone, Outlook open, AND a work project I was "working on". In retrospect, it's hard to believe I actually got any work done. Now I've uninstalled my widgets, I no longer have my browser persistently open, I don't watch movies while working. I don't even have Outlook open all the time. When I work, that's ALL I do. When it's time to relax/play, that's ALL I do. There's a clean break.

Batch Tasks
I implied it earlier, but I wanted specifically call this out. Instead of randomly jumping between tasks, put items together that make sense. For example, when I check my personal email, I also read the latest news, check Facebook/Twitter, play with Vinnie. Those are all fun items. As a result, I check my email much less, but I give it more concentrated attention. I've written earlier how that's enabled me to consistently reach a zero inbox. Then I move on to the next set of tasks.

Part of being able to accomplish this is realizing that the world doesn't need your instant response. I learned this lesson during my media fast. People are OK with waiting to get a reply. News doesn't have to be read instantly (or at all - it's OK to miss things). Here's what you do: cut out everything. Then, only add it back if you real feel like it's missing. Here's a crazy idea: remove all the bookmarks in your browser. Then only add back the ones you use regularly. I did that with my RSS reader and it was amazing. I also do this with physical things as part of my whole own less stuff/spend on experiences philosophy. I move items into our garage. If it doesn't come back out after a year, I get rid of it after taking a picture for my computer's screensaver.

Become A Calendar and To-Do List Master
One of the big things I do is put EVERY appointment/meeting in my calendar. I actually tell my wife that if she doesn't put it on my calendar, I'm not showing up. We use Google Calendar, so we can easily add/edit/view our meetings from any device. This means I don't have to memorize anything.

I'm also a To-Do list master. David Allen, author of Getting Things Done, would be proud. I personally use RememberTheMilk.com because it's clean, flexible and available on any device. Any system that you can use consistently works. Before I do a task, I write it down. I have 5 types of lists, and 3 ways to sort them:

  1. A general inbox for items
  2. Blog post ideas
  3. Regular repeating tasks (examples: Mow the lawn every other week, feed Vinnie daily, a monthly financial summary, write annual Christmas letter, pay quarterly jiu jitsu dues).
  4. Projects with multiple tasks (my way of solving RTM's 1 short coming of no sub-tasks)
  5. Shelved items - things I want to remember, but it would be OK if I never get to it.
The 3 additional ways I sort them:
  1. Today: I live here. Things I want to do today
  2. Tomorrow: For when I'm planning my next day in the evening
  3. Week: So I can see what's coming up. I use this less often, but find it helpful.

Again, I don't have to memorize anything.

What this means is that when I'm working, I'm not subconsciously trying to remember other things I have to do. This means I'm more productive. I believe the term is "mind like water".

Learn To Say "NO"
Honestly, this is one I'm still learning to master. Through various motivational videos/articles it's clear that productivity (and more generally, success) is also based on narrowing your focus. Jessi harasses me all the time because I want to do everything - and she's right for doing it.

In Malcolm Gladwell's book Outliers he talks about practicing something for 10,000 hours (my full review). In order to become a master at something, it takes about 10,000 of concentrated practice. Not only does this explain why I never became fluent in Spanish, but it also has a hidden implication in it: In order to reach that level of practice, you have to say "no" to 10,000 other hours worth of activities. 10,000 hours is a LOT of time. That means being able to say "no" to a LOT of items.

I wish I had some tips to saying "no", but it's honestly hard to do. One thing Jessi and I do while we set our annual goals, is literally draw out everything we're involved in. No joke - it looks like a colorful mind map that you probably used when writing papers in school. Then we step back and take a look at everything as a whole. Then we can decide where to increase/decrease our activity. If you're like me, you'll still struggle to eliminate items, but it's at least a way to wrap your head around your life.


So there it is.

  • Stop multi-tasking
  • Batch items together to streamline your workflow
  • Become a calendar and to-do list master
  • Learn to say "no"
That's at least a start. With practice and discipline you can start to be more productive.

Friday, September 09, 2011

How To Calculate Browser Height And Display An In-Page-Pop-Up [tutorial]


While recently working on a website I wanted to add an in-page-pop-up whenever a user clicked a feedback button. It became slightly tricky because there were some pages where the content was longer than the browser height (i.e. you had to scroll), and other times where the content was shorter than the browser's height. I did some online hunting, but never found a great solution. Then, I had my own little insight: use a hidden div at the bottom of my content. I can calculate where it is, then compare it to the height of my browser. Whichever is longer, that's the one I'll use.

So, here's a tutorial on how to make a simple in-page-pop-up with a semi-transparent backdrop. You get lots out of this tutorial:
  • How to calculate your browser height using javascript
  • How to compare your browser height to your content's length
  • How to make a div transparent using CSS
  • I also throw in some rounded corners using CSS
  • How to use the onclick="" mouse action in javascript
  • A simple javascript "for" loop
  • How to insert new content into an element using javascript's innerHTML function.
  • How to make your popup display, and disappear

First, here's all the code, then I'll break it down. You can save this as your own file and mess with it. You can also see it working here.

======================

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
      <style>
         *{margin:0; padding:0}

         html, body {
            margin:0px;
            padding:0px;
            background:#fff;
            font-family:arial,sans-serif;
            font-size:.95em;
            text-align:left;
            overflow:auto;
         }

         #backdrop{
            position:absolute;
            top:0px;
            left:0px;
            width:100%;
            height:0px;
            background:#333;
            opacity:0.4;
            filter:alpha(opacity=40);
            }

         #popup-wrapper{
            position:fixed;
            top:150px;
            left:0px;
            width:100%;
            }

         #popup{
            background:#fff;
            width:500px;
            margin:auto;
            padding:.5em;
            -moz-border-radius:5px;
            -webkit-border-radius:5px;
            border-radius:5px;
            }

         #bottomofcontent{
            display:hidden;
            }
      </style>
   </head>

   <body>
      <div id="maincontent">
         <p>All of your normal content here. Can be longer or shorter than the browser window.</p>
         <p><a href="javascript:void(0)" onclick="addmoretext()">Add More Text!</a></p>
         <p id="moretext"></p>
         <p><a href="javascript:void(0)" onclick="displaypopup()">Show Popup!</a></p>
      </div>
      <div id="backdrop" style="display:none"></div>
      <div id="popup-wrapper" style="display:none">
          <div id="popup" >
            <p>Put new things in here.</p>
            <p><a href="javascript:void(0)" onclick="hidepopup()">Close me!</a></p>
         </div>
      </div>
      <div id="bottomofcontent"></div>
   </body>

   <script type="text/javascript" language="javascript">
      function addmoretext(){
         var newtext = "";
         for(i=1; i <= 100; i++){
            newtext = newtext + "line " + i + "<br />";
         }
         document.getElementById('moretext').innerHTML = newtext;
      }

      function displaypopup(){
         var totalheight = heightcalc();
         document.getElementById('backdrop').style.height = totalheight + "px";
         document.getElementById('backdrop').style.display = "block";
         document.getElementById('popup-wrapper').style.display = "block";
      }

      function hidepopup(){
         document.getElementById('popup-wrapper').style.display = "none";
         document.getElementById('backdrop').style.display = "none";
      }

      function heightcalc(){
         // Calculate the size
         var myHeight = 0;
         var myContent = document.getElementById('bottomofcontent').offsetTop;
         if( typeof( window.innerWidth ) == 'number' ) {
            myHeight = window.innerHeight;
         } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
            myHeight = document.documentElement.clientHeight;
         } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
            myHeight = document.body.clientHeight;
         }
         if( myHeight > myContent ){
            return myHeight; 
         } else{
            return myContent;
         }
      }
   </script>

</html>

======================

I'm going to start with the body:

<body>
      <div id="maincontent">
         <p>All of your normal content here. Can be longer or shorter than the browser window.</p>
         <p><a href="javascript:void(0)" onclick="addmoretext()">Add More Text!</a></p>
         <p id="moretext"></p>
         <p><a href="javascript:void(0)" onclick="displaypopup()">Show Popup!</a></p>
      </div>
      <div id="backdrop" style="display:none"></div>
      <div id="popup-wrapper" style="display:none">
          <div id="popup" >
            <p>Put new things in here.</p>
            <p><a href="javascript:void(0)" onclick="hidepopup()">Close me!</a></p>
         </div>
      </div>
      <div id="bottomofcontent"></div>
   </body>

  • First, we have our main content. This can be anything.
  • I added a little text, and a couple links which when clicked will run the function called "addmoretext" or "displaypopup". Hopefully it's obvious what each of these functions do. We'll get to the actual javascript in a bit.
  • Then we have our "backdrop" and "popup-wrapper". The display needs to be set to "none". Also, it has to be as an inline style="" modifier. Otherwise javascript won't make it appear. So, these two containers are there, but are not displayed yet.
  • Then the actual pop-up div which will display whatever you want the pop-up to be.
  • Why have two separate divs ("backdrop" and "popup-wrapper")? Because the backdrop is going to be semi-transparent. If the popup-wrapper was inside the backdrop, it too would be semi-transparent. In this case, we want it to be fully opaque.
  • Inside the "popup-wrapper" is the actual "popup". The "popup" has some text and then a link which will close/hide it.
  • Finally, we have the "bottomofcontent" div. This should be right next to the "body" tag. The very end of all your content.


Here's the CSS. I'll make a comment about each one as we go:

         *{margin:0; padding:0}
// Just a standard setting I use to make all browsers look the same

         html, body {
            margin:0px;
            padding:0px;
            background:#fff;
            font-family:arial,sans-serif;
            font-size:.95em;
            text-align:left;
            overflow:auto;
         }
// Another standard I use to make sure everything looks the way I would expect.

         #backdrop{
            position:absolute;
            top:0px;
            left:0px;
            width:100%;
            height:0px;
            background:#333;
            opacity:0.4;
            filter:alpha(opacity=40);
            }
// I position it at the top. It stretches 100% of the browser width. Height = 0 because later we'll calculate what it should be. Why not just use 100% for the height? We could, but if the content is longer than the browser window, it won't cover everything.

         #popup-wrapper{
            position:fixed;
            top:150px;
            left:0px;
            width:100%;
            }
// Also fixed to the top, but brought down a little. Remember, this one and "backdrop" are not displayed when the page loads. I choose to use "fixed" for the position so the box will always display in the same place in the browser no matter how far the user scrolls.

         #popup{
            background:#fff;
            width:500px;
            margin:auto;
            padding:.5em;
            -moz-border-radius:5px;
            -webkit-border-radius:5px;
            border-radius:5px;
            }
// The popup. "margin:auto"centers it on the page. Those 3 radius settings give it round corners. You could set the width to a percent if you wanted. You can also set borders, change colors, whatever. It's a regular div. Notice this one isn't hidden. It doesn't have to be because it's parent div ("popup-wrapper") is hidden.

         #bottomofcontent{
            display:hidden;
            }
// Notice I put "display:hidden" instead of "display:none". If it was display:none, the browser wouldn't know it's position. Visually, it's the same as none, but the browser interprets it differently.



OK. Let's look at the javascript. Again, I'll make comments along the way.

  function addmoretext(){
         var newtext = "";
         for(i=1; i <= 100; i++){
            newtext = newtext + "line " + i + "<br />";
         }
         document.getElementById('moretext').innerHTML = newtext;
      }
// This is really just for the example. I use a for loop to create 100 new lines of text. That should be enough for the content to be longer than the browser. I then fill my "p" element called "moretext" with this new text. innerHTML does what the name implies: it fills inside the element which whatever you put.

      function displaypopup(){
         var totalheight = heightcalc();
         document.getElementById('backdrop').style.height = totalheight + "px";
         document.getElementById('backdrop').style.display = "block";
         document.getElementById('popup-wrapper').style.display = "block";
      }
// First we get the height (wait for it... it's coming). Then we apply that height to "backdrop". Then we display "backdrop" and "popup-wrapper". To display something, we either use "block" or "inline". Since these are div elements, they are block elements, so we use block.

      function hidepopup(){
         document.getElementById('popup-wrapper').style.display = "none";
         document.getElementById('backdrop').style.display = "none";
      }
// When it's time to hide the pop-up, just use .display = "none". Notice, I reversed the order in which they're hidden from when they were displayed. Computers are typically fast enough that the order doesn't matter too much, but I feel good about knowing the disappear in an order than makes sense to me. You could also set the height of "backdrop" to zero, but there's no real reason to.

      function heightcalc(){
         // Calculate the size
         var myHeight = 0;
         var myContent = document.getElementById('bottomofcontent').offsetTop;
         if( typeof( window.innerWidth ) == 'number' ) {
            myHeight = window.innerHeight;
         } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
            myHeight = document.documentElement.clientHeight;
         } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
            myHeight = document.body.clientHeight;
         }
         if( myHeight > myContent ){
            return myHeight; 
         } else{
            return myContent;
         }
      }
// here's the height calculation. First we set myHeight to 0 as a placeholder. The we get the "bottomofcontent" by using offsetTop function. Now, different browsers calculate browser heights differently. The set of if/elseif's goes through each browser type. When it finds the right one, it sets myHeight to the browser height. Then we have one final if statement that compares myHeight to myContent. Whichever is longer gets returned. Boom.

So that's how you make a simple in-page-pop-up in a website. You can make it more complicated using ajax and fill the pop-up with new content pulled off the server, but that's for another time. Hopefully there was at lease one tidbit that was helpful.

Thursday, September 08, 2011

To The Cloud! How Content Gets Delivered and Stored

I recently read and discussed an article from TechCrunch called Start Mobile And The Thin Cloud. I thought I'd share my thoughts on how content is delivered and consumed.

First, I'm not 100% sure I fully understand/cover all the options, but here are the 4 main ways that I see content delivery/storage happening:

#1 Pure Desktop
One option for content is to have everything on your computer - a "pure desktop" app. This is great because as long as you have your device, you always have access to your content. No Internet connection required. What's also wonderful is that the app is usually super fast because the only speed limit is your processor. Unfortunately, if you're device isn't with you, can't can't access your content. Laptops helped solve a lot of the mobility issue - just take it with you.

#2 Pure Cloud
Another option is to have a "pure cloud" app. An example is a webpage. Everything needs to be loaded from a server: the display, the content, even the user input needs to communicate with the server. This is great because no storage is required, and you can easily jump between devices. Furthermore, you never need to update your app because it always pulls the current code off the server. Unfortunately though, no Internet access means you can't access your data.

Now for a couple hybrids:

#3 HTML5
HTML5, and browsers that support it, allows a small amount of data to be stored on the device. For example, Google just released offline support for Gmail. This Chrome browser extension allows Gmail, the webpage, to store and access emails in the browser. So even if you don't have Internet access, you can still open some emails and even write an email which will be sent the next time you connect to the Internet. Very cool. Minimal storage required, no app updates, and you don't always need an Internet connection.

#4 Thin Cloud
This is what the article talks about: a "thin cloud" app. First, you download the display, and the content. Then, when you use the app, the only thing that transfers over the Internet are the changes to the content, known as "delta updates". This is also very cool because an Internet connection isn't constantly required. The app also loads much faster since all the core data is on the device. Even the app's reaction time is faster because very little data is being transfer over the Internet (also a bonus if you have a data plan). Unfortunately, app updates are required and it does require more storage.

Lots of writing. Here it is in a table:



XML (and similar options like mySQL) really allowed this division. It fundamentally separated the data from the display. So you could transfer the data to any device/app then the device/app would figure out a way to display it.

My favorite example is IMAP for email. With IMAP, you can access your data on the web (like gmail.com). You can also access it via Outlook or Apple Mail. You can also access it on your phone (either m.google.com/mail or from the built-in mail app). Data is separated from the display/GUI. Beautiful.

Twitter is another example of this. There's Twitter.com, their own mobile apps, and then a whole host of 3rd apps that let you access Twitter's data (or is it my data? I digress).

What about the future?
The big question is really whether HTML5 or the Thin Cloud (AKA native apps) will "win" in the next couple of years. Apple clearly thought it was HTML5 when they introduced the iPhone, but then quickly switched over to promoting the App Store. Personally, I see developers continue to focus on separating out the data from the display. Then they'll make a native app because of the richer experience, then they'll create an HTML5 website to enable access anywhere.

It would be cool if there was some sort of universal language, like HTML, so developers could write once and use everywhere, but currently it can't compete with the capabilities of native apps. I don't think that's necessarily bad - I mean, just look at the apps available in Apples App Store: they're amazing! Plus, it does save me on data usage when I'm out and about.

So there you go, a semi-technical dive into how content gets stored and displayed. My big take away is that learning HTML isn't good enough anymore. I need to invest the time in understanding C++ and its derivatives.

Tuesday, September 06, 2011

I Still Think It Is A Pyramid Scheme...

I've thought about writing an article describing the difference between a Pyramid scheme, a Ponzi scheme, and network marketing. However, I've never really taken the time to do it when you can just look up the definitions. What works much better is to ask people, "In what way do you mean?" That way I don't create more confusion. Anyways, this video was shared with me and it's pretty close to what I would have written - albeit, mine would have been much more bland. It's pretty entertaining (if not a little too harsh), and goes though all of the classic pyramid-related objections to network marketing. Enjoy.


Monday, September 05, 2011

The Future Of Gaming

The holodeck from StarTrek.com
I've recently had the pleasure of having some very fun "what's the future of technology" conversations. I often find the best conversations are with people who are interested in technology, but don't follow it as closely as uber-nerds like myself (I suppose they actually have a life). What this means is that they make many, "wouldn't it be cool if..." statements, but aren't hampered by all the knowledge of current developments.

In this particular case, we were talking about the future of gaming. Ultimately, the question was whether we would ever have Holodeck-types of games. I think the answer is yes. Think about the current technology we have:

Xbox's Kinect is able to track your limbs. You move around and the camera can pick up those movements. Eventually it'll be able to track digits and extremely subtle movements. It also eventually be able to track props used while gaming.

Then there's Oblong with their Minority Report style controller called Mezzanine. Think of it as a spacial collaboration tool. I find the best way to think of it is "Minority Report running on Windows" - not as much clear glass, but still very cool. So, it's similar to the Kinect, and appears to have the fine detail.

One of my favorite "potentially earth-shaking" technologies is Emotiv's neuroheadset. Think of it as a game controller, but it reads your brain waves instead of your finger button pushes or arm swings. It is awesome. Here's a live demonstration of this technology. The action really starts at 10:32:





Siri is a voice activated search assistant. Similar to Google's voice search, but is able to handle complex instructions like "get me a cab", and take it to the next step of contacting a taxi service and letting them know your location. These instructions will slowly get better and better. When playing games, you'll be able to speak to computer characters, shout out instructions, or ask for help to some invisible game god.

3D TV is definitely here. Of course, it's not the best experience, but it will get better with time. Images will be less fuzzy and more immersive - you'll actually feel like your in a city or forest. Also exciting is the prospect of no-glasses-required 3D. Apple recently was granted a patent for such an invention. So companies are definitely trying to figure out how to make it work.

---

So you see, there are a bunch of different technologies making their way into the gaming world. The real magic will be when they starting combining. Emotiv will be able to read your emotions and adjust challenges accordingly (too easy? add a bigger monster!). Combing Siri with Emotiv will enable you to give instructions AND provide facial expressions (are you intimidating, or being diplomatic?). Combing Kinect/Mezzanine with truly 3D TVs will make it feel like you actually picked up an object.

When a computer can receive instructions from your actions, your voice, and your brain it will start to feel very real. Combine that with the ability to display an environment that is immersive... and wow. Then all we'll need are compelling stories of the John Lasseter caliber (who wrote some of the first stories for Pixar).

It's going to be a fun future for gaming for sure.