Archive for MobileESP APIs

MobileESP JavaScript: OOP Beta 1 Released!

Hi, folks –

As MobileESP has added new methods and variables, I’ve been more & more concerned with the potential for API collisions with other JavaScripts that may be present on the page. So I decided to work on converting the standard JavaScript code into an Object Oriented model using the literal notation technique. Since I had to touch each function anyways, I decided it was time for a deep review of the JavaScript code, as well. Simultaneously, I drafted a list of test useragent strings and tested each one against our new UA test list.

Download: OOP JavaScript Beta 1 (July 22, 2012)

REGULAR JAVASCRIPT METHOD

In the normal JavaScript method, this is how you would include and use the code to test for iPhone Tier devices (including Android and Windows Phone 7). Notice how the JS function call is available as if it had been defined on the same page.

//In the Header, load the file:

<script type=”text/javascript” src=”code/mdetect.js”></script>

<script type=”text/javascript” language=”JavaScript”>

if (DetectTierIphone())

//Do something interesting, like redirect to a mobile page

//or promote the link to the iOS app store.

</script>

OOP JAVASCRIPT METHOD

Using this OOP method, all function calls and interesting variables are accessed within a new object called “MobileEsp.” So, only one line needs to change as we add “MobileEsp.” to the function call:

//Do the stuff listed above…

if (MobileEsp.DetectTierIphone())

//Do something interesting

CHANGE LOG

In addition, I made numerous tweaks and updates to the JavaScript code. If the JavaScript switch to the OOP model is well accepted by the community, and any bugs get fixed, then I’ll start porting these tweaks and updates to the other libraries. A few people have sent in a few other requests for coding changes (especially to PHP), which I’ll also try to get in. Here are some highlights of the JavaScript updates:

  • Added global variables for quick access to these very useful Boolean values: IsWebkit, IsMobilePhone, IsIphone, IsAndroid, IsAndroidPhone, IsTierTablet, IsTierIphone, IsTierRichCss, IsTierGenericMobile
  • Simplified OperaMobile().
  • Moved the following from DetectMobileQuick() to DetectMobileLong(): DetectDangerHiptop(), DetectMaemoTablet(), DetectGarminNuvifone(), devicePda.
  • Added DetectBada(). Added it to DetectSmartphone & iPhone Tier, too.

BETA TEST FEEDBACK

Please review & test the proposed code for the new OOP JavaScript object and its many tweaks and updates. Please send feedback to me (Anthony) no later than Friday, August 10, 2012. I’d like to be able to incorporate all of the feedback and publish an official switch to OOP by the end of August.

Thank you for your continued support of MobileESP, your energies, and your ideas on how to make it better for the entire community!!!

Anthony

(anthony.hand [at] gmail [dot] com)

Comments

HP/Palm Has Released the Enyo Web UI Framework

Hi, folks –

In case you haven’t heard already, HP/Palm has released the UI framework they used to build the WebOS UI as a free open source JavaScript/CSS framework. That’s right: the WebOS was built using Web technologies — not Java, C++, or something else!

Check out the Enyo JS framework & have fun exploring their samples pages:

www.enyojs.com

Be sure to review the “StyleMatters” sample, which encapsulates what looks like all of the UI components Palm used on WebOS’s distinctive (and gorgeous) UI layer.

http://enyojs.com/samples/stylematters/

Caution

