Yvan Rodrigues' problogue

(like a blog, but with less effort)

Disconnected ramblings about software development, iOS, FreeBSD, anti-social networking, kittens, drosophilidae, small business, Android, web services, finches, Windows, electrical engineering, XML, rental cars, rye, or ... FIVE dollars??!... something something beer.

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

Why does Rogers have such contempt for their current customers? It's good for business.

cat and mouse

I just got off the phone with Rogers after changing my internet plan from the Extreme Plus (45Mbps/4Mbps/150GB @ $74.99/mo) plan to their 300GB Express (25Mbps/2Mbps/300GB @ $71.99/mo).

You see, Rogers raised their prices today, and my bill was getting a bit pricey. I don't need 45Mbps, and if I did I would use up that 150GB pretty quick. The new price is about $30 more than their competitor, who ironically leases their lines from Rogers.

When they raised their prices they sent me mailer to inform me. It listed all their plans with the old and new rates. When I saw the 300GB plan I was pleased to know I could get twice the volume by sacrificing some speed (I've been burned by overage charges and didn't want to pay an extra $20 a month for 80GB more on the chance I went over my monthly allotment) .

So I called up customer service. The rep said she couldn't offer me the 300GB plan. Oh for fuck's sake. I read between the lines. I've played this game before.

OK, I'd like to cancel my service please.

I'm sorry to hear that. You'll need to call this other number for cancellation.


Hi, yes, I'd like to cancel my service.

No problem, we can take care of that, but I'll need to put you through to another department.Hi, yes, I'd like to cancel my service. I need more volume and I don't want to pay more.Well, I have a 300GB plan I can offer.

Of course once I got through to the retention department (as it's called in the biz) I was easily able to get the plan I wanted, and both the rep and I knew we were just going through the motions of this stupid cat-and-mouse game.

Everyone in business knows that it's so much cheaper to retain an existing customer than find a new one, and yet companies like this show contempt for their customers by offering new customers 6 months of cheap rates and other incentives; and only offering value to existing customers when they threaten to leave.

It's also well known that both customer and employee satisfaction increases when front-line employees are empowered to offer the best solution possible to their clients.

That means the only logical explanation is that Rogers has done the math. This isn't a misguided policy. It's a business strategy. They know their policies piss off existing customers; they willfully bend over for new customers; and they're willing to accept the consequences of trading loyal customers for new ones, because there is a net economic benefit. They use the same strategy in their wireless, cable TV, and even magazine markets.

Do Rogers' executives adopt this strategy at home too?

Honey, I know we've been married for 10 years, but I'm not willing to put any more work into this relationship. I think I'm ready for someone younger and more naïve.

You've got to be kidding. If you're going to be a prick, I'm leaving. I want a divorce.

Oh. That sounds expensive and inconvenient. What if I let you drive the Lexus. Will you stay?

How to close the browser in javascript

Intuitively, you would think that if you want to close the main browser window, all you would need is:


This will actually work on a "fresh" window, but if use has navigated away and back to the page, it may not work.

I have found the following to always work.

function CloseApplication() {
    window.open('', '_self', '');

No xbox partition table found

While attempting to soft mod an old XBox using the cable swap method, XboxHDMaker kept giving me the error:

No xbox partition table found on /dev/hda drive is not locked but locking is enabled dont reboot untill you have build a working xbox hdd since reboot will lock the drive press ant key to abort operation.

The hard drive in question had a valid partition table, but several attempts left me with the same message.

I believe the issue is that I was not restarting the PC. The PC was already booted into the Linux live CD. I shut down the PC and rebooted it to the BIOS setup screen. At this point I swapped cables. It worked!

Dear "()<>[]:,;@\"!#$%&'*+-/=?^_`{}| ~ ? ^_`{}|~.a"@example.org

As I ranted in a recent tweet, "A plus sign is a perfectly valid character in an e-mail address." Yet about half of all sites I visit tell me my e-mail address is invalid when they encounter +.

The format for e-mail addresses is defined in RFC 5321, RFC 5322, and summarized nicely in RFC 3696. For the record, these are all valid e-mail addresses:

I thought my server seemed slow.


but this confirms it. Bear in mind that upload is server to client. I'm betting on a bad cable between the server and the switch, but we'll see what iWeb says.

Follow-up: They had originally configured the NIC for auto-negotiate which it didn't like. Setting it to 10/full fixed it.


Tibetan Line Breaking

Tibetan text

From UAX #14: Unicode Line Breaking:

The Tibetan script uses spaces sparingly, relying instead on the tsheg. There is no punctuation equivalent to a period in Tibetan; Tibetan shad characters indicate the end of a phrase, not a sentence. Phrases are often metrical—that is, written after every N syllables—and a new sentence can often start within the middle of a phrase. Sentence boundaries need to be determined grammatically rather than by punctuation.

Traditionally there is nothing akin to a paragraph in Tibetan text. It is typical to have many pages of text without a paragraph break—that is, without an explicit line break. The closest thing to a paragraph in Tibetan is a new section or topic starting with U+0F12 or U+0F08. However, these occur inline: one section ends and a new one starts on the same line, and the new section is marked only by the presence of one of these characters.

Some modern books, newspapers, and magazines format text more like English with a break before each section or topic—and (often) the title of the section on a separate line. Where this is done, authors insert an explicit line break. Western punctuation (full stop, question mark, exclamation mark, comma, colon, semicolon, quotes) is starting to appear in Tibetan documents, particularly those published in India, Bhutan, and Nepal. Because there are no formal rules for their use in Tibetan, they get treated generically by default. In Tibetan documents published in China, CJK bracket and punctuation characters occur frequently; it is recommended to treat these as in horizontally written Chinese.


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.


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