Technological solutions to common problems

A guy on the bus the other day was openly criticizing those around him for abandoning the world around them in favor of the pale imitation our handheld devices offer up.

A friendly woman next to him unwisely* offered up a different perspective. “It’s interesting to think about whether this is any different from reading a book or newspaper on your commute. Some might be studying or reading the news. I wonder if we have always tended to isolate ourselves in these situations, and the difference now is that anyone who is unfamiliar with one method or the other makes assumptions about what’s going on on the other side of that barrier.”

Early 20th Century commuters immersed in printed newspapers
All this technology is making us antisocial

For a second I thought she was bravely bridging a gap with this old guy who had an armful of old, used (out of print looking) vinyl records and sheet music he’d obviously just acquired. But no. The old guy flew into a rage about how the internet is a “breeding ground for witches and slutty feminists who have no respect for our Christian culture!” He angrily sputtered on about the muslims, the gays, and abortion culture tearing the fabric of society apart until he disembarked at 15th and Pine.

It was sad because this old guy was dressed in dapper digs from the 40s, on the 10, and looked like a Capitol Hill native. He looked like a fascinating old guy and I would bet he has a trove of stories that would enrich all of us to hear, even if it is tinged with bigotry. I mean, Cap Hill has has a much more varied past than you might know just living here now.

How to run PHP scripts inside your Objective-C Mac OS X application

Picking a starting point

I spent a lot of time looking around the web for instruction on how to execute PHP inside of a Mac OS X application created in Xcode (version 4.3) only to find a whole lot of nothing. I knew it could be done since there are several apps in the Mac App Store that allow you to interpret PHP on the fly, so I set out to do it without the help I believed I needed. It turns out to be one of the easiest things I’ve done in Objective-C.

The first thing I did was to download the JavaScript Interpreter sample code from the Apple developer site for reference. It’s old code and doesn’t compile readily on a 64 bit system with the OS X Lion SDK, so to get it to run I had to change the target to fit my system as shown below. Xcode will also ask you if you want to update the code to current standards – go ahead and do that.

Xcode screenshot

Getting Objective-C to execute PHP scripts

Next, I changed the code to skip the JavaScript interpreter and use PHP instead. This involves the NSTask Class from the Foundation Framework. Luckily the Foundation Framework is already included in the JSInterpreter sample code. While we’re talking about included Frameworks, you can go ahead and remove the reference to the JavaScript Framework now. To get rid of the red squiggly lines and error messages, delete the #import directive at the top of the MyController.m file along with all of the code inside the evaluateScript method.

Next, I searched for a way to run a command line script similar to “> php testing.php” that would allow me to execute a script and see its output. As always, Stack Overflow came to my rescue. I took the basics of the code there and went to (not very much) work.

First, I had to replace the NSTask LaunchPath with the php binary executable on my system, which is at /usr/bin/php.

Next I had to replace the arguments with the code I wanted to run, which was at ~/tonyj/Sites/harikari/test/testing.php – a script that simply echos “Hello world!” To keep from having to alter the existing code too much, I put in the whole path but left out the filename so that I could type it into the input field of the original application and have it executed when I clicked the button.

That’s it. I built and ran the application and I had a window with an input field and an output filed. I typed the name of my script into the input field and, ta-da!, “Hello world!” appeared in the output field.

A standalone application?

Next I wanted to see if I could make the whole thing a standalone application. This being my first attempt at writing a Mac OS X application in Xcode, I had no idea where to start. So I just went for it. I added my PHP binary to my application (File -> Add Files to JSInterpreter) and then added my script to the project. I wasn’t quite sure what the path was going to be for either of them in the application bundle, so I went back to Stack Overflow to find out about [NSBundle mainBundle] resourcePath] as a method for getting the path to the inside of your application, wherever it may be.

It worked!

With one caveat: I haven’t worked through all of the details yet, so I’m sure there are some dependencies in the PHP binary that my system provides in the place that PHP is looking for them. But I’m confident that it would not be difficult to find and eliminate or compensate for them.

Also, Objective-C doesn’t automatically wait for the return value from a task the way PHP does. And PHP is sometimes a little slow to respond. So you have to figure out how to make it wait around for a response from PHP and your script, especially if it’s a lengthy one. Once again, Stack Overflow helped me find information about the NSNotificationCenter. I don’t know much about it, but it basically notifies your code when the PHP output file is done loading.

