IPv6

I just read this on the wiki, when Googling for a general piece of information about IPv6:

“While IPv6 is supported on all major operating systems in use in commercial, business, and home consumer environments,[3] IPv6 does not implement interoperability features with IPv4, and creates essentially a parallel, independent network. Exchanging traffic between the two networks requires special translator gateways, but modern computer operating systems implement dual-protocol software for transparent access to both networks either natively or using ‘tunneling’ such as 6to4, 6in4 or Teredo. In December 2010, despite marking its 12th anniversary as a Standards Track protocol, IPv6 was only in its infancy in terms of general worldwide deployment. A 2008 study[4] by Google Inc. indicated that penetration was still less than one percent of Internet-enabled hosts in any country at that time.”

12 years, and <1% deployment! This is what happens when you don't have a good transition plan from one technology to the next-- no one adopts it... I personally think it's likely 12 years from now, IPv6 still won't be the 'standard' used for the Internet... Many IPv6 proponents claim IPv4 is "end of life", as the IANA just assigned the last big /8 net block-- claiming "all the address are used up!" What they fail to understand, is that addresses aren't consumed-- they can be re-used, and they're allocated by the IANA in huge blocks, and all those organizations that they allocate to, then sub-allocate to other organizations that allocate to end users.

My experience with Android app development

This week I’ve been working on a simple Android application. A customer of mine had the requirement for an ‘app’, but wanted to keep as much logic as possible on the mobile-web version of his web application, which is written in JQuery Mobile.

I downloaded Eclipse and installed the Android plug-in, and was amazed at how quickly I was up and running. Eclipse is a little weird on Windows, in that it doesn’t get installed, and the concept of ‘work benches’ is a bit different than I’m used to as a Windows developer– but it wasn’t too difficult to get going…

I created a simple application with a web view, and was able to access the mobile website through it fairly easily. I over-rode the back button and passed it to the web view, and I was off and rolling. The next part was a little more complex, however… I needed to implement all of this logic(potentially more in the future), in a library that I could easily inherit in ‘instances’ of this app, per se– so each one could be branded individually… This was a bit more difficult, but I was able to figure it out eventually… The biggest roadblock, was that Android seems to build all the resources together from libraries and the current app– so I had a main.xml layout in both apps, and it was discarding it from my library in favor of the one in my instanced app… This gave me errors about not being able to find the resource ID of the web view in the library code… Once I figured that out, I was on my way… I was also able to use this to my advantage, in that I could easily put any customizable parameters in my instanced app in the strings.xml file– and the library could access these resources!

Multiple monitor RDP connections

I typically work with 4 1080p LCD monitors on Ergotron arms. I have the same setup and layout at work as I do at home. When I remote in from home, I’ve found in Windows 7, I can check ‘use all my monitors’, and the remote desktop actually uses all the monitors, even in my non-square and non-linear layout(my monitors are roughly in a + shaped pattern).

The one negative of this, is that the speed wasn’t great. Flipping windows and such, there’d be a noticeable lag. It was usable, but not comfortable. I figured this was due to my 1Mbps upload speed at the office. I watched a bandwidth meter on the router, and I noticed it wasn’t maxing out the 1Mbps upload speed… I have noticed, however, that when I do a speed test, the upload always starts slow, and doesn’t reach full speed for a couple seconds… I was thinking, “maybe the RDP packets are always in the start of that incline and can never reach full speed”…

Well, recently I found that Time Warner Business Class in my city just added ‘Wide band’ service. I was able to upgrade for a reasonable price to 35/5 service– that’s 5Mbps upload speed! I can use the bandwidth for other purposes as well, but I was particularly excited about having a faster RDP experience when I do work from home, trying to be fully productive with all 4 screens…

Well, I just tried the connection, and the RDP experience is MUCH better! I don’t see a constant lag when working. I looked at the same router bandwidth meter, and it was often spiking to 2Mbps or so– definitely above the 1Mbps it wasn’t reaching before… So I think my hunch about the upload connection starting slow was definitely the issue… To prove how awesome the connection was, I played a video someone posted on facebook, and it was actually watchable over RDP! Sure, it maxed the 5Mbps bandwidth meter, but it was watchable! I did try to put it full screen to see how I could push it, and that didn’t fair so well… But I’m certainly not watching video through an RDP connection for any real purposes…

Android SDK does not work with defaults used in installation!!!

So, this week I’ve started some simple Android app development. I started by downloading and installing the SDK, of course… Of course, the emulators don’t seem to work. Upon just a little digging, I found this:

http://stackoverflow.com/questions/6638713/android-emulator-is-not-starting-showing-invalid-command-line-parameter

That’s right– Google’s Android SDK doesn’t work on the most dominant desktop OS with the default install parameters… Seriously? How can Google act so amateurishly? Installer-writing 101 is to check on your #1 targeted platform, which would be **Desktop Windows versions**… How sad…  To solve my problem, I’m un-installing and re-installing at a non-‘Program Files’-ish path… Hackin’ it up to make it work for Google…

So maybe Blackberry isn’t so bad…

Recently, I had to debug problems with a JQuery Mobile application that I maintain– primarily, it wasn’t working with Blackberry devices. I downloaded a ‘simulator’ from RIM and got to work… The simulator is incredibly clunky, but I eventually figured it out and confirmed that the mobile web app did not work on Blackberry.

It seemed as thought he Blackberry was being excessively strict with parsing the html– enforcing xml entity quotes, etc. etc… Eventually, after trying some fixes that got me partially there, I opened WireShark and tested what headers were going across the wire that were different on JQM’s demo(which worked fine), and my mobile web app… Low and behold, I found it. JQM’s demo was properly serving a content-type of ‘text/html’, and my app was serving ‘application/xhtml+xml’.. WTF?

I was finally able to determine that a mobile.browser file I had in my ASP.NET application was causing the problem. It was CHANGING the response type based on some archaic entry in this file– which I only use for detecting if the current browser is mobile or not for redirecting reasons… I hacked the file to server text/html as it should be, and Blackberry is working MUCH better now… I still have to do a full regression of testing to make sure everything works, but this definitely appears to be the major issue that was causing problems…

So, maybe Blackberry isn’t so bad. At least it isn’t giving me Javascript timeout errors like the iPhone 3G…

iPhone javascript execution exceeded timeout

Wow. I know that Apple severely cripples their phones, under clocking their processors, etc. I know that the iPhone 3G I have for testing is incredibly slow when side-by-side with my Android Samsung Galaxy S phone… But my experience with this iPhone has hit a new low… I was just debugging a problem with the iPhone showing a blank page on a functional JQuery Mobile page. It works perfectly in all desktop browsers, as well as on Android, WP7, etc. I enabled iPhone’s debug console and it’s reporting a javascript execution timeout error in JQuery 1.6.1 code. Apparently, the iPhone 3G runs so slowly that it is now timing itself out when trying to render a JQuery Mobile page…

Now I have to start trying to find a work-around to make this work… From what I understand, the javascript execution timeouts are reset with new execution contexts– of which setTimeout is one… So possibly I need to put some of my page initialization code in a setTimeout code so that it will actually run on an iPhone 3G…  Amazing the lengths I must get to to make things work on all these devices….and don’t even get me started on Blackberry support…