There is one word of warning, though. Enyo renders best on WebKit-based browsers. Some of the UI components render OK on my Windows Phone 7 test device, but not all of them. And unfortunately, the StyleMatters sample doesn’t render at all on my Windows Phone 7 device. I haven’t tested the StyleMatters sample with Firefox or Opera Mobile on an Android device, but I expect there to be significant rendering issues with these browsers, as well.  :-(

Advice for Using Enyo with MobileESP

If you decide to develop a web site or application with the Enyo JS UI framework, remember that it works best with WebKit-based browsers. As of today, it’s probably not reliable with Internet Explorer, Firefox, or Opera, whether mobile or desktop browsers.

You would also want to limit your Enyo-based web app to the iPhone Tier devices and perhaps also Tablet Tier. This means that you might consider making a different mobile version of your site available to devices using non-WebKit browsers (e.g., on Android, Windows Phone, or BlackBerry), even if they’re in the iPhone or Tablet tiers.

Your Enyo web development strategy might look something like this:

  • Tablet Tier, WebKit Only: Enyo OK
    • Non-WebKit Browsers: Mobile-friendly desktop or generic mobile site
  • iPhone Tier, WebKit Only: Enyo OK
    • Non-WebKit Browsers: Generic mobile site
  • All Other Mobile Devices: Provide the generic mobile site.

Therefore, you would want to determine whether to serve an Enyo-built site using the iPhone or Tablet Tier API calls with the WebKit calls. Here is a pseudo-code example:

if (DetectMobileQuick() == true)

{

if ((DetectTierIphone() == true) && (DetectWebkit() == true))

//Serve the Enyo-built phone screensize-optimized site

else

//Serve the generic mobile phone site with no JavaScript and extremely simple CSS

}

(What do we mean by “iPhone Tier,” “Rich CSS” or “Generic Mobile” devices? You may wish to refresh your memory by reviewing this blog article we wrote.)

Summary

If you’re looking for a beautiful UI framework as an alternative to jQuery Mobile, Sencha Touch, and a few others out there, then Enyo is worth your consideration. You’ll also be happy to hear that Enyo is object-oriented and now totally free and open source. Thanks, Palm!

- Anthony

Comments (1)

MobileESP: ASP.NET Updates

Hi, folks –

The 2 flavors of the ASP.NET code library were updated with two issues specific to that code base. The updates are now live on Google Code.

  • The starting quote was missing for the vndRIM variable’s value.
  • Removed the class statement, “using System.Linq.” The Linq API wasn’t actually used. Removing the Linq statement gives us an added bonus: compatibility for the ASP.NET code now drops from .NET 4.0 to .NET 2.0.

Many thanks to Brian W. for pointing out these issues and their solutions!

- Anthony

Comments

MobileESP: Updated for Kindle

Hi, folks –

Thanks to some questions from Dave M., we realized that MobileESP had inconsistent support for detecting the Amazon Kindle e-Ink devices as mobile devices, plus, they were also reporting “true” as Rich CSS Tier devices (which they are not). In addition, MobileESP had no support for detecting the Amazon Kindle Fire devices in Silk browser acceleration mode, which uses a different useragent string.

We updated the MobileESP code bases twice today. The first was to standardize support for detection of the Kindle e-Ink device. Then we remembered that we had wanted to also add support for detecting the Silk browser acceleration, so we updated all of the libraries a second time to add the Silk browser support.

Here is the specific list of updates which affects the following libraries: PHP, JavaScript, Java, ASP.NET (both variants), and Python.

  • Updated DetectRichCSS(): Excluded e-Ink Kindle devices, which all run black and white displays.
  • Created DetectAmazonSilk(): Created to detect Kindle Fire devices in Silk mode.
  • Updated DetectMobileQuick(): Updated to include e-Ink Kindle devices and the Kindle Fire in Silk mode.

Open Issue: Currently, the Android-based Kindle Fire browser is detected as a Rich CSS Tier device when in Silk mode. When Silk mode is off (i.e., normal Android browsing mode), then the device is currently reporting itself as an Android phone. (This is common behavior for 7″ Android tablets.) We’re not sure that this is the best strategy for Silk mode — should Silk mode be in the Rich CSS or basic mobile device category alongside feature phones? Please let us know your feedback.

As always, if you’d like updates on MobileESP, subscribe to the changes log on Google Code.

- Anthony

Comments (2)

MobileESP: Updated for BlackBerry Curve Touch 9380

Hi, folks –

A quick update to the code libraries today.

ALL LIBRARIES: PHP, JavaScript, Java, ASP.NET (both), Python

Added support for the BlackBerry Curve Touch 9380. It’s a new monoblock all-touchscreen device from BlackBerry and is a little smaller than a Storm. Because the screen is (reasonably) large and it lacks a keyboard, we decided to add support to it to the DetectBlackBerryTouch() method. (Special thanks to Robert P. for bringing the recent launch of this device to our attention.)

PHP Bug Fix

Fixed a bug in the DetectKindle() method. The call to DetectAndroid() needed the class identifier (“this”). (Special thanks to the several people who wrote in about this one.)

Python Bug Fix

In adding support for the Curve Touch to the DetectBlackBerryTouch() method, we noticed a copy & paste error in the code. All of the existing lines of code were looking for the Storm device only. Oops! So we added in support for all necessary devices: Storm, Torch, Bold Touch and Curve Touch.

All libraries have been updated in the Google Code project and are available for download now.

- Anthony

Comments (2)

MobileESP: Ported to Python!

Hi, folks –

The community has delivered another great port of MobileESP! Jury Gerasimov sent me an email last week with the good news.

Jury’s company in Irkutsk, Russia, (that’s one of the largest cities in Siberia!) has been developing a bus monitoring service. The web site was built in Python for the Django web app framework. In Jury’s own words:

We’ve made 3 versions of the web interface – desktop, modern mobile and old mobile – available on the same URL. To detect which version the server should display, we needed some server-side script, and MobileESP has the most usable set of functions among other solutions. Our main developers were quite busy, so Python translation was made by freelance guy. He knew the code will be opened so kept the structure and comments close to original.

Check out the mobile version of their bus tracking web app: www.irk.fm/bus/ (Note that the web site is in Russian naturally.)

For you Python lovers, here is the sample code they used to integrate MobileESP in Django. It looks pretty simple…

  from mobileesp import mdetect

  user_agent = request.META.get("HTTP_USER_AGENT")
  http_accept = request.META.get("HTTP_ACCEPT")
  if user_agent and http_accept:
       agent = mdetect.UAgentInfo(userAgent=user_agent, httpAccept=http_accept)
       #Do first! For iPhone, Android, Windows Phone 7, etc.
       if agent.detectTierIphone():
           HttpResponseRedirect('/myapp/i/')
       #Then catch all other mobile devices
       if agent.detectMobileQuick():
           HttpResponseRedirect('/myapp/m/')
  #For traditional computers and tablets (iPad, Android, etc.)
  return HttpResponseRedirect('/myapp/d/')  

Moving forward, we will be hosting the Python codebase in the MobileESP project on Google Code. (See the Download Page for details.) Jury and his team will assist in reviewing and testing updates.

For more information about the Python port or to contact Jury for more information about his company’s services, please email Jury directly: jury@softshape.com.

Cheers,

Anthony

Comments

Updated: Performance Enhancements for ASP.NET

Hi, folks –

Doug D. contributed some performance enhancements updates for the two ASP.NET variations of MobileESP. Here is a summary of changes:

  • Variables: Converted the private member strings to constants for faster object creation.
  • Removed unused property: deviceXoom.
  • Wrote member strings in UPPERCASE rather than calling the ToUpper() on each one.
  • Added a note to OnInit() that one may optionally override InitializeCulture() instead so that the mobile detection can happen earlier in page’s lifecycle, if necessary.

Thank you for the contributions, Doug!

Anthony

 

Comments

Updated: Windows Phone 7, BlackBerry Bold Touch, Kindle Fire

Hi, folks –

I made a few updates to the code today. Here is a summary of the changes, which are also listed at the top of each file.

PHP Only:

    • Created a constructor method per new features in PHP 5.0: __construct(). (Thanks, Lee C.!!)

All Code Libraries: PHP, JavaScript, Java, ASP.NET

    • Added a new variable for 2 versions of the new BlackBerry Bold Touch (9900 and 9930): deviceBBBoldTouch.
    • DetectTierIphone(): Moved Windows Phone 7 to the iPhone Tier. WP7.5′s IE 9-based browser is good enough now.
    • DetectBlackBerryTouch(): Updated to support the 2 versions of the new BlackBerry Bold Touch (9900 and 9930). (Thanks, Robert P.!!)
    • DetectKindle(): Updated to focus on eInk devices only. The Kindle Fire should be detected as a regular Android device.

As a side note, I also learned how to “checkout” and “commit” the code updates in SVN to Google Code. Now, file updates are truly updated versions of the same file in the Google Code system rather than an entirely new file with no history. I know, it’s a silly thing that I should have learned ages ago, and my apologies for not having done so sooner. So all of today’s updates are posted as Update r205. (Let’s just say that a switch to Mac and the Versions client were the main reasons…) :-)

 

