Clug Park-Tech

16 August 2010

Jonathan Carter (highvoltage)

Happy Birthday, Debian!


Today, Debian turns 17. It’s great to see how one of the first GNU/Linux distributions out there still manages to be important and relevant. Happy birthday, Debian!

This may also be a good time to say thanks to a team or package maintainer who makes it possible.

by jonathan at 16 August 2010 12:51 AM

15 August 2010

Tristan Seligmann (mithrandi)

HTC Sense / Facebook contacts sync

Jonathan just ran into this on his new HTC Desire (updated to 2.2 “Froyo”); I haven’t confirmed it on any other handset, but I imagine the problem is common to many HTC Sense + Android handsets. Anyhow, I figured I’d put this information out there to help anyone that runs into this issue. If anyone has a contact at HTC, please pass this along, so that they can look into a fix/workaround.

When “Facebook for HTC Sense” tries to connect to Facebook to retrieve contacts or profiles, the client sends Expect: 100-Continue in the HTTP header. Facebook’s HTTP servers do support 100 Continue, but some proxy servers (such as squid) do not. If you have configured your phone to use a proxy server, or are behind a transparent proxy (which many ISPs do inflict on their users), and the proxy server does not support this, it will (correctly) respond with 417 Expectation failed response. At this point, HTC’s client does not attempt to retry the request without requesting 100-Continue, but instead fails with an error message. This results in an empty Facebook directory / contacts list, and an error when you attempt to refresh it.

If the proxy server is on your own network, simply bypassing it should solve the issue for you. If this is your ISP’s proxy server, then you’ll either need to work around it somehow, or contact HTC and/or your ISP for assistance.

by mithrandi at 15 August 2010 01:52 AM

12 August 2010

Raoul Snyman (superfly)

Using a Script to Simulate a Serial Device for VirtualBox

Recently I needed to simulate a serial device (a GPS, to be precise) for a Windows application I'm modifying for a client.

I don't use Windows on a regular basis, but I do have a license for it, and an original Windows XP CD from back in the day, so I loaded Windows in a VirtualBox virtual machine for the odd occasion I might need Windows, like when I build the Windows version of OpenLP 2.0.

Fortunately for me, because I'm running Linux on my system, and I have Windows running in VirtualBox, it's actually quite easy to simulate a serial device.

VirtualBox allows you to specify where to connect the guest's serial device on the host, and provides a few options. I selected "pipe" which is a standard Un*x socket, and I set VirtualBox to create the pipe if it didn't exist. I set the value of the pipe to be /tmp/vbox-socket.

Next I hauled out an extremely handy little program called socat. I had to install this, but that was a simple case of sudo aptitude install socat. Once I had installed socat, I set up a connection from a pseudo serial device (man pty can tell you more about that) to the Un*x socket:

@:~$ socat UNIX-CONNECT:/tmp/vbox-socket PTY,link=/tmp/vbox-pty

That will create a pseudo serial device called /tmp/vbox-pty and connect the Un*x socket to the pseudo serial device. Now, to connect up your script to the PTY device, simply use the standard Linux redirection:

python gps_simulator.py > /tmp/vbox-pty

by raoul at 12 August 2010 11:40 AM

Jonathan Groll (eyesonly)

Emacs-like keybindings for the new ABAP frontend editor

In the new SAP ABAP editor, it’s sort-of possible to remap the keybindings you use. If you’re a regular Emacs user, you often find yourself pressing the wrong key combination accidentally – for instance C-a to go to the beginning of a line, only to find that the new ABAP editor by default respects the regular windows CUA keybindings – so C-a does a “Select All” as it does in many windows programs.

I’ve redefined many of the new editor keybindings that I use to be more Emacs-like. If you’re interested, here is a PDF document listing all of my defined keybindings for the “emacs” schema. This is a stylesheet transformation of the file “keymap.xml” that is stored in your SAP work directory (so, in my case this is C:\Documents and Settings\Jonathan User\SapWorkDir\ab4_data\keymap.xml). Here is my keymap.xml file, I would say simply replace your own keymap.xml file with mine BUT I’ve had sufficient grief doing it even when upgrading my SAP GUI from one release to another, so doubt this will work for you. If you do want to try that, please backup your entire SapWorkDir first (as a point of reference, I’ve had this blog post in draft form since December 2008 due to not being sure how to share my keybindings with others).

What is probably more sensible if you want to try a similar Emacs keybinding scheme is to take a look at the PDF containing my keybindings and to manually create your own Emacs keybinding scheme. To do so, start by clicking on the little yellow icon on the far right bottom of your editor screen (indicated by the arrow):

Why do I say that its only “sort-of” possible to remap the keybindings? Well, there are limitations : (1) Our nice custom keybindings can’t be used when in display only mode, like when we’re on a non-development system (2) We can’t do complicated key sequences, eg. C-x C-w can’t be bound to “File.Saveas”. (3) Meta key bindings are difficult as pressing the ALT key on its own makes the menu bar at the top of the screen active, so the ALT key must always be combined with other modifiers like control (4) The windows key cannot be bound. In fact, we seem to be stuck with Shift, Control and Alt as modifiers. (5) Some things like kill-line (C-k) have no equivalent command in the front-end editor. (5) Block mode in the two editors is different in concept.

There are some windows CUA keybindings that you may be particularly fond of that get lost if you rebind them – for instance C-v does a “Clipboard Paste”. I’ve also bound that to C-y in the keybindings file above to be more like Emacs, but you may not like that, so I guess whatever keybindings you end up using will become a matter of personal taste, which is as for all things Emacs. Still, some sensible substitutions for cut-copy-paste are also defined by default in the new editor – for instance Shift-Insert performs a paste as it does on many terminal emulators.

By the way, as far as I know the new editor mode only is available for the windows SAP GUI. 1 The option to select the new editor does not appear in all the versions of the Java GUI that I’ve tried. It would be a shame if the new editor was never ported to the Java GUI, and my Linux street cred has suffered enormously as a consequence.

I have considered developing a proper “abap-mode” for the stand-alone Emacs editor as well, but it does seem it would have very little benefit for the effort involved – the benefit would apply if you opened a saved file with ABAP code in it in Emacs, or if you pasted into an Emacs window outside of your SAP GUI. If it were feasible to embed Emacs into the SAP GUI as the default editor then an abap-mode would be a real consideration. However, I don’t see how it’ll be feasible due to the tight integration that the new editor enjoys. For instance, one would have to allow for drill-down into other sections of code, allow for integration with the SE80 code browser and so forth. So I personally see a truly embedded Emacs as a wonderful thing (that will never happen!).

I also have a wish-list for commands that I’d love the new ABAP editor to support. Top of this list would be an Emacs kill-ring. Luckily, there is something similar – pressing “Edit.PasteExtended” (By default bound to Control-Shift-V) pops up a list of the clipboard history, so all is not lost however, and if you didn’t know about this feature it’s great.

1 The new front-end editor is available for SAP GUI for Windows 6.40 Patch level 10 and onwards, also your server must be able to support it – the first official server version that supports it is SAP NetWeaver2004s, although since then the editor has been backported, you can also run with it on older versions going back to 6.20 (but your system must be at one of the newer patch levels).

12 August 2010 08:15 AM

05 August 2010

Jonathan Carter (highvoltage)

Tristan Seligmann (mithrandi)

HTC OTA updates

I’m a little bored, and the whole internet (well, at least the portion of it composed of Desire owners) seems to be going crazy waiting around for the recently-announced rolling out of the Android 2.2 update for the HTC Desire, so I thought I’d poke around a little in the OTA update process.

UPDATE (2010/08/03): The update seems to be rolling out to most people, but some people still aren’t getting it, even though they have unlocked/unbranded phones. From what I’ve been able to discover, HTC appears to be employing an IMEI “blacklist” of some kind; checkins with specific IMEI values fail to return the 2.2 update, but anything else (including completely invalid IMEI values) returns the update. I’m still not sure whether this is just their way of staggering the update, or if there is some other reason for withholding the update from the affected devices.

UPDATE (2010/08/05): HTC now seems to either have a bad content server, or be in the process of pulling the update from their servers, including the update file itself on liveimage.htc.com. If it is deliberate, I have no idea why they’re doing it, and I can’t currently find any information that sheds any light.

The process seems to be relatively straightforward: when you hit “Check now”, the phone sends an HTTP POST to http://andchin.htc.com/android/checkin (not https, thus all in the clear, making it easy for me to sniff :P), with a Content-Type of “org/x-json” (wat), and a JSON-encoded payload. The payload looks as follows (I’ve pretty-printed it and stripped personal identifiers, but it’s still good enough to get a response):

{
  "locale": "en_GB",
  "checkin": {
    "build": {
      "product": "bravo",
      "serialno": "HTXXXXXXXXXX",
      "changelist": "174215",
      "build_type": "user",
      "carrier": "htc_wwe",
      "radio": "32.36.00.28U_4.06.00.02_2",
      "firmware_version": "1.21.405.2 CL174215 release-keys",
      "bootloader": "0.80.0000",
      "id": "htc_wwe/htc_bravo/bravo/bravo:2.1-update1/ERE27/174215:user/release-keys",
      "revision": "129"
    }
  },
  "model_number": "HTC Desire",
  "logging_id": 0,
  "imei": "",
  "id": 0,
  "digest": "8fccfd93dcbe837d072e5f1494da2"
}