Now I can load any PHP script into my application and send and receive messages to and from it. I might try adding MySQL tomorrow.

The code:

Fork me on GitHub

-(NSString *) evaluateScript:(NSString*)scriptName
{
    NSTask *task = [[NSTask alloc] init];
    NSString *taskPath =
        [NSString stringWithFormat:@"%@/%@",
        [[NSBundle mainBundle] resourcePath], @"php"];
    [task setLaunchPath: taskPath];

    NSArray *args;
    NSString* scriptPath =
        [NSString stringWithFormat:@"%@/%@",
        [[NSBundle mainBundle] resourcePath], scriptName];
    NSLog(@"script file path: %@",scriptPath);
    args = [NSArray arrayWithObjects:scriptPath, nil];
    [task setArguments: args];

    NSPipe *pipe = [NSPipe pipe];
    [task setStandardOutput: pipe];

    NSFileHandle *file = [pipe fileHandleForReading];
    [file waitForDataInBackgroundAndNotify];
    [[NSNotificationCenter defaultCenter]
 addObserver:self 
           selector:@selector(receivedData:) 
               name:NSFileHandleDataAvailableNotification 
             object:file];
    [task launch];

    NSData *data = [file readDataToEndOfFile];
    NSString *string =
        [[NSString alloc] initWithData: data
 encoding: NSUTF8StringEncoding];

    return string;
}

- (void)receivedData:(NSNotification *)notif {
    NSFileHandle *file = [notif object];
    NSData *data = [file availableData];
    NSString *str = [[NSString alloc] initWithData:data
 encoding:NSASCIIStringEncoding];
    NSLog(@"%@",str);
}

Altering the code

This is an example of how to type in the name of any file included in your project, but you may want to just execute raw PHP commands or fully integrate PHP into your app. To do this, just look at the line above where the args variable is set. You want your array to have filepath as its first element, then any arguments you want to have available in the argv[] array.

If you want to execute single PHP functions, your first arg will be “-r”, followed by the function as in the following example.

args = [NSArray arrayWithObjects:@"-r",@"is_array(array(1,2,3))", nil];

Primer – 2004

Here’s a super half-assed review:

I tried to watch this film with my mom and my wife, but they were having none of it. I was intrigued, and what seemed to be lurking in the near future was absorbing, but I didn’t know exactly what I was watching. They made me turn it off. “Thank you!” said my mom to my wife when she said, “I’d rather watch news or something.”

Well, yesterday my father in law and step mother in law took my wife and new son to the dentist, leaving me at home with several hours to kill. I sat down in front of the TV and decided to start up Primer again.

I don’t really have a lot to say about it, but I read a review that kind of summed it up as “It was like watching someone incredibly smart think aloud.” And not just someone who is smart, but someone who is really smart about a subject you love. And they’re not just thinking out loud, they’re telling the story of how their brilliance led to their downfall.

While I don’t think there was some science I don’t get behind the story, explaining how you can travel back in time to relive a day, I also didn’t feel like the filmmaker was trying to convince me that he had come up with something too smart to be exposed by my bullshit detector. The characters avoided paradoxical time travel situations, not because they knew what would happen, but out of an abundance of caution.

It was pure, smart entertainment. Plenty I didn’t understand, so many timelines and stories to keep track of, and an abundance of techno-babble, but with everything that was there to try and figure out, nothing retarded stood out enough to leave me thinking, “but, that’s not how it would be…” Which usually ruins a movie like this for me.

Four stars. And it was made on a $7,000 budget. Pure fun.

Link to Official Movie Site

The Internet’s most horrible diseases

Yes, you’re dying. We’re all dying. But what, exactly are you dying of? That nagging cough, your marked indifference, what could they mean? Don’t bother running around the internet looking up your symptoms in an attempt at self diagnosis. We all know that, in the end, the internet is going to tell you you’ve got a horrible, incurable, communicable disease.

To that end, here I’ve gathered the internet’s most popular deadly diseases for your edumacation. And face it, chances are you’ll get one of these soon. Thanks to The Worst Case Scenario Internet Diagnosis for all the data.


Kuru

How you get it: Contact with infected human brains, usually as part of the canibalistic funeral ritual of the Fore tribe in New Guinea or as a doctor treating someone with kuru.
Incubation period: 1 to 30 years
Early symptoms: Unsteady gait,slurred speech, marked feelings of indifference
Symptoms at full disease onset: Tremors, total loss of muscular control
Final outcome of this horrible disease: Incapacitation, coma, death within a year of onset