Cheers,

Anthony

 

Comments

Updated: Fixed issues related to Opera Mini on Android

Hi, folks –

Here we go again on the Opera mobile browser ride…  :-)

So last week, we fixed the inaccurate detection results for the very good Opera Mobile browser on Android. This week, it’s the Opera Mini browser’s turn!

Today, I made two sets of updates to the MobileESP code libraries for PHP, Java, ASP.NET and JavaScript:

  1. All libraries: Updated the DetectAndroidTablet() method to prevent the Opera Mini browser from erroneously reporting as true. This fix was a significant re-write of the method’s code, so please let me know if I screwed something up. I only tested it in PHP and JavaScript and it appears to work fine….
  2. ASP.NET & JavaScript Only: Updated the techniques for initializing the user agent and httpaccept variables to handle null or uninitialized strings. Sometimes spiders and similar robots don’t initialize those values. I couldn’t test these updates here, so please let me know how these work in production! (PHP and Java already had solutions for this issue.)

So what is the Opera Mini browser? The Opera Mini browser started its mobile life as a way to bring (near) desktop functionality to feature phones. Now in the Android world, the Mini browser lives on as a highly data-efficient browsing alternative. Basically, all of the hard lifting for rendering a page is done on Opera’s servers, and they just send the phone a highly compressed file. It’s a great web page pre-processing solution.

