This page is a collection of news feeds from friends of mine and myself. Its not, as the name might imply, a planet of Horms, or for the most part even stuff written by me. For that, please go here.
Nearby Planets:
Planet SLUG,
Planet Linux Australia,
Planet FP-Syd
Subscriptions:
Adrian Chadd
Alan Robertson
Alexander Reeder
Amanda Reid
Anand Kumria
Andrew Cowie
Andy Fitzsimon
Benno
Chizuko Horman
Chris DiBona
Chris Yeoh
Craige McWhirter
Dave Miller
Dave Ruys
David Luyer
Erik de Castro Lopo
Horms
Hugh Blemmings
James Morris
Jan Schmidt
Jaq
Jeff Waugh
Jeremy Kerr
John Ferlito
Joseph Arruda
Kfish
Mark Greenaway
Martin Pool
Mary Gardiner
Matt Palmer
Nick Jenkins
Ozone
Pete Ryland
Peter Hardy
Peter Nixon
Pia Waugh
Raster
Raz
Real World Haskell
Robert Collins
Roger Barnes
Russell Coker
Rusty
Sam Johnston
Silvia Pfeiffer
Ted T'so
Tom Davies
Tong Master
Tractorgen - Commits
Tridge
Wichert Akkerman
fusion94
あや
![]()
On Thursday February 25th we held the first meeting for 2010 of the Sydney Functional Programming group. The meeting was held at Google's Sydney offices and we had 17 people show up to hear our two presenters.
First up we had your correspondent (Erik de Castro Lopo), giving a presentation titled "Hacking DDC" on my bug fixing work on Ben Lippmeier's DDC compiler. I explained a little about what DDC and Disciple were; a Haskell like language with some interesting extensions to the type system. I then suggested that anyone curious as to why these extensions were interesting should read the first chapter of Ben's PhD thesis "Type Inference and Optimisation for an Impure World". I then went on how using Darcs for the revision control made it easy to use one branch per bug or feature I'm working on, specifically, it allowed me to work on one until I got stuck and then move on to another without the debugging of the first interfering with the second.
Our second presenter for the evening was Tim Docker who gave us an explanation of a Domain Specific Language (DSL) for handling dates in financial systems. Code written in his DSL looked a lot like Ocaml, but the implementation was in C++.
A big thanks to Tim for presenting and Google for providing the meeting venue and the snacks.
![]()
Brendan Scott linked to a couple of articles about CAL (the Copyright Agency Limited) [1]. I have previously written about CAL and the way that they charge organisations for the work of others without their consent [2]. My personal dispute with CAL is that they may be charging people to use my work, [...]
![]()
Assemblyman seeking to ban all salt in restaurant cooking
In my day job I do Linux embedded work and as people in the embedded world know, Linux is a pretty commonly used embedded OS. Today I was evaluating a new board and found it had an Intel graphics chip that was not properly detected by Ubuntu 9.10. The ever trusty lspci said this:
00:02.0 VGA compatible controller: Intel Corporation System Controller Hub
(SCH Poulsbo) Graphics Controller (rev 07)
We all know that Intel employs a bunch of well known Xorg developers, so this shouldn't be a problem, right?
Unfortunately, it is a problem. Intel's offering for this chipset is the Intel® Embedded Graphics Drivers web page where they offer a 124 megabyte download (registration required). After registration you get to choose which driver pack you want and which OS you are downloading it for. Ubuntu was not on the list and neither was Debian. I chose Fedora 10 (released in 2008) as that was the most recent one.
Now, you can image my surprise when the driver download for Fedora Linux contained just four files:
Archive: /tmp/IEGD_10_3_GOLD.zip
testing: UsersGuide_10_3_1525.pdf OK
testing: IEGD_10_3_GOLD_1525.exe OK
testing: IEGD_SU_10_3_GOLD.pdf OK
testing: RELNOTES_10_3_1525.txt OK
No errors detected in compressed data of /tmp/IEGD_10_3_GOLD.zip.
Yep, thats right, the driver download for Fedora Linux contains two PDF files, a text file and an executable installer for Windows.
Being the curious (and paranoid) type I decided to explore this further, by running the installer under WINE in a chroot. After the installer you get left with several metric craploads of Java Jar files, and another windows executable iegd-ced.exe that supposedly configures this nightmare. I ran it (again, under WINE in a chroot) but it didn't seem to do anything sensible or worthwhile so I looked around amongst the other installed files and found IEGD_10_3_Linux.tgz.
Inside that tarball there are a bunch of Xorg library binaries (for several different versions of Xorg), a large chunk of source code that gets compiled into the Linux kernel and even better yet, a couple of Microsoft Visual Studio project files. WTF?
Unbe-fscking-lievable. Needless to say, I will avoid any hardware which uses this chipset and any other hardware that requires binary only kernel blobs packaged this badly. Doing so makes my life easier.
The people at Intel who thought this was a good idea must have their own personal mother-lode of stupid.
Time to learn Javascript properly.
![]()
![]()
![]()
I've been going through the glibc sparc optimized assembler routines to see if anything can be improved. And I took a stab at seeing if strlen() could be made faster. Find first zero byte in string, pretty simple right?
The first thing we have to discuss is the infamous trick coined by Alan Mycroft, way back in 1987. It allows to check for the presence of a zero byte in a word in 3 instructions. There are 2 magic constants:
#define MAGIC1 0x80808080 #define MAGIC2 0x01010101If you're checking 64-bits at a time simply expand the above magic values to 64-bits on 64-bit systems.
Then, given a word the check becomes:
if ((val - MAGIC2) & ~val & MAGIC1) goto found_zero_byte_in_word;Essentially we're subtracting MAGIC2 to induce underflow in each byte that has the value zero in it. Such underflows cause bit 8 to get set in that byte. Then we want to see if bit 8 is set after subtraction in any byte where bit 8 wasn't set before the subtraction.
To get the most parallelization on multi-issue cpus, we want to compute this using something like:
tmp1 = val - MAGIC2; tmp2 = ~val & MAGIC1; if (tmp1 & tmp2) goto found_zero_byte_in_word;to reduce the number of dependencies such that the computation of tmp1 and tmp2 can occur in the same cpu cycle.
Then there is all the trouble of getting the source buffer aligned so we can do the fast loop comparing a word at a time. The most direct implement is to read a byte at a time, checking for zero, until the buffer address is properly aligned. This is also the slowest implementation.
The powerpc code in glibc has a better idea. If dereferencing a non-word-aligned byte at address 'x' is valid, so is reading the word at 'x & ~3' (or 'x & ~7' on 64-bit). This is because page protection occurs on page boundaries, and x and 'x & ~3' are on the same page.
The only thing left to attend to is to make sure we don't match the alignment pad bytes with zero. This is solved by computing a mask of 1's and writing those 1's into the word we read before we do the Mycroft computation above. In C it looks something like:
orig_ptr = ptr; align = (unsigned long) ptr & 3; mask = -1 >> (align * 8); ptr = (void *) ((unsigned long) ptr & ~3UL); val = *ptr; val |= ~mask; if ((val - MAGIC2) & ~val & MAGIC1) goto found_zero_byte_in_word;At which point we can fall into the main loop.
Once we find the word containing a zero byte, we have to iteratively look for where it is in order to compute the return value. How to schedule this is not trivial, and it's especially cumbersome on 64-bit (where we have to potentially check 8 bytes as opposed to 4).
Anyways, let's analyze the 64-bit Sparc implementation I'm hacking on at the moment. I'm targetting UltraSPARC-III and Niagara2 for performance analysis. Simply speaking UltraSPARC-III can dual-issue integer operations, and Niagara2 is single issue and predicts all branches not taken (basically this means: minimize use of branches).
davem_strlen: mov %o0, %o1 andn %o0, 0x7, %o0 ldx [%o0], %o5 and %o1, 0x7, %g1 mov -1, %g5Save away the original string pointer in %o1. At the end we'll compute the return value as "%o1 - %o0". Align the buffer pointer and load a word as quickly as possible. We load the first word early so that we can hide the memory latency into all of the constant and mask formation we need to do before we can make the Mycroft test.
%g5 holds the initial part of the mask computation (-1, which gets expanded fully to 64-bits by this move instruction) and %g1 will have the shift factor.
sethi %hi(0x01010101), %o2 sll %g1, 3, %g1 or %o2, %lo(0x01010101), %o2 srlx %g5, %g1, %o3 sllx %o2, 32, %g1 sethi %hi(0x00ff0000), %g5%o2 is going to hold the "0x01" expanded to 64-bits subtraction magic value. %o3 wil first hold the initial word mask, and then it will holds the "0x80" magic constant. We can compute the two 64-bit magic constants into registers in 5 instructions.
Pick either of the two constants, we choose the "0x01" here because we'll need it first. This is loaded first using "sethi", "or". This gives us the lower 32-bits of the constant, then we shift up a copy by 32-bits, then or that into the lower 32-bit copy to compute the final value. "0x80" is "0x01" shifted left by 7 bits so a simple shift is all we need to load the other 64-bit constant.
The "0x00ff0000" constant will be used while searching for the zero byte in the final word.
Next, we mask the initial word and fall through into the main loop.
orn %o5, %o3, %o5 or %o2, %g1, %o2 sllx %o2, 7, %o3Mask in the pad bits using mask compute in %o3. Finish computation of 64-bit MAGIC1 into %o2, and finally put MAGIC2 into %o3. We're ready for the main loop:
10: add %o0, 8, %o0 andn %o3, %o5, %g1 sub %o5, %o2, %g2 andcc %g1, %g2, %g0 be,a,pt %xcc, 10b ldx [%o0], %o5This is a real pain to schedule because there are many dependencies. But the "andn", "sub", "andcc" sequence is the Mycroft test, and those first two instructions can execute in one clock cycle on UltraSPARC-III. The ",a" annul bit on the branch means that we only execute the load in the branch delay slot if the branch is taken.
Now we have the code that searches for where exactly the zero byte is in the final word.
srlx %o5, 32, %g1 sub %o0, 8, %o0We over advanced the buffer pointer in the main loop, so correct that by subtracting 8. Prepare a copy of the upper 32-bits of the word into %g1.
andn %o3, %g1, %o4 sub %g1, %o2, %g2 add %o0, 4, %g3 andcc %o4, %g2, %g0 movne %icc, %g1, %o5 move %icc, %g3, %o0This is divide and conquer. Instead of doing 8 byte compares, we first see if the upper 32-bits have the zero byte. We essentially redo the Mycroft test on the upper 32-bits of the word.
If the upper 32-bits have the zero byte, we use %g1 for the comparisons. Otherwise we retain %o5 for the subsequent comparisons and advance the buffer pointer by 4 bytes. This is what the final two conditional move instructions are doing. Note that these conditional moves use '%icc', the 32-bit condition codes.
The astute reader may wonder why we just can't use the upper 32-bits of the Mycroft computation we made in the main loop? This doesn't work because the underflows can carry and cause false positives in upper bytes of the word. For example, consider a value where bits 35 down to 24 have hex value "0x0100". The subtraction of MAGIC2 will result in "0x8080". The real zero byte is the lower one, not the upper one. So we can't merely use the upper 32-bits of the already computed 64-bit Mycroft mask, we have to recompute it over 32-bits by hand.
Now we're left with 32-bits to check for a zero byte, we make extensive use of conditional moves to avoid branches:
mov 3, %g2 srlx %o5, 8, %g1 andcc %g1, 0xff, %g0 move %icc, 2, %g2 andcc %o5, %g5, %g0 srlx %o5, 24, %o5 move %icc, 1, %g2 andcc %o5, 0xff, %g0 move %icc, 0, %g2 add %o0, %g2, %o0We check starting at the low byte up to the highest byte. Because the highest byte, if zero, takes priority. We add the offset of the zero byte to the buffer pointer.
Finally:
retl sub %o0, %o1, %o0We compute the length and return from the routine.
Many many moons ago, in 1998, Jakub Jelinek and his friend Jan Vondrak wrote the routines we use now on sparc. And frankly it's very hard to beat that code especially on multi-issue processors.
The powerpc trick to align the initial word helps us beat the existing code for all the unaligned cases. But for the aligned case the existing code holds a slight edge.
So now I've been trimming cycles as much as possible in the new code trying to reach the state where the aligned case executes at least as fast as the existing code. I'll check this work into glibc once I accomplish that.
The Mycroft trick extends to other libc string routines. For example for 'memchr' you replicate the search character into all bytes of a word, let's call it 'xor_mask' and in the inner loop you adjust each word by using:
val ^= xor_mask;Then use the Mycroft test as in strlen(). Another complication with memchr, however, is the need to check the given length bounds.
This can be done in one instruction by putting the far bounds into your base pointer register (called '%top_of_buffer' below), then using offsets starting at "0 - total_len" (referred to as '%negative_len' below).
Then your inner loop can do something like:
ldx [%top_of_buffer + %negative_len], %o5 addcc %negative_len, 8, %negative_len bcs %xcc, len_exceeded ...We exit the loop when adding 8 bytes to the negative len causes an overflow.
If you're interested in this kind of topic, bit twiddling tricks and whatnot, you absolutely have to own a copy of "Hacker's Delight" by Henry S. Warren, Jr.
Well I would get to it sooner or later, so here's EFL (Evas, Elementary) on the N900, and yes - an OpenGL-ES2.0 rendering engine is used too for most of the videos. For comparison elementary also is shown with a software rendering engine. It all works. no worse than anything else I'd say and probably better in most ways considering how much is actually being done. Below they are for your enjoyment.
The Threat Bruce Schneier’s blog post about the Mariposa Botnet has an interesting discussion in the comments about how to make a secure system [1]. Note that the threat is considered to be remote attackers, that means viruses and trojan horses – which includes infected files run from USB devices (IE you aren’t safe just [...]
In a comment on my post Shared Objects and Big Applications about memlockd [1] mic said that they use memlockd to lock the entire root filesystem in RAM. Here is a table showing my history of desktop computers with the amounts of RAM, disk capacity, and CPU power available. All systems better than [...]
![]()
![]()
My university load hasn't yet caught up with me (read: pressuring me to meet deadlines) so I'm setting myself the task of enforcing even more work than I feel I should do.
A better way of saying this is: I know I should be doing more, but I can't bring myself to just "study" without specific, stressful short term goals in mind. So I'm going to invent some reasons.
I'm especially interested in what the heck I'm going to do about English Creative Writing. Apparently I'm supposed to write, write, write. Question is - what the heck do I write about?
![]()
A different perspective
![]()
A bit of composited light painting
The Opera-Mini Dispute I have just read an interesting article about the Opera browser [1]. The article is very critical of Opera-Mini on the iPhone for many reasons – most of which don’t interest me greatly. There are lots of technical trade-offs that you can make when designing an application for a constrained environment [...]
![]()


Battery Point, Hobart, Tasmania
![]()


Salamanca Markets, Hobart, Tasmania
![]()
Diagnosis A few weeks ago I was referred to a specialist for the treatment of Carpal Tunnel Syndrome. I first noticed the symptoms in early January, it started happening at night with a partial numbness in the fingers of my left hand. I didn’t think much of it at first as it’s the expected [...]


Jellyfish, Constitution Dock, Hobart, Tasmania
A while ago I bought one of these. It has good build quality, and a good sound, but suffers from a fatal design flaw: the rocker pedal doesn't have enough travel in it. So it didn't get much use.
Enterprising people on the Internet weren't going to be deterred by something as trifling as this. If you don't mind voiding the warranty, you can follow these detailed instructions to fix the mechanical problem. I substituted a small paring knife for a scalpel, and dumb luck for precision, but everything worked perfectly and now I have a beautiful sounding wah pedal for much less than you'd pay for a brand name one.
A word of caution though, you may lose an afternoon playing with the result :)
The German supermarket chain Aldi recently had a special deal of a “wine-fridge” for $99. A wine fridge really isn’t that specialised for wine, it is merely a fridge that has a heater and is designed for temperatures in the 11C to 18C range. An good wine fridge will have special wood (or [...]
![]()
I'm looking for the power connector pinout for this Apple IIc which was rescued from UCC a while ago. The power adaptor may still be at UCC (7 or so pin DIN connector; 15VDC) but I don't hold out much hope.
A free beer goes to the first person who can help me track down the damned power connector pinout!
So my ISP was helpfully told by their DSL wholesaler that they cheerfully moved their ADSL1 ports in my exchange to ADSL2 ports because they became available. They didn't ask up front - apparently they just did it and told said ISP of mine after the fact.
Then my DSL line goes dead.
My line is already marginal at best. Whatever the heck it's plugged into now - even with an ADSL1 profile - doesn't actually work.
Then it twigs. When they said "ADSL1 to ADSL2 ports", they meant "Telstra ADSL1 to {some other provider} ADSL2." We tried an ADSL1 profile on the line but it still gives just as shitty noise and attenuation levels - 50dB attenuation on downstream! It syncs, then it drops out 30 seconds later.
In any case. It's finally been escalated to an urgent fault (hah!) inside said DSL wholesaler and their DSL provider .. which unfortunately won't be looked at until Tuesday. I've told my ISP that if they can't manage to fix it by Wednesday that I want the port migrated back to Telstra ASAP. I then reminded him (and he laughed with me about it) that I was paying a premium BECAUSE I had a functional Telstra ADSL1 port that worked over the 4km run to my house. Yup, I'm paying extra because I'm on a Telstra port and I'm quite happy to continue doing so.
At least my ISP is cool. I'll have to bring beer around to the owners' place next week after he's lit the relevant fires to fix this for me.
m kernel/dev/pci.d Enumerate ALL devices.
m kernel/dev/pci.d Fixed documentation.
m kernel/dev/pci.d Working PCI scanning.
m kernel/arch/x86_64/architecture/cpu.d m kernel/arch/x86_64/architecture/pci.d m kernel/core/kmain.d m kernel/dev/pci.d Adding PCI device scan.
m kernel/arch/x86_64/architecture/cpu.d m kernel/arch/x86_64/architecture/pci.d Fixing up PCI implementation.
m kernel/arch/x86_64/architecture/pci.d m kernel/dev/pci.d Simplifying
m kernel/arch/x86_64/architecture/pci.d Documentation additions.
m kernel/arch/x86_64/architecture/cpu.d m kernel/arch/x86_64/architecture/pci.d Added implementation of PCI config writes.
m kernel/arch/x86_64/architecture/cpu.d m kernel/arch/x86_64/architecture/pci.d Added implementation of PCI config reads.
m kernel/arch/x86_64/architecture/cpu.d m kernel/arch/x86_64/architecture/pci.d m kernel/dev/pci.d Added some implementation to PCI stubs. Fixed ioIn for Cpu.
![]()


Jellyfish, Constitution Dock, Hobart, Tasmania
Due to the comments on my blog post about Divisive Behavior [1] I’ve been considering the issue of terms of abuse of minority groups – a topic of which racial abuse is only one aspect. It seems that there are many discussions about which terms are offensive and when they are offensive, most of which are [...]
![]()


Rhapsody of the Seas, Docked in Hobart, Tasmania
(This article comes from one I helped edit and publish inside work, so I can't take any credit for the ideas expressed within, though I do vehemently and violently subscribe to the sentiment! Thanks to Alan Sundell for originally educating me.)
When you set (or don't set at all) MAILTO in a crontab fragment, typically it's because you want to be notified if your job fails -- failure in this case if and only if the job only prints to stdout/stderr if there is an exceptional condition... However not all jobs print only on exceptional conditions, many use stderr for logging, and email is just not a great solution to this problem, especially at scale.
cron. Why is it a bad idea to rely on cron mail?
crond can crash.
If a cronjob running successfully is critical to operation, then it seems that what you really need is some kind of monitoring system that addresses all of these things, and can send alerts to some oncall rotation that determines who is responsible for handling alerts.
Here's an idea that might help with that.
Direct the output of your job to some log file for debugging, in the event of persistent failure. Note the truncate:
MAILTO=""
*/1 * * * * root cronjob > /var/log/cronjob.log 2>&1
(If you decide to appent, not overwrite the log each execution, then make sure you logrotate that file.)
At the end of cronjob, update a status file, like so:
scriptname=$(basename $0)
date +%s > /var/tmp/cronjob-last-success-timestamp
Ensure that your job exits on error before reaching the last line!
Collect the content of that file regularly with your monitoring system; scrape it with the nagios host agent, pump it into collectd, whatever you hip open source cats are using these days.
Configure your monitoring system to send a notification on the timestamp having not been updated in some time period.
if cronjob-last-success-timestamp
<
(time() - 30m)
then alert
Profit!
Now you only generate an alert if the cron job hasn't succeeded in the last 30 minutes (a threshold you can adjust to match your monitoring scrape intervals and service SLAs), and with a sufficiently mature monitoring system you can now express dependencies, suppress the notification, and send it to an oncall rotation, and so on!
Most significantly, we have converted a system that always reported failure, into a system that is based around checking for success -- a failsafe.
Well the world turns and things move on... and that's true of Evas. Not only did it get 3D - it has had an OpenGL engine for a while. Recently this has been revamped. It's a full OpenGL AND OpenGL-ES2.0 engine - it does both with the same codebase (and a few minimal #ifdefs). It's entirely built around shaders and is very complete. This is in addition to the already very optimised Evas software engine and the myriad of others. There are already ports to WebOS on the Palm Pre, and it should all work on any Linux system, Desktop, Laptop or embedded (ARM, x86 etc. etc.). (Android excluded as it's not Linux - not Linux as ins the normal usage of the word meaning Linux plus the whole userspace ecosystem than comes with it).
Not only is the OpenGL engine of Evas able to work, it ALSO supports texture-from-pixmap - which means... I just added a simple compositor module to E17 that uses this. It can either composite with software or with OpenGL and shortcut to zero-copy via texture-from-pixmap. It even all works with OpenGL-ES2.0. On Desktop it works nicely with NVIDIA drivers, though others may have mileage that varies, but in my experience most other drivers are not as complete or stable as NVIDIA's closed ones (even they have a few issues).
So what else is great about this? Well I also found some nice speedups. It's now at the point where I can run E17 + compositor (OpenGL-ES2.0) on an SoC at 480x800 AND keep silky smooth framerates with Evas based apps (like Elementary) while scrolling around AND compositing. I'm seeing composited framerates beat 100FPS. That is - the app can render at 100FPS.. or more... and still have its window be composited. I know there are even excess copies in the pipeline driver-side that are still to be fixed/improved. This baby is on fire.
Don't forget... this is also all running under X11. There will be some overhead but not much. It's a myth that X11 makes things slow - it's bad drivers that do that, and badly written X11 apps or toolkits. So let it be known that Evas has for many years supported OpenGL as a rendering path, as well as software, but now also fully supports OpenGL-ES2.0 ,and it's getting love and attention. This means that you can without any change in your apps, use either software or OpenGL - or a myriad of other engines, and get the best out of your hardware, if it has working and stable OpenGL drivers libraries or not.
Here is the performance data for this ARM based SoC - 480x800 screen, 32bpp. Yes, it has an OpenGL-ES2.0 Hardware core (SGX based). Numbers are in frames per second.
| Test | Software | OpenGL-ES2.0 |
| Widgets File Icons | 17.50 | 19.13 (+9.3%) |
| Widgets File Icons 2 | 46.90 | 66.42 (+41.6%) |
| Widgets File Icons 3 | 32.87 | 17.26 (-47.5%) |
| Widgets File Icons 4 | 45.72 | 86.58 (+89.4%) |
| Image Blend Unscaled | 16.72 | 49.29 (+194.8%) |
| Image Blend Solid Middle Unscaled | 12.02 | 27.56 (+129.3%) |
| Image Blend Fade Unscaled | 8.84 | 30.92 (+249.8%) |
| Image Blend Fade Power 2 Unscaled | 8.84 | 30.92 (+249.8%) |
| Image Blend Solid Unscaled | 80.31 | 78.54 (-2.2%) |
| Image Blend Solid Fade Unscaled | 13.52 | 30.88 (+128.4%) |
| Image Blend Solid Fade Power 2 Unscaled | 13.52 | 30.94 (+128.8%) |
| Image Blend Nearest Scaled | 6.61 | 43.50 (+558.1%) |
| Image Blend Nearest Solid Scaled | 69.48 | 64.72 (-6.9%) |
| Image Blend Smooth Scaled | 1.59 | 36.71 (+2208.8%) |
| Image Blend Smooth Solid Scaled | 31.15 | 64.74 (+107.8%) |
| Image Blend Nearest Same Scaled | 34.20 | 77.97 (+128.0%) |
| Image Blend Nearest Solid Same Scaled | 104.67 | 87.20 (-16.7%) |
| Image Blend Smooth Same Scaled | 34.01 | 60.17 (+76.9%) |
| Image Blend Smooth Solid Same Scaled | 121.32 | 86.62 (-28.6%) |
| Image Blend Border | 2.05 | 36.00 (+1656.1%) |
| Image Blend Solid Middle Border | 25.16 | 38.28 (+52.1%) |
| Image Blend Solid Border | 33.04 | 46.62 (+41.1%) |
| Image Blend Border Recolor | 1.71 | 18.66 (+991.2%) |
| Image Map Rotate | 4.17 | 71.79 (+1621.6%) |
| Image Map Solid Rotate | 4.73 | 121.01 (+2458.4%) |
| Image Map Nearest Rotate | 14.84 | 82.85 (+458.3%) |
| Image Map Nearest Solid Rotate | 25.13 | 120.54 (+379.7%) |
| Image Map Color Rotate | 3.75 | 50.77 (+1253.9%) |
| Image Map Color Solid Rotate | 4.20 | 119.53 (+2746.0%) |
| Image Map Color Nearest Rotate | 8.16 | 50.94 (+524.3%) |
| Image Map Color Nearest Solid Rotate | 10.52 | 120.06 (+1041.3%) |
| Image Map Color Alpha Rotate | 3.67 | 50.76 (+1283.1%) |
| Image Map Color Alpha Solid Rotate | 3.70 | 50.75 (+1271.6%) |
| Image Map Color Alpha Nearest Rotate | 7.77 | 50.89 (+555.0%) |
| Image Map Color Alpha Nearest Solid Rotate | 7.86 | 50.90 (+547.6%) |
| Image Map 3D 1 | 35.07 | 75.81 (+116.2%) |
| Image Map 3D 2 | 21.42 | 83.48 (+289.7%) |
| Image Map 3D 3 | 19.16 | 62.44 (+225.9%) |
| Image Map 3D 4 | 11.04 | 62.39 (+465.1%) |
| Image Map 3D 5 | 37.66 | 137.53 (+265.2%) |
| Image Map 3D 6 | 60.70 | 177.48 (+192.4%) |
| Image Map 3D Flow | 15.43 | 23.65 (+53.3%) |
| Image Quality Scale | 23.66 | 191.34 (+708.7%) |
| Image Data ARGB | 121.94 | 27.85 (-77.2%) |
| Image Data ARGB Alpha | 33.01 | 19.57 (-40.7%) |
| Image Data YCbCr 601 Pointer List | 61.12 | 33.08 (-45.9%) |
| Image Data YCbCr 601 Pointer List Wide Stride | 48.79 | 53.40 (+9.4%) |
| Image Crossfade | 68.51 | 135.38 (+97.6%) |
| Text Basic | 62.73 | 56.12 (-10.5%) |
| Text Styles | 5.10 | 5.22 (+2.4%) |
| Text Styles Different Strings | 4.06 | 4.60 (+13.3%) |
| Text Change | 43.11 | 45.51 (+5.6%) |
| Textblock Basic | 54.10 | 53.64 (-0.9%) |
| Textblock Intl | 180.16 | 94.14 (-47.7%) |
| Rect Blend | 8.03 | 26.90 (+235.0%) |
| Rect Blend Power 2 | 8.05 | 26.93 (+234.5%) |
| Rect Solid | 73.41 | 79.09 (+7.7%) |
| Rect Blend Few | 689.16 | 187.13 (-72.8%) |
| Rect Blend Power 2 Few | 663.81 | 187.10 (-71.8%) |
| Rect Solid Few | 967.81 | 203.34 (-79.0%) |
| Image Blend Occlude 1 Few | 520.61 | 155.05 (-70.2%) |
| Image Blend Occlude 2 Few | 178.36 | 122.45 (-31.3%) |
| Image Blend Occlude 3 Few | 119.99 | 144.50 (+20.4%) |
| Image Blend Occlude 1 | 372.49 | 60.59 (-83.7%) |
| Image Blend Occlude 2 | 89.63 | 48.63 (-45.7%) |
| Image Blend Occlude 3 | 30.46 | 69.11 (+126.9%) |
| Image Blend Occlude 1 Many | 150.62 | 23.74 (-84.2%) |
| Image Blend Occlude 2 Many | 36.58 | 19.72 (-46.1%) |
| Image Blend Occlude 3 Many | 12.25 | 31.17 (+154.4%) |
| Image Blend Occlude 1 Very Many | 13.86 | 2.13 (-84.6%) |
| Image Blend Occlude 2 Very Many | 3.54 | 2.29 (-35.3%) |
| Image Blend Occlude 3 Very Many | 2.02 | 4.16 (+105.9%) |
| Polygon Blend | 15.70 | 12.81 (-18.4%) |
| EVAS SPEED | 78.40 | 66.03 (-15.8%) |
![]()


Constitution Dock, Hobart, Tasmania
Past Sins Sam Varghese wrote an article about Matthew Garrett’s LCA talk “The Linux community: what is it and how to be a part of it” [1]. In page 2 Sam quotes Martin Krafft as asking about how Matthew’s behavior had changed between 2004 and the present, Sam cites some references for Matthew’s actions in [...]
Today, I was invited to give a talk at my old workplace CSIRO about the HTML5 media elements and accessibility.
A lot of the things that have gone into Ogg and that are now being worked on in the W3C in different working groups – including the Media Fragments and HTML5 WGs – were also of concern in the Annodex project that I worked on while at CSIRO. So I was rather excited to be able to report back about the current status in HTML5 and where we’re at with accessibility features.
Check out the presentation here. It contains a good collection of links to exciting demos of what is possible with the new HTML5 media elements when combined with other HTML features.
I tried something now with this presentation: I wrote it in a tool called S5, which makes use only of HTML features for the presentation. It was quite a bit slower than I expected, e.g. reloading a page always included having to navigate to that page. Also, it’s not easily possible to do drawings, unless you are willing to code them all up in HTML. But otherwise I have found it very useful for, in particular, including all the used URLs and video element demos directly in the slides. I was inspired with using this tool by Chris Double’s slides from LCA about implementing HTML 5 video in Firefox.
![]()


Rhapsody of the Seas, Docked in Constitution Dock, Hobart, Tasmania
Martin Krafft advocates a model of Internet access where advertisers pay for the Internet connection [1]. The first problem with this idea is the base cost of providing net access – which in most cases is wires to the premises. Every service that involves a cable to someone’s house (Cable TV, Cable/DSL net [...]
![]()
It's ironic that the purveyors of "Private Cloud" sell their wares on the premise of enhanced privacy and security - a totally unjustified claim which is too often accepted without question - and that they are quick to dismiss the huge benefit of the armies of security boffins employed by "public" cloud vendors (whose future is largely dependent on keeping customer data safe). It's also very convenient for them that the term itself is disparaging of "public" cloud in the same way that "Blog With Integrity" badges imply that the rest of us are somehow unethical (one of the main reasons I personally have and will always dislike[d] it). It is with that in mind that I was intrigued by Reuven Cohen's announcement today regarding Enomaly, Inc. having recently joined the Intel Cloud Builder Program (whatever that is). It was these two quotes that I found particularly questionable regarding their Enomaly ECP product: Intel was among the first to full(sic) understand the opportunity in enabling a truly secure virtualized cloud computing environments(sic) for service providers and Telco's. Our work with the Intel Cloud Builder Program will help to accelerate our efforts to deliver a massively-scalable, highly-available, high-security cloud platform to our customers. The reason I'm naturally suspicious of such claims is that I've already discovered a handful of critical security vulnerabilities in this product (and that's without even having to look beyond the startup script - a secure-by-default turbogears component that was made insecure through inexplicable modifications): CVE-2008-4990 Enomaly ECP/Enomalism: Insecure temporary file creation vulnerabilities CVE-2009-0390: Argument injection vulnerability in Enomaly Elastic Computing Platform (ECP) Enomaly ECP/Enomalism: Multiple vulnerabilities in enomalism2.sh (redux) I had to dig a little (but not much) deeper for the silent update remote command execution vulnerability. I also inadvertently discovered another serious security vulnerability (sending corporate BestBuy credentials in the clear over the Internet to a 3rd party service), which as it turns out was also developed by Enomaly, Inc. It's only natural that I would be suspicious of any future security claims made by this company. It doesn't help my sentiment either that every last trace of the Open Source ECP Community Edition was recently scrubbed from the Internet without notice, leaving angry customers high and dry, purportedly pending the "rejigging [of their] OSS strategy". While my previous attempts to fork the product as Freenomalism failed when we were unable to get the daemon to start, having the code in any condition is better than not having it at all. In my opinion this is little more than blatantly (and successfully I might add) taking advantage of the Open Source community for as long as necessary to get the product into the limelight. Had they not filled this void others would certainly have done so, and the Open Cloud would be better off today as a result. As part of cloud standards work I was interested in taking a look at the "secure" mechanism they developed for distributing virtual machines: VMcasting is an automatic virtual machine deployment mechanism based on RSS2.0 whereby virtual machine images are transferred from a server to a client which securely delivers files containing a technical specification and virtual disk image.Another bold claim that initially appeared justified by a simple but relatively sensible embedding of crytpographically strong checksums into descriptor and manifest files that were in turn digitally signed using GPG. Unfortunately no consideration was given to the secure retrieval of the archive itself (nor the RSS feed listing the archives for that matter), nor were signatures actually required by the specification, meaning that it would be trivial for an attacker to insert their own unsigned packages and/or replace existing signed packages with modified, unsigned ones. Or replayi
![]()
Science magazine has an issue on feeding the future. I've linked it because I just love some of the article names. I can't decide whether I prefer the article about holding back the plague of rats, or the one that suggests we eat less meat and more insects. Mmmm, crickets!


Constitution Dock, Hobart, Tasmania
We successfully dealt with the Lake St Clair Ferry, the Derwent Bridge Hotel's booking and transfer arrangements, the coach operators booking service and an unexpected visit from the Fourth Reich Motorcycle Club. Well rested, fed and showered, we found ourselves in Hobart for a couple of days of sightseeing, markets, women's tennis and more drinking. :)
Since On2 Technology’s stockholders have approved the merger with Google, there are now first requests to Google to open up VP8.
I am sure Google is thinking about it. But … what does “it” mean?
Freeing VP8
Simply open sourcing it and making it available under a free license doesn’t help. That just provides open source code for a codec where relevant patents are held by a commercial entity and any other entity using it would still need to be afraid of using that technology, even if it’s use is free.
So, Google has to make the patents that relate to VP8 available under an irrevocable, royalty-free license for the VP8 open source base, but also for any independent implementations of VP8. This at least guarantees to any commercial entity that Google will not pursue them over VP8 related patents.
Now, this doesn’t mean that there are no submarine or unknown patents that VP8 infringes on. So, Google needs to also undertake an intensive patent search on VP8 to be able to at least convince themselves that their technology is not infringing on anyone else’s. For others to gain that confidence, Google would then further have to indemnify anyone who is making use of VP8 for any potential patent infringement.
I believe – from what I have seen in the discussions at the W3C – it would only be that last step that will make companies such as Apple have the confidence to adopt a “free” codec.
An alternative to providing indemnification is the standardisation of VP8 through an accepted video standardisation body. That would probably need to be ISO/MPEG or SMPTE, because that’s where other video standards have emerged and there are a sufficient number of video codec patent holders involved that a royalty-free publication of the standard will hold a sufficient number of patent holders “under control”. However, such a standardisation process takes a long time. For HTML5, it may be too late.
Technology Challenges
Also, let’s not forget that VP8 is just a video codec. A video codec alone does not encode a video. There is a need for an audio codec and a encapsulation format. In the interest of staying all open, Google would need to pick Vorbis as the audio codec to go with VP8. Then there would be the need to put Vorbis and VP8 in a container together – this could be Ogg or MPEG or QuickTime’s MOOV. So, apart from all the legal challenges, there are also technology challenges that need to be mastered.
It’s not simple to introduce a “free codec” and it will take time!
Google and Theora
There is actually something that Google should do before they start on the path of making VP8 available “for free”: They should formulate a new license agreement with Xiph (and the world) over VP3 and Theora. Right now, the existing license that was provided by On2 Technologies to Theora (link is to an early version of On2’s open source license of VP3) was only for the codebase of VP3 and any modifications of it, but doesn’t in an obvious way apply to an independent re-implementations of VP3/Theora. The new agreement between Google and Xiph should be about the patents and not about the source code. (UPDATE: The actual agreement with Xiph apparently also covers re-implementations – see comments below.)
That would put Theora in a better position to be universally acceptable as a baseline codec for HTML5. It would allow, e.g. Apple to make their own implementation of Theora – which is probably what they would want for ipods and iphones. Since Firefox, Chrome, and Opera already support Ogg Theora in their browsers using the on2 licensed codebase, they must have decided that the risk of submarine patents is low. So, presumably, Apple can come to the same conclusion.
Free codecs roadmap
I see this as the easiest path towards getting a universally acceptable free codec. Over time then, as VP8 develops into a free codec, it could become the successor of Theora on a path to higher quality video. And later still, when the Internet will handle large resolution video, we can move on to the BBC’s Dirac/VC2 codec. It’s where the future is. The present is more likely here and now in Theora.
ADDITION:
Please note the comments from Monty from Xiph and from Dan, ex-On2, about the intent that VP3 was to be completely put into the hands of the community. Also, Monty notes that in order to implement VP3, you do not actually need any On2 patents. So, there is probably not a need for Google to refresh that commitment. Though it might be good to reconfirm that commitment.
Headed through Germany 26th through 3rd March or so, then Lithuania via Poland. Back via Singapore on 24/25 March.
My email will be intermittent (I hope!) but if you’re around and want to grab a meal or a beer with us, ping me!
![]()
The Australian Federal Minister for Communications, Stephen Conroy, may not actually be corrupt; I certainly have no evidence that he is, but a number of recent incidents sure look like corruption to me. For instance:
The real irony is that under Conroy's proposed scheme to filter the internet in Australia comments like this blog entry may end up being censored. The problem with Conroy's filter is not that it filters porn, but rather that the list of what is being filtered is secret and hence could easily include web sites which contain comments which the government or the Minister for Communications want silenced.


Lake St Clair, Overland Track, Tasmania
So, it turns out that it’s not just “prawns” who find catfood irresistible; so do cane-toad-killing meat ants.
I am not making this up.
(via)

The cloud computing scandal of the week is looking like being the catastrophic loss of millions of Sidekick users' data. This is an unfortunate and completely avoidable event that Microsoft's Danger subsidiary and T-Mobile (along with the rest of the cloud computing community) will surely very soon come to regret.
There's plenty of theories as to what went wrong - the most credible being that a SAN upgrade was botched, possibly by a large outsourcing contractor, and that no backups were taken despite space being available (though presumably not on the same SAN!). Note that while most cloud services exceed the capacity/cost ceiling of SANs and therefore employ cheaper horizontal scaling options (like the Google File System) this is, or should I say was, a relatively small amount of data. As such there is no excuse whatsoever for not having reliable, off-line backups - particularly given Danger is owned by Microsoft (previously considered one of the "big 4" cloud companies even by myself). It was a paid-for service too (~$20/month or $240/year?) which makes even the most expensive cloud offerings like Apple's MobileMe look like a bargain (though if it's any consolation the fact that the service was paid for rather than free may well come back to bite them by way of the inevitable class action lawsuits).
"Real" cloud storage systems transparently ensure that multiple copies of data are automatically maintained on different nodes, at least one of which is ideally geographically independent. That is to say, the fact I see the term "SAN" appearing in the conversation suggests that this was a legacy architecture far more likely to fail. This is in the same way that today's aircraft are far safer than yesterday's and today's electricity grids far more reliable than earlier ones (Sidekick apparently predates Android & iPhone by some years after all). It's hard to say with any real authority what is and what is not cloud computing though, beyond saying that "I know it when I see it, and this ain't it".
Whatever the root cause the result is the same - users who were given no choice but to store their contacts, calendars and other essential day-to-day data on Microsoft's servers look like having irretrievably lost it. Friends, family, acquaintances and loved ones - even (especially?) the boy/girl you met at the bar last night - may be gone for good. People will miss appointments, lose business deals and in the most extreme cases could face extreme hardship as a result (for example, I'm guessing parole officers don't take kindly to missed appointments with no contact!). The cost of this failure will (at least initially) be borne by the users, and yet there was nothing they could have done to prevent it short of choosing another service or manually transcribing their details.
The last hope for them is that Microsoft can somehow reverse the caching process in order to remotely retrieve copies from the devices (which are effectively dumb terminals) before they lose power; good luck with that. While synchronisation is hard to get right, having a single cloud-based "master" and a local cache on the device (as opposed to a full, first-class citizen copy) is a poor design decision. I have an iPhone (actually I have a 1G, 3G, 3GS and an iPod Touch) and they're all synchronised together via two MacBooks and in turn to both a Time Machine backup and Mozy online backup. As if that's not enough all my contacts are in sync with Google Apps' Gmail over the air too so I can take your number and pretty much immediately drop it in a beer without concern for data loss. Even this proprietary system protects me from such failures.
The moral of the story is that externalised risk is a real problem for cloud computing. Most providers [try to] avoid responsibility by way of terms of service that strip away users' rights but it's a difficult problem to solve though because enforcing liability for anything but gross negligence can exclude smaller players from the market. That is why users absolutely must have control over their data and be encouraged if not forced to take responsibility for it.
Open Cloud simply requires open formats and open APIs - that is to say, users must have access to their data in a transparent format. Even if it doesn't make sense to maintain a local copy on the users' computer, there's nothing stopping providers from pushing it to a third party storage service like Amazon S3. In fact it makes a lot of sense for applications to be separated from storage entirely. We don't expect our operating system to provide all the functionality we'll ever need (or indeed, any of it) so we install third party applications which use the operating system to store data. What's to stop us doing the same in the cloud, for example having Google Apps and Zoho both saving back to a common Amazon S3 store which is in turn replicated locally or to another cloud-based service like Rackspace Cloud Files?
In any case perhaps it's time for us to dust off and revisit the Cloud Computing Bill of Rights?
Earlier in the year during the formation of the Open Cloud Computing Interface (OCCI) working group I described three types of cloud infrastructure "compute" services: Physical Machines ("Bare Metal") which are essentially dedicated servers provisioned on a utility basis (e.g. hourly), whether physically independent or just physically isolated (e.g. blades) Virtual Machines which nowadays uses hypervisors to split the resources of a physical host amongst various guests, where both the host and each of the guests run a separate operating system instance. For more details on emulation vs virtualisation vs paravirtualisation see a KB article I wrote for Citrix a while back: CTX107587 Virtual Machine Technology Overview OS Virtualisation (e.g. containers, zones, chroots) which is where a single instance of an operating system provides multiple isolated user-space instances. While the overwhelming majority of cloud computing discussions today focus on virtual machines, the reason for my making the distinction was so as the resulting API would be capable of dealing with all possibilities. The clouderati are now realising that there's more to life than virtual machines and that the OS is like "a cancer that sucks energy (e.g. resources, cycles), needs constant treatment (e.g. patches, updates, upgrades) and poses significant risk of death (e.g. catastrophic failure) to any application it hosts". That's some good progress - now if only the rest of the commentators would quit referring to virtualisation as private cloud so we can focus on what's important rather than maintaining the status quo. Anyway such cloud services didn't exist at the time but in France at least we did have providers like Dedibox and Kimsufi who would provision a fixed configuration dedicated server for you pretty much on the spot starting at €20/month (<€0.03/hr or ~$0.04/hr). I figured there was nothing theoretically stopping this being fully automated and exposed via a user (web) or machine (API) interface, in which case it would be indistinguishable from a service delivered via VM (except for a higher level of isolation and performance). Provided you're billing as a utility (that is, users can consume resources as they need them and are billed only for what they use) rather than monthly or annually and taking care of all the details "within" the cloud there's no reason this isn't cloud computing. After all, as an end user I needn't care if you're providing your service using an army of monkeys, so long as you are. PCI compliance anyone? Virtually all of the cloud infrastructure services people talk about today are based on virtual machines and the market price for a reasonably capable one is $0.10/hr or around $72.00 per month. That's said to be 3-5x more than cost at "cloud scale" (think Amazon) so expect that price to drop as the market matures. Rackspace Cloud are already offering small Xen VMs for 1.5c/hr or ~$10/month. I won't waste any more time talking about these offerings as everyone else already is. This will be a very crowded space thanks in no small part to VMware's introduction of vCloud (which they claim turns any web hoster into a cloud provider) but with the hypervisor well and truly commoditised I assure you there's nothing to see here. On the lightweight side of the spectrum, VPS providers are a dime a dozen. These guys generally slice Linux servers up into tens if not hundreds of accounts for only a few dollars a month and take care of little more than the (shared) kernel, leaving end users to install the distribution of their choice as root. Solaris has zones and even Windows has MultiWin built in now days (that's the technology, courtesy Citrix, that allows multiple users each having their own GUI session to coexist on the same machine - it's primarily used for Terminal Services & Fast User Switching but applications and services can also run in their own context). This delivers most of the benefits of a virtual machine, only witho
Adobe Flash just ruined my day for the last time... I've just arrived in Paris and needed to do some work before a meeting this afternoon. As it's noisy here I didn't hear the MacBook's fans running at full speed trying to compensate for a single rogue Flash ad in a tab in Google Chrome. The result was that my full 4 hour battery was reduced to less than 40 minutes and I now have no chance of getting everything I wanted to do done. Instead I'm going to use the remaining 20 minutes to tell you how to rid yourself of Flash once and for all, and in doing so enjoy the following benefits: Significantly improved security (Snow Leopard even shipped with a vulnerable Flash player!) Significantly improved performance (Flash regularly consumes most of the resources of even the most powerful machines) Significantly longer battery life (the CPU consumes a lot more energy when it is busy) Significantly less noise (MacBooks crank up the fans to deal with the extra heat) No more annoying and invasive advertisements (virtually all of the most annoying ads are Flash) Less distractions (while sites like YouTube have legitimate uses, the overwhelming majority of time spent there is procrastination) A better Internet (Adobe's penetration figures are already complete bullshit but by voting NO to Flash you're sending developers a strong message) An open Internet (Adobe Flash is a proprietary plugin that hampers the adoption of open standards like HTML 5) A level playing field with one less monopoly (Adobe was the first company to achieve near-ubiquitous penetration rate with a proprietary plug-in, and it will hopefully be the last. Late entrants like Silverlight don't stand a chance because there is just no incentive.) Without further ado (as I'm running out of juice):Download the Adobe Flash Player uninstaller for your system (e.g. uninstall_flash_player_osx.dmg) Open the Flash Player Uninstaller: Authenticate: Watch: Done: Enjoy a Flash-free computing experience (it only takes about 30 seconds). PS: You might be surprised to find that (provided you're using a recent browser like Safari 4, Chrome, Firefox 3.5, etc.) videos such as those at Apple.com (including the Get a Mac ads) as well as sites like DailyMotion's OpenVideo will "just work", natively, in the browser, without Flash. That's the future right there... PPS: For the fanbois on whom the message that I'm not interested is lost, feel free to flame away below. The demise of Flash is going to happen, probably sooner than you would like, so why endure another day? Update: After 2 weeks without Flash I've had far fewer problems, can open many more tabs and have not had to restart my browser at all. Even YouTube has its own HTML5 video demo pages up now so it's only a matter of time before Flash will be relegated to the wonderful world of Internet advertising. For those who are stuck with Flash for whatever reason I recommend ClickToFlash which at least prevents it from being loaded without user interaction.
It's no secret that I'm no fan of Adobe Flash:
GSM, at least in its current form, is dead and the GSMA's attempts to downplay serious vulnerabilities in claiming otherwise reminds me of this rather famous Monty Python sketch about a dead parrot: Fortunately consumers these days are savvy and have access to information with which to verify (or not) vendors' claims about security. So when they get together and say things like "the researchers still would need to build a complex radio receiver to process the raw radio data" the more cynical of us are able to dig up 18 month old threads like this one which concludes: So it appears you might be able to construct a GSM sniffer from a USRP board and a bunch of free software, including a Wireshark patch. (It appears that one of the pieces of free software required is called "Linux" or "GNU/Linux", depending on which side of that particular debate you're on :-), i.e. it works by using Linux's tunnel device to stuff packets into a fake network interface on which Wireshark can capture.Ok so extracting the 1's and 0's from the airwaves and getting them into the most convenient (open source) framework we have for the dissection of live protocols is a problem long since solved. Not only are the schematics publicly available, but devices are commercially available online for around $1,000. One would have assumed that the GSMA should have known this, and presumably they did but found it preferable to turn a blind eye to the inconvenient truth for the purposes of their release. The real news though is in the cracking of the A5/1 encryption which purports to protect most of us users by keeping the voice channels "secure". Conversely the control information which keeps bad guys from stealing airtime is believed to remain safe for the time being. That is to say that our conversations are exposed while the carriers' billing is secure - an "externalisation" of risk in that the costs are borne by the end users. You can bet that were the billing channels affected then there would have been a scramble to widely deploy a fix overnight rather than this poor attempt at a cover-up. The attack works by creating a 2Tb rainbow table in advance which allows one to simply look up a secret key rather than having to brute force it. This should be infeasible even for A5/1's 64-bit key but "the network operators decided to pad the key with ten zeros to make processing faster, so it's really a 54-bit key" and there are other weaknesses that combine to make this possible. A fair bit of work goes into creating the table initially, but this only needs to be done once and you can buy access to the tables as a service as well as the tables themselves for many common hashes (such as those used to protect Windows and Unix passwords - and no doubt GSM soon too!). The calculations themselves can be quite expensive but advances like OpenCL in the recently released Mac OS X (Snow Leopard) can make things a lot better/faster/cheaper by taking advantage of extremely performant graphics processing units (GPUs). Of course thanks to cloud computing you don't even need to do the work yourself - you can just spin up a handful of instances on a service like Amazon EC2 and save the results onto Amazon S3/Amazon EBS. You can then either leave it there (at a cost of around $300/month for 2Tb storage) and use instances to interrogate the tables via a web service, or download it to a local 2Tb drive (conveniently just hitting the market at ~$300 once off). Cloud storage providers could make the task even easier with services like public data sets which bring multi-tenancy in the form of de-duplication benefits to common data sets. For example, if Amazon found two or more customers storing the same file they could link the two together and share the costs between all of them (they may well do this today, only if they do they keep the benefit for themselves). In the best case such benefits would be exposed to all users in which case the cost of such "public domain" data would be ra
As you are no doubt well aware there is a large and increasing amount of noise about cloud computing, so much so that it's becoming increasingly difficult to extract a clean signal. This has always been the case but now that even vendors like Oracle (who have previously been sharply critical of cloud computing, in part for exactly this reason) are clambering aboard the bandwagon, it's nearly impossible to tell who's worth listening to and who's just trying to sell you yesterday's technology under today's label.
I came across an unsurprising but nonetheless disconcerting revelation today that is gives a very good example of what most of us knew all along: that "public comment" process are routinely subverted by commercial interests, generally at the public's expense. It comes in the form of a smoking gun courtesy DSL Reports: Who Knew Senior Citizens Hated Net Neutrality? There is currently an extremely important battle underway over securing Net Neutrality regulations and another where big media are actively attacking (by way of three-strikes policies like HADOPI in France) what is fast becoming a legal right: broadband access (thanks to Finland for getting the ball rolling: Fast Internet access becomes a legal right in Finland). Us (US?) consumers recently had a big win with the FCC getting on board the Open Internet bandwagon but not afraid to flog a dead horse, industry lobbyists have rolled out an army of puppets parroting their position; that Net Neutrality is somehow opposed to broadband adoption (which could not be further from the truth). In this case it's the Arkansas Retired Seniors Coalition, purporting to represent (surprise, surprise) retired seniors in Arkansas, ignoring the fact that your average senior quite probably doesn't know what net neutrality is, let alone care about it! They do care about Internet access though and as the slowest state in the south all it would take would be a seemingly suitable scapegoat and you'd have pitchforks in the streets. My guess is they don't even know the position taken by their representatives which makes this letter sent on their behalf at least deceitful: Arkansas Retired Seniors Coalition Net Neutrality Letter The problem which such astroturfing is that it makes public opinion both harder to reliably collect and easier to dismiss. Such shenanigans appear far more prevalent in the US than other countries I've lived in, but regulations there (e.g. DMCA) tend to flow on to the rest of us eventually so it's in everyone's interest to have their say. There really should be something done about the issue, however most solutions are relatively difficult to enforce. Examples include requiring a statutory declaration component such that egregious abuses can be punished (and to make people think twice about misrepresenting others), or requiring the individuals represented to make an overt act such as signing a petition. Rejecting messages that are too similar, and therefore obviously templates, raises the bar somewhat but does not stop determined attackers. The long term solution likely comes in the form of digital identity, whereby each individual can be reliably authenticated and the cost of involving them in decisions trends towards zero. As referendums are extremely expensive and inefficient (despite the availability of technology that could put them within reach for routine decision-making) we appoint representatives who we hope will accurately reflect our views on each of the topics. Obviously this is rare - for example your representative might share your views on fiscal policy but reject gay marriage in which case you have to choose what is more important to you. An arguably better solution is where individuals can take part in all decisions they care about, which is called a direct democracy (or pure democracy), and the use of technology to achieve better representation is a separate but related concept known as e-democracy. We should be paying more attention to both as it's like we only got half way there by establishing representative democracies in most of the western world.
I've spent the last week jetting about for meetings and CloudCamps but now I'm trawling through the week's news and email it seems I'm not the only one who's been busy. On Wednesday SYS-CON announced the Cloud Security Journal on Reuven Cohen's behalf:
Reuven's notorious for poking a finger in every pie but this development is particularly controversial given the existence of the Cloud Security Alliance and his company, Enomaly's average security track record. He already ruffled feathers by "Introducing the CSA" back in March so it struck me as odd that he should have risked a similar backlash some months later.Reuven Cohen Launches Cloud Security Journal on Ulitzer
Providing Insight Into the Cloud Computing Security, Privacy and Related Threats
BY LIZ MCMILLANSEPTEMBER 23, 2009 10:45 PM EDTCloud Security Journal offers dedicated coverage of cloud security & privacy news, practical insights and editorials that give readers a unique virtual perspective of the rapidly evolving area of cloud security, threats and privacy.
Reuven Cohen is Founder & Chief Technologist for Toronto based Enomaly Inc. - leading developer of Cloud Computing products and solutions focused on enterprise businesses.Enomaly's products include the Enomaly elastic computing platform, an open source cloud platform that enables a scalable enterprise IT and local cloud infrastructure platform. Cohen is a thought leader in the emerging cloud computing industry and maintains a blog at www.elasticvapor.com.
This is one of those random thoughts that fits in a tweet but deserves a little more explanation. Like most I currently pay around €100 a month for a mobile package that includes some texts, airtime (2+2 hours on and off peak), some data and usually some useless gimmicks (free calls at certain times or to certain phones, etc.). This of course makes it truly impossible to compare apples to apples and I almost feel like choosing the right plan should be a profession (I'm sure there must be businesses that do this for a living).
Under the covers though it's all just 1's and 0's and it's been that way for a while - Australia turned off it's analog mobile network (AMPS) while I was still there and like here in Europe uses the Global Standard for Mobiles (GSM). This shares the limited airwaves with timeslices (TDMA) and over in the US they do a similar thing with code (CDMA), probably because TDMA has timing problems when you get out to tens of kilometers (irrespective of the strength of the signal) and the US has a lot of land to cover. Point is that under the covers it's all data. Of course things have changed a bit since I was helping design Australia's first digital mobile network - now we've got 3G, LTE, WiFi, WiMax, etc. to play with too.
Traditional telephony was what we call "circuit switched", which means it was about creating a dedicated connection between two endpoints. First these were hardwired, then switched manually by operators, then clicks on the line would operate mechanical switches at the exchange, more recently tones (DTMF) would tell chips what to do and nowdays connections are set up out-of-band over data connections. But it all still revolves around circuits, even though these days we're not tying up a pair of copper for the duration of the call, rather sending as much data as we need to when we need it (silence often uses little or no bandwidth but then we have to simulate background noise at the other end so as not to confuse the human).
That is to say it's time we stopped thinking about circuits which tend to be billed by time (after all, the resource could not be shared when you were using it) and start thinking about data (which is typically billed by quantity transferred or bandwidth available). In other words we are paying (generally more) for our communications because of technological limitations that have long since been removed. Even Skype go to great lengths to identify which country you are calling from so as to impose the legacy billing system we are used to (so many cents per minute depending on the country) rather than take advantage of what the Internet has to offer in terms of being unaffected by geography.
Then there's texts which are an even bigger rort. These were basically an afterthought which are sent out-of-band over the relatively limited control channel - the one that's used to set up calls and so on (that's why they take a while to send and why you can jam a phone by sending/receiving too many). Knowing that everything is 1's and 0's anyway, did you ever stop to think about how many texts a minute of voice is worth (even using strong compression)? It's a *lot* but let's work it out. Full rate GSM consumes 13Kbps or just shy of 100,000 8-bit characters per minute assuming my maths are correct. Each SMS is 140 8-bit (or 160 7-bit) characters or around 700 texts per minute. In Australia those texts cost $0.25 each so we're paying $175.00 a minute to consume the bandwidth as texts when we'd pay around $0.50 to consume it as voice. You can see why they love them now, can't you!
The telcos have been on the gravy train for long enough at our expense and it's long since been time for the next generation of carrier to take over. There's a massive opportunity here for someone to enter the market with a data-only service and in doing so destroy the existing industry literally overnight. We've already got devices (iPhones, Android) that are more than capable of doing everything we need over data, but which are being deliberately crippled by hardware and software vendors in order to protect the legacy carriers. That's not to say that Apple and Google are to blame for contracts they are almost certainly forced into by the likes of AT&T, but seeing Google taking the high road while having to concede that "individual operators can request that certain applications be filtered if they violate their terms of service" is disappointing.
Why can't we have Google Voice on the iPhone? Or use Skype over 3G (without jailbreaking and installing 3G Unrestrictor)? Or open source/open standard SIP telephony for that matter? Why are we sending texts when we have instant messaging? Or dialing in to retrieve voicemails that could just as easily be translated and/or emailed? Why are we paying for silence on the line when we should be paying for bandwidth and/or quantity of data? Why do we pay for minutes at all?
The telcos will tell you it's to protect their networks, and ultimately to protect you, no doubt from the evils of illegal filesharing, terroristing and child pornography. There's an element of truth to this (it only takes a few greedy customers to ruin it for the rest and as always 10% of the users use 90% of the traffic), ut there are simple, effective solutions for this too. People will pay more for a premium/priority service and at the end of the day you can always reign in abusers with packet shaping. The fairest mechanism I can think of comes in the form of a logarithmic bandwidth policy whereby the more you use the slower you go, but the point is that there are solutions so this is pure FUD. My "unlimited" data connection was just throttled from 3G+ to 3G speeds at 800Mb and again at 1000 Mb (so much for unlimited), but I'd happily pay more for a more "unlimited" service if it meant I could say goodbye to minutes and texts forever.
It will happen - it's just a case of when (and where first). Australia's regularly used as a test market and capped ($99 all you can talk) style plans took over by storm a few years ago, so let's just help an existing innovative carrier like 3 or a new one altogether teach the incumbents a lesson, with any luck by the time I get back there.
At the recent FOMS/LCA in Wellington, New Zealand, we talked a lot about how Ogg could support accessibility. Technically, this means support for multiple text tracks (subtitles/captions), multiple audio tracks (audio descriptions parallel to main audio track), and multiple video tracks (sign language video parallel to main video track).
Creating multitrack Ogg files
The creation of multitrack Ogg files is already possible using one of the muxing applications, e.g. oggz-merge. For example, I have my own little collection of multitrack Ogg files at http://annodex.net/~silvia/itext/elephants_dream/multitrack/. But then you are stranded with files that no player will play back.
Multitrack Ogg in Players
As Ogg is now being used in multiple Web browsers in the new HTML5 media formats, there are in particular requirements for accessibility support for the hard-of-hearing and vision-impaired. Either multitrack Ogg needs to become more of a common case, or the association of external media files that provide synchronised accessibility data (captions, audio descriptions, sign language) to the main media file needs to become a standard in HTML5.
As it turn out, both these approaches are being considered and worked on in the W3C. Accessibility data that are audio or video tracks will in the near future have to come out of the media resource itself, but captions and other text tracks will also be available from external associated elements.
The availability of internal accessibility tracks in Ogg is a new use case – something Ogg has been ready to do, but has not gone into common usage. MPEG files on the other hand have for a long time been used with internal accessibility tracks and thus frameworks and players are in place to decode such tracks and do something sensible with them. This is not so much the case for Ogg.
For example, a current VLC build installed on Windows will display captions, because Ogg Kate support is activated. A current VLC build on any other platform, however, has Ogg Kate support deactivated in the build, so captions won’t display. This will hopefully change soon, but we have to look also beyond players and into media frameworks – in particular those that are being used by the browser vendors to provide Ogg support.
Multitrack Ogg in Browsers
Hopefully gstreamer (which is what Opera uses for Ogg support) and ffmpeg (which is what Chrome uses for Ogg support) will expose all available tracks to the browser so they can expose them to the user for turning on and off. Incidentally, a multitrack media JavaScript API is in development in the W3C HTML5 Accessibility Task Force for allowing such control.
The current version of Firefox uses liboggplay for Ogg support, but liboggplay’s multitrack support has been sketchy this far. So, Viktor Gal – the liboggplay maintainer – and I sat down at FOMS/LCA to discuss this and Viktor developed some patches to make the demo player in the liboggplay package, the glut-player, support the accessibility use cases.
I applied Viktor’s patch to my local copy of liboggplay and I am very excited to show you the screencast of glut-player playing back a video file with an audio description track and an English caption track all in sync:
elephants_dream_with_audiodescriptions_and_captions
Further developments
There are still important questions open: for example, how will a player know that an audio description track is to be played together with the main audio track, but a dub track (e.g. a German dub for an English video) is to be played as an alternative. Such metadata for the tracks is something that Ogg is still missing, but that Ogg can be extended with fairly easily through the use of the Skeleton track. It is something the Xiph community is now working on.
Summary
This is great progress towards accessibility support in Ogg and therefore in Web browsers. And there is more to come soon.
![]()
Recently, I was asked for some help on coding with an HTML5 video element and its events. In particular the question was: how do I display the time position that somebody seeked to in a video?
Here is a code snipped that shows how to use the seeked event:
<video onseeked="writeVideoTime(this.currentTime);" src="video.ogv" controls></video>
<p>position:</p><div id="videotime"></div>
<script type="text/javascript">
// get video element
var video = document.getElementsByTagName("video")[0];
function writeVideoTime(t) {
document.getElementById("videotime").innerHTML=t;
}
</script>
Other events that can be used in a similar way are:
Please refer to the actual event list in the specification for more details and more accurate information on the events.
![]()


Fergusson Falls, Overland Track, Tasmania
After exiting from these falls, I managed to slip on the track and land on my knee, bruising it quite badly. Fortunately, I was still able to walk. Once I got back to my pack, I put the camera away and focussed on getting through the next 5kms to the next hut and catching up with the rest of the group.
I previously wrote about how the National Broadband Network (NBN) seems more suited to porn delivery than regular Internet use [1]. It doesn’t seem to be of much use really. In a particularly insightful comment John Hughes suggested that the real purpose would be TV delivery. The ABC is currently delivering 640*360 resolution MPEG4 [...]
![]()
For some time the film industry has been running an anti-piracy campaign with slogans such as “you wouldn’t steal a car” [1] in an attempt to draw a false analogy between downloading a movie and stealing a significant and valuable object – the modern equivalent to being a “horse thief“. One of the many [...]
Currently we have a new “National Broadband Network” under construction in Australia [1]. It is going to cost $43,000,000,000 which is $5,000 per household. It is designed to deliver 100Mb/s speeds to most homes – that is the homes that can currently get more than 8Mb/s through ADSL2+ or cable connections. The question is, [...]
Mikael noted in my previous post that Con Kolivas’s lrzip is another interesting compressor. In fact, Con has already done a simple 64-bit enhance of rzip for lrzip, and on our example file it gets 56M vs 55M for xz (lrzip in raw mode, followed by xz, gives 100k worse than just using lrzip: lrzip already uses lzma).
Assuming no bugs in rzip, the takeaway here is simple: rzip should not attempt to find matches within the range that the backend compressor (900k for bzip2 in rzip, 32k for gzip, megabytes for LZMA as used by lrzip). The backend compressor will do a better job (as shown by similar results with lrzip when I increase the hash array size so it finds more matches: the resulting file is larger).
The rzip algorithm is good at finding matches over huge distances, and that is what it should stick to. Huge here == size of file (rzip does not stream, for this reason). And this implies only worrying about large matches over huge distances (the current 32 byte minimum is probably too small). The current version of rzip uses an mmap window so it never has to seek, but this window is artificially limited to 900MB (or 60% of mem in lrzip). If we carefully limit the number of comparisons with previous parts of the file, we may be able to reduce them to the point where we don’t confuse the readahead algorithms and thus get nice performance (fadvise may help here too) whether we are mmaped or seeking.
I like the idea that rzip should scale with the size of the file being compressed, not make assumptions about today’s memory sizes. Though some kind of thrash detection using mincore might be necessary to avoid killing our dumb mm systems :(
I am pleased to announce the immediate availability of the Open Elastic Computing Platform (OpenECP) Version 4.0 Alpha (openecp-4.0alpha.tar.gz), provisionally tested on Debian GNU/Linux 5.0 (screenshots). This is an open source fork of the Enomaly ECP product following its abrupt commercialisation in November 2009, which resolves a number of serious security vulnerabilities. For more information refer to: http://www.openecp.org/OpenECP is a web-based management platform for Linux-based hypervisors including KVM and Xen which can be used to create "public" and "private" cloud computing environments. It will always be freely available under the Affero General Public License v3 or similar. Features Xen, KVM, Qemu, OpenVZ, Amazon EC2 support Multiple OpenECP server support RESTful Web Services API Dashboard with metering, chargeback Automated virtual machine (VM) deployment Support Technical support is provided by the community, however as an open source product anyone is free to support and extend it. Background This release was forked from the most recent version of Enomaly ECP as at 2010-02-09 (3.0.4 with a number of additional revisions), as distributed under the Affero GPL v3 by Enomaly, Inc. In order to avoid any potential intellectual property issues, all references to Enomaly™ have been scrubbed from the distribution (in the same way that references to RedHat have been purged from CentOS). The unmodified Enomaly ECP code (enomaly-ecp-3.0.4.1.tar.gz) is also available along with a non-maintainer release which resolves all known security issues (enomaly-ecp-3.0.4.2.tar.gz) as it appears that Enomaly have no plans to address these outstanding issues. Update: Enomaly have responded with this comparison chart (however this changelog proves a common lineage):
![]()
Just when I thought we were going to be looking at another trademark debacle not unlike Dell's attempt at "cloud computing" back in 2008 (see Dell cloud computing™ denied) it seems luck is with us in that Trend Micro have abandoned their application #77018125 for a trademark on the term Intercloud (see NewsFlash: Trend Micro trademarks the Intercloud™). They had until 5 February 2010 to file for an extension and according to USPTO's Trademark Document Retrieval system they have now well and truly missed the date (the last extension was submitted at the 11th hour, at 6pm on the eve of expiry).
Like Dell, Trend Micro were issued a "Notice of Allowance" on 5 August 2008 (actually Dell's "Notice of Allowance" for #77139082 was issued less than a month before, on 8 July 2008, and cancelled just afterwards, on 7 August 2008). Unlike Dell though, Trend Micro just happened to be in the right place at the right time rather than attempting to lay claim to an existing, rapidly developing technology term ("cloud computing").
Having been issued a Notice of Allowance both companies just had to submit a Statement of Use and the trademarks were theirs. With Dell it was just lucky that I happened to discover and reveal their application during this brief window (after which the USPTO cancelled their application following widespread uproar), but with Trend Micro it's likely they don't actually have a product today with which to use the trademark.
A similar thing happened to Psion late 2008, who couldn't believe their luck when the term "netbook" became popular long after they had discontinued their product line by the same name. Having realised they still held an active trademark, they threatened all and sundry over it, eventually claiming Intel had "unclean hands" and asking for $1.2bn, only to back down when push came to shove. One could argue that as we have "submarine patents", we also have "submarine trademarks".
In this case, back on September 25, 2006 Trend Micro announced a product coincidentally called "InterCloud" (see Trend Micro Takes Unprecedented Approach to Eliminating Botnet Threats with the Unveiling of InterCloud Security Service), which they claimed was "the industry’s most advanced solution for identifying botnet activity and offering customers the ability to quarantine and optionally clean bot-infected PCs". Today's Intercloud is a global cloud of clouds, in the same way that the Internet is a global network of networks - clearly nothing like what Trend Micro had in mind. It's also both descriptive (a portmanteau describing interconnected clouds) and generic (in that it cannot serve as a source identifier for a given product or service), which basically means it should be found ineligible for trademark protection should anyone apply again in future.
Explaining further, the Internet has kept us busy for a few decades simply by passing packets between clients and servers (most of the time). It's analogous to the bare electricity grid, allowing connected nodes to transfer electrical energy between one another (typically from generators to consumers but with alternative energy sometimes consumers are generators too). Cloud computing is like adding massive, centralised power stations to the electricity grid, essentially giving it a life of its own.
I like the term Intercloud, mainly because it takes the focus away from the question of "What is cloud?", instead drawing attention to interoperability and standards where it belongs. Kudos to Trend Micro for this [in]action - whether intentional or unintentional.
Popular Mechanics has a good article about 911 [1]. Experts in all the relevant fields were consulted to debunk popular myths. It’s an old article but I hadn’t read it before and learned a lot. Former CIA analyst Raw McGovern and former FBI attorney/special agent Coleen Rowley, a colleague in Veteran Intelligence Professionals for [...]


D'Alton Falls, Overland Track, Tasmania
The Telegraph has a silly article titled “Aliens are likely to look and behave like us” [1]. It’s based on the ideas of Professor Simon Conway Morris [2] who is a big fan of evolutionary convergence. He seems to believe that humans evolved in a way that is close to optimal and that [...]
As the kernel archive debates replacing .bz2 files with .xz, I took a brief glance at xz. My test was to take a tarball of the linux kernel source (made from a recent git tree, but excluding the .git directory):
linux.2.6.tar 395M
For a comparison, bzip2 -9, rzip -9 (which uses bzip2 after finding distant matches), and xz:
linux.2.6.tar.bz2 67M
linux.2.6.tar.rz 65M
linux.2.6.tar.xz 55M
So, I hacked rzip with a -R option to output non-bzip’d blocks:
linux.2.6.tar.rawrz 269M
Xz on this file simulates what would happen if rzip used xz instead of libbz2:
linux.2.5.tar.rawrz.xz 57M
Hmm, it makes xz worse! OK, what if we rev up the conservative rzip to use 1G of memory rather than 128M max? And the xz that?
linux.2.6.tar.rawrz 220M
linux.2.6.tar.rawrz.xz 58M
It actually gets worse as rzip does more work, implying xz is finding quite long-distance matches (bzip2 won’t find matches over more than 900k). So, rzip could only have benefit over xz on really huge files: but note that current rzip is limited on filesize to 4G so it’s a pretty small useful window.
Dell has been offering Ubuntu on selected models for a while. I had however nearly given up hope on being able to buy one, because they hadn’t started doing that in Australia. I am very glad to see this has changed though – check out their notebook page. Not all models yet, but a reasonable [...]
I'm so tired from the weekend, I read a couple of subscripts as if they were just normal script. So ln(x_k)/n became k*ln(x_k)/n in my summation over k. That didn't work very well.
![]()
I’ve just bought a Thinkpad T61 at auction for $AU796. My Thinkpad T41p has cooling problems which I have previously described[1]. It’s also started to rattle a bit when I hold it upside down since I took it apart so I guess I didn’t do a great job at trying to fix it [...]
I don’t think that the answer is “everyone” or even “everyone other than my geeky friends“, but obviously it is a large number of people. Many people apparently type “facebook” into Google and try to login to the first thing that they see, if it happens to not be Facebook then they whine – this became [...]
![]()


Mt Ossa Track, Overland Track, Tasmania
With the weather diminishing to a light shower tending to drizzle, there wasn't much more photography. We set up our tents, prefering the rain over the cramped conditions in the hut, had some food, and went to sleep.
As I've been doing more martial arts/active stuff, my body awareness has been increasing. Recently I've realised that when I try to stretch my left leg, I reflexively tilt my spine to the right to reduce the difficulty of the stretch, which lessens the effectiveness of the stretch (and the discomfort!). I think I got some sort of injury in my childhood and learned to compensate, and I've probably been doing it ever since. So now that I'm more aware of it, I can start to fix it.
![]()
I have talked a lot about synchronising multiple tracks of audio and video content recently. The reason was mainly that I foresee a need for more than two parallel audio and video tracks, such as audio descriptions for the vision-impaired or dub tracks for internationalisation, as well as sign language tracks for the hard-of-hearing.
It is almost impossible to introduce a good scheme to deliver the right video composition to a target audience. Common people will prefer bare a/v, vision-impaired would probably prefer only audio plus audio descriptions (but will probably take the video), and the hard-of-hearing will prefer video plus captions and possibly a sign language track . While it is possible to dynamically create files that contain such tracks on a server and then deliver the right composition, implementation of such a server method has not been very successful in the last years and it would likely take many years to roll out such new infrastructure.
So, the only other option we have is to synchronise completely separate media resource together as they are selected by the audience.
It is this need that this HTML5 accessibility demo is about: Check out the demo of multiple media resource synchronisation.
I created a Ogg video with only a video track (10m53s750). Then I created an audio track that is the original English audio track (10m53s696). Then I used a Spanish dub track that I found through BlenderNation as an alternative audio track (10m58s337). Lastly, I created an audio description track in the original language (10m53s706). This creates a video track with three optional audio tracks.
I took away all native controls from these elements when using the HTML5 audio and video tag and ran my own stop/play and seeking approaches, which handled all media elements in one go.
I was mostly interested in the quality of this experience. Would the different media files stay mostly in sync? They are normally decoded in different threads, so how big would the drift be?
The resulting page is the basis for such experiments with synchronisation.
The page prints the current playback position in all of the media files at a constant interval of 500ms. Note that when you pause and then play again, I am re-synching the audio tracks with the video track, but not when you just let the files play through.
I have let the files play through on my rather busy Macbook and have achieved the following interesting drift over the course of about 9 minutes:
You will see that the video was the slowest, only doing roughly 540s, while the Spanish dub did 560s in the same time.
To fix such drifts, you can always include regular re-synchronisation points into the video playback. For example, you could set a timeout on the playback to re-sync every 500ms. Within such a short time, it is almost impossible to notice a drift. Don’t re-load the video, because it will lead to visual artifacts. But do use the video’s currentTime to re-set the others. (UPDATE: Actually, it depends on your situation, which track is the best choice as the main timeline. See also comments below.)
It is a workable way of associating random numbers of media tracks with videos, in particular in situations where the creation of merged files cannot easily be included in a workflow.
libreplace is the SAMBA library (also used in ctdb) to provide working implementations of various standard(ish) functions on platforms where they are missing or flawed. It was initially created in 1996 by Andrew Tridgell based on various existing replacement hacks in utils.c (see commit 3ee9d454).
The basic format of replace.h is:
#ifndef HAVE_STRDUP
#define strdup rep_strdup
char *rep_strdup(const char *s);
#endif
If configure fails to identify the given function X, rep_X is used in its place. replace.h has some such declarations, but most have migrated to the system/ include directory which has loosely grouped functions by categories such as dir.h, select.h, time.h, etc. This works around the “which header(s) do I include” problem as well as guaranteeing specific functions.
Other than reading this code for a sense of Unix-like paleontology (and it’s so hard to tell when to remove any of these helpers that cleanups are rare) we can group replacements into three categories:
Since it’s autoconf-based, it uses the standard #ifdef instead of #if (a potential source of bugs, as I’ve mentioned before). I’ll concentrate on the insufficiently-general issues which can bite users of the library, and a few random asides.
#ifndef HAVE_DLERROR
char *rep_dlerror(void)
{
return "dynamic loading of objects not supported on this platform";
}
#endif
This cute message for runtime failure allows your code to compile, but isn’t helpful if dlopen was a requirement. Also, this should use strerror for shl_load.
I’m not sure Samba compiles on as many platforms as it used to; Perl is probably a better place for this kind of library to have maximum obscure-platform testing. But if I were to put this in CCAN, this would make an excellent start.
![]()


Mt Ossa Track, Overland Track, Tasmania
![]()
File Under: Stuff I'm guaranteed to forget if I don't write it down
I just went a bit wild and decided to get myself some mobile broadband love -- I'm finding that I crave a bit of light 'net when I'm out and about, and an impending change in circumstances will mean that I'm out and about a lot more than I am currently.
I have:
My wvdial.conf stanza looks like:
[Dialer virgin] Init1 = ATZ Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 Init3 = AT+CGDCONT=1,"IP" "VirginBroadband" Stupid Mode = 1 ISDN = 0 Phone = *99# Modem = /dev/ttyUSB0 Modem Type = USB Modem Username = irrelevant Dial Command = ATDT Password = irrelevant Baud = 460800
I also had to disable CHAP (by putting -chap in /etc/ppp/options, although I suspect the same would have worked in /etc/ppp/peers/wvdial).
After that, a simple sudo wvdial virgin and I was away.
Scarily enough, there was actually some useful information on the Virgin support site regarding the settings, which helped me confirm that I was on the right track. I have no doubt that the universe will find some alternate means of punishing me down the line.
Dear Judoka of the world,
If you're going to be doing ground fighting/ne waza, please brush your teeth.
Your pal,
Mark
![]()
Wow, I can’t believe it has been over two years since I last wrote about Android’s for of the QEMU emulator. Turns out there have been some changes since I last looked at it.
The most important is that the Android emulator no longer has a
fixed layout of devices in the physical memory address space. So,
while it may have previously been the case that the event device was
always at 0xff007000, now it might be at
0xff008000, or 0xff009000, depending on what
other devices have been configured for a particular device
configuration.
Now, if a device may exist at some random physical address, how
does the OS know how to setup the devices drivers? Well, as I’m
sure you’ve guessed, the addresses and really random, they
are located at page-offset addresses through a restricted range of
memory. OK, so how does the OS know what the range is? Well, there is
the goldfish_device_bus device.
Basically, this device provides a mechanism to enumerate the
devices on the bus. The driver writes PDEV_BUS_OP_INIT to
the PDEV_BUS_OP register, the
goldfish_device_bus then raises an interrupt. The driver
the reads the PDEV_BUS_OP register. Each time the value
is PDEV_BUS_OP_ADD_DEV, the driver can read the other
registers such as PDEV_BUS_IO_BASE,
PDEV_BUS_IO_SIZE, PDEV_BUS_IRQ, to determine
the properties of the new device. It continues doing this until it
reads a PDEV_BUS_OP_DONE, which indicates the bus scan
has finished.
The driver can determine what type of device it has found by
writing a pointer to the PDEV_BUS_GET_NAME register. When
this happens the device writes an the device’s name (as an ASCII
string) to the pointer.
Linux uses these strings to perform device to driver matching as described in the Platform Devices and Drivers document.
Over the last few days I’ve got this blog and my documents blog to conform to valid XHTML according to the W3C validation service [1]. One significant change that I made was to use lower-case for HTML tags. For about 15 years I’ve been using capitals for tags to make them stand out from content [...]
![]()
The main sources of information used when hiring someone are their CV, the interview, and references. CV The CV is written by the applicant or sometimes for the applicant. Naturally it says only good things, if a CV notes no skill in a particular area then it may be used to exclude an employee from consideration. [...]
![]()