Note the “carrier” value there; this is “htc_wwe” for phones that are not carrier-locked / otherwise carrier-customized. If you had a Sprint phone, for example, this would be “sprint”. I believe this value is ultimately determined by the the “androidboot.carrier” kernel parameter passed to the kernel by the boot loader.

I’m not sure what “digest” is of; it is 29 hex digits long, which doesn’t make any sense for a cryptographic digest. It doesn’t seem to be a personal identifier of any kind, though; if you modify it, you get some “upload crash” response back, which contains (among other things) the correct digest, so I can only guess that it corresponds to the product information in some way. I’ll be interested to see if it changes once I have the new update installed.

The response that comes back looks like this:

{"time_msec":"1280538364433","stats_ok":true,"intent":[{"action":"android.server.checkin.FOTA_CANCEL"}]}

The “intent” part will probably be obvious to Android developers (it’s specifying what the UI should do next), and time_msec is a UNIX timestamp in milliseconds, corresponding to the time the response was sent.

If an update *is* available, the response looks like this instead:

{
  "stats_ok": true,
  "intent": [
    {
      "action": "android.server.checkin.FOTA_UPDATE",
      "data_uri": "http://liveimage.htc.com/OTA_Bravo_HTC_WWE_1.21.405.2-1.15.405.4_release_P4ohim1mtp6zggcyon.zip",
      "extra": [
        {
          "name": "promptMessage",
          "value": "System Upgrade"
        },
        {
          "name": "promptFeature",
          "value": "Update:HTC application improvement"
        },
        {
          "name": "promptVersion",
          "value": "System upgrade1.21.405.2 (27.07 MB)We would recommend using a free Wi-Fi hotspot or an unlimited data plan to apply this update. If not, standard data connection charges may apply. Any questions? Contact us via http://www.htc.com/www/CA_Hotline.aspx"
        },
        {
          "name": "promptSize",
          "value": "27.07 MB"
        },
        {
          "name": "promptMinutes",
          "value": "30,..."
        },
        {
          "name": "timeoutSeconds",
          "value": "120"
        },
        {
          "name": "force_update",
          "value": "false"
        }
      ]
    }
  ],
  "time_msec": "1280513282008"
}

Now, it seems as if they are planning to do a rolling release of the 2.2 update, somehow. I assume this means that they will only be responding with the updated version to some requests, but I don’t know exactly what mechanism they’ll be using to do that. Oh well…

by mithrandi at 05 August 2010 01:39 PM

02 August 2010

Raoul Snyman (superfly)

TortoiseBZR-Style Right-Click Menus in KDE

I think most folks are probably well aware of the Windows Subversion client, TortoiseSVN. It has been around for a number of years, and is easily one of the most handy version control clients on any platform.

Recently, I have been wanting to be able to do the same thing in Linux. Simply right-click and update. Sure I can use the command line, and sure I could even use Bazaar Explorer, but I don't always have a terminal open, and Bazaar Explorer doesn't work with files as much as workflow, and that doesn't always fly.

So, I started looking around to find out how I could edit Konqueror or Dolphin's context menu, or "service menu" as it is known in FreeDesktop terms. After much hunting, looking at existing service menu files, I was able to put together a submenu for QBazaar, the Qt dialogs for Bazaar (the same dialogs that get used in TortoiseBZR, in fact).

You can get my QBazaar.desktop file from the Scripts & Programs section on my blog. Once you have downloaded it, you need to copy it into the following location:

~/.kde/share/kde4/services/ServiceMenu

Note: The capitalisation is required, so don't make "ServiceMenu" all small letters.

by raoul at 02 August 2010 08:50 PM

01 August 2010

Raoul Snyman (superfly)

Bazaar Branching & Merging on Subversion Repositories

In my last post, I talked about using Bazaar on Subversion repositories. Soon afterward, David Rubin asked me in IRC if I can do the standard branching and merging on a Bazaar working copy of a Subversion repository, and how easy it is.

The answer is, "Yes, very easy." In fact, you don't even need to care that it is from a Subversion repository. For instance:

@:~$ bzr checkout https+urllib://svn.domain.com/svnroot/project/trunk trunk
@:~$ bzr branch trunk newfeature
@:~$ cd newfeature
[... do some stuff ...]
@:~$ bzr commit
@:~$ cd ../trunk
@:~$ bzr merge ../newfeature
@:~$ bzr commit

All done!

by raoul at 01 August 2010 08:56 PM

28 July 2010

Jonathan Carter (highvoltage)

If I were superstitious…


A few weeks ago I moved to Québec, Canada. Today I bought this car from a colleague at Révolution Linux, he doesn’t need it anymore since he’s moving to Montréal. He bough it just a few months ago from another colleague who moved to France.

It doesn’t have a CD player, instead, it has a tape deck, which plays analogue magnetic tapes. They’re horribly obsolete now but this was how I listened to music way back when I was a kid. Another college that lives down the street from me has a hi-fi with a CD player AND a tape deck. I was planning to go there to write the Offspring Smash album to tape, it’s one of my favourite driving albums and I never tire from it.

All the tapes from 2 owners back was still in the car. I decided to remove them when I got home this afternoon. The *first* tape I took out happened to be this one:

I was amazed and delighted! Then I removed the next tape:

It had “High voltage” written on it, which is very close to my IRC/Identica/Twitter nickname, “highvoltage”. If I were at all superstitious, I’d take it as a very good sign that this car will serve me very well!

by jonathan at 28 July 2010 01:49 AM

22 July 2010

Tristan Seligmann (mithrandi)

The Desire post

Encumbered forever by desire and ambition,
there’s a hunger still unsatisfied;
our weary eyes still stray to the horizon,
though down this road we’ve been so many times.

— Pink Floyd, High Hopes

Introduction

As some of you already know, I recently became the proud new owner of an HTC Desire. You can find the detailed specs elsewhere, but the phone is pretty much a Nexus One with an optical trackpad, real buttons, a little extra flash memory, and the HTC Sense software. This post isn’t exactly going to be an in-depth review, but I thought I’d give a brief rundown of my impressions, and also the apps I’m using on the phone at the moment.

Overall, I’m pretty happy with the phone. I can get 1-2 days of use between charges (depending on usage), which is good enough for my purposes, and that does include push email (quite a lot of email, in the case of my personal account) and syncing all sorts of stuff on a pretty regular schedule. The phone UI is generally way more responsive and snappy than my previous phones (Nokia E71, E65), and the touch screen works reasonably well. Also, I can actually get apps for a lot of the services I use now, whereas I couldn’t before (not many people are making Series 60 apps).

Input

The lack of a real keyboard turned out to be not as bad as I expected. Tap-typing with a single finger is not as fast as using both thumbs was on the E71, and holding the phone so that I can use both thumbs is somehow awkward enough that I never did it. Selecting predicted words is a lot easier with the touch screen, though (no need to scroll through the list). However, I am now using the Swype Beta, an alternative input method where you “swype” your finger through the letters of the word you want, without lifting it, along with a lot of other nice tweaks to the on-screen keyboard. It works pretty nicely; it doesn’t always select the right word, but you can finish your sentence (or paragraph) and then go back and select a different word where it made mistakes. If a word isn’t in the dictionary, or isn’t really a word at all, you can just tap it out; regular words will be added to the dictionary after you press space, but you can also add “non-words” like “http://” or “.co.za” for convenience. I’m fast enough on the Swype keyboard now that I can use it for taking notes during a conversation in real-time, which is great. Unfortunately, the beta is closed at the moment; if you didn’t have a chance to grab the app while it was open, you’ll have to wait around until they decide to let people have a crack at it again, or they open it up to everyone.

The multi-touch screen is great. A lot of apps (like Maps, or the browser) support the “pinch” and “spread” (what’s the real name for the opposite of pinch?) to zoom in and out, which easily lends itself to an “arbitrary precision” navigation style: zoom out to cover a lot of ground, then zoom back in to precisely select a button or other page element. The “momentum-based” scrolling mechanism (again, what the heck is this actually called?) is also used by most apps, and is similarly awesome. It sort of behaves like a globe: flick the screen to start scrolling; over time, it slowly slows down, but you can touch the screen to “catch” it once you get to where you want to be, or flick it again to keep going.

Multi-tasking

The Android approach to multi-tasking is awesome, and I kinda wish my desktop operating systems worked the same way. Under the hood, it’s basically just standard Linux processes being scheduled by the kernel, but with a bit of a twist. In terms of the UI, there’s no explicit process management. Some apps have an “exit” option, and you can burrow into the Applications list to “Force Stop” any app, but there isn’t even any built-in way to get a list of currently-running apps (although third-party apps for this purpose are available), simply because you don’t really need it. When the OS runs out of memory (think “OOM killer” if you’re familiar with Linux), it kills off the oldest apps to free up memory. In addition, provision is made for apps to save and restore their state. As a result, if you switch back and forth between apps, they’ll probably still be running, so switching will be immediate. If you open up an app that you haven’t used for a while, it may not be running anymore, so it’ll take a little longer (but usually not that much longer) for the app to start up again and restore the state. Most apps don’t do anything if they’re not in the foreground, so there’s no need to worry about wasting your battery running apps you’re not using. There are also “services”, which are for long-running background tasks that shouldn’t be killed off to reclaim memory; synchronization, for example.

