Paul Robichaux considered harmful

Posted on August 10th, 2009 by whinger. Filed under Tech.

Paul Robichaux is (I’m sure) a well-respected MVP. I’ve no issue with either MVPs, him in particular or indeed Microsoft. I use a number of MS products, I’ve been (in days when I wasn’t a php-whore) an MSDN-subscribing developer and I’ve made my living in no small way thanks to a number of their products; as such I’d like to make clear that I’m neither a raving loony free-software fanatic nor a MS hater.

However Paul’s rant against z-push seemed so inflammatory and given that the existing comments displayed the most moronic and ignorant attitudes of the free-software community, I felt obliged to post a more measured comment to his site myself for some balance.

It’s been a good few days now and the comment hasn’t appeared. I’m not drawing any conclusions from that yet; however I thought I’d post the essence of what I said here (I don’t have the original text because I submitted it to Paul’s site, which probably makes it his copyright anyway!)

The problem I have with Paul’s position is that it’s disingenuous. No-one really wants to “steal” (as he puts it) MS’ synch protococol, because being able to synch my contacts (which probably change once a week if that) or even my calendar (admittedly slightly more useful) in real time without plugging my phone into my laptop (ooh what a hardship) isn’t a big sell. What they do want is to get their phones to pick up email quickly and cheaply (preferably at approaching zero-cost) without using a huge amount of battery power. There are a number of ways to do this – the cheapest and simplest being IMAP IDLE, which holds a connection open to the IMAP server and waits until the server says “here, I’ve got a new email” (pretty much the same as MS’ “innovative” product does, in fact 🙂 ).

The problem with this is that MS’ phones don’t support IMAP IDLE, despite the openness of the protocol, the wide support for it across almost all IMAP servers and the fact that their own users have been crying out for it for years. Why don’t they? Perhaps because (up until recently) the only way to get instant email on an MS phone (apart from the exorbitant blackberry) was to pay for Exchange. That sounds remarkably like abuse of their market position to me.

I also find it intriguing that Apple decided not to support IDLE either, when they licensed the Activesync protocol. Coincidence?

So here’s a deal Paul. Get MS to support IMAP IDLE natively in their phone’s email client and I’ll stop using z-push in a heartbeat. And if you can get Apple to do it I bet a fair few more of its users would too.

Tags: , , .

Another decent full-tilt read

Posted on August 5th, 2009 by whinger. Filed under Poker.

The gist of this full-tilt post from Jay Greenspan is fairly simple: if you can’t decide whether to fold or raise, calling should not be the default action.

Simple, but very well put.

In these cases, the call isn’t a strategic choice; it’s a sort of compromise between raise and fold that has none of the advantages

It’s something I’ve found in my own game is a great way of leaking chips – calling on the flop when I’m not sure where I am – because (unless the turn hits me in a big way) I still won’t know where I am.

Tags: .

uudecode implemented entirely in bash

Posted on July 31st, 2009 by whinger. Filed under Tech.

With the internet being full of silly but interesting things I would have thought this would be an easy find but I couldn’t find it anywhere – a couple of people asking about it with some vague bits of code here and there but most of the time people would say something dumb like “use (awk|perl|uudecode)”

Not because I think it’s particularly useful or sensible (it certainly isn’t that, since it takes around 200 times as long as the C version!) but just to see if it were possible, here’s my bash uudecode implementation.