But… Note that the Opera Mini browser is not processed on the client (phone/tablet) side — it’s pre-processed on the server. For this reason, the browser does not qualify as iPhone Tier. For now, we’re leaving it in the generic mobile device tier.

Thanks to Nolan K. for bringing the Opera Mini issue to my attention. And special thanks to John H. for providing the efficient ASP.NET code fix for the user agent and httpaccept variables.

As always, please help me check for errors & bugs. I can do a light test of the PHP and JavaScript code libraries, but I don’t have access to servers to check the ASP.NET or Java code libraries. Please let me know if you find something. Much obliged!

Comments

Updated: Fixed issues related to Opera Mobile on Android

Hi, folks –

The Opera Mobile browser for Android is great. Unfortunately, the Opera dev team doesn’t follow Google’s guidelines for constructing useragent strings properly. As a result, the Opera Mobile browser on Android phones was falsely reporting itself as running on Android tablets rather than phones. Thanks to all of those who wrote in about it!

So I made the following fixes to get things working right:

  • Created 2 new methods:  DetectOperaAndroidPhone() and  DetectOperaAndroidTablet(). Although I dislike creating new methods willy nilly, these methods better encapsulate the Opera-specific issues and let’s us better track them over time if Opera continues to play by their own rules.
  • Updated DetectAndroidPhone() and DetectAndroidTablet() to properly detect devices running Opera Mobile.
  • Updated DetectMaemoTablet() to also disambiguate against Android.
  • Updated DetectTierIphone(). I removed the Maemo detection for two reasons. One was the false positives on Android (before the above fix). The other is that Nokia has discontinued the device and it’s more than 2 years old, so device usage probably has plummeted. Note that Maemo still detects in the quick mobile method!

I also made a few minor bug fixes that prevented the two C# code files from compiling properly. (Thanks, Marco!)

Please download the latest version of your favorite flavor of MobileESP! All code bases were updated: PHP, JavaScript, Java, and the two ASP.NET (C#) files.

 

Comments

« Previous entries Next Page » Next Page »