Unfortunately, some people seem to be confused by all of this; as a result, there are a plethora of “advanced task killer” apps and suchlike on the Android market. These are all just about pointless; all you are likely to accomplish by running around killing random processes is breaking certain functionality like background synchronization that you turned on. If you want to stop your contacts syncing, for example, just go turn that off in the settings, instead of using an app that kills the process every time it starts up. Also, if an app really is draining your battery in the background, it’ll show up in the battery info screen, and you can then uninstall it or otherwise take steps to solve the problem. The only exception to the latter is built-in functionality that gets aggregated into the “Android Platform” entry; it may not be obvious what you need to disable or reconsider if “Android Platform” shows up as using too much juice.

Intents

Think of intents like file type associations on steroids. Instead of just “open this file which is of some type”, you also have “open this URL” and “dial this phone number” and “view these map coordinates” and “search for this text” and “display the home screen” and “the battery is running low” and just about anything else you can think of, including brand new intents created by third-party developers.

Since any application can register itself to handle an intent, this means that third-party applications can do anything from hooking in as a phone dialler (eg. a SIP client), to replacing the home screen; just about any aspect of the “default” OS software can be replaced. This can also be done selectively; for example, if you follow a link to a Google Maps URL (even from another web page in the browser), you’ll be given the option to open it in the “Maps” app as well as opening it in the browser.

The net result is that third-party software can replace and enhance the OS in a practically unlimited fashion; and different third-party apps can interoperate and integrate without a great deal of special effort being exerted on the part of the application developers.

GPS / Location

The Desire has A-GPS functionality. My E71 also supposedly had this functionality, but it never seemed to work; getting a GPS lock could take up to 5 minutes if I started the Ovi Maps app up in a different location to where I last closed it. On my Desire, under optimal conditions (outdoors, clear view), I can generally get a GPS lock in seconds, no matter how far I’ve moved since the last time I got a lock. I can even get a GPS lock in under 30 seconds standing indoors in the middle of my house! I guess this is probably a combination of a better A-GPS implementation and a better GPS receiver, but I’m definitely much happier with the results.

Battery lifetime

A few quick notes I wanted to make on battery lifetime. Firstly, the battery lifetime seems to go up after the first several charge-discharge cycles; I guess this probably applies to all batteries in this class, but I thought it was worth mentioning. Secondly, active wifi use generally uses less battery than an active cell data (GPRS/EDGE/3G/HSDPA) connection; but an idle wifi connection will use more battery than an idle cell data connection. You can adjust the wifi “sleep” policy to take advantage of this by disabling the wifi connection after a certain timeout, although you may wish to avoid the extra cell data charges. Also, if you are in an area with poor cell reception, the cell radio will use more battery as the transmit strength is increased in order to successfully transmit; this applies even if you are not making use of cell data.

My applications

You can see a list of all of the applications I have installed (thanks to AppBrain), but not all of them are worth mentioning, so I’ll run through the interesting ones here, with some commentary. Unfortunately paid apps are not currently available from the Android Market in South Africa, which some apps are either not available at all, while others are only available in free+ads form.

  • Aldiko Book Reader
    A pretty decent eBook reader for ePub format books. It includes support for purchasing books from some sites (they have a mechanism whereby any online store can integrate their catalogue); otherwise you can download and import them from anywhere you can find them, or copy them onto the phone from your PC.
  • Android Agenda Widget
    This is a ridiculously customizable home screen widget for viewing your calendar and tasks. It has support for “styles”, but you can also individually customize just about every aspect of the widget. It also provides widgets in almost every every possible size from 1×1 up to 4×4. It supports the various calendars (Google, HTC, etc.) as well as Astrid and some other tasks app that I can’t remember offhand.
  • AppBrain App Market
    The name is a little misleading: this is not a separate market, but just a way to sync and share your installed apps list, as well as scheduling installs / uninstalls via the web interface (which will be performed the next time you sync using the phone app).
  • Astrid Task/Todo List
    A nifty tasks list manager. You can schedule multiple reminders for tasks, tag them, track expected time / time spent, and sync with Remember The Milk.
  • ASTRO File Manager
    Android does not come with any kind of file manager, although you won’t need one very often since apps tend to avoid explicit file management. Still, there is the occasional need to rename or move a file around; it can also be very useful to transfer files over the network, especially with the SMB module.
  • Barcode Scanner
    Scan a variety of barcodes, including QR codes and UPC / EAN barcodes. Many sites provide download / market links for apps in the form of QR codes; scanning the code from another display is obviously easier than retyping the URL.
  • Dropbox
    Nothing much to this app; it just lets you view / download files you have stored on Dropbox.
  • Evernote
    Create and access your Evernote notes, including geotagging support.
  • Foursquare
    Check in on Foursquare, get alerts when your friends check in nearby, view nearby venues, and search for venues.
  • FoxyRing: Smart Ringtone
    I’m not actually using this app currently, but you may find it useful regardless. The app allows you to adjust your ringtone settings based on ambient noise levels, time of day, and location, as well as overriding them for selected contacts.
  • Glympse
    Unlike Google Latitude, which shares your location to all of your contacts the whole time you have it active, Glympse provides more limited and granular sharing. When you create a “Glympse”, you specify a lifetime (eg. 30 minutes) after which the Glympse expires, and optionally start and destination locations; a unique code is then generated. You can then share the URL by text message or email, or you can post it on Facebook. The recipients can then view your location in realtime, until the Glympse expires, either when the specified time has elapsed, or by you manually expiring it at any time of your choosing.
  • Google Goggles
    This app is described as a “visual search” application. You take a picture of anything, and the application attempts to recognise it. This might mean scanning a barcode / QR code, scanning and OCRing text (which you can then translate or search for), detecting a well-known landmark, a work of art, and more.
  • GPS Status
    A simple app that allows you to visualize the GPS satellites in range, how many satellites you are locked onto, and see other information from the GPS receiver.
  • Kindle for Android
    Amazon’s Kindle application. Great for reading Kindle books, but if you can get them in ePub, rather use Aldiko (see above), as the Kindle app is not nearly as featureful.
  • Nimbuzz
    This is an IM / voice chat app. It has support for Skype, which is useful, as Fring no longer has Skype support, and the official Skype Android app is currently only available to Verizon subscribers through a special deal. It also supports a variety of IM networks, including Facebook, but unfortunately generic Jabber support is no longer available.
  • Real Signal
    A simple app that gives you a configurable cell signal strength meter, as well as allowing you to see the actual numerical signal strength.
  • Remember The Milk
    Only usable by RTM Pro subscribers (although you get a 14-day trial of Pro if you aren’t a subscriber). This lets you sync your RTM tasks to your phone, create tasks on your phone, and includes a widget for displaying tasks. Not strictly necessariy in conjuction with Astrid (see above), but I find it useful for managing additional task views (eg. my shopping list).
  • ScrobbleDroid
    Just what it sounds like: scrobble your music activity to last.fm. Compatible with various music players.
  • Shazam
    Want to know what song is currently playing? Capture an audio sample via the phone’s microphone with this app, and then search their online database to identify the song.
  • Shopper
    This app overlaps with Google Goggles somewhat (see above). You can scan media (DVDs and CDs) or books by barcode or cover image, and then search for them online with Google Shopper; useful for doing some comparative shopping when you’re in a physical store.
  • SpeedView
    A simple speedometer app that uses the GPS to track your speed.
  • TripIt
    Sync your TripIt travel plans to your phone; allows for offline access, so you can get your important travel details even if you can’t get an internet connection from where you are.
  • Wifi Analyzer
    Visualize the wifi networks in range, including the channel and signal strength. Useful for selecting an unused channel for your wifi network, or picking an internet access point.

by mithrandi at 22 July 2010 11:18 PM

Adrianna Pińska (Confluence)

Forever Bubble

Finished all the levels in the default Frozen Bubble levelset? Run out of custom levels from the interwebs? Random levels too boring? Making levels too hard? Sounds like you need Forever Bubble — what I made on Tuesday night instead of working.

Randomly generate pretty levels — for ever! Run it with --help to see all the options. You need the argparse and networkx python modules, and obviously python. It should work on any *NIX. The Frozen Bubble levels directory needs to exist if you want to save there. Patches, ports and comments welcome. If you generate a particularly awesome level, paste it into a comment; maybe I’ll compile a “greatest hits” levelset.

by confluence at 22 July 2010 09:32 AM

13 July 2010

Graham Poulter (verdant)

How to reduce 3G bandwidth usage, and 3G vs ADSL

My new place doesn't have ADSL yet, so I tethered my 3G iPhone to the computer. As a result, this post is about ways to make the computer sip bandwidth instead of guzzle it, and the changing break-even price between 3G and ADSL in South Africa.

Since I'm on MTN I needed to download a special config to enable tethering for the iPhone 3G, which is available from http://wan.to/iphone/.  Here's a how-to for iPhone tethering in Ubuntu.

But 3G bandwidth in South Africa is expensive: R80 for a 100MB MTN bundle (although its cheaper in bulk: R389 for a 2GB MTN bundle). The first time I plugged the phone into Windows the OS grabbed 40MB for updates. After that I did all I could to minimise bandwidth consumption:

Operating System Tweaks
  • Disable automatic download of operating system updates.
  • If using Windows, disable 3rd-parter auto-updaters using CCleaner (disable Flash, Java, Google updaters and any others)
  • Monitor TCP connections to see if any unexpected services are using the internet (lsof -i on linux, TcpView on Windows) and turn them off.
  • In iTunes, turn off update checking and change the default Podcast settings to "check manually" and never automatically download episodes!  That was another 20MB downloaded behind my back...