Ebola

How you get it: Contact with infected person or other carrier. Due to the quick and destructive power of ebola, it’s believed that there is a yet undiscovered ebola resistant carrier animal that is responsible for the occasional outbreaks.
Incubation period: 3 weeks
Early symptoms: headache, weakness, and muscle aches
Symptoms at full disease onset: vomiting, abdominal maladies, throat and eye inflammation, bleeding from body openings
Final outcome of this horrible disease: Destruction of internal tissues through rapid viral replication, blood loses the ability to clot and you die from extreme internal hemorrhaging. To the outside world, it looks as though your insides have liquified and are pouring out your various holes.

Rabies

How you get it: Bite of infected animal. Transmitted through saliva.
Incubation period: 21 to 120 days
Early symptoms: Mild depression and anxiety, soreness around bite.
Symptoms at full disease onset: Extreme thirst accompanied by acute fear of water. Constant state of terror and feelings of asphyxiation and claustrophobia.
Final outcome of this horrible disease: You feel as though you’re drowning in the thick, confining air around you. Your thirst is unquenchable, but even if it weren’t, your acute hydrophobia wouldn’t allow you to drink it. Death occurs within a few horrifically bad days due to convulsive seizure accompanied by respiratory failure.

Tetanus

How you get it: Bacteria enters body via puncture wound
Incubation period: 3 to 21 days
Early symptoms: Soreness in neck and jaw, heart rate fluctuations, low grade fever
Symptoms at full disease onset: Lockjaw, muscular spasms, sweating, utter fatigue from muscular contractions
Final outcome of this horrible disease: Severe muscular contractions cause the spinal column to twist and curve, eventually bending and snapping bones in the arms and legs. Death is caused by respiratory failure. Have you had your shots?

Creutzfeldt-Jakob

How you get it: Genetic; variant (Mad Cow) acquired by eating the brain or nervous tissue of an infected animal. Like Kuru, this is a prion disorder.
Incubation period: 1 to 30 years
Early symptoms: Confusion, involuntary muscle jerks, insomnia, impaired judgment, memory, and vision
Symptoms at full disease onset: Loss of muscular coordination, slurred speech, severe mental impairment.
Final outcome of this horrible disease: Systematic loss of brain function over the course of a year within onset of symptoms. Inability to control muscles, blindness, cognitive failure, coma, death.

SARS

How you get it: Contact with highly contagious airborne virus. Lock-down quarantine is common once a case is diagnosed.
Incubation period: 2 to 7 days
Early symptoms: Headache, chills, stiffness
Symptoms at full disease onset: High fever, shortness of breath, dry cough.
Final outcome of this horrible disease: Those early breathing difficulties progress into pneumonia and, in the end, you’ll slip into a coma and die rather abruptly of accute respiratory failure while your grief stricken family watches tearfully from outside your plastic bubble.

West Nile

How you get it: Mosquito bite, organ transplant
Incubation period: 3 to 15 days
Early symptoms: Headache, irritability, fatigue, rash
Symptoms at full disease onset: Confusion, swelling of the brain, tremors and weakness
Final outcome of this horrible disease: Encephalitis and meningitis are the most deadly features of this malady. Brain swelling causes convulsions and cognitive failure. Swelling of other nervous tissues cause muscular degeneration and severe pain. Either way, the outcome is coma and eventual death.

Necrotizing Fasciitis

How you get it: Contact between bacteria and abrasion or laceration in the skin
Incubation period: 24 hours
Early symptoms: Redness around skin abrasion, deep tissue soreness, diarrhea, nausea, fever, confusion, dizziness, weakness, and general malaise
Symptoms at full disease onset: Black blisters form in the skin and spread quickly. Within hours the blisters begin to appear on other parts of the body and eventually burst and ooze black fluid.
Final outcome of this horrible disease: Rapid degeneration of the body under the effects of the toxins released by the bacteria, causing severe nausea, deep tissue pain, unconsciousness, death.

Hantavirus Pulmonary Syndrome

How you get it: Exposure to mice or rat droppings, nest, or contaminated dust, especially while cleaning in areas prone to mouse infestation.
Incubation period: 5-15 days
Early symptoms: Fever, headache, fatigue, general malaise
Symptoms at full disease onset: Coughing, shortness of breath, low blood pressure
Final outcome of this horrible disease: Lungs slowly fill with liquid as breathing becomes more and more labored. Panicked feelings of suffocation and constriction precede respiratory failure, death.

