You are here


Cross-platform user interface development for iOS, Android, and Windows Store

I am currently developing a C# / .NET user interface platform that will finally allow you to write the UI once in C# and create:

  • iOS applications using Xamarin.iOS
  • Android applications using Xamarin for Android
  • Windows Store (WinRT) applications

I will consider adding Windows Phone and Silverlight, which should be easy ports.

The platform will include an attractive and flexible calendar control.

The project will represent about 500 hours of development. The components will be released under commercial license. The target price is $200-300. I hope to release many building blocks of the platform under an open-source permissive license.

The calendar component is currently in alpha release.

If you would like more information, or would like updates as they become available, please contact me.

Xamarin Authorized Consulting Partner badge

Xamarin Consulting Partner badges

Xamarin doesn't have much in the way of graphics for its partners so I made these badges. Other partners may find them useful.

Vector single-path Android logo

Android logo

I needed to use the Android logo today, but the SVG I got from WikiCommons was made of many paths that used their strokes to exclude parts of the image instead of properly constructing the paths.

Here is the logo as a single path. It can be scaled, recoloured, or put on a background without any problems.

File Android vector logo3.41 KB

How to load Google Play onto the Hipstreet Equinox 2

Since my review of the Hipstreet Equinox 2, I've had a lot of questions about how I was able to install Google Play onto the device (which then makes loading tons of other first-tier apps, like Netflix, Google Maps, etc. onto the device quite easy).

Like many of the cheapest Android devices, the Equinox 2 did not go through Google's validation process and therefore is not allowed to be preinstalled on the device. Presumably this accounts for part of why these devices are cheap. Instead it ships with GetJar, which although it gives you access to thousands of apps, does not let you get the most popular ones.

Some apps can be downloaded directly from the publisher, others can be found by searching for torrents, and many are available on Usenet. These can then be sideloaded onto the device using one of many different methods. The problem is that you may be downloading a virus, or accidentally be pirating a commercial app.

The device is already rooted when you get it so you would think you might be able to sideload Play onto the device. Indeed, there are many places you can download all the various versions of Play (or Android Store or whatever it was called) and you can sideload them onto the device. The bad news is that it always crashes. If you are lucky it will get as far as showing its splash screen.

The process I used to sideload the app involves a few steps. If you are not technically inclined, this method isn't for you.

  1. Install the Android SDK on your computer.
  2. Download the Google apps bundle.
  3. Copy files to the filesystem.

Install the Android SDK on your computer

The Android SDK (also known as the Android Developer Tools or ADT bundle) includes everything needed to develop apps for Android devices, and deploy them onto a device. It's the latter part that is important. It is available here for PC, Linux, and Mac

When you plug in your device into your PC, hopefully it will install two drivers. The first is the mass storage driver, which lets your computer use the device like a USB memory stick. The second driver is called Android Device Bridge (ADB). For us, this is the important one.

On a Mac a driver is not required. On a PC it is. Unfortunately Hipstreet/Kobian does not publish an ADB driver for the device, so your Windows Device Manager will probably indicate an unrecognized device. I modified the Google driver to work with this device and you can download from this article.

Once the SDK is installed and the driver is working, you'll need to find the directory where the SDK was installed to find the platform-tools directory.

On my PC this is located not in Program Files, but your user directory, e.g. C:UsersYvanAppDataLocalAndroidandroid-sdkplatform-tools.

On the Mac it depends where you unpack it.

Now familiarize yourself with the adb tool.

Download the Google apps bundle

Although it is free software, I'm not what the rules are about redistribution so you're on your own to find this. The one I used is called gapps-ics-20120429-signed (Google Apps for Ice Cream Sandwich). It includes pretty much all the Google stuff that would normally preload on a device, about 25 programs.

Copy files to the filesystem

Use the adb tool to copy files to the appropriate directories on the device. You need to use this tool, because these system directories are not accessible from the GUI, even on a rooted device. If you find an app that lets you copy files to the system directories, you can skip step 1 and use that tool.

Debugging android over TCP/IP is easy.

adb tcpip <tcp_port>
adb connect <ip_address>
abd devices

Equinox2 ADB Driver

I couldn't find an Android debugging driver for this unit, so I had to roll my own, based on the Google driver.

Package icon equinox2_usb_driver.zip8.27 MB

Hipstreet Equinox 2 10.1" Android Tablet Unboxing and Review

I needed an Android device for a current project for testing.

Currently surrounded by 5 screens, adding another wasn't something that particularly excited me. I'm not a huge fan of my iPhone, so another phone was an option, but I can't afford a new one, and I'm not knowledgeable enough about older models to choose one that would be a good fit.

A tablet could be useful, and the Nexus 10 is tempting, but it's not available just yet and if I am going to spend more than $400 on a tablet, it is probably going to be a new Windows tablet. I want something cheap.

I briefly considered a Blackberry Playbook, not because I really want one, but because they're practically giving them away at $150 – great value if you can use it. Unfortunately, although the Playbook can execute Android apps, they must first go through some kind of conversion process. I'm not looking for more complications, and I almost certainly wouldn't be able to debug my app remotely in Visual Studio via USB with a Playbook.

I settled on the Hipstreet Equinox 2, a recently-released second-generation 10.1" tablet. Like most people I'm pretty hesistant about the Hipstreet name, a name associated with cheapest-of-the-cheap MP3 players available at Walmart. At $199 however, this model boasts many features that its competitors in the $150-250 don't, and reviews of the prevous Equinox generation indicate that it wasn't too bad. The truth is, I couldn't find a single review of this product, so I hope this article, and maybe a review to follow, is useful to someone.