Firefox Preferences
  • Disable Firefox update and add-on updates.
  • Uncheck the Load images automatically checkbox. Text-only default saves a lot of bandwidth: I'm not going to pay to see sidebar ads.
  • Install FlashBlock and AdBlock Plus add-ons, to prevent downloading random content.
  • Install Firefox User Agent Switcher to pretend to be a mobile browser and get smaller mobile versions of websites.  If pretending to be an iPhone, be aware that Firefox is not compatible with some iPhone-only webapps.  
Google Chrome Options
  • In Options, "Under the bonnet", disable checking for updates, and various things like search-completion and DNS prefetching.
  • In  "Content settings" select "Do not show any images" and "Do not allow any sites to use plug-ins"
  • Start Google Chrome with --user-agent="Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3" to pretend its an iPhone. Chrome uses WebKit and will work with many iPhone webapps.

With this setup I can do searching, mail and news-checking on PC tethered to the phone, without spending hundreds of rands for 3G bandwidth.

The iPhone is faster tethered??

The strangest thing is that iPhone 3G internet suddenly gets fast when I tether it.  Safari on the phone at the same desk takes a while to load a heavy page, but plug the phone into the PC and use the PC browser and everything comes down at 500kbps.  I should double-check.  Does MTN have some way of knowing whether the phone is tethered and making 3G slow for mobile phones but fast when used like a 3G modem?   If so, is there a way for the iPhone to pretend its tethered when its not?

Comparing the cost of ADSL and 3G

A Telkom Closer 2 calling plan (free installation and free off-peak calls) is R170 per month, plus R200 pm for an MWEB All-in-One 2GB ADSL package - total of R370 per month.  That is almost as expensive as adding MTN's 2GB data bundle for R389 assuming an existing contract.  For more than 2GB per month, ADSL will be far cheaper, since R519 will buy the R170 Closer 2 line and R349 MWEB all-in-one uncapped ADSL at 384kbps.

Edit: Added iTunes podcast-disabling, and section on Google Chrome.

by Graham (noreply@blogger.com) at 13 July 2010 07:30 AM

14 June 2010

Jonathan Groll (eyesonly)

Kinesis Advantage Ergonomic Keyboard

Never trust your hands to a generic, sticky old Dell keyboard that you just find on your desk at work. In my case, it took about a month of using that keyboard to develop a case of tendinitis. To be fair this is the second time I’d experienced such a problem; the mouse was partially responsible, and Emacs chording was also contributing it’s share.

Since this was the second time I’d experienced pains in my hands from typing I’d already done my research and knew that I’d want to look at buying a “Kinesis”: http://www.kinesis-ergo.com/ keyboard. The problem was primarily that Kinesis make two very different styles of keyboards – the freestyle which is most similar to a conventional keyboard – with a similar layout except that it is split into two independent halves and the more radical Advantage. The Advantage has two recessed key ‘wells’, and radically has thumb keypads forcing you to make use of your more powerful digits. It was this latter feature that made me order the advantage even though this is an expensive keyboard. Personally I’ve never seen any true ergonomic keyboards (other than Microsoft Natural boards and the like) in real life – they just aren’t sold in South Africa and it costs a lot to have them shipped over here. So I asked around on various forums and newsgroups before committing to the capital outlay. One of the things that I’d never considered when making the choice was the type of keyswitches in the keyboard. In the past I owned an IBM buckling spring keyboard, so I do appreciate the feel of a good keyboard, although quite frankly I found the gentle softness and quietness of cheap membrane PC keyboards to be a relief after the IBM! It turns out that the kinds of keyswitch most highly prized on the geekhack forums are the Cherry (Cherry “Brown” is liked the most by some) and Topre switches. So, reason number two to buy a Kinesis Advantage – it has Cherry Browns. If you’re interested in ordering the same from South Africa bear in mind that it’ll cost you about twice the direct exchange rate once you’ve factored in UPS shipping (obligatory) and customs duties. So anyone who lives in Cape Town and wants to try mine out before buying, I fully understand!

It has been an interesting journey and things I’ve long considered to be true have had to be reviewed. One of these things is about learning to type correctly. My wife, Shira, took the time to learn to type correctly – she bought a typing instructor (Deluxe!) CD-ROM and did all the exercises and games, and the first thing she does is position her fingers correctly on the home row. I’ve been hacking computers for years and have been able to fully touch type without looking down at my fingers since around about the time I took up programming full time. And of course I’ve picked up the same bad typing habits you have, and have never considered it a worthwhile use of time to learn typing per se.

My first experience of the Kinesis is that it felt like being taken straight back to being a complete keyboarding beginner – I was only able to type at a few words per minute at first and the feeling of disorientation was strong. The keyboard ships with a little booklet with typing exercises in it to help you pick up the habit of blind typing again, and spending a couple of evenings following the exercises in the book is sufficient to develop some basic keyboarding confidence again. The main Kinesis manual is clear that during the adaption phase one shouldn’t switch between the Kinesis and conventional keyboards, although after you have adapted you can switch back and forth easily (conventional keyboards do feel cramped after one has become accustomed to the Kinesis, and the staggered arrangement of keys on conventional keyboards mean that typing blind one starts to hit the ‘B’ key accidentally quite a lot again, but this is not so much of a problem). The booklet of typing exercises that is shipped with the keyboard is worthwhile and useful – I gained an appreciation of the logic behind key placement and design and also learned useful things about typing correctly, such as using the opposite hand to press shift when capitalizing a letter.

Some things I’ve noticed:

Using your pinkies. I never learned to use my ‘pinkie’ fingers in typing (possibly because laptop keyboards are compressed and you don’t need to), but I learned that in proper touch typing you will use your weakest digit quite a lot, especially for pressing ‘shift’ and the letter ‘P’ amongst others. Also, it is good typing practice to use the opposite hand for the modifier key, so you don’t scrunch up a single hand and injure it in this way (think of the compression that your left hand experiences if you press ‘Control’ and ‘C’ with this hand on a conventional keyboard).

Split keyboards. If you’re forced to type correctly and use the correct hands and fingers then even a non-ergonomic keyboard is fine. So if you really and truly never cross over your hands when typing you no longer need this feature, but I’m going to need to use a split keyboard with a gap between the left and right group of keys for some time to come. Even after using the Kinesis for a couple of weeks I find that I still try and type ‘T’, ‘G’ and ‘B’ with my right hand occasionally, swapping over is a difficult habit to drop. Here’s a pic of the split keyboards in Webwit’s collection:

(Picture shown with permission. Note that he has arranged the keyboards with his favourites in the front row – and the Kinesis advantage is the black and blue keyboard in the center of the second row from the front, so it is not one of his top picks although little can compete with the datahand in the front center. This is an impressive collection – about the only board that I’ve noticed missing is the smartboard).

Posture and balance – I’ve noticed that I walk up stairs differently after using the Kinesis for a few hours. This is partly because it has forced me to sit upright, although I think using all five fingers for typing is also a factor – the experience of typing on the Kinesis is more like that of a pianist using the whole hand; a greater muscular sensitivity and suppleness is developed by typing on this keyboard – it isn’t necessary to have to bash the keys as the keys register before bottoming out) and this does have a muscular repercussion on a greater level.

Non-staggered key arrangement. Why none of the Kinesis reviews don’t mention this is a mystery for me – this is one of the best selling points of this keyboard. Keys are in vertical rows – for example ‘E’ is directly above ‘D’ – this really does make it easier to type since all you need to remember to do is to move your finger directly upward one key.

Size. Ever so slightly smaller keys on the Kinesis would be nice. Sometimes it does feel like it was designed for someone with slightly bigger hands than mine, and slightly smaller keys and keywells would improve my experience of this board considerably.

Cannot raise the front of the keyboard. Other ergonomic keyboards offer the ability to tilt the front or the back of the keyboard (and I have found that raising the front of such keyboards does help me) but unfortunately the Kinesis does not offer this facility and it is difficult to maintain keyboard stability by propping it up from underneath due to the curved design of the underside.

For alphanumeric entry the Kinesis has become quite comfortable for me and I can hit a decent WPM, but when it comes to hitting ctrl- and alt- and the arrow keys I’ve been struggling. I also mispress ‘enter’ and ‘space’ quite frequently (they are on the same thumb with enter requiring a slighly greater stretch). A large part of the problem is the thumb keypads are elevated above where my hands are while typing. If you look at other ergonomic keyboard designs such as the Maltron (the similarity to the Kinesis is not accidental!) you will notice that the thumb keypads are recessed. Since the Kinesis is fully programmable in firmware you can remap keys however you desire. I have found that placing ‘Alt’ on the bottom of the thumb pads (where ‘end’ and page down’ are normally) has helped me to avoid doing weird contortions with my thumbs, and I’ve also taken care to have an ‘Alt’ key available for both my left and right hands so that I don’t have to scrunch up a single hand.

Certainly, I need to give myself more than a couple of months usage on this keyboard before I can say more about whether I like it or hate it – it has become much easier to use after a couple of weeks, but I do wonder if I’ll ever be able to use this keyboard completely on autopilot where there is not one part of my brain thinking where the alt key lies or how to find the arrow keys. On the other hand, the excellent keyswitches and the non-staggered split design are features that I will always look for on other keyboards in future.