while read -rs t ; do
  if [ $bs -eq 1 ] ; then
    if [ "a$t" = "aend" ] ; then
      i=($(printf "%d " "'${t:0:1}" "'${t:1:1}" "'${t:2:1}" "'${t:3:1}" "'${t:4:1}" "'${t:5:1}" "'${t:6:1}" "'${t:7:1}" "'${t:8:1}" "'${t:9:1}" "'${t:10:1}" "'${t:11:1}" "'${t:12:1}" "'${t:13:1}" "'${t:14:1}" "'${t:15:1}" "'${t:16:1}" "'${t:17:1}" "'${t:18:1}" "'${t:19:1}" "'${t:20:1}" "'${t:21:1}" "'${t:22:1}" "'${t:23:1}" "'${t:24:1}" "'${t:25:1}" "'${t:26:1}" "'${t:27:1}" "'${t:28:1}" "'${t:29:1}" "'${t:30:1}" "'${t:31:1}" "'${t:32:1}" "'${t:33:1}" "'${t:34:1}" "'${t:35:1}" "'${t:36:1}" "'${t:37:1}" "'${t:38:1}" "'${t:39:1}" "'${t:40:1}" "'${t:41:1}" "'${t:42:1}" "'${t:43:1}" "'${t:44:1}" "'${t:45:1}" "'${t:46:1}" "'${t:47:1}" "'${t:48:1}" "'${t:49:1}" "'${t:50:1}" "'${t:51:1}" "'${t:52:1}" "'${t:53:1}" "'${t:54:1}" "'${t:55:1}" "'${t:56:1}" "'${t:57:1}" "'${t:58:1}" "'${t:59:1}" "'${t:60:1}"))
      l=$[${i[0]} -32 & 63 ]
      while [ $l -gt 0 ] ; do
        i0=$[${i[$[x++]]} -32 & 63]
        i1=$[${i[$[x++]]} -32 & 63]
        i2=$[${i[$[x++]]} -32 & 63]
        i3=$[${i[$[x++]]} -32 & 63]
        if [ $l -gt 2 ] ; then
          echo -ne "\0$[$i0 >> 4]$[$i0 >> 1 & 7]$[$i0 << 2 & 4 | $i1 >> 4]\0$[$i1 >> 2 & 3]$[$i1 << 1 & 6 | $i2 >> 5]$[$i2 >> 2 & 7]\0$[$i2 & 3]$[$i3 >> 3 & 7]$[$i3 & 7]"
        elif [ $l -eq 2 ] ; then
          echo -ne "\0$[$i0 >> 4]$[$i0 >> 1 & 7]$[$i0 << 2 & 4 | $i1 >> 4]\0$[$i1 >> 2 & 3]$[$i1 << 1 & 6 | $i2 >> 5]$[$i2 >> 2 & 7]"
          echo -ne "\0$[$i0 >> 4]$[$i0 >> 1 & 7]$[$i0 << 2 & 4 | $i1 >> 4]"
  elif [ "${t:0:5}" = "begin" ]; then

Note that I’ve used as few subprocesses as possible – I’ve got it down to one per line of input (the stupidly long “printf” line – more about that later) because the thing that bash does really badly is spawn off a subprocess: you can do a huge amount of fairly complex string and number manipulation in bash in place of a single subprocess spawn and it will still cut the time used massively. So for example I was using (as recommended across the web)

h=$(printf "%X" $d)

to convert decimal-to-hex: it’s about 10 times quicker (and actually not much less obvious) to create an array (0 1 2 3 4 5 6 7 8 9 a b c d e f) and build the hex string yourself using ${arr[d>>4]}${arr[d&15]} (I suppose using a 256 entry array would actually be quicker still but I gave up on the hex thing anyway to use octal)

The most interesting thing (fairly obvious, when you think about it) is the speed increase when you change from dripping through converting character by character

c = `printf "%d" "'$c"`

to the massive and horrible one-line-at-a-time printf above. You’re talking about a 15x speedup for the entire operation just by doing that.

Anyway, I found it all very challenging; I hope you find it useful/interesting :-).

Feel free to tell me what an idiot I am or (if you’re feeling more constructive) suggesting optimisations. If you can figure out a way of getting a character into a charcode integer without using a subprocess then obviously that would be really useful…

Edit: this awk-based implementation is probably more useful (it’s smaller and lots faster!) if you want to include a backup in your script for when uudecode isn’t installed

Tags: , , .

Mixed WPA/WPA2 mode on ZyXEL Prestige 660HW-T1

Posted on June 28th, 2009 by whinger. Filed under Tech.

Problem: Broadcom wifi adaptor in HP 6735s running Vista won’t connect to internet via Zyxel Prestige 660HW-T1 running WPA mixed mode

Issue: WPA1 support on Vista with the Broadcom drivers doesn’t seem to work, but turning on Mixed Mode WPA2/WPA1 on the Zyxel stops internet access; meanwhile we have some WPA1-only devices (Belkin print server) so we can’t use WPA2-only

Solution: updating the Broadcom drivers didn’t help, and neither did getting the latest firmware for the Zyxel. Eventually I realised that some sites (mainly google) worked while others didn’t and (after a few tests) figured out that the MTU size needed to be lowered to 1482.

Whinge: Why on earth would WPA mixed mode alter the maximum MTU? That’s just crazy.

FWIW, changing the MTU on the Zyxel is a fairly complicated thing: this page describes how to do it temporarily and permanently. I’d also recommend changing the MTU on Windows because otherwise the router will have to split up your traffic into chunks, and you can actually get away with just changing the Windows MTU if you don’t want to change router settings; download the excellent TCPOptimizer from and set the MTU with that.

Tags: , , , , .

Dude, you’re so, like, negative (zero)

Posted on April 23rd, 2009 by whinger. Filed under Tech, Web Development, Whinges.

Edit: this is fixed in 5.1.30, so I’m guessing it was fixed a while back – I’m working on a legacy system using 5.0.15.


So MySQL thinks that


should return -0

(Whatever -0 is)…

Clearly I’ve simplified my code and there are ways around this, but… WTF?


For what it’s worth,