Subacute sclerosing panencephalitis

How you get it: Abnormal immune response to reactivated measles virus, usually within 2 to 10 years of recovery. Immune system turns its attention to healthy nervous tissues.
Incubation period: 2 to 10 years
Early symptoms: behavioral changes, memory loss, irritability
Symptoms at full disease onset: seizures, involuntary movements, and neurological deterioration
Final outcome of this horrible disease: Memory loss and irritability progress into encephalitis induced hallucinatory dementia. convulsions, blindness, and death.

Amoebic Meningoencephalitis

How you get it: Organism enters bloodstream through nasal passages while swimming, especially in stagnant, warm water. This amoeba has been found throughout the world.
Incubation period: 1 to 3 days
Early symptoms: Severe headache, fever
Symptoms at full disease onset: Convulsions, lethargy, cognitive failure
Final outcome of this horrible disease: After entering the bloodstream, this amoeba finds its way into the fluid surrounding the brain and spinal chord. Within a day or two, the brain and spinal fluid are overwhelmed by amoeba, causing meningitis, encephalitis, cognitive failure and convulsions. Coma and brain death follow within 72 hours. There is no treatment.

Cerebral Malaria

How you get it: Parasite passed through mosquito bite, especially frequent in children.
Incubation period: 7 days to 6 months
Early symptoms: generalised body ache, tiredness, headache, sore throat, diarrhea, and fever
Symptoms at full disease onset: Sudden onset of high swinging fever with marked shivering and dramatic perspiration
Final outcome of this horrible disease: In this form, the malaria parasite is able to pass from the bloodstream into the brain. As time passes and the parasite eats away at brain tissue, delirium, coma, and death are a certainty.

Pneumonic Plague

How you get it: Caused by the same bacteria that causes bubonic plaque, but rather than spreading through a flea bit, this form is results from inhalation of bacteria laden saliva. This is particularly horrible due to the growth of “bubos” in the lungs rather than on the skin.
Incubation period: 3 hours to 2 days
Early symptoms: fever, headache, weakness, and a bloody or watery cough
Symptoms at full disease onset: Trouble breathing, fever, chills, heavily flowing, bloody sputum
Final outcome of this horrible disease: Rapid progression from cough to bleeding lungs, usually within a few hours, toxic shock, death.

Bacteremia due to Burkholderia pseudomallei

How you get it: Skin abrasion making contact with contaminated soil, or via bio-terror attack.
Incubation period: 2 days to Many Years
Early symptoms: Fever, muscle aches
Symptoms at full disease onset: Chronic suppurative infections often develop with secondary abscesses in the skin, brain, lungs, myocardium, liver, spleen, bones, lymph nodes, or eyes
Final outcome of this horrible disease: The bacteria can lie dormant in the body for years. Or, if it finds conditions irresistible, it will begin a destructive rampage through your fragile body. After a brief period of general malaise, pus-filled lesions begin to form on the skin, in the joints, and eventually most major organs, including the brain. Septic shock and death soon follow as the lesions burst internally and seep into your bloodstream.

Bubonic Plague

How you get it: Close contact with an infected host. Fleas, cats, rats and squirrels are the most common hosts.
Incubation period: 2 to 6 days
Early symptoms: Fever, Chills, Sore throat, Headache, Weakness, Malaise, Nausea, Diarrhea, Gastrointestinal distress, Cough, Bloody sputum, Shortness of breath, Stiff neck
Symptoms at full disease onset: Gangrene and necrosis of areas such as the digits, penis. Bleeding from body openings, red circular lesions form on skin.
Final outcome of this horrible disease: The rosy lesions. “bubos,” that have gradually formed on the skin begin to necrotize, turning the skin black, especially in the extremities. Internal lesions become infectious pustules that seep into the bloodstream causing blood poisoning, or “septicemia,” and eventually death.


This is for entertainment purposes only, in case you were wondering. If you know of a horrifying disease that’s not covered here, please email tony with a link and a list of symptoms.

Well, it is a free country…

I came home from work yesterday, exhausted from the stress of a few incidents at work. In a bit of a daze, I opened a can of cat food and fed the kitties. The fat one, Screech, who, at feeding time, acts more like a meowing dog than a cat, was still desperately hungry and simply would not leave me alone. So I pulled out the kitty treats, gave him a few, and retired to the couch.