Keyboard buying could easily become an expensive and distracting hobby. Sites like Elite keyboards offer an interesting range of mechanical keyboards, and hardened collectors order custom made keycaps. I’ll almost certainly be ordering a keyboard with Cherry blue keyswitches in the next while, but shipping to South Africa is a major cost and I’m not even sure I’ll like the feel of the keyboard without having access to other enthusiasts in Cape Town who have them on hand to try out. So, if you’re in Cape Town (or Joburg) and have a keyboard with Cherry Blues then please add a comment below.

14 June 2010 09:59 AM

19 April 2010

Graham Poulter (verdant)

The Panasonic Lumix DMC-TZ8/ZS5 "Travel Zoom" Camera

For my trip to Zurich I bought a Panasonic Lumix DMC-ZS5, which was released in March 2010.  Here are my Picasa albums for Zurich and my later trip to Tygerberg Zoo in Cape Town taken with the ZS5/TZ8.

Here are some of the reviews by photographyblogdpreview and Panasonic's product page.  The product page gives a summary of the camera's vital stats and features.  Below are my findings from taking the camera on real-life overseas travel for a week.

On the confusing naming, I think ZS implies "Super Zoom" and TZ means "Travel Zoom".   The  ZS5 is the US camera specially imported by SA Camera, because the European version, the TZ8, is not yet  available in South Africa through the Panasonic distribution channels. The difference is the charger (US vs EU plug) and NTSC vs PAL TV-out.  The charger is a pain in Europe where travel adaptors feature a rim that prevents the US pins on the charger from actually reaching the socket.  Fortunately the lithium battery lasted over 330 photos and a few minutes of movie (Friday to Monday), and only needed 10 minutes of charging at a Zurich camera shop to last the rest of Monday.

The ZS5/TZ8 is also the baby brother of the ZS7/TZ10, the difference being a smaller LCD, lack of RAW recording, lack of AVCHD encoding for hi-def video, and lack of a (power-sucking) GPS to geocode all your photos for you.   Nonetheless the ZS5/TZ8 is a great travel companion: small and lightweight, it's happy to do all the hard thinking for you, and has great zoom for zoo visits, and you can even tell it what time zone and location tag to use for the dates of your trip.   Lastly, the ZS5/TZ8 and ZS7/TZ10 are successor to the ZS3/TZ7 that was released in early 2009.

Most of the time I stick with the iA or "Intelligent Auto" mode, which on half-press will select a scene type (portrait, scenery, action, night portrait etc), detect normal vs macro mode, select ISO rating, shutter speed and aperture, flash mode, picks out the subjects to focus on.  iA mode does have a few parameters including maximum ISO rating, forcing flash-off the resolution / aspect ratio (4:3, 16:9 or 3:2).   If I don't like the settings, I release the button, half-press again and iA will often pick different settings, for example focusing on the zoo animal instead of the cage.   Specifying "ISO-max 400" is handy for auto-mode because the higher ISO levels that it might pick - up to ISO 3200 for a motion-shot in the dark - are too grainy to be of any use.

The zoom is also pretty smart: the zoom toggle maxes out at 12x zoom, but hitting the extended zoom button will let it go up to 16x zoom at a lower resolution (center of CCD), and hitting the button again will digitally zoom to 32x.   Once more goes all the way back to 1x zoom (wide-angle).  The image stabiliser ensures photos are not blurry except if the subject was stationary at half-press (slow shutter selected), but then starts moving after the half-press.  If it is very dark and your hands aren't steady the camera tries to compensate by using the highest ISO and fastest shutter feasible, for a dark and grainy but only slightly blurry photo. If you use a tripod for the night scenery it will select a longer exposure and take a good photo.

I also use the P or "Programmable" often in situations where iA gets it wrong, typically with funny lighting or macro scenes.  I prefer programmable mode to selecting one of the three-dozen specific scene modes. P-mode will still select the shutter, aperture, ISO and auto-focus, but it has a quick-menu to  configure all the scene related settings like exposure, white balance, macro mode, ISO mode (specific ISO or auto+ISO-max) flash mode, auto-focus mode, stabiliser mode and dozens of other settings.  The P mode has an option to record 5 seconds of sound alongside the photo, which is handy for recording captions you would otherwise forget, like plant names.

For special shots I use manual (M), shutter-priority (S) or aperture-priority (A) modes. S-mode has manual shutter speed and auto-aperture, useful for long nigh-time exposures taken with a tripod.  Aperture-priority mode is the opposite and is useful for shallow-field or deep-field shots. Manual mode takes manual shutter, aperture and exposure, but will still do automatic ISO, white balance and such if you let it.

The image quality is fine if you don't let the ISO go above 400.  The small high-density CCD has a lot more per-pixel noise than the small low-megapixel CCD's of older cameras or the large CCDs of the four-thirds DSLRs.  But the noise is mainly noticeable at 1:1 zoom - you don't see it at screen size, scaled down for web albums, or in print.  The movie quality is meh, it's ok provided you pan very slowly, but so far I haven't taken anything worth uploading. 

I do have a reliability complaint, in that the LCD is easily scratched by just one grain of sand.  So do not let the camera anywhere near sand or dirt.  Also, I expect that to sit on the camera or drop it once will be the end of it.  It's also susceptible to humidity, temperature and pressure changes (well, to condensation), so I'm concerned that the dirt and dew found on overnight hikes will bring the camera to an early death if I regularly take hiking.   So far the camera is two weeks in and going strong.

by Graham (noreply@blogger.com) at 19 April 2010 07:46 AM

09 April 2010

Jonathan Endersby (nlt)

Standard Bank, Information Theft and Apathy.

We place our trust in the organisations we deal with on a daily basis. Many of these organisations have access to large amounts of our personal information. We assume that there are systems in place to protect consumers against the theft of that information by staff members. We assume that if a staff member did steal data, that the bank would treat the matter with urgency. We assume that the bank would press charges against the individual and try and recover all the stolen information.

We assume incorrectly.

About two weeks ago I was called by a guy called Riaan Geldenhuys. He is supposedly a financial planner and wanted to meet up to discuss policies etc. I was intrigued as to where he got my details from so I played along and then eventually asked him where he had found my number. His answer was, in context, quite shocking. He was an ex-Standard Bank employee and had a “list” from when he worked at Standard Bank.

If we ignore for a second the absolute idiocy of this guy actually telling me that, I was obviously left wondering what other information he had on me… I told him that I would report him and that I hoped the bank took him to court. He said he was “sorry”.

In a world where information theft is rife, bank fraud (using information theft) is all too common and everyone is legally married to at least two people they’ve never met, I would have thought that my reporting of this matter to the bank would have resulted in an urgent phone call from the fraud division, asking me for all the information and then a subsequent call a few days later telling me that this Riaan guy was going to court. But no. Typical of their lackadaisical concern for our privacy, the banks auto-responded and then a week later told me they were “looking into the matter”. I let them know that “looking into the matter” wasn’t good enough for me… I wanted to know that at the very least my, and their other customer’s, stolen information had been retrieved. Another week goes by and still, nothing but auto-responders and “we’re looking into it”s.

Eventually, in an incredibly bitter fit of resentment I succumbed and wrote about the issue on HelloPeter, a site I usually avoid because of their reputation of extorting businesses who can’t afford to pay to defend themselves.

Surprise, in a few hours I had a phone call. Now I was told I needed to go into a branch and fill in a form. When I made it clear that the chances of me doing so were similar to, well, just about anything very very unlikely, they then realised that they didn’t actually need me to go into the branch… With promises of swift action I wrote another long email, detailing the entire saga and hoping that it would finally result in some form of action.

Then this morning I am asked to email them either my bank account number or my ID number. The irony of me sending either over unencrypted email to the very bank that breached that information in the first place seemed to be lost on this new individual I was dealing with. Never mind the fact that I had given Standard Bank my account number numerous times, and never mind the fact that I am the only Jonathan Endersby in the country and never mind that really, my bank account has nothing to do with them investigating this Riaan Geldenhuys guy because lets face it, their internal audit logs are obviously quite sloppy, so assuming that they would specifically find detail that Riaan Geldenhuis had looked at my account is, well, optimistic.

To complicate (or obscure) matters, the bank (or at least Clinton who works in their Fraud Division) insists that the only way that anyone would have gotten access to my information would have been via an auditable system which has logs. I explained the retardedness of that statement, detailing how the emails I’ve sent with my information were obviously not tracked because they are apparently lost. Next I asked whether all their email is also linked to this magical system, because I’ve worked in a few banks and I know that the sales teams are big fans of Excel spreadsheets generated the Sales Manager and then emailed to pretty much everyone, including the tea-ambassadorial staff (corporate refreshment executives?). I suspect it is probably one of these lists that was stolen. Anyway, according to SBSA, if they can’t find access logs for Riaan Geldenhuys, “there is nothing we can do”.

Clinton also said that he was looking into whether Riaan Geldenhuys, financial planner guy, was ever employed by Standard Bank. He said they were investigating whether he was ever employed by Standard Bank by speaking to the division he worked in. Yes, that is exactly what he said. I almost shat my pants thinking that this guy is investigating fraud for Standard Bank. I’d like to assume he simply meant that they were speaking to HR, but I have suspicions.

