Tivo Disaster – If it Ain’t Broke, Why Fix It?

Comments Off on Tivo Disaster – If it Ain’t Broke, Why Fix It?

It is really basic premise, and I didn’t even invent it. Alas I have to warn other potential Tivo customers, after giving company many chances to make things right and a month of monumental efforts (mostly mine). Also, this is Not an investment advice regarding Tivo Inc (NASDAQ:TIVO).

We are long time Tivo customers and advocates and have 2 units at home which we enjoyed for many years. Recently, after HDMI output on our newer Tivo HD unit broke, we decided to upgrade to latest Tivo Premiere. We were disappointed to learn of increased monthly fee, but we finally decided that even with Many Great alternatives out there, we prefer the time-tested convenience of a Tivo box. Our new Premiere unit arrived as advertised and I promptly began the monumental effort needed to set it up and transfer data from our existing unit.

The manual transfer of previous recording that we didn’t watch yet is long and tedious process which could have easily been automated in about 1 week of effort for average developer IMHO. Instead I have to go through 3 screens of prompts for Every Single Show I have on the box. Few days (literally) later, I finally got that out of the way, so I set to transfer Season Passes. “Luckily” there is a handy Season Pass Manager on Tivo.com, I thought, but this is where the first big disaster hit! After reporting that many season passes cannot be transferred because there are no upcoming airing in the next 2 weeks, even remaining shows that supposedly should transfer did not arrive on the Tivo Premiere. Instead, I was greeted with countless “corrupt, delete me” entries on the Tivo box.

Tivo Fail SmallerAs I tried to recover from this by transferring only few shows at a time, Tivo website went completely nuts. Many reboots, Re-Syncs and support calls later – I was told to stop trying and just manually re-create our 150 passes… Naively I tried that as well, just for a bit, as I quickly discovered that Glee show (in Tivo’s own Top 5 Most Popular list and one of our favorites) Cannot Be Subscribed To! It simply pops up with “No Airings In the Next Two Weeks” error. I guess I naively thought that ability to keep your favorite show subscriptions was Tivo’s big selling point.

Tivo Fail Smaller 2Meanwhile we started noticing many other things wrong with our “shiny new” Tivo. For the first week over 30 channels were completely missing their guide. I went through different troubleshooting steps daily with various Tivo techs, to no avail. Finally, I figured it out all by myself, managing to restore that part of functionality by repeating guided setup steps.

Still, there were many other issues – worse among them is the jumping screen and skipping video, especially if recording on the same channel as watching. Well, after some more calls, one of the techs suggested that perhaps we got a bad one and they will be happy to replace our new purchase. Reluctantly I agreed and another week later we received a Refurbished Tivo premiere unit (What??!?). Being at complete dead-end with options I spent Another Week transferring shows and doing CableCard pairing. Well, today I switched out the units and we were able to confirm most of the same issues on this Tivo Premiere as well.

As you can tell, we are still in shock and not sure where to go from here. It is very hard to justify monthly payment to Tivo when our experience with the unit is so horrid. As an aside, their whole Tivo Stream as a separate Expensive and Intrusive box is just another insult, since Tivo Premiere already comes with high speed network connection, and records everything digitally.

Back To My Big Question Why Mess with what Is Not Broken!? We used Tivo HD and previous Tivo units for years and Never had these issues! This is with same CableCard and Cable connection, so they really can’t blame Comcast here! In fact, many issues are clearly Software Defects! It also becomes obvious that they lost all their good developers once you try their iPad Tivo client. While showing some promise, it promptly underwhelms you with limited features, constant crashes, disconnects and endless “refresh” loops. Tivo Inc’s company appeal over other Cable boxes Always Was their Software! How On Earth would they allow themselves to totally “rewrite” software for this new box and introduce so Many New Bugs and such a Poor User Experience!!?!?

PS: I ordered HDHomeRun Prime now and look forward to posting my experience here

The ‘final’ Frontier in Java

Comments Off on The ‘final’ Frontier in Java

Although this post came about primarily to help my son learn Java, it still amazes me how many professional developers do not understand this basic premise in Java (Programming Language) even after working with it for Years. I am yet to find any Java book that opens with Big Chapter on this very critical topic, instead they mention it in a few hardly intelligible sentences. Meanwhile Java continues to gain momentum as most popular language, primarily because of how easy it seems to use! Let me be the first to tell you that Yes, it is Easy, provided you fully grasp the concepts outlined below.

Quick primer before diving into Java – most operating systems organize memory for a running program as Heap and Stack. These are just designations for areas of memory allocated to your program, but the way they are utilized differs slightly as we’ll see below. And if you don’t know what Object is, for our purposes it’s just a little set of data organized together.

There is fundamental difference in Java between Object variables and Primitive variables. The latter is those built-in types we all grew to love from most languages, like int, long and float. They are actually very high performance as well because they are quickly allocated on the Stack and CPU operates on them via Native commands.