I ordered the tablet from and it arrived at my door 40 hours later. It came in a shrink-wrapped solid "board game"-style box. Sorry about the quality of the photos, the only camera I have on me is my iPhone.

Included in the box:

  • DC charger
  • Male mini-USB to female USB (17cm)
  • Male mni-USB to male USB (100cm)

The battery is fully discharged. The screen film instructs the user to charge the unit for a full 6 hours before use.


  • Micro-SDHC (up to 32GB)
  • Power/charge
  • Micro-B USB for connection to host (cable included)
  • Micro-B USB for accessory (converter cable to full-side USB included)
  • Mini HDMI (type C)
  • Headphone


  • Power
  • Volume up
  • Volume down
  • Back 


  • Forward-facing camera 


  • Mass: 600g
  • Screen diagonal: 256mm (10.1")
  • Dimensions: 262 x 185 x 10mm

The construction is sturdier than I expected. It is very solid and doesn't budge in the twist test.


Once powered up, a swipe of the finger results in the home screen. A welcome video is placed on this screen. It explains (in English) how to turn on the unit (?), set up WiFi, configure your e-mail, and so on. At maximum volume, the video would definitely not be audible in a noisy environment.

The home screen icons are:

  • Camera
  • Dolphin Browser
  • Music
  • GetJar (app store)
  • Email
  • Super HD Play (video player)
  • Settings

First Experiences

These are first experiences with the Android operating system, not necessarily this unit.

Although I will let it charge for 6 hours, I need to get some work done, so I go about setting it up.

As I configure my e-mail I realize I have no idea how to make the screen-keyboard go away. On the 7th guess, I enter the correct password.

Although the unit doesn't include a GPS, it does use WiFi geolocation when possible to guess your location +/- 100m.

There are many ways to unlock the device, including facial recognition.

A speech-to-text icon is prominent throughout the UI. It uses Google speech-to-text. I look forward to checking this out.

The settings imply that use of a USB mouse will work. So will USB Ethernet and GSM/3G modem.

Oooh, a developer settings screen. There are some very useful options here, like showing all touches, flashing screen areas that update, CPU usage stats, Activity purging. I've never had a device cater to my needs like this before!

The device seems to neither be charging nor losing charge while I'm using it when plugged in.

Installing Apps

One of the main complaints people seem to bitch about in online reviews of cheap Android devices is that they don't include the Google Play store. Instead they have something called GetJar. Personally, I'm not sure what all the fuss is about. Supposedly it offers more than 600,000 available downloads. As long as I can get Angry Birds and a few other necessities, I don't really need to find a new way to give people my money. For what it's worth, I've heard of people successfully installing Google Play and the Amazon App store on cheap tablets.

Update: I actually came across many apps that I want that were not easily available from sources other than Google Play. It took many hours, but eventually I devised a way to load up all of the most up-to-date Ice Cream Sandwich stock apps, including Google Play.

Note: The tablet is already rooted when shipped.

Installation of apps from GetJar is very fast. Download and installation of the Twitter app took less than seconds, something that would take about a minute on my iPhone.

Oh good, Angry Birds and Angry Birds Seasons are in the top 20 list. This is going to be easier than I thought. They're free too.

Hmm.. no Netflix app in Getjar.

Dolphin Browser

When I fire it up it asks if I want to enable Flash support never, always or on demand. I like that. It also asks me if I want to emulate a desktop, iPhone, iPad, or Android phone. Then it crashes. Hmm.

All my fingerprints are getting pretty noticeable now.

The most important sites, Red Cell Innovation Inc., and CodeProject work fine, so that's all that matters.

Follow-up: 45 days later

  • Dell put these on sale 30 days after I bought this one, so I called them up and got a price protection credit for $50.
  • I'm glad I put the Play Store and the Google apps on it. The Play Store experience is much better than any other repositories, and it auto-updates downloaded apps without intervention. It makes the whole experience much closer to that of a Nexus device.
  • Physically the device is holding up well. There are some fine scratches on the screen, which isn't surprising, as I've done nothing to prevent them.
  • The screen could definitely be more sensitive. It's fine for a game of Angry Birds or tapping out a short e-mail, but it's not as sensitive as my old iPhone.
  • The mini-HDMI connector seems a little flaky, but it could be my cable's fault.
  • With regular use, the battery needs charging every other day. One could go a lot longer with occasional use.
  • The speaker is way too quiet. To listen to a podcast in bed I need to listen at maximum, or close to it. It isn't suitable for anything except a quiet room without headphones. To make things worse, the speaker is on the back, so if you put it down on its back most of the sound is muffled.
  • If you like other browsers, Opera Mini, FireFox, and Chrome all run well. I find Chrome a bit slow and my preference is probably Opera Mini.
  • Video play from a file or Netflix is pretty smooth, even when connected to an external display.
  • The hardware volume and back buttons only work when the unit is turned on and unlocked.
  • I have never had to cold boot the device, though I have inadvertently done so by letting the battery drain completely a few times.
  • Overall for its price I think this unit gives good value. I have not seen any other 10" tablets for $150.
  • The built-in e-mail app is nice but its one shortcoming is that is has to poll IMAP servers every x  minutes (minimum 5), instead of keeping a socket open.

java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams

I spent a few hours debugging this exception in an Android app. When you create a new View you usually set its LayoutParams. The trick is that you need you use the Type of LayoutParams that is from the parent view's class. So if you're adding a LinearLayout to a FrameLayout, you need to set LayoutParams to an instance of FrameLayout.LayoutParams.


No resource found that matches the given name (at 'property' with value '@drawable/your-filename') or aart.exe exited with error code 1

This occurs when the filename uses characters that aren't valid in C#.

Use underscores instead.



Simple Copyright Policy: If you want to reproduce anything on this site, get my permission first.