To cut a long story short, I’ve lost hope that the bank will ever take this matter seriously and pretty much assuming that they have better things to do, like close at 3pm, than investigate information theft… I mean, it’s possibly only my id number, salary, home address, mother’s maiden name, signature, phone numbers, previous places of employment, information about the various insurance companies I use, who I invest with, previous addresses and all the account numbers for the various services I use…. I mean, you can’t do much with that information, can you?

by arbitraryuser at 09 April 2010 09:10 AM

02 April 2010

Graham Poulter (verdant)

Google Maps South Africa launches new features for 2010

Today Jaroslav Bengl, the Business Product Manager for Google Switzerland GmbH, presented a developer overview of Google Maps features released in South Africa just yesterday.

As of yesterday, the South African Google Maps has driving directions, reverse geocoding ("what is near this coordinate"), and overlays for terrain elevation, photos, Wikipedia, Panoramio, and public transit routes. Google Street View cars are surveying Johannesburg, Cape Town, Durban, Pretoria and East London - and the street view should be ready before the World Cup.
Here is a view of the Koeberg Interchange which now has directional arrows used by the route finders:

All the effort is indeed in preparation for the World Cup, for the sake of all the tourists who have become accustomed to driving directions and complete road networks in the Google Maps of their own countries. Jaroslav says South Africa is getting driving directions and street view ahead of even some European countries and cities.

Google no doubt is paying a lot of license money for access to complete and up-to-date road network data, and we have the Fifa 2010 World Cup to thank for pushing us up the list of priorities.  However, for the last few years as a Google Maps backwater, there were some people working to fill in the SA road networks and directions, namely the GPS-equipped volunteers at OpenStreetMap, who even took the trouble to mark on OpenStreetMap the changes to the Koeberg Interchange that are under construction:


On the Google Maps API side of things, the geocoding API (address->latitude/longitude) is now also available in South Africa, and the search box supports mixed languages: searching for "cape town ショッピング" where the second word is Japanese for "shopping" works as expected. However, "레스토랑 cape town" where the first word is Korean for "restaurant" brings up hotels instead.   There are many APIs for overlaying your own data on Google Maps, for example using a public KML feed. The terms of service require in any case that apps using the free Google Maps API themselves be free and open to the public.

by Graham (noreply@blogger.com) at 02 April 2010 08:33 AM

31 March 2010

Jonathan Endersby (nlt)

There is no spoon – The challenge of unlimited bandwidth in a limited world.

Change is constant. With increased international capacity it was inevitable that ISPs would eventually enter a price war. It was MWEB, a traditionally not-so-forward-thinking ISP, who shot first.

Uncapped internet for a price that didn’t seem insane – Terms and Conditions apply... It didn’t take long (a few minutes actually) before the nerds were frothing at the mouth over what seemed to be overly-burdensome (and in some cases just-plain-stupid) regulations. Rules like “No unattended downloading” being one of them… while in principle most people understood the ethos, the unfortunate reality is that rules shouldn’t be _made_ to be broken… and telling an old granny she can’t go make a cup of tea while her email downloads is simply not intelligent.

The problem is simple. Internet Service Providers have a limited resource and they are selling it on as an unlimited resource… It’s the all-you-can-eat ribs special, only in a digital world, where the limit to how much you can eat is simply a question of how big your hard drive is.

Most of the nerdosphere understood that ISP’s would have to enforce some limitations, and in fact, most ISPs worldwide have some form of Acceptable Usage Policy. The difference being that the kind of numbers that constitute abuse are generally in the range of hundreds of gigabytes/terabytes per month, and then only after consecutive months of “abuse”.

The problem in SA is that the business model is really hard to get right because it revolves around a number of unknowns:
1. What can we offer that’s good enough to a) Attract customers. b) Be called uncapped. c) Not piss off the nerdosphere. ?
2. How many customers can we sell this to?
3. What will the average usage of those customers be? (Ubernerds download a lot more than your Granny)
4. If we scale up operations because of a surge of new customers, how can we be sure those customers will hang around to support the increased running costs?

Additionally, ISPs are obviously terrified to not enter the market because not having an uncapped option will inevitably mean losing pretty much every customer who isn’t living under a rock.

So, possibly with a fair dose of fear and trepidation, a number of other ISPs quickly entered the market with their own offerings, all clambering to try and get that business model right.

Some ISPs even appear to have decided to start selling the product before they figured out what that business model would be. A bold move that cost the likes of Afrihost a fair amount of pain when they realised they needed to implement a soft cap (they call it something else) at 60gb. That 60gb number wasn’t anywhere on their website because it appears to have not existed when they launched… it was only after seeing the real usage numbers that they realised they needed to implement some additional limits. (After downloading 60gb your connection is throttled, and then once you hit 120 it’s throttled further etc etc)

So we come to what is really the crux of this debate. What is uncapped? Currently the uncapped market is unregulated and very unstable. The rules are changing on an almost daily basis and pretty much anyone can offer anything and call it uncapped. Someone could have a product that calls itself “uncapped” but that limits you to 1kbps after the first megabyte. This is not good for consumers.

The market is in need of a lot more transparency or a regulator. There are really only two groups that could play the role of regulator: The Advertising Standards Association and the Internet Service Providers Association. I’m ignoring ICASA for obvious, incompetent and toothless, reasons.

The ASA unfortunately doesn’t have the knowledge to regulate such a highly complex industry and any attempts to do so would probably have very negative effects for all involved.

ISPA on the other hand does have the know-how but hasn’t publicly said anything about the matter. All of the ISPs currently offering Uncapped ADSL are ISPA members. I think the only reasonable solution is for ISPA to get a bunch of its members together and lock them in a room until they can all agree on what the minimum provision for an uncapped account should be. This would need to be measurable limits and not warm-and-fluffy, open to interpretation, language. They may even decide that calling these sorts of accounts “uncapped” is dishonest, perhaps it should just be called something like “Managed Cap 60″ etc.

I look forward to the day that we have true uncapped internet in this country and I salute those ISPs who are trying their best to bring us closer to true uncapped internet. They are brave businesses operating in an increasingly brutal space.

Most importantly we need the ISPs to be honest about what they’re selling. If they’re selling something that has graduated throttling (like Afrihost is doing) they need to say so before they take the customers money. Afrihost doesn’t currently say this on their website, but their CEO has published (very bravely and honestly) the planned (and he understandably pointed out that it was plan that might change) approach on the mybroadband forums. I’m sure that this info will make it onto their website as soon as the dust settles.

Publishing the exact structure/behaviour of their uncapped product is a brave move that hopefully will force other ISPs to do the same. It’s only when all ISPs are showing their hands that consumers will be able to make an informed decision.

by arbitraryuser at 31 March 2010 08:21 AM

10 March 2010

Michael Gorven (cocooncrash)

Ibid finally released!

After over a year of development, we have finally released Ibid. Ibid is a general purpose chat bot written in Python. We've suffered from a bit of feature creep, so despite being a 0.1 release it can talk 7 messaging protocols and has over 100 features provided by plugins. I think we also have an excellent architecture and very developer friendly plugin API. The 0.1.0 release can be downloaded from Launchpad or installed from our PPA.

by mgorven at 10 March 2010 10:08 AM

05 February 2010

Morgan Collett (morgs)

Betavine Cape Town Developer Day 2010

I used to work for OLPC, whose mission is to distribute low cost laptops for education, without necessarily the connectivity with the outside world. Now at Praekelt we’re focusing on using connectivity as the power – harnessing the deployed base of mobile phones in Africa without requiring them to be smartphones or computing devices. As part of this Praekelt Foundation and Vodacom are hosting the Betavine Social Exchange Cape Town Developer Day 2010.

I’ve asked Steve Wolak to tell us more about Betavine and the event.

Who is Steve Wolak?

Stephen Wolak, Founder and Head of Betavine, has worked in mobile technology and software since graduating from Imperial College, London. Stephen joined Vodafone Group R&D in 2000 and in 2006 put forward the idea of an open platform for engaging the wider technology community with R&D activities.  The rest, as they say, is history.

MC: I first became aware of Betavine when looking for 3G drivers for Linux, but I’m sure there is more to it than that. What is Betavine and how did it start?

SW: Betavine was launched in January 2007 and has been evolving ever since, with new features being added in response to new requirements and feedback from the user base.  One area of success has been the linux software for the Vodafone Mobile Connect (VMC) card which has been downloaded over 750,000 times and has created a lively community around it.

We have also run a number of successful competitions on the website and created a lively Widget Zone. The website continues to evolve and we try out new things.

MC: What is the Betavine Social Exchange?

SW: This is our latest idea.. creating “social and sustainable” mobile solutions.  The Betavine Social Exchange seeks to bring together 3 communities; the mobile community, the social sector and the entrepreuners.  Together these communities can create mobile solutions for the social sector.  Community organisations create challenges on the website and mobile developers / social entrepreneurs create solutions. The website then supports the deployment of these solutions on the ground.

MC: The BSX’s success certainly depends on connecting the right people: those with needs – the NGOs and community organisations – and the developers. How do you publicise the BSX to reach them?

SW: We are running our pilot in South Africa and so we are working with Sangonet to help us get in touch with South African NGOs.  We are running a developer day in Cape Town to help us engage with the local developer community.

MC: What do the resulting solutions include – are they apps for mobile phones, mobi websites, SMS solutions or all of the above?

SW: All of the above.  It is important that the solution is appropriate for the challenge and the local community that will ultimately use the solution.

MC: What can developers expect from participating in the BSX?

