Archive for the ‘Tech’ Category
* 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.
* 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.
#!/bin/bash bs=0 while read -rs t ; do if [ $bs -eq 1 ] ; then if [ "a$t" = "aend" ] ; then bs=2 else x=1 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]" else echo -ne "\0$[$i0 >> 4]$[$i0 >> 1 & 7]$[$i0 << 2 & 4 | $i1 >> 4]" fi l=$[l-3] done fi elif [ "${t:0:5}" = "begin" ]; then bs=1 fi done
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
* 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 speedguide.net and set the MTU with that.
* 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
SELECT -COALESCE(null, 0);
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
SELECT -COALESCE(null, -0);
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.
* 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:
ÂÂ
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 object.style.background to a relative path, egÂÂ
myObj.style.background=”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 🙂
* 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 go-oo.org) 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 brit-thesaurus.sourceforge.net
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!
* Scunthorpe???
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?
* whuh?
Posted on January 23rd, 2009 by whinger. Filed under Tech.
* MySQL – USING() considered harmful
Posted on October 30th, 2008 by whinger. Filed under Tech, Web Development, Whinges.
I’m not a great fan of making use of non-ANSI SQL: not only does it make it harder for new coders to pick up but it means any chance of changing databases becomes completely financially unviable.
The MySQL USING() clause is the worst type of example: not only is its requirements for brackets confusing and unnatural, it provides no advantage except to the incredibly lazy – being purely syntactic sugar.
For those who don’t know, it replaces
FROM a INNER JOIN b ON a.fieldname=b.fieldname
with
FROM a INNER JOIN b USING(fieldname)
Up until today I’ve been mildly irritated by it, until I came across a bizarre piece of behaviour. Given two tables, “pubs” and “beers”, with a joining field “brewery” and both with named fields “name”, running
SELECT strength FROM beers INNER JOIN pubs USING(brewery) WHERE name="the white horse"
utterly fails to warn me that “name” is ambiguous and returns no results (unless there’s a beer called “the white horse”, of course). On the other hand,
SELECT strength FROM beers INNER JOIN pubs ON beers.brewery=pubs.brewery WHERE name="the white horse"
immediately produces the “Column ‘name’ in where clause is ambiguous” error you expect.
Do I need to go into detail why this makes USING() harmful?
This is admittedly fixed in more recent versions (bugs.mysql.com) since October last year but how many installations out there (like mine) will still exhibit the bug? I’d guess at a fair few.
* insert pun about memory “chip” of your choice here
Posted on September 16th, 2008 by whinger. Filed under Poker, Tech.
This (7dayshop.com) initially looks neat but when you think about it, given that the idea of a USB drive is that it’s as small and unubtrusive as possible it really has no value except as a gift for a geek who likes poker.
Ah. Won’t need to buy flash drives just before Christmas then…