SELECT -COALESCE(null, 0) + 0;

results in the expected “0” value.


I was disappointed that


doesn’t work though – if you’re going to believe that -0 is a valid number, you should be able to get +0 out of it.

Tags: , , , , , .

Internet Explorer: this page contains both secure and nonsecure items

Posted on April 23rd, 2009 by whinger. Filed under Tech, Web Development.

So the web is full of people asking about this symptom and I hit it myself. Seemingly randomly (but consistently) IE will complain about nonsecure items in the page, with this warning message:


This page contains both secure and nonsecure items. \n\nDo you want to display the nonsecure items?

The error message from IE7

The usual response to this is that you’re loading images (or other media) from a non-SSL connection (hence “non-secure” items); there are also some mentions of IE not being happy about IFRAMEs without SRC= attributes (the browser assigns “about:blank” as a default SRC, which – being non-secure – flips the error); however none of these things applied in my case.


I discovered that if I turned off javascript the error disappeared, which suggested my script was problematic, but I still couldn’t find anything in the scripts which was loading any non-secure items.


In the end after much messing around it turns out that the offending script was setting to a relative path, eg”url(/images/mybackground.gif)”;

Even though this will correctly resolve to an https:// address (assuming the root of the document is https://) IE can’t figure this out and moans.


Simply adding the full path to the background solved my problem.


This doesn’t apply to CSS files setting backgrounds – you can happily have relative paths in these and all will be well. 


Of course I then wondered why I hadn’t found that on the web and figured you might be looking for it too – so here it is 🙂

Tags: , , , , .

Have I lost it?

Posted on March 31st, 2009 by whinger. Filed under Poker, Whinges.

No, that’s not a question on the state of my sanity.

The last few live games I’ve played I’ve bemoaned the fact that I’ve hit no cards. However last night I played in a game which was the weakest table I’ve ever sat at but I singularly failed to make any moves at all. Maybe it was because the first hand I tried I lost but it’s almost like I was having some sort of out-of-body experience, watching myself playing as a complete passive fish.

I have been blaming my recent run on a complete lack of cards (which is admittedly true, last night I hit one pair – 66 – and one AQ in 90 minutes of play) but I’m beginning to wonder if actually I’m running scared.

Perhaps I went out early too many times playing overly aggressive; however I think I’ve reached the conclusion that I had more fun losing quickly being caught out in a bluff than painfully. Last night I just watched myself melting into nothing and, unless I can fix it, I think my live game will be dead.


OpenOffice 3 British English Thesaurus

Posted on March 30th, 2009 by whinger. Filed under Tech.

I’ve been persuading friends and family that using OpenOffice is going to save the planet and all the fluffly ikkle animals and everything.

I’ve been using the Novell-sponsored go-oo version (from because it seems to have better compatibility with the MS stuff as well as being quicker and generally more fluffy-ikkle-animal-friendly; however it looks like something they’ve done has caused the British English thesaurus to break. I’m assuming it’s Go-oo’s fault because the standard OO install on Harry’s machine (on the next desk) is fine.

Anyway, after some hours of searching the web for a solution (all of which seemed to be based around editing a file which no longer exists in oo3) for now I’ve packaged up my own extension based on the stock en-gb dictionary and PaulH’s thesaurus from

Apparently this could also be useful if you don’t like the fact that the British English thesaurus in ooo actually points at the en_US version anyway…

So here it is. Just install it and restart OO, that should do it. Let me know if it’s broken.

Edit: to install (assuming that just opening the file doesn’t work) go to Tools->Extension Manager in OpenOffice, click “Add” and navigate to wherever you saved the file!

Tags: , , , , , , , , , , .


Posted on March 19th, 2009 by whinger. Filed under Tech, Web Development, Whinges.

So Google Streetview has come to the UK, with street-level pictures of Southampton, London, Bristol, Cambridge, Oxford, Norwich, Coventry, Birmingham, Nottingham, Derby, Manchester, Liverpool, Sheffield, Leeds, York, Newcastle, Glasgow, Edinburgh, Dundee, Aberdeen, Swansea, Cardiff, Belfast, Lisburn and… Scunthorpe.


WTF? Does Google UK’s mapping director live in Scunthorpe or something? I mean, I’ve nothing against the town but it’s not exactly the most attractive or well-known, is it?

Tags: .

mysql in completely incomprehensible design decision shock

Posted on February 6th, 2009 by whinger. Filed under Web Development, Whinges.

Who at Mysql AB decided that SHOW TRIGGERS LIKE ‘…’, unlike the SHOW TABLES LIKE ‘…’ command on which it is modelled, should not display triggers whose names match the ‘…’ string but instead display triggers which relate to tables whose names match ‘…’


Sometimes I wonder about these people, I really do.

Tags: .