SW: They can find real world challenges that people are seeking solutions to.  They can meet other developers and find useful resources to help them create a business.  The full resources section is coming soon.

MC: Which leads us on to the Developer Day being hosted in Cape Town next month. What’s going to be happening at the event, and how does it tie in with the BSX?

SW: We are keen to encourage mobile developers based in South Africa to engage with the real challenges that have been posted on the Betavine Social Exchange.  The developer day will include presentations on mobile technology and some exciting mobile solutions plus a developer competition and lots of creative energy and networking.

MC: You’re going to be speaking at the event. Who would you like to see there?

SW: I would like to see mobile developers plus those with design skills and a passion for using mobile technology for social change.

MC: We’re having a developer competition on the day. Can you tell us anything about the prizes/incentives you’re planning to bring?

SW: Well, the developer day is free and includes lots of food and drink plus some beer at the end of the day … :-)  We also intend to offer a few prizes for the competition winners .. But we have not decided exactly what yet.  You will have to come along and see but tickets are going fast!

Developer Day details

Date: Wednesday, March 10, 2010 from 9:30 AM – 7:00 PM

Location: The Lightbox Daylight Studio, Green Point, Cape Town

More information and free tickets are available at eventbrite. Due to the demand, the event has been expanded to 70 people.


by Morgan at 05 February 2010 12:13 PM

03 February 2010

Jonathan Groll (eyesonly)

Crapple "release" the iPoo

CUPOOTINO, California. Steven Jobless, CEO of Crapple Corp, announced his company’s long awaited tablet form-factor machine last Wednesday. Whilst sequestered in the backwoods of Tennessee last year, Mr Jobless spent a lot of time waiting for medical test results and considering the meaning of life. Whereupon he had what he described as a “number 1 experience”. It hit him – the perfect Captive Market. The new product, marketed as the iPoo is of the ideal form factor for use whilst positioned on the lavatory. Unlike the early tablet products produced by their competitors, the iPoo is not a fully fledged compooter, but follows the Jeff Raskin school of thought on what constitutes a suitable “Intuitive Interface” for the average user.

Marketing of the new product is intended to involve heavy use of anti-social media – each geek on the planet is forced into deciding whether they would buy the device or not. Since most of them think it’ll be shit, it’ll count as a ringing endorsement for the non-tech savvy public. It seems that the geek public is waiting for the next shitteration of the device.

Taking full advantage of the DRM the product provides, it comes in two models. The slightly more expensive option, “Comes with Porn” (seemingly aimed at competitor Noklue) unlocks DRM for porn on the device, and also uses a new technology known only as “3D-multitouch” (details not yet provided at time of going to press).

We spent some time after the media announcement assessing the mood amongst the company faithful, and by and large that mood was one of “Relief”. Reaction amongst the Linux community was less positive, with comments ranging from “We invented Brown” (Ubuntu’s Mark Shuttleworth), “We invented shit-casting” (Communitization manager, Jono Bacon) to “It’s Crap” (Fabian Scherschel, from the Linuxoutlaws).

03 February 2010 12:59 PM

23 November 2009

Adrianna Pińska (Confluence)

Unserious post is unserious

There’s too much Serious Business on my front page! Something must be done.

You should buy Machinarium; it is an awesome indie point-and-click adventure game about robots. It has really pretty art, and versions for Windows, Mac and Linux. (It’s written in flash, and the standalone flash player for Linux is really grotty, but everything worked for me after I followed some helpful instructions on the forum. Run the executable with G_SLICE=always-malloc … to prevent random segfaults, and turn off full screen mode straight away or mouse control will go wonky.) You can play a demo at the site to see if you like it. The full version is a 350MB download. It’s only $20 for at least a day’s worth of playing (if you’re the kind of person who will stay up until 4AM obsessively trying to finish it), and comes with absolutely no DRM — which I think is worth supporting.

by confluence at 23 November 2009 08:39 AM

10 October 2009

Adrianna Pińska (Confluence)

Better late than never

I’m about to upload my photos of our Dragonfire LARP, which happened only two months ago. This is still less laggy than Hodgestar’s birthday party. In order to upload the photos I am upgrading digikam, so that I can use a non-faily flickr upload plugin. In order to upgrade digikam I need to upgrade the rest of KDE from the kubuntu-backports PPA — this is currently chugging away in the background.

I have embarked on an epic sewing project — making myself and Hodgestar medieval Japanese outfits for Here Be Dragons, the annual SCA away weekend event which is about a month away. I’m making this (except with a maroon hakama because the shop had no red linen) and this kind of thing (except black, because that’s the colour of the hakama Hodgestar already has).

The nice thing about Japanese clothing is that it’s mostly a whole lot of rectangles. The only tricky part of the kimono-type garment is the collar. I think I’ve been having problems because my seams are tiny and all the instructions on the interwebs assume that you’re going to leave enormous seam allowances — so my collars are too wide and too high up on the body and need to be re-sewn. I need to test this theory out on the two very nearly finished kosode I’ve just made. The reason I’m writing a rambly blog post and not sewing right now is that V:TES players have taken over the lounge table.

After a very long wait, my kalahari.net book order arrived, and here is my loot:

  • The Never Ending Sacrifice by Una McCormack — it’s a DS9 tie-in novel; don’t judge me. I first read Una McCormack’s fanfiction during one of my previous love affairs with Deep Space Nine, and her pro fiction is just as good. This is a stand-alone story about a minor canon character.
  • Worlds of Star Trek Deep Space Nine: Cardassia and Andor (purchased for the Cardassia half, also by Una McCormack; I’m leaving the other half for later) — also good, but (obviously) shorter.
  • Kimono: Fashioning Culture by Lisa Dalby — a well-regarded reference book about the history of kimono.
  • Seed to Harvest by Octavia E. Butler — a collected edition of the entire Patternist series, except for one instalment Butler really didn’t like. Haven’t read it yet.
  • Stars in My Pocket Like Grains of Sand by Samuel R. Delany — currently reading. It’s slow going, because of the unusual language, but I’m enjoying it.
  • Zombies Calling by Faith Erin Hicks — a fun, short zombie comic. Not much to the plot, but I really like Hicks’ art. (If she sounds familiar, it’s because she did Demonology 101.)

Recently discovered webcomics:

The upgrade has become unexpectedly exciting — I’ve hit some kind of packaging bug. I guess the photos will have to wait a bit longer. :/

by confluence at 10 October 2009 01:03 PM

15 September 2009

Jonathan Endersby (nlt)

Quick and Simple Server SMTP

I have a number of servers that I look after in various places on the intertubes. I like to have things like MDADM (Linux software RAID manager) be able to mail me when the something goes wrong like a disk dies etc.

Some of these machines are in places without reliable SMTP servers for me to send mail through and I’ve tried running my own postfix and delivering the mail directly, but invariably I run into situations where the servers that I’m trying to deliver mail to don’t like DSL IPs… and not getting a mail about a dead disk is kinda a big issue.

I also don’t trust a lot of ISP’s SMTP, and some of my servers move around, so one day it’ll be behind a DSL IP and the next behind a Verizon IP (where it can’t talk to smtp.dslprovider.net etc).

My solution is quite simple, use google. (This guide is for Ubuntu but I’m sure you’ll figure it out with other distros)

  1. Create a gmail account for monitoring. I do this because I don’t want my gmail password floating around in plaintext on various machines.
  2. Install the ca-certificates package

    $ sudo aptitude install ca-certificates
    $ sudo update-ca-certificates

  3. Install msmtp

    $ sudo apt-get install msmtp

  4. Configure msmtp

    $ sudo vim /etc/msmtprc

    Set it to something like

    account gmail
    host smtp.gmail.com
    from myemailaddress@gmail.com
    auth on
    tls on
    tls_trust_file /etc/ssl/certs/ca-certificates.crt
    user notifyemailaddress@gmail.com
    password mys3cr3tp455w0rd
    port 587

    account default : gmail

  5. Create a sendmail simlink

    $ sudo ln -s /usr/bin/msmtp /usr/sbin/sendmail

  6. Run a test

    $ echo “This is a an awesome test email” | msmtp youremail@domain.com

  7. If you want mdadm to mail you when something goes wrong

    $ sudo vim /etc/mdadm/mdadm.conf

    and put your email address on the line that reads something like

    MAILADDR youremail@domain.com

  8. And then run a mdadm test by running

    $ sudo mdadm –monitor –scan –test –oneshot

  9. If everything is working according to plan you should receive an email. You can now rest assured that any future MDADM issues will get to you.

by arbitraryuser at 15 September 2009 09:00 PM

18 June 2009

Michael Gorven (cocooncrash)

SuperGenPass for cellphones and the command line

SuperGenPass and Password Composer are password generators, which generate different passwords for each site you use based on a single master password. This gives you the convenience of only remembering one password as well as the security of using different (and strong) passwords for each site. This means that you won't have all your accounts compromised when1 one of them is compromised.

Most password generators are implemented as browser extensions or bookmarklets, since they are most frequently needed in a web browser. I've been wanting to start using a password generator, but I wanted to be sure that I could access my accounts even if I didn't have a web browser accessible. The two situations I could think of were a command line only system (e.g. SSH) and my cellphone2.

Surprisingly, I couldn't find a command line implementation of SuperGenPass, so I wrote one in Python. I also couldn't find any J2ME or Symbian implementations, and so wrote my own one in J2ME. They both support subdomain stripping and configurable password lengths. They don't support salted passwords.