This morning, before work, Kris was prepping the day’s lunch and snack pack when she noticed a bag of kitty treats on the top floor of the refrigerator. Puzzled, she pulls them out and turns to me.

“Hey, do you know why the kitty treats are in the fridge?” she asks.

Stunned, aware of the fact that I actually remember finding a spot for them in there after feeding Screech yesterday, I try to come up with an explanation. “Oh, I must have done that unintentionally after feeding them yesterday in my zombie-like state” didn’t cover the honest stupidity involved in the thoughts bouncing around my head, so I paused in what probably looked like a deer in headlights moment.

About 5 seconds went by.

“It’s a free country!” I shouted, indignantly.

New Embedded YouTube Interface Very Leopard Inspired

I just downloaded the Safari 3 beta today and eventually made it around to viewing a YouTube video in a friend’s LiveJournal post. To my surprise, at the end, the video’s familiar Play Again and other navigation features had been transformed, as if inspired by the new Leopard Desktop that was shown off today.

You Tube Leopardized

Dock like icons adorned the bottom of the embedded window along with a nice reflective surface and even the bubbly mouse over effect! I thought perhaps it was a secret new player for Safari 3 only using the new h.264 encoded files, but confirmed that it does also look the same in IE and Firefox. But, oddly enough, only in videos embedded in a website.

This looks like a sign of bigger things to come from the partnership between Apple and Google. Besides that, Apple isn’t telling you about how much faster Safari 3 is than Safari 2. Especially its Flash support. I’d say it’s easily twice as fast! And don’t even get me started on the INCREDIBLE new page and source search features.

So go download the Safari Beta and check it out for yourself:

Apple + AT&T iPhone Ads

If this phone can do this, like this, this easy, I’ll sell my first born son to get one. And if you want to go to the actual, HQ version of this commercial just visit the Apple website.

Ha! Just kidding little guy, you’re worth WAY more than $600. Way more I would bet.

But I would be surprised if the iPhone lives up to this hype! I mean, jesus. Stop the movie you’re watching on a tiny little device only because you have nowhere else to watch it at the moment and you can call some seafood restaurant in San Fransisco to get it delivered?

You’ve either spent rent getting the phone, upgrading the memory, and downloading movies, and now you can’t have anything but delivery calamari, since your new address is “the alley behind the GAP on the Haight”, or the ad’s not telling the whole story.

The whole story would be: watching a movie on your iPod iPhone on BART and you see a clip in this movie — that’s so great you can’t wait till you get home and watch it on your non-hand-held entertainment devices — where the protagonist is thwarting thugs and earning 6 figures on this super cheap electric scooter that gets to ride in the HOV lane called the “Green Scoot Zoom”.

You pause your movie with a swipe of your index finger (or whatever) and discover that this amazing new carbon neutral carreer advancement device of transveyance can be delivered to your work before the end of the day.

Because why else would you be watching Pirates of the Caribbean on a handheld device and suddenly think, “Hey, delivery…”?

lol cats

Somehow some people don’t know what lol cats are. I tried explaining, but I got all caught up in the the evolution from the first lol cat I ever saw, Invisible Bike, to the most recent one to actually make me laugh, It Are My Birthday.

Now, not only is there the requisite stupid cat photo, but also the font and, most perplexing, the grammar. I tried to explain it as something like “You know, if a cat could talk in an attempt to explain the odd position/situation it has been caught in by a camera, wouldn’t its grammar be a little weird? I mean, not every cat gets photographed and then ridiculed for looking so damned silly. So their vocabulary will likely be limited.”

Like this one:

On icanhascheezburger.com.

My tv Setup Experience

Until today I was using a Mac Mini for my home theater needs. But yesterday, as I read the blogs, saw the unboxing galleries, watched the dissection…I sent an emergency text message to my wife: “If I sell the Mini can we get an tv?”

Of course, her first reaction was, “What the hell is a ~68;acute-box.tv?” Ah, she doesn’t have the font installed on her windows machine at work.

“Well, baby, love…It’s this thing that’s sort of like an iPod for your iTunes video content! Isn’t that great?” I eagerly replied.

“But I just started school and money’s tight…besides, I thought you already had a ‘video iPod’…” was her response.