Meanwhile Objects in Java are just Pointers! Let me demonstrate with this simple example:

   1:     public static void main(String[] args) {
   2:        
   3:        int a = 1;
   4:        int b = a;
   5:        a=3;
   6:        
   7:        System.out.println("A: "+a+" B: "+b);
   8:        
   9:        ArrayList aLst = new ArrayList();
  10:        ArrayList bLst = aLst;      
  11:        aLst.add("I Live in List");
  12:        
  13:        System.out.println(" A List Size: "+aLst.size()+
  14:                           " B List Size: "+bLst.size());
  15:     }

Although lines 3-5 look conceptually similar to lines 9-12, the output is very different:

A: 3 B: 1
A List Size: 1 B List Size: 1

With Primitives we see that assigning a into b truly made a copy, so that when we put 3 into a later, nothing happened to b. Two_Java_Pointers_at_ArrayList_ObjectMeanwhile, assigning aLst into bLst seems to act differently, as modifying aLst makes something magically appear in bLst!

Although our most respected Java Designer Mr. Gosling tried to hide the pointers complexity away from average developer, it still shows through sometimes, especially when calling Methods and passing Objects around:

   1:     public static void callMeMaybe(ArrayList third, int howOften) {
   2:        howOften = 1;
   3:        third.clear();
   4:        third.add("+1 800-555-1212");
   5:     }
   6:   
   7:     public static void main(String[] args) {
   8:   
   9:        int a = 800;
  10:        ArrayList first = new ArrayList();
  11:        ArrayList second = first;
  12:        first.add("Unlisted Number");
  13:   
  14:        callMeMaybe(second, a);
  15:   
  16:        System.out.println("Our List: "+first);
  17:        System.out.println("A: " + a);
  18:     }

And here is the output, hopefully what you expected by now:

Our List: [+1 800-555-1212]
A: 800


What has happened to our Unlisted Number? And if the evil callMeMaybe method was able to eliminate it, why did we not extract the essential howOften to call information from that same method?Three_Java_Pointers_at_an_Object.jpg

The basic way to understand the difference is to simply remember the Primitives versus Objects distinction. The more complete explanation is that Objects live in the Heap, while pointers to objects (such as first, second and third in our example) live along with Primitives, in the Stack. Each time our program enters a method, new variables (sometimes with copies of values from existing variables) get created on the Stack, and once method is finished, they are released. But even though once callMeMaybe method finishes our third variable gone into the great beyond (along with howOften variable), the object it was pointing to lives on in the Heap, and still available for first to see.

Having understood this we are finally ready to discuss Java’s ‘final’ keyword Winking smile

Simply put, when this keyword is placed on variable definition, you can only give this variable one value in it’s lifetime. A more complete explanation about the use of final keyword can be found on Wikipedia. My personal recommendation is that you avoid using this keyword, except when defining some truly Constant value in all upper case, like so:

public static final int REQUIRED_HOURS_OF_SLEEP_FOR_HEALTHY_HUMAN = 8;


And especially avoid using it when declaring Object referencing variables, since it does Not do what you would expect. As a simple example, if we were to define third variable in example above as final, it would have no impact on our program behavior or output!

While there are few other cases where final should be used, remember that Optimization is Not one of them.

Good Luck!

How to Print To your iPhone or Android Phone

Comments Off on How to Print To your iPhone or Android Phone

Microsoft SkyDriveYes, this is not a typo – printing To your iPhone, I know it sounds weird! It is actually very handy, saves plenty of trees and makes “printouts” easier to carry around and find in the future. There are specific cases where you want to “print” a confirmation of an appointment from a website, both to remind yourself and to show at the business you are heading to. Other times it could be a receipt for online order, or any other “generated” page which you can’t easily link to, but may need to reference in the future. Some places will accept coupon printed this way, where you can simply show it to the cashier or scan it from the phone.

Step 1 – If you don’t already have one, get a free account with Skydrive, Dropbox or Google Drive. Right now Skydrive gives most free space while Dropbox had more native clients for iOS, Android and many others. For those unfamiliar with this category – this basically creates a file system in the cloud, where everything you drop into special folder gets synchronized

Step 2 – Works best from Chrome browser, because it has excellent Save As Pdf feature in the Print window! If you are on the Mac, Print window for Everything comes with Save As Pdf button. Finally, on Windows you can install PDF driver, like this PDFCreator which is open source and free. Then, simply Print to it from any App.

Step 3 – Save the PDF into a Dropbox (or Skydrive, etc) folder on your computer. I recommend you actually organize things with subfolders into categories. I have Confirmations, Coupons, Manuals, eBooks, etc.

Google Drive and SyncStep 4 – Open the Dropbox (or Skydrive, Google Drive, etc) dedicated client on your iPhone and just access the PDF whenever needed. Depending on the client app, you may need to “pre-download” the file before going out of Data range or on a flight.