I chose SuperGenPass over Password Composer because it uses a better scheme. Password Composer only uses hex characters, whereas SuperGenPass uses a base64 encoded hash. SuperGenPass also hashes the password multiple times (which would slow down a brute force attack to find the master password) and imposes complexity requirements on the generated password (which reduces the chances that the generated password can be brute forced).


  1. "When", not "if". 

  2. Although my phone's browser does support JavaScript, the JavaScript MD5 implementation commonly used by password generators doesn't work correctly on it. 

by mgorven at 18 June 2009 04:17 PM

13 May 2009

Morgan Collett (morgs)

Ubuntu Server: Versioning /etc with etckeeper rocks!

Deploying a new server at work – a dedicated server hosted at Hetzner. Fortunately Jaunty (Ubuntu 9.04) was released before we had anything hosted on the machine, so I took the decision to upgrade it before we do serious deployment.

One of the shiny new features of Ubuntu Server 9.04 is etckeeper, documented here by Thierry Carrez. In particular, on 9.04 etckeeper plays well with bzr and shows the real user who typed “sudo etckeeper commit” in the bzr log, not just “root”.

As we have a (small but distributed) team adminning the server, this will help a great deal to keep track of who did what when.


by Morgan at 13 May 2009 07:43 PM

23 April 2009

Morgan Collett (morgs)

Surviving an Ubuntu Release Day

Some observations on the last n releases:

Throughout the Ubuntu development cycle, there are daily “snapshot” CD images produced. If you’re fortunate to live in a country where most of the “broadband” online population are not capped at 1GB per month (and a presidential hopeful who doesn’t keep singing “bring me my machine gun“) then you can download these during the development cycle to boot (daily-live) or install (perhaps in a virtual machine) to check on the progress or help with testing. These culminate in the actual “gold” release image.

Therefore, if you have one of these images from near the end of the development cycle, such as the release candidate, you can rsync to the latest image available on release day, and that will download the differences between the iso you have, and the final daily image – which will be identical to the release image, even though the daily image will be named something like jaunty-desktop-i386.iso and the corresponding release image named ubuntu-9.04-desktop-i386.iso. Rename it, and you’re done!

(Check the MD5SUMS after the release is announced, to be 100% sure you have it. There is always a small chance of a change to the ISOs on release day if some major “ate all my data” bug is found – so if you do have problems, remember that it comes with no warranty…)

Now, for kicks, go and lurk on IRC in #ubuntu-release-party and watch the masses rocking up to ask “Is it out yet?” Note Alan Pope’s list of Things Not To Say, and don’t go gloating that you have it already – you’ll only be kicked from the channel by the ironically named partybot.

Instead, burn write it to a USB stick (CDs are so early 2008) and get installing!


by Morgan at 23 April 2009 06:46 PM

13 April 2009

Michael Gorven (cocooncrash)

Serving static files without file extensions using Lighttpd and Lua

URLs shouldn't really contain file extensions (like .html, .png) since they are supposed to identify a resource and not a particular representation/format thereof. The format is indicated by the Content-Type header sent in the response. Modern CMSs do this already (for example, the URL of this page doesn't include .html).

Doing the same for static files (i.e. files served directly by the webserver) isn't straightforward because most webservers use the file extension to determine the MIME type to send in the Content-Type header. This means that simply removing the file extension from the filename (or even creating a symlink without a file extension) will cause the webserver to send the wrong Content-Type header.

I decided to try find a solution to this for my webserver of choice, Lighttpd. Lighttpd has a module which embeds a Lua interpreter and allows you to write scripts which modify (or even handle) requests. So I wrote a script which searches the directory for files with the same name as requested but with an extension. This means that any file can be accessed with the file extension removed from the URL while still having the correct Content-Type.

The script currently chooses the first matching file, which means that having multiple files with the same name but different extensions doesn't do anything useful. The proper method however is to actually do content negotiation, which chooses the format based on the preferences indicated by the HTTP client in the Accept header.

To use this script, download it and save it somewhere (I use /etc/lighttpd/). Enable mod_magnet, and add the following line to the site definition.

magnet.attract-physical-path-to = ("/etc/lighttpd/extension.lua")

by mgorven at 13 April 2009 03:39 PM

30 November 2008

Bradley Whittington (D-Arb)

Syncing your S60

Recently I upgraded my phone to a Nokia N81. I set up my Zyb account, and sync'd my contacts, and realised that I could not schedule syncs like I had with my SE w810i. Until this morning, when Russell pointed out on IRC that there was a tool for that exact thing: Swim is a utility for automatic periodic synchronization of data with internet servers. It is part of the opensource project called Bergemot. The only hurdle is that you have to get the SIS file signed by the Open Signed Online and when you install it you are presented with a warning that your phone may turn into a lump of metal because you are using Software In Development. Works fine for me though.

by brad at 30 November 2008 10:16 PM

22 November 2008

Bradley Whittington (D-Arb)

Telkom is awesome.

In a week we are moving houses. We have a list of things that need to be sorted before we move. So, one of the things on the list is moving our phone line/ADSL. I have a one price ADSL from cybersmart so I can take advantage of their Night Rider plan. Little did I know, paying for our ADSL portion from another supplier was something Telkom Just Couldn't Handle during a transfer.

I phoned Telkom's 10219 number, and was told I needed to call a random number to have the transfer done, because there was an ADSL linked to it. So we tried the cybersmart route. Mandy phoned and asked if we could have the line moved. Cybersmart wasn't so sure. So, we tried Telkom again. After some lengthly discussions Telkom came back with the point that the ISP has to initiate the move. So, back to cybersmart. This time cybersmart was helpful, and said I just needed to fax them my details and request, and they could go ahead, provided they had my signature. Cybersmart phoned back a few days later to tell me the fax was quite light, so they couldn't make out much. After chatting to the very helpful cybersmarter, she said she could transfer the ADSL portion back to Telkom, and then I could handle the transfer, and once it was complete Cybersmart could migrate the line back. Convoluted, but Telkom understandable. Took a few days, but today the migration went through, and round 2 started.

I phoned Telkom, and the very helpful call centre person started to sort me out. No charges, just time. I thought I was on the home run. Then I pointed out that the line had an ADSL on it, and I wouldn't mind having the number changed. Apparently it costs R543.23 to transfer an ADSL line between premises. WHAT? But, doing a self-install of ADSL costs R0.00. So, after some protracted negotiations, the path became clear:

Cancel my ADSL portion ("downgrade" my line), transfer to the new premises (and because there is no ADSL associated I can roll in a phone number change), once the line is active in the new house, then I can re-initiate the ADSL portion for free. WOW.

It's like peeling layers off an onion, and then putting the onion back together. Through all of this the call centre people were lank nice and helpful, but the system gets me down.

Just to re-cap, to have ADSL and a phone line moved to my new house (which is about 1km away from my old one) I have to:
Instruct Cybersmart to migrate my ADSL back to Telkom, Ask Telkom to cancel my ADSL, Ask Telkom to move my phone line to my new house, Wait for the new line, Ask Telkom to "upgrade" my line to include ADSL, transfer the ADSL back to Cybersmart. Awesome system guys.

by brad at 22 November 2008 03:57 AM

10 October 2008

Bradley Whittington (D-Arb)

Responsible reporting (or, sorry for being a doos, ClickThinking)

Yesterday I posted about how a local web company recently sold the work of a well known, local, independent web professional. What they did broke netiquette, ethics, and definitely copyright law. Much geek froth and outrage occurred, and a tiny storm broke out on the internet. I jumped on the bandwagon with my post because:

  1. I have SIWOTI syndrome
  2. Content climbs higher on google when lots of reputable sources link to what is considered to be definitive text. Whijo is considered to be somewhat of a reputable source by google, and because I use the best CMS on the internet google likes reading what I am writing, so I wanted to contribute to improving Coda's rank on google for this subject
  3. My goal is to improve the quality of the South African web, and improvement/evolution comes when the economy/environment favours better products, and denounces poor product. I denounced poor product

The only problem is that sometimes success quickly exceeds expectation, and in this case, after google crawled whijo.net, my article (then entitled 'Do not use the services of ClickThinking') landed on the first page of results. Coda's much more democratic 'What were you thinking, ClickThinking?' reached higher on the first page of results, as it should have. So, geek-google-penis aside, the weight of what I had done (measured in the internet based ISO standard of LOLCATS, or Lc) struck me. I know it is all a storm in a tea cup, but a post with a title as venomous as that sticks around, and ultimately may take business from them (and I am in no position to decide if their poor form deserves to take business away from them). I had behaved like a Journalist (well, one who didn't do too well in the media and ethics course). I thought up a catchy headline, and published it with a self-congratulatory click. I guess it comes back to thinking before doing, and not being a turd on the internet. So I changed the title, and when the site is re-crawled it will have a new title which is a lot closer to the heart of the matter at hand, and a lot less sensationalist.

Sometimes my powerful Sense For Injustice conspires with my Sense For Bad Web Development, and I peak too soon, type before I think, and end up looking childish, and not accomplishing my goals. I am usually calm and rational, but some things short circuit over that calm, rational, ethical brain. So, in summation, I apologise to ClickThinking for going too far off the handle, but I still deplore what they did.

As an aside, should I really be able to get into the first page of results on google for a company that just won a web analytics award?

by brad at 10 October 2008 01:23 AM