Huh…well, yeah I do, but it’s really an “iPod with video, noob”. This has HDMI. Component video. Settings. I ostentate. I must have it.

Finding my composure, I roll out “But on craigslist.org I see Minis going for $350 to $550. We’ll be up at least $50…see?”

“Oh, ok. Whatever. As long as you sell it first,” she cunningly added.

So I put it on craigslist. With a wireless keyboard and mouse, and EyeTV 500, and an $80 DVI video cable, I pulled $500 within a day. Granted I picked up the tv from the Bellevue Apple Store about 6 hours prior to finalizing the sale, but it was a sure thing.

I arrived home and sprinted toward the entertainment center and unboxed the little sucker. Now, while I think Apple does a great job with their packaging (I saved the packaging for the mini and delivered it to the purchaser with all the original inserts, including the stickers and in the Apple Store bag my tv came in), I couldn’t bear to bore you with another set of those pictures – I was eager for only one part of the experience: Settings.

My first disappointed realization was that there was no mini jack for sound output. I would have to bring out the bug ugly speakers with the RCA inputs and put away the sleek and small computer speakers I had been using. Fine. They sound better anyway even if they do look like a Frank Ghery architectural throw-away.

AppleTV Resolution SettingsMy second disappointment was the discovery during the setup phase that the tv does not support my 30″ Dell LCD that I use as a living room TV. 1080i, no. 720p, no. 480p (shudder), no. The odd 576p, 50hz? Yes. Huh? Ok.

My third disappointment: nowhere, and I mean nowhere in the documentation, the settings, the packaging, casing, does it tell me what the MAC address is. I use MAC address filtering on my network to block unknown network device access. I had to disable MAC address filtering and rely solely on 128 bit WEP.

AppleTV Virtual KeyboardAnd then, the big, big disappointment: the virtual keyboard for typing in your WEP key. If you’ve ever used a Sony PSP, you’re familiar with what a hassle that sucker is to configure with its virtual keyboard. Well, this one’s worse.

Four lines, first line CAPITAL letters. Second line lower case letters. Third line numbers and symbols. Fourth: more symbols. I had to enter the name of my network (it’s also not broadcasting its SSID) every time the connection would fail. Then I had to re-type the WEP key. After 3 tries I dropped to 40 bit encryption.

Success! But I come to the sad realization (yes, allow) that this thing is geared toward people who don’t secure their wireless. It’s picking up all of my neighbors’ networks, and if mine were unsecured I’d just select it and be done! And, yes, wireless security is closely related to the Iron Maiden, but is that now just the excuse? “Hey, we can’t make you secure and simple! We’ll do either-or. How’s that? An offer you can’t refuse?”

First thing it has you do is couple the tv with an iTunes installation on your local network. “Go to the computer where iTunes is installed and click on your Apple TV. It will ask you for a key. Type this one in:” I’m paraphrasing.

Run upstairs, connect the external hard disk and change the location of my iTunes music folder to the external (which had previously been attached to the Mini). It takes a while to update the new iTunes Library.

When done, I rush back downstairs and there it is! My shared library. It took some work, but I finally figured out how to not sync anything from my G5 upstairs with a 640GB RAID array to the 32GB (available) tv. But once I’ve got it, the thing works beautifully. Far better than the Mini ever did. Video is smooth, joltless. Switching between iTunes libraries is seamless.

I run through all of the settings, sweet, sweet settings and discover that the tv has settled on a 1280 x 800 resolution for my 30″ monitor, something that wasn’t available when it was asking me to choose a resolution. The MAC address is available under the “About” menu option so I can turn on MAC address filtering again.

Finding the logic between Synching and Streaming is a bit of a challenge. You only have about 33G to work with for storage since the rest is taken up by the OS. Every iTunes installation that you’re tuning ito is caled a “Source” so you don’t have a central spot to look at everything available. You have to switch to each source and then browse its content.

Overall, I really like this thing. I’d hate to buy one for my mother and her brand new 42″ plasma tv. She’s 1000 miles away and once sent me an email: “Hi tonyboy. this is your mother see im on the computer and sending you mail. does this make you happy?” The one and only email I’ve ever received.

This thing would be a nightmare for her. The networking is still as complicated as anything else (only now you have to do it with a virtual keyboard), and the concept of conecting to media servers is only slightly obfuscated with this interface. My mother would never get it.

You can see pics over here —-> PICS

And a video here —————> YouTube