In fact, you can use this simple trick instead of things like Instapaper, Readability and others. There’s really nothing wrong with these other options, I just find that having too many accounts and places to keep information is distracting and chaotic. If anything, Evernote is the one you should consider. Coupled with Clearly addon, it is sometimes better way to save large articles for later offline reading.

There are tons of Free eBook PDFs online: educational, fun and classics. Simply download and drop into your Cloud folder – Voila.

Getting Rickrolled by Rick in BrowserQuest

1 Comment

rick in browserquest photoshoppedThis one is definitely filed away under Weekend Fun! Kudos to Mozilla foundation, though a bit sad that it doesn’t play on iPad (and some other browsers) yet.

The brilliance of the BrowserQuest is not just in it’s grand fun gameplay, but also that it is truly and completely open-source!

After my son played through 19 of the 20 possible achievements in about 19 minutes, we set out to find the elusive 20th achievement, which is unlisted. Well, as a responsible father (and because it is tons of fun), I set out to find the last one using the source code! The code itself is brilliantly simple. I am really looking forward to promised official post about the architecture, but meanwhile it is easy to see that the entire thing is running on NodeJS server, using BiSON, WebSockets and written in JavaScript and HTML5.

Although it took me only about a minute to track the last achievement down, and figure out that an NPC named Rick is who I need, finding him proved illusive. Even though I had coordinates of the dude from world map definition JSON, it’s really tricky to track him down as game use teleports when doors are opened, to shift you to new area, as I gathered.

So after about an hour of math and checking different door/portal/methods/logic, I just got annoyed and did a quick Google! And voila, of course someone already posted it on our beloved StackOverflow (for Gaming). There you have it – complete fun experience with hidden achievements FTW !!! Next? Just clone the GitHub repo and set of on your own adventure, of making a browser game!!!

Zen and the Art of iOS

Comments Off on Zen and the Art of iOS

iPad Apps NightmareToday I want to reflect on Zen of iOS and overall Apple philosophy. But first, there’s a disturbance in the force that I must deal with. My overall tranquility has been compromised, and by Apple Genius Bar employees, no less.

Here’s the issue at hand – the list of icons displayed at the bottom of iOS device when you double-click The Button. The “Geniuses” at the Bar insisted that All These Apps were Running, even though I just fully rebooted the device! Furthermore I watched them toil for a long time to Delete My Icons, from a VERY long list which came together as I tried most of my 400 apps, and apparently were the cause of my broken iPad microphone.

Although I am yet to reference Apple SDK on this, I feel that my own understanding here is correct. I believe that iOS shows icons of apps that are Running together with recently used apps. If I open too many apps and device starts running low on memory, it will silently shut down Apps in the background, but leave the icon on the list for re-launch as expected. When I tried to contradict Apple employees on this, I was asked whether “I work for Apple”, which furthered my disturbed serenity.

On the way back as I was enjoying excellent Zen and the Art of Motorcycle Maintenance audio-book, I think I developed deeper understanding of what “Intersection of Technology and Liberal Arts” really means at Apple. It is all about device keeping us “at piece” with how we expect it and the World to behave – Serenity is the secret sauce!

Still, back to the disturbance – I have noticed that this specific “running apps” issue is a source of frustration for many people, even some who don’t know true source, but are still frustrated. This is especially felt with iPhones, as they can’t understand why their device lasts all day on one occasion, but dies prematurely the next day, seemingly with exactly same amount of usage! I believe that a person who was deciding to show Running iOS apps list was approaching it from Simplicity and Practicality perspective, not from the Zen  and Tranquility Angle! Otherwise, something as simple as Glow or Highlight on an App that is actually running and consuming battery/resources, however little, would make All the difference people need to eliminate this frustration!!!

That brings me to yet another disturbance that Apple is suffering from, in my book. In the Real-World, the number of mediocre to purely useless Apps is continuously growing! Sometimes, what was state-of-the-art on iOS 2 is almost offensive on iOS 5. Yet, nothing is there designed to help us depreciate our unused Apps, and suggest newer alternatives. Normally I would jump on this as “Startup Opportunity”, but Apple locked up this opportunity for allowing us to Innovate management of Ocean of Apps. Even as brave Appsfire still managed to sneak in there, the efforts are painful and can’t fully develop,

In short – the Magic we’ve come to expect from Apple devices is being compromised! These little things band together into a growing disdain, something Steve would never accept! Seriously, putting “Talking Tom the Cat” (or Ben the Dog) right up at the top, next to ABC, Wall Street Journal and Netflix apps – makes sense to you?!? Clearly these appeal to VERY different audience, and although App Genius tries to resolve some of that, not being able to remove old apps or categorize Kids versus Adults, is a Big issue.

For me, the mere act of putting these thoughts out there and reading your comments is sure to restore the Tranquility – that and the next iOS upgrade!

PS: Thanks to my old friend Eran Zadok for recommending this wonderful book to me about 15 years ago – yes, I am a bit behind on my reading list Smile

Older Entries Newer Entries