July 02, 2009

Pia Waugh's hackergotchi

Pia Waugh

My top 10 songs of all time

So I didn’t actually get to vote in the Triple J top 100 of all time. I feel really stupid to have missed it! I was just asked (live on radio) whether I had voted and I stupidly said yes intending to get straight off the phone and onto the voting, but it was closed! So below are my top 10 songs of all time, some for technical reasons, all for emotional. Thought it might be of interest to some :)

Meme time!

In no particular order:

  • Gorecki – Lamb. Our wedding  song :) About finding that person that just completes you, that complements and helps you want to be a better person. A beautiful song and a beautiful voice.
  • Smells Like Teen Spirit – Nirvana. Changed everything, and yet so simple. Influenced a generation.
  • Shame – Stabbing Westward. My favourite angsty teenage song. Once went to a Live (the band) concert just to see Stabbing Westward play support, and then left ;) The man has an incredible voice.
  • H – Tool. I love a lot of the older Tool music, this particular one reminds me of  a close friend who died very young in very unfortunate circumstances.
  • We’re in this together – Nine Inch Nails. I love pretty much every NIN song, but this one really talks to me about regardless of everything going on, none of us are truly alone.
  • Fade to Black – Metallica. One of their best songs, and one that influenced me to learn guitar in the first place.
  • Burn – The Cure. an amazing (and dark) song from The Crow soundtrack. One of their best in my opinion. Admittedly takes me back to school :)
  • Cornflake Girl – Tori Amos. Beautiful, powerful and disturbing. Worth looking into the deeper meaning.
  • Classical Gas – Mason Williams. An incredible guitar piece that puts me in an almost meditative state when I play it. Technically challenging but also a joy to play and listen to.
  • Pathetique – Beethoven. Such an exquisite piano piece, and when played well covers about the entire scope of human emotion. Fun to play too, but I’ve yet to master it :)

There are so many more songs I love, and I’m sure given more time I’d rejig this another dozen times. So I’ll leave it there :) Apart from one last honorary mention:

  • Space Cadet – Kyuss. Couldn’t leave this off. This 3 person rock band had such a big sound, such a complex and incredible mix. Great fun to play on the bass. Demon Cleaner also very worth listening to.

July 02, 2009 11:44 AM

Dave Airlie

radeon DDX has initial KMS support

So we've had an -ati DDX with KMS support in a branch for quite a while, but it was starting to grow into a very big mess, and some of the hacks in it were quite unmaintainable.

So started cleaning it up and pushing the bits to master.

Step 1 was adding macros in all the places in the accel code to abstract away the different command submission methods, and
add some ifs to do KMS specific things. Once this was done in theory the accel code wouldn't functionally regress and wouldn't require any more changes.

Step 2 was bringing over the kms and DRI2 support files from the branch.

Step 3 was making the decision between if (kms) if (!kms) blocks all over radeon_driver.c in all the various functions or having a nearly completely separate KMS/DRI2 driver file. The original code has the if approach and it was an unmaintainable nightmare, so I opted for approach 2 and it definitely is the best. At driver probe time in radeon_probe.c, I now do the KMS check if the pciaccess probe is called (kms without pciaccess is probably not going to matter). If I get KMS supported the driver picks a nearly completely different set of functions for PreInit/ScreenInit etc. I now have a separate radeon_kms.c file which has all the DDX interface in it. Of course if we have any changes they may need to be done in two places, but its a lot cleaner than it was in the other codebase.

I also ported the KMS code to use the libdrm_radeon buffer management code which is shared with mesa, instead of the DDX having its own buffer manager code base. This code is well tested via mesa, however it hasn't got all the features/optimisations that I've added to the DDX bufmgr over the last while.

So what's left:
Missing optimisation from old buffer manager:
1. buffer in VRAM? has the buffer ever explicitly been validated to VRAM, this allow for an optimisation on download from screen.
2. Download from screen, with driver pixmaps we don't know if the buffer is in VRAM or GTT, with (1) we can either blit if in VRAM, or just memcpy if in GART.
3. force a buffer to validate in GTT or force a buffer to stay in fast CPU access space - this was really useful some sw fallbacks where a buffer would end up in VRAM and then get used by the CPU from there. It probably only really takes the place of fixing EXA properly so the pixmap scoring is separate from the offscreen memory, and having a XA that works with driver pixmaps a lot better.
4. bugs and crashes I appear to be hitting a realloc crash at some point where glibc reenters itself and fails.

July 02, 2009 06:09 AM

July 01, 2009

Sonia Hamilton

Firefox – default paper size A4


A bug that has been dragging on for years – Firefox under Ubuntu (and other distros) doesn’t respect the locale setting, and defaults to printing in US Letter size – grrrr…

Firefox: Guide for the Perplexed seems to suggest:

  • about:config
  • print.postscript.paper_size set to “A4″

Now to see if it holds, and work out a way to script this (I have a set of bash scripts that keeps all my Ubuntu desktops the same).

July 01, 2009 10:39 PM

Erik de Castro Lopo

Three More for the Debian New Queue.

Over the last couple of weeks I've managed to get three new packages into the Debian NEW queue :

  • haskell-polyparse - A variety of alternative parser combinator libraries for Haskell (this is a dependency for later versions of HaXml).
  • haskell-dataenc - A Haskell library of data encoders and decoders like Base64, uuencoding etc.
  • haskell-json - Haskell library for serialising data to and from JSON.

Thanks to Simon Horman for sponsoring/uploading the first two of and Matt Palmer for sponsoring/uploading haskell-json.

July 01, 2009 09:01 AM

Silvia Pfeiffer

Open Video Conference Working Group: HTML5 and <video>

At the recent Open Video Conference, I was asked to chair a working group on HTML5 and the <video> tag. Since the conference had attracted a large number of open media software developers as well as HTML5 <video> tag developers, it was a great group of people that were on the panel with me: Philip Jagenstedt from Opera, Jan Gerber from Xiph, Viktor Gal from Annodex, Michael Dale from Metavid, and Eric Carlson from Apple. This meant we had three browser vendors and their <video> tag developers present as well as two javascript library developers representing some of the largest content sites that are already using Ogg Theora/Vorbis with the <video> tag, plus myself looking into accessiblity for <video>.

The biggest topic around the <video> tag is of course the question of baseline codec: which codec can and should become the required codec for anyone implementing <video> tag support. Fortunately, this discussion was held during the panel just ahead of ours. Thus, our panel was able to focus on the achievements of the HTML5 video tag and implementations of it, as well as the challenges still ahead.

Unfortunately, the panel was cut short at the conference to only 30 min, so we ended up doing mostly demos of HTML5 video working in different browsers and doing cool things such as working with SVG.

The challenges that we identified and that are still ahead to solve are:

  • annotation support: closed captions, subtitles, time-aligned metadata, and their DOM exposure
  • track selection: how to select between alternate audio tracks, alternate annotation tracks, based on e.g. language, or accessibility requirements; what would the content negotiation protocol look like
  • how to support live streaming
  • how to support in-browser a/v capture
  • how to support live video communication (skype-style)
  • how to support video playlists
  • how to support basic video editing functionality
  • what would a decent media server for html5 video look like; what capabilities would it have

Here are the slides we made for the working group.

Download PDF: Open Video Conference: HML5 and video Panel

July 01, 2009 06:37 AM

Pia Waugh's hackergotchi

Pia Waugh

US Air Force Web Posting Response Assessment

This is pretty interesting. The US Air Force have a methodology to deal with online responses like comments. I like it how trolls and “ragers” require HQ be notified :)

I think it helps people not used to communicating online think about different sorts of negative feedback, and how it is important to engage with some, and possibly not with others. Also the “response considerations” were quite good too to encourage transparency and accountability in online communications.

Click on the image for the larger more readable version.

US-Air-Force-Web-Response-Assessment

July 01, 2009 06:32 AM

Mark Greenaway

I told a friend who frequently visits our honours office that I liked the idea of fountain pens, so he loaned me one of his. I've had it for about a week and am now thoroughly converted. Maths students write all day, so some of us are particular about what we write with. And I'm pretty particular in general anyway.
I'm slowly developing expensive tastes.

July 01, 2009 05:39 AM

June 30, 2009

Robert Thomson

Back from Berlin..

LinuxTAG was interesting.. I got a better grasp of the Linux and Open Source crowd in Berlin (and in Germany in general). I think my geek-side will be satisfied there. I've decided to check out Sugar-on-a-stick after chatting to them there (and pointed one of the developers in the direction of Numptyphysics, which just may appear as a Sugar package at some point). I'm looking forward to settling down in a proper apartment again, and setting up a media center for myself - A nice ATOM dual core + NVidia (ION) server combination (TEO-X had one there) should provide all the power that I need (with lower power consumption) for XBMC & a retro (& not so retro) gaming setup. :-)

Also interesting was Büro 2.0, which involves a shared workspace and services for Open Source companies and freelancers in Berlin. If I decide to be a freelancer there, this might be an option.

June 30, 2009 06:54 AM

Mark Greenaway

Thesis

I'd forgotten how mentally exhausting research was. And how exhilarating.

June 30, 2009 03:01 AM

June 29, 2009

Dave Airlie

Kernel Conf Australia - ! all OSOL honest.

So there is a kernel conference on in Brisbane next month, being run by Sun.

Now when this was announced initially it was proposed as an all kernel hackery type get together for folks in the region, not matter which kernel they cared about.

(I did propose to talk about kernel graphics at this and got refused - so maybe I'm just being bitchy, however this is my blog).

20 speakers break down as follow:
12 Sun
1 Intel - Sun manager
1 RH
1 OpenBSD
1 FreeBSD
4 misc.

2 of the misc talks are in some way OSOL related,

the OpenBSD talk is about networking and pf, the RH talk is about security, FreeBSD about storage.

Now really if you aren't into OSOL or ZFS (3 slots OSOL FS related), why would you go. This conference is
local to me and I still couldn't justify paying the signup fee/taking the time to my manager at all. Now if
one of the main kernel and X.org hackers who lives in Brisbane can't be bothered to go, I do wonder
why anyone who isn't into OSOL kernels might be tempted.

There was talk of a .au unconference at one point, which maybe when the whole swine flu escapade is over might
actually be a useful meetup for the aussie open source community.

June 29, 2009 07:37 AM

Sonia Hamilton

Oracle RMAN backups


More notes on Oracle RMAN backups, see also Oracle – how to purge old RMAN backups. Thanks Raoul for your email…

Are the backups being deleted using RMAN or simply 'rm'?

Oracle's RMAN can be set up to manage this for you based on RETENTION POLICY.  Eg, set retention policy to recovery window of 14 days and
it will regard any backups older than 14 days to be OBSOLETE. Obsolete backups can be removed regularly using this:
 DELETE NOPROMPT OBSOLETE;
in a script that RMAN runs, for example, the daily backup script.

Here's a quick rundown of the rman commands you might find useful:

-- list all configuration parameters
SHOW ALL;

-- check for spurious files in FRA (backup location)
-- typically, these can be safely deleted
-- but check messages/output first.
CATALOG RECOVERY AREA NOPROMPT;

-- check to see what backups are available in the backup
-- destination area (refresh with what's available)
-- missing ones are marked as EXPIRED
CROSSCHECK BACKUPSET;
CROSSCHECK COPY;

-- delete all obsolete backups
-- this physically removes the backup pieces from the backup
-- destination and removes knowledge of them from the control
-- file this is performed based on the RETENTION policy
DELETE NOPROMPT OBSOLETE;

-- delete all expired backups, etc
-- this is clearing the knowledge of such EXPIRED (missing)
-- backups from the control file
DELETE NOPROMPT EXPIRED BACKUP;
DELETE NOPROMPT EXPIRED COPY;

Once you've set the retention policy, then the following backup script (or one like it) will remove old backups automatically.

-- full back, deleting archive logs after backing them up
backup device type disk tag '%TAG' database;
backup device type disk tag '%TAG' archivelog all not backed up delete all input;
allocate channel for maintenance type disk;
delete noprompt obsolete device type disk;
release channel;

June 29, 2009 12:59 AM

June 28, 2009

Silvia Pfeiffer

Mario is dead and dismantled

Beloved Shuttle Box

Beloved Shuttle Box

Six weeks ago, on a fatal Saturday, both my washing machine and cute little Mario died in one day. The washing machine was quickly repaired, but there was no hope for Mario, as the burnt smell of electronics indicated. It wasn’t going to start up again.

Mario had been the first server to run the code developed at Vquence. It was our development and testing server for more than 8 months until we moved to a server at The Planet – later to Voxel and now ultimately to Amazon.

After it was relieved off Vquence duty, Mario became what it was originally bought to become: a media server. Running Linux and MythTV, it was the beloved center of our living room for the last 2 years. But it seems the heavy duty VCR work as well as running Linux exhausted him.

Well, it is now replaced by an ordinary HP machine – I will miss the cute little shuttle.

If anyone wants the remains, let me know.

June 28, 2009 08:30 PM

A review of the W3C Timed Text Authoring Format

The W3C has published a third last call for the draft specification of DFXP, the Distribution Format Exchange Profile for the Timed Text Authoring Format – or short: for their new standard format for captions. Comments are due by the 30th June, so rush if you want to give any feedback. Here is what came to my mind as I was reading the 183 pages long document.

Please note: This review looks at DFXP from a Web view, i.e. how compatible is it with existing Web technologies, since my main use case will be on the Web, even if advocates will say that that’s not it’s main purpose, strangely enough, for a standard coming out of the W3C.

The state of affairs with caption formats

When it comes to caption and subtitles, there is no lack of formats. It seems, because it is an easy challenge to define a data format for something as simple as a piece of text and some timing information, every new project that wanted to deal with captions – or more generally timed text – created their own format. I am no exception to the rule. :-)

Thus, the current state of affairs wrt timed text is that there are many different textual file formats to store such data, there are also many different video container formats each with their own data format (or even formats) for embedding timed text into them, and there is a lot of software that will deal with many input, output and encapsulation formats.

The problem with this situation is that the formats are all different in their complexity. The simple “piece of text and timing information” problem can be turned into as complex a problem as you desire. By adding layout information, styling information, animation functionality, metadata about the video and about the content, and possibly hyperlinks, we have ended up in a large mess of incompatible formats.

The aim of W3C Timed Text

The W3C Timed Text working group was chartered in January 2003 to attack this issue. It was supposed to become the super-format of all possible functionalities for timed text formats and therefore a perfect interchange format between applications (see requirements document). Its focus was for use on the Web and with SMIL and to make use of existing W3C technologies where possible

However, the history of captioning is TV and the scope of Timed Text is beyond mere use on the Web, so while W3C Timed Text took a lot of inspiration from other Web standards, it has become a stand-alone standard that does not rely on, e.g. the availability of a CSS engine, and it has no in-built hyperlinking functionality (see what requirements it fulfills).

Dissecting DFXP

So. let’s look into some of what DFXP provides.

Here is an example file taken straight from the draft – check the presentation here:

<tt xml:lang="" xmlns="http://www.w3.org/2006/10/ttaf1">
  <head>
    <metadata xmlns:ttm="http://www.w3.org/2006/10/ttaf1#metadata">
      <ttm:title>Timed Text DFXP Example</ttm:title>
      <ttm:copyright>The Authors (c) 2006</ttm:copyright>
    </metadata>

    <styling xmlns:tts="http://www.w3.org/2006/10/ttaf1#styling">
      <!-- s1 specifies default color, font, and text alignment -->
      <style xml:id="s1"
                 tts:color="white"
                 tts:fontFamily="proportionalSansSerif"
                 tts:fontSize="22px"
                 tts:textAlign="center" />
      <!-- alternative using yellow text but otherwise the same as style s1 -->
      <style xml:id="s2" style="s1" tts:color="yellow"/>
      <!-- a style based on s1 but justified to the right -->
      <style xml:id="s1Right" style="s1" tts:textAlign="end" />
      <!-- a style based on s2 but justified to the left -->
      <style xml:id="s2Left" style="s2" tts:textAlign="start" />
    </styling>

    <layout xmlns:tts="http://www.w3.org/2006/10/ttaf1#styling">
      <region xml:id="subtitleArea"
                   style="s1"
                   tts:extent="560px 62px"
                   tts:padding="5px 3px"
                   tts:backgroundColor="black"
                   tts:displayAlign="after" />
    </layout>
  </head>
  <body region="subtitleArea">
    <div>
      <p xml:id="subtitle1" begin="0.76s" end="3.45s">
        It seems a paradox, does it not,
      </p>
      <p xml:id="subtitle2" begin="5.0s" end="10.0s">
        that the image formed on<br/>
        the Retina should be inverted?
      </p>
      <p xml:id="subtitle3" begin="10.0s" end="16.0s" style="s2">
        It is puzzling, why is it<br/>
        we do not see things upside-down?
      </p>
      <p xml:id="subtitle4" begin="17.2s" end="23.0s">
        You have never heard the Theory,<br/>
        then, that the Brain also is inverted?
      </p>
      <p xml:id="subtitle5" begin="23.0s" end="27.0s" style="s2">
        No indeed! What a beautiful fact!
      </p>
      <p xml:id="subtitle6a" begin="28.0s" end="34.6s" style="s2Left">
        But how is it proved?
      </p>
      <p xml:id="subtitle6b" begin="28.0s" end="34.6s" style="s1Right">
        Thus: what we call
      </p>
      <p xml:id="subtitle7" begin="34.6s" end="45.0s" style="s1Right">
        the vertex of the Brain<br/>
        is really its base
      </p>
      <p xml:id="subtitle8" begin="45.0s" end="52.0s" style="s1Right">
        and what we call its base<br/>
        is really its vertex,
      </p>
      <p xml:id="subtitle9a" begin="53.5s" end="58.7s">
        it is simply a question of nomenclature.
      </p>
      <p xml:id="subtitle9b" begin="53.5s" end="58.7s" style="s2">
        How truly delightful!
      </p>
    </div>
  </body>
</tt>

I’m going to look at each of the different functionalities separately and discuss their strengths and weaknesses.

Content

Let’s begin with the body of the DFXP document and what elements are defined for this area.

Firstly, <body> comes with optional begin, end, and dur attributes. As is the case for all time specifications in DFXP, there are both “end” and “dur” attributes. Why this over-specification? There is not even an explanation which of the two has higher priority when in conflict. This is plainly asking for trouble – why not simplify the spec?

The “region” and “style” attributes refer to a previously defined region and styles that are applied to the body. “id” and “lang” attributes allow to associate a name and a language with the body.

The “timeContainer” attribute enables the author to specify whether the elements in the body are all to be regarded as temporally parallel or in sequence, the default being parallel. This means that all text elements specified inside the body can render over the top of each other – a situation that is solved by giving them specific start and end times.

The containing elements of body are a sequence of <div> tags. The div element functions as a logical container and a temporal structuring element for a sequence of textual content units. div elements like body elements are allowed a “start”, “end” and “dur” attribute and generally everything that the body element also has, except that their children can be more div or p. Again, the children of the div element are all regarded as being temporally parallel.

The p element is basically the inner-most element that contains the actual text, including new-lines (br) and spans to associate further styling, metadata, or animations. The children of the p or span element are also all regarded as being temporally parallel, unless otherwise specified.

The structuring of text into div, p, and span elements seems to make sense and provide sufficient (if not even excessive) flexibility for any required timed text needs.

Layout

Once the text is specified and structured, the next question is where it should be positioned.

The extent attribute of the <tt> root element specifies the width and height of the root container, if not specified by the external authoring context.

Inside the root container, regions are defined through explicit <region> elements. The origin of placement for a region is the top left corner. Regions can define their “origin” offset, their “width” and “height”, the alignment of text within them through the “textAlign” and “displayAlign” styles, and whether text that “overflows” a region should be visible or hidden.

The way in which DFXP defines regions and placement of text within regions is very different to the way in which HTML and CSS work. By default, elements in HTML flow one after another in the same order as they appear in the source. CSS attributes applied to the elements can control their positioning through giving coordinates, or relative placements in relation to other elements. In DFXP elements are placed inside regions that are styled, making it incompatible with HTML.

Styling

The styling attributes available for DFXP are limited, but sufficient for timed text purposes. The way in which style associations to elements are resolved is quite diverse. Styles can be associated with regions, with individual elements, individually and as a group, through layouts and through parent elements. Compared to CSS, it feels complicated and potentially full of contradictions.

Animation

Further to styling, DFXP defines animations, which are discrete changes to some style parameter value that applies over some time interval. This is relevant for example to implement karaoke style colouring of text over time.

Metadata

The <metadata> element serves as a generic container for grouping metadata information. It can be associated virtually with any element – which seems somewhat over-flexible, but provides for interesting meta data information such as meta data for styles or for a <br>.

In addition, metadata is actually limited to a set number of elements: title, desc, copyright, agent, name, and actor. These are strange fields – in particular if you compare them to the flexibility of HTML meta data, which consists of free-form name-value pairs, bringing us domain-specific schemes such as the Dublin Core. This is not easily possible here, but instead one has to define extensions to allow for such flexible meta data.

Other features

DFXP provides other features such as information that describes the related video file, e.g. frameRate, subFrameRate, frameRateMultiplier, pixelAspectRatio, smpteMode, timeBase, and tickRate. Such information will help at the point in time when DFXP is supposed to be multiplexed into a binary media file together with audio and video tracks. These attributes can provide information required for the multiplexing process. I am not sure that justifies their existence though.

Other, minor features are available too. Check out the full specification to get a complete picture.

Examples

Part of the publication of this draft is also a test suite. Several of the defined features are still not represented in the test suite, which to me raises the question if they are really required. It might do wonders to the draft size to remove them.

Summary

DFXP is a standard for timed text that is firmly grounded in past captioning specifications, but written in XML, and borrowing ideas from Web technologies. It is unfortunately not re-using existing Web infrastructure to implement its more complex features: no use of CSS for styling and layout, no use of hyperlinks. Also, the use of namespaces seems excessive and won’t make it easy to author this format, in particular since the defined namespaces do not map into the defined profiles.

DFXP is, however, simple to transcode to something that a Web Browser can deal with through its existing engines, because it has borrowed from other Web standards. It is thus easier to work with on the Web than most other formats. It should be relatively easy to map to HTML, CSS and javascript, as already started in the test suite with the HTML5 video element.

DFXP is witten in such a way that it is possible to put together a new profile with extensions that are more appropriate for specific needs, e.g. that fit better into existing Web infrastructure. Currently, DFXP has three defined profiles: one focused on transformation, one focused on presentation, and one that contains everything.

I think it’s time for a html5 profile of DFXP that at minimum extends DFXP with hyperlinks, making it a real timed text Web format.

June 28, 2009 09:53 AM

Simon Rumble

Announcing: Swedish Chef wave robot


Swedish Chef wave robot

I managed to score myself a Google Wave account by promising to write a Swedish Chef robot. So this afternoon I wrote one, in a language I've never used before (Python) and to a target platform I've never explored (Google App Engine). Mostly I ripped off code from other sources, especially Dive Into Python.

Screenshot

So if you have a Google Wave sandbox account, add borkforceone@appspot.com to a wave and your text will be translated into cod-Swedish.

Contact me

June 28, 2009 05:09 AM

Sridhar Dhanapalan's hackergotchi

Sridhar Dhanapalan

‘Heritage’ is relative

I live in a country where even buildings less than 100 years old can be protected as ‘heritage’. Yet in India they can demolish a 700-year-old mosque without even batting an eyelid!


©2009 Sridhar Dhanapalan.
This work is licensed under a Creative Commons Attribution-Share Alike 2.5 Australia Licence.
Creative Commons BY-SA Licence

.

June 28, 2009 03:24 AM

June 26, 2009

Jeremy Visser

IPv6 over PPP over a null-modem connection

I just did my first null-modem serial link today. And yes, I did IPv6. On each computer I ran:

# pppd nodetach noauth /dev/ttyS0 115200 ipv6 ,

Then, each computer came up with a ppp0 interface that was down by default (for some reason, pppd doesn’t like to bring it up if it’s IPv6-only). So I ran this on one machine:

# ifconfig ppp0 up
# ifconfig ppp0 add fc00:23::1
# ip route add fc00:23::2 dev ppp0

And then on the other machine, the reverse:

# ifconfig ppp0 up
# ifconfig ppp0 add fc00:23::2
# ip route add fc00:23::1 dev ppp0

Then the glorious:

$ ping6 fc00:23::2
64 bytes from fc00:23::2: icmp_seq=1 ttl=64 time=12.0 ms
64 bytes from fc00:23::2: icmp_seq=2 ttl=64 time=11.8 ms
64 bytes from fc00:23::2: icmp_seq=3 ttl=64 time=9.87 ms

Serial is cool.

June 26, 2009 01:38 PM

June 25, 2009

Harrison Ghys

R.I.P Michael Jackson

MJ died 55 minutes ago from cardiac arrest.
Today is a sad day.

June 25, 2009 10:12 PM

June 24, 2009

Robert Collins

24 Jun 2009

[edit: a home has been found]

Free to good home, one Intel 510T 22 port switch. (There are a couple of dead ports but its otherwise fine - no glitches or anything).

I've just replaced my home ethernet switch - I was using 5 ports, and most of my wired machines have gigabit now. Yay.

So, if you need a 22 port network switch, let me know. If I don't hear from anyone, it'll go into next months local recycling pickup.

This will be a 'come pick it up' arrangement, unless you're going to be at the same place I am for some other event - in Sydney, if thats not obvious.

intel 510T photo

June 24, 2009 09:07 AM

Mark Greenaway

Thesis


I'm starting to work seriously on my thesis finally. I couldn't really start before because I was overloading, and I really needed some functional analysis before I could get started.
My thesis is mostly about studying solutions to the heat equation that can be formulated as expectations of functions of brownian motion. The heat equation with a particular initial condition can be viewed as a linear differential operator, and so is a prime candidate for some functional analysis.
Differential operators are unbounded. All of the theory we covered in functional analysis was to do with bounded operators, and so I have to pick up all the theory of unbounded linear operators on my own. It turns out to be pretty complicated! The unbounded operators we're interested in are closed, which is almost as good as being continuous, and they are defined on a dense subset of the Hilbert space we're interested in.
I was worried things would get "interesting" if you tried to compose two operators defined on different dense subsets, but then I remembered Baire's Theorem, which states that arbitrary intersections of dense sets are again dense, so you've lost nothing. You should still get a ring of operators, which is pretty neat :)

[ Edit: There were some fairly major errors in this post. Fixed now. ]

June 24, 2009 05:06 AM

June 23, 2009

Jeremy Visser

Why dynamic IPv6 subnet allocations for home users are evil

Currently, a typical home Internet user will be assigned one IP address from their ISP, and then use NAT (Network Address Translation) to share the Internet connection among all their computers. The IP address assigned by your ISP is dynamic, and that is not a problem for the average home user, or even your typical power user.

Setting static IPs on computers is not all that uncommon, even among home users, excluding only the very most technically-illiterate ones. For example, your home router might be 10.0.0.1, and the other desktops in your house might be 10.0.0.10, 10.0.0.11, and so on. Then, if somebody drops by and wants to use your WiFi, they might be assigned an address via DHCP, such as 10.0.0.121.

This won’t work in IPv6 if, and only if, ISPs choose to make your subnet allocation dynamic. I urge ISPs to assign static IPv6 subnets to all their customers.

Why? Well, let me give my reasons. In IPv4, all the home machines in the above example are behind a NAT. This means the private IP address (10.0.0.121) gets dynamically translated to your public IP address (123.12.134.78).

Because of the absence of NAT in IPv6, this can’t happen! Your machine’s IPv6 address is tied to the subnet allocated to you by the ISP. And if your ISP changes your subnet every time you connect to the Internet as they currently do with IPv4, your static IPs will break horrendously.

I am aware of site-local and unique local addresses. These addresses are designed to be used only in a local situation, and not routed to the Internet. In theory, this could solve the problem, by allowing you to have a static local address, and a dynamic global address. In practice, this will not work because:

  • Site-local addresses have been deprecated by RFC 3879.
  • Unique local addresses are considered to be global addresses by current OSes. Wikipedia says that “despite the restricted, local usage of these addresses, they have a global address scope”, which means that your computer will assume either one can get to the Internet.
  • Thus, your source IP may be wrong, and your packet may be filtered and rejected by your ISP, or you may never get a reply, as the message won’t be able to get back to you.
  • Having both unique local and global addresses are confusing to the end-user, unlike link-local addresses, which are clearly marked as such, and are generally non-routable.

Finally, we must look at the reason why dynamic IPv4 addresses are assigned in the first place. I believe the main reason for this is to conserve space. With most of their address space used up, ISPs would have to count on all of their customers not using their Internet connections at the same time. Dynamic IP addresses means they can effectively over-subscribe their puny IP allocations.

In IPv6, this is not necessary. ISPs typically get a /32 allocation, which if you’re not familiar with CIDR notation, is bleeping huge! With a /32 allocation, an ISP could allocate more than 4 billion /64 subnets (which are suitable for a typical household) to each of their customers. I don’t think any ISP in the world has 4 billion customers, and if they did, they could get a /31 allocation, which would give them about 8 billion /64 subnets. Plenty of space for static allocations for everyone!

In conclusion, I’d like to summarise what I’ve been trying to bring out:

  • People that like to set static IPs on their machines will have them break if their subnet changes.
  • Site-local and unique local addresses only add to the problem, not solve it.
  • There is enough IPv6 address space in a /32 for everybody to have a static subnet.
  • There is no business advantage in giving out dynamic subnets. Do the best thing by your customers and go static.

So, dear ISPs of the world, please make static IPv6 subnets a part of your standard offering — not a “paid upgrade” or anything silly like that. It might work in the NAT’ed world of IPv4, but you will do your IPv6 customers a disservice.

Thanks for reading. :)

June 23, 2009 10:30 AM

James Purser's hackergotchi

James Purser

ATO Spam

The level of banking spam has been going through the roof lately and I've recieved everything from St George, to the NAB, Westpac and even the CUA. However given that it's nearing tax time, the ATO is being given a run at the moment.

This morning I recieved an email with the following text:

You have get a Tax Refund on your Visa or MasterCard.
Complete the formular, and get your Tax Refund.

(Your Refund Amount Is 250.50 AUD)

Complete Formular

Classy work isn't it.

So out of curiosity I clicked on "Complete Formular" to see how professional the crackers had made the site look. It was meh. They'd obviously done a screen shot of the ATO site and then overlaid some sort of imagemap. There was a link you had to follow to "claim your refund" so I thought I'd follow that and see what sort of information they were asking for. Here it is in all it's glory.

I'm sorry, but anyone who falls for this is asking for it. The ATO is never, ever going to ask for your ATM PIN. Ever. I can see them asking for Credit Card details, but only in relation to paying of taxes, not giving of refunds.

Sigh.

June 23, 2009 02:14 AM

June 22, 2009

Jeremy Visser

Dodgy SSD

This morning, on the train to TAFE, I fired up my Eee 901, resuming from standby. I was greeted by some pretty morbid messages in my tty:

[ 1589.499104] ata2.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6
[ 1589.499113] ata2.00: BMDMA stat 0x4
[ 1589.499125] ata2.00: cmd c8/00:20:00:00:00/00:00:00:00:00/e0 tag 0 dma 16384 in
[ 1589.499128]          res 51/84:00:00:00:00/00:00:00:00:00/e0 Emask 0x10 (ATA bus error)
[ 1589.499134] ata2.00: status: { DRDY ERR }
[ 1589.499139] ata2.00: error: { ICRC ABRT }
[ 1589.499180] ata2: soft resetting link
[ 1589.685741] ata2.00: configured for UDMA/66
[ 1589.692501] ata2.01: configured for UDMA/66
[ 1589.692524] ata2: EH complete

And the OS promptly crashed. I rebooted, and GRUB told me that it “Could not load operating system”. Great.

I did an fsck, and I saw the most number of errors I’ve seen in my life, seconded only by the time I mounted my Linux drive in Windows using the Ext2 IFS driver, and Windows crashed.

fsck found lots of orphaned files. My /lost+found directory was 2.5GB in size. /etc was only 8.0K in size. It didn’t boot.

So, I tried to reinstall by using my trusty Ubuntu 9.04 on my USB flash drive. I repartitioned /dev/sda, but the Ubuntu installer subsequently bombed out, complaining it couldn’t mount the drive.

I’m typing this from my live USB. Luckily Ubuntu 9.04 comes with OpenOffice.org 3.0, and I’ve been able to copy my fonts from my second SSD, which was unharmed, so I can work on my assignments.

I fear the SSD is stuffed.

June 22, 2009 04:51 AM

June 21, 2009

Silvia Pfeiffer

The history of Ogg on the Web

In the year 2000, while working at CSIRO as a research scientist, I had the idea that video (and audio) should be hyperlinked content on the Web just like any Web page. Conrad Parker and I developed the vision of a “Continuous Media Web” and called the technology that was necessary to develop “Annodex” for “annotated and indexed media”.

Not many people now know that this was really the beginning of Ogg on the Web. Until then, Ogg Vorbis and the emerging Ogg Theora were only targeted at desktop applications in competition to MP3 and MPEG-2.

Within a few years, we developed the specifications for a markup language for video called CMML that would provide the annotations, anchor points, and hyperlinks for video to make it possible to search and index video, hyperlink into video section, and hyperlink out of video sections.

We further developed the specification of temporal URIs to actually address to temporal offsets or segments in video.

And finally, we developed extensions to the Xiph Ogg framework to allow it to carry CMML, and more generally multi-track codecs. The resulting files were originally called “Annodex files”, but through increasing collaboration with Xiph, the specifications were simplified and included natively into Ogg and are now known as “Ogg Skeleton”.

Apart from specifications, we also developed lots of software to make the vision actually come true. Conrad, in particular, developed many libraries that helped develop software on top of the raw Xiph codecs, which include liboggz and libfishsound. Libraries were developed to deal with CMML and with embedding CMML into Ogg. Apache modules were developed to deal with segmenting sections from Ogg files and deliver them as a reply to a temporal URI request. And finally we actually developed a Firefox extension that would allow us to display the Ogg Theora/Vorbis videos inside a Web Browser.

Over time, a lot more sofware was developed, amongst them: php, perl and python bindings for Annodex, DirectShow filters to have Ogg Theora/Vorbis support on Windows, an ActiveX control for Windows, an authoring tool for CMML on Windows, Ogg format validation software, mobile phone support for Ogg Theora/Vorbis, and a video wiki for CMML and Ogg Theora called cmmlwiki. Several students and Annodex team members at CSIRO helped develop these, including Andre Pang (who now works for Pixar), Zen Kavanagh (who now works for Microsoft), and Colin Ward (who now works for Symbian). Most of the software was released as open source software by CSIRO and is available now either in the Annodex repository or the Xiph repositories.

Annodex technology became increasingly part of Xiph technology as team members also became increasingly part of the Xiph community, such as by now it’s rather difficult to separate out the Annodex people from the Xiph people.

Over time, other projects picked up on the Annodex technology. The first were in fact ethnographic researchers, who wanted their audio-visual ethnographic recordings usable in deeply. Also, other multimedia scientists experimented with Annodex. The first actual content site to publish a large collection of Ogg Theora video with annotations was OpenRoadTrip by Scott Shawcroft and Brandon Hines in 2006. Soon after, Michael Dale and Aphid from Metavid started really using the Annodex set of technologies and contributing to harden the technology. Michael was also a big advocate for helping Wikimedia and Archive.org move to using Ogg Theora.

By 2006, the team at CSIRO decided that it was necessary to develop a simple, cross-platform Ogg decoding and playback library that would allow easy development of applications that need deep control of Ogg audio and video content. Shane Stephens was the key developer of that. By the time that Chris Double from Firefox picked up liboggplay to include Ogg support into Firefox natively, CSIRO had stopped working on Annodex, Shane had left the project to work for Google on Wave, and we eventually found Viktor Gal as the new maintainer for liboggplay. We also found Cristian Adam as the new maintainer for the DirectShow filters (oggcodecs).

Now that the basic Ogg Theora/Vorbis support for the HTML5 <video> element is starting to be available in all major browsers (well, as soon as an ActiveX control is implemented for IE), we can finally move on to develop the bigger vision. This is why I am an invited expert on the W3C media fragments working group and why I am working with Mozilla on sorting out accessibility for <video>. Accessibility is an inherent part of making video searchable. So, if we can find a way to extend the annotations with hyperlinks, we will also be able to build Webs of videos and completely new experiences on the Web. Think about mashing up simply by creating a list of URLs. Think about tweeting video segments. Think about threaded video email discussions (Shane should totally include that into Google Wave!). And think about all the awesome applications that come to your mind that I haven’t even thought about yet!

I spent this week at the Open Video Conference in New York and was amazed about the 800 and more people that understand the value of open video and the need for open video technologies to allow free innovation and sharing. I can feel that the ball has got rolling – the vision developed almost 10 years ago is starting to take shape. Sometimes, in very very rare moments, you can feel that history has just been made. The Open Video Conference was exactly one such point in time. Things have changed. Forever. For the better. I am stunned.

June 21, 2009 12:27 PM

Michael Fox

iPhone ringtone – Yo! Sweetness by MC Hammer

Created an iPhone ringtone from the song Yo! Sweetness by MC Hammer. Click the link below to download a copy.

Yo! Sweetness.m4r.zip

June 21, 2009 09:12 AM

iPhone ringtone – LoveGame by Lady Gaga

Created an iPhone ringtone from the song Love Game by Lady Gaga. Click the link below to download a copy.

LoveGame.m4r.zip

June 21, 2009 07:31 AM

Erik de Castro Lopo

FP-Syd #16.

On Thursday June 18th we held the 16th meeting of FP-Syd, the Sydney Functional Programming group. The meeting was held at Google's Sydney offices and we had about 25 people attending to hear our two presentations.

This month we tried something a little different, 5 minute lightning talks. We had four lightning presenters :

  • Jeremy Apthorp, "Closures in C" - Jeremy explained how the Clang frontend for LLVM had added lexical closures to the C programming language.
  • Jeeva Suresh, "Functional Programming Warps your mind - Quantified"- Jeeva quantified exactly how programming in functional languages changes a programmer's approach when programming in other languages.
  • Mark Bradley, "Cycling Josephus for Speed" - Mark show how a naive approach to the Josephus Problem in Haskell would, for some example parameters, exhaust all memory. Mark showed a better solution that satisfied the problem but still consumed a large amount of memory. Interestingly, Benjamin Johnston posted a solution to this problem in SWI Prolog that performed very well in comparison to the Haskell version.
  • Ben Lippmeier, "The Poisoning Problem" - Ben showed us an example of the poisoning problem which had cropped up in his DDC compiler where a value might need to be mutable or immutable depending on the value of an if statement.

Interestingly, none of the presenters managed to stay within their allotted 5 minutes but the time limits were not enforced.

Our main speaker of the evening was Eric Willigers who gave us an excellent introduction to the Clojure language, a LISP like language for the Java Virtual Machine. Eric started with the main data structures; lists, vectors, maps and sets, moved on to functions and macros before explaining Clojure's concurrency primitives.

All in all this was another most inspiring and enjoyable meeting. Thanks to all our speakers as well as Shane Stephens and Google for providing the venue.

June 21, 2009 04:01 AM

Rich Buggy

Dynamic forms using Zend_Form

While most forms contain fixed fields there are occasions when you need a form to be dynamic and adjust itself based on user input. The adjustment could be as simple as altering the options in a drop down list or as complex as adding/removing fields. In this post I’m going to cover how to create a dynamic form using Zend_Form and jQuery. I’ll use the example of a registration form that prompts the user for their country and state. The requirements are pretty simple:

  1. It should only prompt for a state if the country has states.
  2. The state list should only show states for the selected country.
  3. The form should degrade gracefully so it works without Javascript

To start I’m going to create a World class. This class has two functions. The first returns a list of countries. The second returns a list of states for a specified country or a list of all countries that have states plus the states in those countries. You might like to retrieve this information from a database but for simplicity I’ll hard code the information into the class.

class World
{
    static private $_countries = array(
                       "AU" => "Australia",
                       "NZ" => "New Zealand");

    static private $_states = array(
		        "AU" => array(
		            "ACT" => "Australian Capital Territory",
		            "NSW" => "New South Wales",
		            "NT" => "Northern Territory",
		            "QLD" => "Queensland",
		            "SA" => "South Australia",
		            "TAS" => "Tasmania",
		            "VIC" => "Victoria"));

    public function getCountries()
    {
        return self::$_countries;
    }

    public function getStates($country = null)
    {
        if ($country === null) {
            return self::$_states;
        }
        if (array_key_exists($country, self::$_states)) {
            return self::$_states[$country];
        }
        return null;
    }
}

Next I’ll create a class for the form (RegForm) by extending Zend_Form. This gives our registration form all of the advantages you get from Zend_Form including input filtering and validation. The form elements will be added in the constructor so that creating a new form is all you need to do to use it.

As our form needs to adapt based on user input the constructor needs to accept the user input as one of its parameters. This allows us to adjust the form elements based on the user input. All code using these parameters needs to be extremely careful as the user input has not been filtered or validated yet.

class RegForm extends Zend_Form
{
    public function __construct($world, $params)
    {
        parent::__construct();

        $countries = $world->getCountries();
        $countryKeys = array_keys($countries);
        $thisCountry = isset($params['country']) ? $params['country'] : $countryKeys[0];
        $states = $world->getStates($thisCountry);

        $country = new Zend_Form_Element_Select('country');
        $country->setLabel('Country')
                ->setMultiOptions($countries)
                ->setValue($thisCountry)
                ->setRequired(true);
        $this->addElement($country);

        $state = new Zend_Form_Element_Select('state');
        $state->setLabel('State');
        if ($states !== null) {
            $state->setMultiOptions($states)
                  ->setRequired(true);
        } else {
            $state->setRegisterInArrayValidator(false);
        }
        $this->addElement($state);

        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setValue('Add User')
               ->setRequired(false);
        $this->addElement($submit);
    }
}

There are two important things that RegForm does:

  1. The state options are adjusted to match the selected country.
  2. The state is not validated if the country does not contain states.

This means that our form will work exactly the way you expect Zend_Form to work. Without Javascript if you select a country and submit the form then the state list will adjust and display an error that the previously selected state was invalid. After you select a valid country and state the form will validate. If the selected country does not have states then the form with validate regardless of the selected state (providing there are no other errors).

I then need to create the controller.

class AccountController extends Zend_Controller_Action
{
    public function indexAction()
    {
        $params = $this->_getAllParams();
        $world = new World();
        $form = new RegForm($world, $params);
        if ($this->_request->isPost() && $form->isValid($params)) {
            // The form was valid!!
        }
        $this->view = $form;
    }
}

Finally we can add Javascript to alter the form in browser. If you’re using the forms render() function then the Javascript will look something like this.

    var countries = <?php echo json_encode($this->world->getCountries()); ?>;

    var states = <?php echo json_encode($this->world->getStates()); ?>

    function updateStates() {
        var state = $("#state");
        var country = $("#country");
        var hasStates = false;
        jQuery.each(states, function (cc, slist) {
            if (cc == country.val()) {
                hasStates = true;
                state.html('');
                jQuery.each(slist, function (code, name) {
                    state.append('<option value="' +  code + '">' + name + '</option>');
                });
            }
        });
        if (hasStates) {
            $("#state-label").css("display", "block");
            $("#state-element").css("display", "block");
        } else {
            $("#state-label").css("display", "none");
            $("#state-element").css("display", "none");
        }
    }
    $().ready(function () {
        $("#country").change(function () {
            updateStates();
        });
        var state = $("#state");
        if (state.val() == null) {
            $("#state-label").css("display", "none");
            $("#state-element").css("display", "none");
        }
    });

This code takes care of hiding the states if they are not required and adjusting the states based on the selected country without needing to submit the form. With minimal effort I’ve been able to create a dynamic form using Zend_Form to do most of the hard work. Users with Javascript enabled get an A grade experience while those without Javascript can still use the form.

June 21, 2009 02:31 AM

Robert Collins

21 Jun 2009

What is it with pc vendors that they make selecting machines by fairly useless things like model number (e.g. shuttle), or a hacky fugly hierarchy (e.g. auspcmarket) easy, but by attributes (e.g. '2 ethernet ports, no fans, small chassis') terribly hard.

They should take a leaf out of the way people ask each other for recommendations. auspcmarket /kindof/ does that with the systems hierarchy - but only for a few categories.

What I want I guess, is a menu of tags/attributes I can search for on a vendors site (and/or review sites like CNet's and, google shopping and so on). Doing a google shopping search for my interesting attributes above is a pretty epic fail.

June 21, 2009 12:56 AM

June 20, 2009

Robert Thomson

Summer holiday ... to Berlin!

This Italian weather is killing us. We're about to step out the door and head to the mild temperature in Berlin for a week. We're taking our big suitcases, and we'll leave them there, because we will be travelling around Italy in August and we can't take so much with us. And I'm taking my laptop, since I want to work from Berlin. I plan to visit LinuxTAG during the week too.

June 20, 2009 10:37 AM

Simon Rumble

Acer Aspire One D150 and Ubuntu netbook remix


Acer Aspire One D150

Earlier this week I bought an Acer Aspire One D150 to use as my new portable and, possibly, desktop. Most of these new netbooks are pretty much the same inside, so a few things won me over to this one:

  • Ten inch screen, substantially bigger than the seven inch netbooks.
  • Very good reviews of the keyboard, and I concur it works well with my fat fingers, and dedicated Page Up/Down keys are very handy
  • Built-in Bluetooth, which means tethering to my phone for mobile broadband is trivial
  • Built-in SD card (it does other formats too) reader, makes it trivial to upload my photos
  • VGA-out plug, meaning I can potentially use it as a desktop with two screens

Downsides include the Microsoft tax (which I'll attempt to recoup, after Simon Hackett's encouragement), a hard drive that I don't really need and probably is an unnecessary drain on battery, and a touchpad that has been fairly strongly vilified.

I'd tend to agree that the touchpad is pretty poor. The buttons require so much force that you really have to use two hands to do anything like click-drag. That said, I mostly don't use these things anyway and carry around a little retractible mouse anyway.

The install from Ubuntu Netbook Remix was trivial. Change the BIOS settings to boot from USB (F2 at boot to access BIOS) and boot. It was done in about fifteen minutes and most things just worked, including wireless, suspend and hibernate.

I've found a few issues with sound. Playback from Rhythmbox, the default Ubuntu music app, can be a bit choppy. I suspect this is just the application, and I might just change apps. Sound after suspend doesn't seem to work, which is a bit annoying. I haven't worked out how to reliably get the sound to work with Skype either. I'll keep playing with that.

Settings to change

I've made a couple of changes to the default Ubuntu install for this system.

I disable Caps Lock on all machines I use, because it's a completely useless key and my fat fingers often hit it accidentally. The Caps Lock key on the Aspire One is no exception, and I have to wonder why they would include one when a dedicated NumLock key would be more helpful. Add the following to ~/.bashrc:

 if [ "$PS1" ]; then
    # Disables the bloody CapsLock button
    xmodmap -e "remove lock = Caps_Lock"
 fi

Inexplicably, Ubuntu disables laptop_mode by default, which means it doesn't do useful things when running on battery power that will extend battery life. It also makes it hard to work out why it isn't running, putting the setting in a seemingly unrelated file, and returning nothing when you try to run the init script. Change ENABLE_LAPTOP_MODE=false to ENABLE_LAPTOP_MODE=true in /etc/default/acpi-support to enable it.

Mouse settings

The touchpad is overly sensitive and when you're in the middle of frenzied typing, often moves the cursor on you. Most annoying. I get around this by disabling clicks from the trackpad, given I don't use it anyway.

Littlefox theme

Firefox, by default, takes up a lot of useless vertical screen space. I've reduced this by removing the Bookmarks Toolbar and moving it up next to the menu. I also installed the Littlefox theme, which uses much smaller icons. This gives you a bit more of the critical vertical screen space.

The included soft slip case, made out of wetsuit material, is alright but has no space for my little mouse and a pair of headphones, which I think are essential portable accessories. I might try sewing on a couple of little pockets to make it perfect.

Conclusion

It's early days just yet, but I'm pretty damn happy with my new little netbook. It's suiting my needs pretty well, and looks rather fine too.

Contact me

June 20, 2009 01:59 AM

June 19, 2009

Rich Buggy

Price is never a point of difference

I was reading a post on TechNation Australia which contains a quote from the co-founder of a new services market place who describes their point of difference as “not charging”. Free is a great way to get people to try your service but price is never a point of difference. You will always find someone willing to sell a similar product for less. In the end you’ll either lose your point of difference or end up reducing your price until it finally costs you money to make a sale.

June 19, 2009 12:17 PM

June 17, 2009

Pia Waugh's hackergotchi

Pia Waugh

links for 2009-06-17

June 17, 2009 10:04 PM

Sonia Hamilton

Another year, another Sydney Film Festival


Another year, another Sydney Film Festival. Two films I saw really stood out – The Cove (about the continued Japanese dolphin slaughter) and Che Part I and Part II (covering the Cuban and Bolivian years of Ernesto ‘Che’ Guevara). Also memorable was Big River Man, about a middle aged  Slovenian man who swims the entire length of the Amazon river.

Like always (this is my approx 15th festival), I start the festival with feelings of both anticipation and trepidation – anticipation that I’ll see some great films, and trepidation at the long nights and weekends in the dark, followed by getting up in the morning for work :-) But there’s nothing like seeing a great movie with several thousand other cineastes in the splendour of the State Theatre to renew my love of good cinema.

The Cove works at multiple levels. Firstly we’re made to enjoy the almost James Bond nature of the film makers’ mission, as the team try to infiltrate the area where the slaughter takes place in Taiji, Japan – think spies and decoys, cameras disguised as rocks, and run-ins with guards. Then we’re made to feel revulsion at the killing of these animals that are so like us – they love their freedom, get happy, sad, even commit suicide, and most of all are sentient (as in “having self awareness”). The scenes of the actual slaughter are gut-wrenching – thousands of dolphins are herded into a 100m wide cove and killed by hand with harpoons. Dolphins in their death throws spin around in circles screaming, thrashing their tails, and even jumping onto land. The blood filled seawater turns opaque and divers feel their way along the seabed by hand, searching for carcasses.

But then the film starts to ask some deeper questions. First of all, dolphin meat contains high levels of mercury due to pollution and is basically poisonousness and unsaleable. Eating meat with these levels of mercury leads to large numbers of horrendous birth defects – which the Japanese unfortunately became aware of in the 70’s – a whole generation of birth defects forcing the closure of  many polluting industries in Japan. So why keep up with the “harvest”, even if the meat has to be foisted onto the Japanese public via illegal meat substitution and Yakuza links? The answers seem to involve dirty international politics and ugly right wing Japanese nationalism.

Secondly, inorganic pollutants are concentrated as we move up the predator-prey cycle, and dolphins (like wolves, lions, humans) are at the top of the food chain. Dolphin meat contains so much mercury that it’s inedible – what about us? How is that we can poison our environment so much that we’re poisoning ourselves?

June 17, 2009 09:01 AM

Dave Airlie

Initial KMS support for radeons merged to Linus tree.

Okay radeon TTM/KMS has landed in Linus tree under staging.

To enable it you need to enable CONFIG_DRM_RADEON_KMS, which relies on CONFIG_STAGING being set.

please read the CONFIG_STAGING warnings, esp the
"Please note that these drivers are under heavy
development, may or may not work, and may contain userspace
interfaces that most likely will be changed in the near
future."

Now to get a userspace that can use this code you need to get

git://git.freedesktop.org/git/mesa/libdrm master branch
and build it with --enable-radeon-experimental-api and install that.

git://git.freedesktop.org/git/xorg/driver/xf86-video-ati kms-support branch
build that second

git://git.freedesktop.org/git/mesa/mesa.git master branch
build this with libdrm_radeon somewhere that pkgconfig can find it.

You should either have KMS + DRI2, or a pile of smoking trash.

Please report any mode type issues on #radeon or dri-devel mailing list.

If you can't compile or configure your system to use this please wait until you have a distro do it for you.

If you are using Fedora 11, grab the latest xf86-video-ati from koji and all you need is the new kernel bits.

Known issues:
My DDX reports something about DRM 2.0.0 and wanting 1.2.x or something like that, you messed up setting up the DDX or are
still using the system DDX.
Xv might be broken on resize (or normally)
r600/r700 doesn't work (no surprise its not ready yet)

June 17, 2009 08:15 AM

Mark Greenaway

Quick guitar post

To relax towards the end of the exam period, I've been playing guitar a bit. More focusing on trying to develop a better sense of rhythm and learn some more about music theory. I've been working through the Berklee method books a little. And I've been trying to work out songs by ear all the way through, which is something I didn't used to have the discipline to do. Playing songs or sight reading to a metronome can be a pretty humbling experience where one moment everything's going fine and you're locked in with the beat, and two or three bars later everything's gone off the rails :)

I've always had some sort of strange hangup about fiddling around with my gear, particularly amp settings. For whatever reason, I've begun to get over that and start playing pretty aggressively with the EQ, and it's been wonderful, nearly like listening to a different instrument. And of course, this is a step on the way to learning to get tones as good as the ones you hear on records.

June 17, 2009 12:23 AM

June 16, 2009

Pia Waugh's hackergotchi

Pia Waugh

links for 2009-06-16

June 16, 2009 10:05 PM

Lindsay Holmwood's hackergotchi

Lindsay Holmwood

Sane Ruby on Hardy redux

Last year I blogged about where to get up-to-date Ruby packages for Ubuntu.

The PPA I suggested hasn’t been updated in a while, and there are a few gems that require the latest version of RubyGems to work correctly (Rails, i’m looking at you).

I suggest you remove the PPA and add this to your /etc/apt/sources.list:

deb http://apt.brightbox.net/ hardy main

Sub hardy with intrepid/dapper depending on what release you need.

Then do an apt-get update && apt-get remove rubygems && apt-get install rubygems, and you'll be upgraded to the latest version of RubyGems.

June 16, 2009 08:51 PM

Mark Greenaway

GLM exam

That was awful. Oh well, only one more exam to go and then I'm done for this semester.

June 16, 2009 04:16 AM

June 15, 2009

Robert Thomson

Seantis Questionnaire released

Announcing Seantis Questionnaire, a Django Questionnaire/Survey application that I developed for Seantis GmbH in Switzerland.

Features

  • Multiple Questionnaires, multiple pages (QuestionSets) per questionnaire, multiple runs of same questionnaire per subject (eg. for annual surveys)
  • Multilingual using the django transmeta application.
  • Questions (ie. 6) & SubQuestions (ie. 6a), with appropriate layout tweaks.
  • Email Invitations (direct URL to Questionnaire)
  • Does _not_ require Django’s authentication system to answer questionnaires
  • CSV export of answers.
  • Complex dependencies utilising a full Boolean Expression Parser, and Javascript support. eg. (6a=yes and 6b=yes) OR 5=no
  • Built-in Question types including:
    • Open (single line), Open (text area)
    • Yes/No, Yes/No/Dont Know, Yes/No/Comment
    • Single Choice, Single Choice + Freeform Option
    • Multiple Choice, Multiple Choice + Freeform Option(s)
    • Number Range
    • Time Period
  • Easily extensible question types (Question Processor + Template, and Answer Processor)
  • Django Signals on completion of QuestionSets and Questionnaires
  • Javascript to hide irrelevant questions (works fine without Javascript too) and disable irrelevant form fields.

Talk to Seantis GmbH about custom development.

Download Seantis Questionnaire from GitHub. It is released under the same license as Django itself.

June 15, 2009 05:50 PM

Erik de Castro Lopo

Two More for the Debian New Queue.

I've got two new packages in the Debian NEW queue :

These two libraries are obviously useful in their own right, but I was particularly interested in packaging these because they are build dependencies for hoogle which I'm currently working on packaging.

Thanks to Simon Horman for sponsoring these uploads and the previous ones.

June 15, 2009 01:01 PM

Mark Greenaway

2 down, 2 to go. My hardest exam was today, functional analysis. My most irritating exam will be tomorrow morning. I really can't wait to get that one out of the way.

June 15, 2009 06:22 AM

June 14, 2009

Silvia Pfeiffer

YouTube Ogg Theora+Vorbis & H.263/H.264 comparison

On Jun 13th 2009 Chris DiBona of Google claimed on the WhatWG mailing list:

“If [youtube] were to switch to theora and maintain even a semblance of the current youtube quality it would take up most available bandwidth across the Internet.”

Everyone who has ever encoded a Ogg Theora/Vorbis file and in parallel encoded one with another codec will have to immediately protest. It is sad that even the best people fall for FUD spread by the un-enlightened or the ones who have their own agenda.

Fortunately, Gregory Maxwell from Wikipedia came to the rescue and did an actual “YouTube / Ogg/Theora comparison”. It’s a good read and a comparison on one video. He has put his instructions there, so anyone can repeat it for themselves. You will have to start with a pretty good quality video though to see such differences.

June 14, 2009 12:36 PM

June 13, 2009

Matthew Palmer's hackergotchi

Matthew Palmer

The Rise and Fall of Wordperfect

It's been sitting in my browser for so long that I've forgotten where I got it from, but I've just finished reading The Rise and Fall of Wordperfect Corporation, written by W. E. "Pete" Peterson, one of the very early employees of the company, and one of the top people there for many years.

It's a really interesting book, giving some insights into what it was like in the early days of "the microcomputer revolution", and with some solid observations of how to (and how not to) run a software company, and manage a very rapidly growing organisation. I'd recommend it to computer historians, software development managers, and business owners.

June 13, 2009 10:57 PM

Jeff Waugh's hackergotchi

Jeff Waugh

How do dogs drink water?

Wow, this sure is counter-intuitive. Watching Po the other day, I was pondering more efficient ways for a dog to drink water. I mean, why doesn’t he just hold his breath, stick his snout in the bowl and suck? OK, it might take a leap of faith for a dog to do that due to inconvenient nostril placement. ;-)

Meanwhile, I’ve always assumed that dogs and cats scooped up the water in their tongue like a bucket. Turns out that was right, albeit backwards… in the slow-mo video below, you can see that dogs actually use the back of their tongue as a scoop, not the front (which is the way I would do it)!

Click here to view the embedded video.

Update: After some encouragement in the comments, Dusty sent along a video of Sarah (a six month old Gordon Setter) drinking through her snout like a straw! It may not be slow motion, but you can still clearly see her unusual approach to the problem towards the end of the video. Check it out:

Click here to view the embedded video.

June 13, 2009 09:29 AM

Truly, CSS is awesome

CSS is awesome

… and apparently available on Zazzle.

June 13, 2009 08:00 AM

Matthew Palmer's hackergotchi

Matthew Palmer

"Tx unit hang" in e1000 driver

In the "blogging it so I don't forget about it" category, and also to try and give Google some hints, here's one from the vault I recently came across again...

Older e1000 chips (specifically the 82573(V/L/E)) have firmware which enables the (buggy) power management functionality in the chips. Although this shouldn't occur with hardware shipped in the last several years (the updated firmware was released ages ago), I just came across it recently in a supposedly-new server, so who knows what's going on there...

The problem manifests itself as flaky or unstable network performance, combined with the kernel / log messages:

	Detected Tx Unit Hang
	NETDEV WATCHDOG: ethX: transmit timed out

The fix is as described in the "82573(V/L/E) TX Unit Hang Messages" section of the Intel Linux driver documentation for the e1000 driver. The reason I'm blogging about it is that the top Google results point to either the now-dead e1000.sf.net wiki (which used to have all the necessary info, but now doesn't), or else forum posts which point to the now-dead e1000.sf.net wiki. Either way, it's not trivial to find a working location for the fix, so... linky love time!

June 13, 2009 04:01 AM

James Purser's hackergotchi

James Purser

A Mental Prototype - Biogas Reactor

Okay, as a mental exercise (really because I can't afford to build the thing right now) I have been designing a prototype of the Clean Energy Bio-Fuels plant I mentioned earlier.

To make things simpler I've broken down the design into the component parts:

  • Bio-gas Plant
  • Bio-Diesel Plant

Now as you may remember, the idea is to create a plant that is as energy self-sufficient as possible while reducing the impact on the environment to the bare minimum, while producing quality fuels, and as I've discovered other products.

This entry will look at building the prototype Bio-Gas plant, the inputs that will be needed, the challanges faced and the outputs I expect to get out of it.

Bio-Gas Plant Prototype

Inputs:

  • Bovine Manure
  • Agricultural Waste (plant matter only)
  • Kitchen Waste (vegetable matter only)
  • Glycerol (A by-product of Bio-Diesel generation)
  • Water

Outputs:

  • Methane
  • C02
  • Hydrogen Sulphide (Rotten Egg Gas)
  • Slurry (source material that has exhausted its ability to generate gas)
  • Water (contanimated)
  • Electricity
  • Heat

Design of Prototype:

Reactor

The reactor is where the initial generation of the gas occurs. Manure, water, agri-waste and kitchen waste are combined in a drum and mixed thoroughly. The system works on a four month rotational batch process. At the beginning of the first month, one drum is connected to the first outlet pipe. At the beginning of the second month, the first drum is moved to the second outlet pipe and a fresh drum is connected to the first. By the time the fourth month is completed, the first drum will be exhausted and ready to be emptied and prepared with a fresh batch.

The Bio-Gas reactor will consist of the following:

  • 4 200 Litre Drums
  • 4 Pressure Gauges
  • Tubing (to take gas from drums to gas scrubber)
  • 4 Custom lids with gas outlet valves and pressure/temp information

Gas Scrubber

While methane can form anywhere up to 60% of the gas produced by the reactor, C02 and Hydrogen Sulphide are both produced in large quantities. Not only are these gases environmentally dangerous, they affect the combustability of the bio-gas and thus inhibit optimal operation of any power generation.

To prevent this, we need to build a Gas Scrubber. The idea is to filter the gas through several stages to ensure that any contanimants are stripped out of the gas before it hits storage/usage.

Ideally I would like to build a solution that involves re-using the C02 in the process of either bio-gas generation or bio-diesel. There are a variety of different ideas regarding this. The one I like the most is passing C02 through a bacterial solution that converts the C02 into methane, thus not only taking the C02 out of the equation, but increasing the yield of the system.

Scrubbing out the hydrogen sulphide could be even easier. I ran across this method on Freepatents online. Essentially this method involves pumping the gas through an alkalyne solution (such as the slurry that results from the initial processing) at a certain temperature. This captures the hydrogen sulphide in the slurry where it can be broken down as the slurry cures.

Once the C02 and Hydrogen Sulphide has been removed or converted it needs to be dried. Removing the last of the moisture ensures the maximum combusitibility.

Materials:

  • Tubing to take the gas from the reactor to the scrubbing process.
  • Container for bacterial C02->Methane process
  • Tubing to take gas from C02->Methane process to slurry processing
  • Tubing to take scrubbed gas

Slurry Treatment

Once the materials ability to generate gas has been exhausted it needs to be transferred into the slurry treatment plant. The idea is that the slurry will be turned into a nutrient rich natural fertiliser, as well as providing part of the treatment of the bio-gas.

I'm still trying to work this part of the process out. Essentially what needs to come out at the end is water and dry fertiliser.

Materials:

  • 4 x 200 Litre Drums
  • Drying Pit
  • Storage Shed

So there it is, needs more work and probably won't survive real life, but it's a step.

June 13, 2009 03:15 AM

June 12, 2009

Silvia Pfeiffer

Cool HTML5 video demos

I’ve always thought that the most compelling reason to go with HTML5 Ogg video over Flash are the cool things it enables you to do with video within the webpage.

I’ve previously collected the following videos and demos:

First there was a demo of a potential javascript interface to playing Ogg video inside the Web browser, which was developed by CSIRO. The library in use later became the library that Mozilla used in Firefox 3.5:

Then there were Michael Dale’s demos of Metavidwiki with its direct search, access and reuse of video segments, even a little web-based video editor:

Then there was Chris Double’s video SVG demo with cool moving, resizing and reshaping of video:

and Chris kept them coming:

Then Chris Blizzard also made a cool demo for showing synchronised video and graph updates as well as a motion detector:

And now we have Firefox Director Mike Belitzer show off the latest and coolest to TechCrunch, the dynamic content injection bit of which you can try out yourself here:

It just keeps getting better!

UPDATE: Here are some more I’ve come across:

June 12, 2009 01:14 PM

Dave Airlie

radeon-rewrite merged to mesa master + drm pull

So I merged the rewrite of the radeon/r200/r300 to the mesa master today.

On a non-KMS DRI1 system we are hoping these patches are mostly regression free in terms of lockups and possibly fix a fair few lockups thanks to Maciej and Jerome's work.

Of course on a KMS/DRI2 system, this work enables GL on r100-r500 families of radeon cards and we hope to add more features to the ones we gain. We should now at least have FBOs where we never did before (in DRI2/KMS mode).

R600 work is ongoing in a branch still so this announcement has no effect on r600 or above.

I've also sent Linus a drm pull request with all of Intels drm-intel-next branch + all the patches I had sitting in my queue.

Early next week I'll send him the KMS patches for radeon, which will be in the radeon driver but the enable switch will be hidden in staging, while we stabilise it, since its such a huge amount of code. So don't expect miracles out of it anytime soon.

On a PCI ID table comparison Intel KMS have 28 IDs to support, radeon KMS has ~350, granted this code has no memory manager for r600 and up yet (kms code sohuld all be there), so its probably close to 200 GPU variants (+/- 50 for ids not seen in the wild maybe).

June 12, 2009 06:44 AM

June 11, 2009

Mark Greenaway

Applied maths honours, not for wimps

The applied maths honours students got given a take 48 hour home exam yesterday at 10 am for geometric mechanics. It's 7:30pm and they're still going. Presumably it's due at 10am tomorrow. I hope some of them get some sleep.
Back to studying for functional analysis.

June 11, 2009 09:33 AM

Simon Rumble

Why display advertising sucks


I've been working on a fair bit of marketing-related stuff over the last few years, and we've been spending pretty big on online campaigns. Much of this money has gone on display advertising, the kind of stuff you'll see on Fairfax and News Corp sites. We've had a whole range of problems with this stuff, and I've come to the conclusion it's more trouble than it's worth. Certainly if you want to measure response based on sales, the rate is pitiful. Here's why it's broken.

When you buy a search ad, you can be pretty certain the person is actually interested in the topic represented by the keyword you're buying. So when someone types "wireless keyboard", it's a good bet they're probably interested in buying a "wireless keyboard" of some sort.

When you buy a display ad, you get pretty loose categorisation. Perhaps your technology product might end up in the technology section of the site, so at least you're being exposed to people with an interest. Or you might be in the "general interest" pool, in which case you're getting exposed to the people who clicked on "celebrity shows boobies" links. Just the people you want. But regardless of the type of category you end up in, you're getting people who are expressly there for something other than finding something about a very specific topic.

So really, you can't measure the results of display advertising by expecting people to buy immediately after clicking, it's more for branding. Or so the salesmen for these mass media properties will tell you. So really you're getting your brand exposed to roughly categorised people.

Except it's completely unmeasurable, and the mass media sites have only themselves to blame for this. You see, if I want to have my brand exposed randomly to roughly categorised people, I need to have some pretty solid statistics on how many have seen it. I'm an Internet advertiser, so I'm used to pretty solid stats, not based on diary entries like TV or circulation surveys like newspapers (yeah, like most copies of the newspaper get read by more than one person, every day).

The problem is the major media in Australia specifically make any "impression" numbers meaningless, by adding a little line of code like this to every page on their site, this from news.com.au:

<meta http-equiv="refresh" content="0300" />

This line of code means the page gets reloaded every 300 seconds, or 5 minutes. Fairfax have recently started doing this in a slightly different way (checking if a video is playing first) but they do the same thing.

By reloading the page every five minutes, they've made their impression numbers completely meaningless. People regularly leave their browsers open with a page: the news, the weather, whatever they were just reading. So they go off for a half hour lunch and three "impressions" tick over, except there's nobody home to be impressed. There's no way to quantify how often this happens, so the impression number isn't just inaccurate, it's some unknowable amount completely wrong.

So you see, measured by the only accurate measurement, click throughs and subsequent sales, display doesn't make sense. And as a branding exercise it's not worth playing around with because the publishers have specifically taken steps to make the numbers meaningless.

And they wonder why newspapers are dying, when they go out of their way to devalue the one thing of value they do produce?

11th June 2009 addition: this "study" by News Digital Media just confirms my suspicions. Surveying less than a thousand people when the ad had 300,000 impressions, yeah there's something you can use to draw conclusions! These being people who had just seen the ad (possibly, given what I said above).

Contact me

June 11, 2009 06:20 AM

June 10, 2009

Rich Buggy

Microsoft Open Source Information Evening

While chatting with Nick Hodge about tomorrows panel session at Remix09 he mentioned that he was hosting a series of open source information evenings with Jorke Odolphi later this month. I’m sure many in the open source community are skeptical about any Microsoft involvement in open source but they do seem to be making an effort to get along and even help those who want to bring open source to Windows. Importantly the evening is about two way communication and not just a crafted message. If you’re interested in attending you can register at https://www.microsoft.com.au/events/register/home.aspx?levent=750528&linvitation

June 10, 2009 08:52 AM

June 09, 2009

Silvia Pfeiffer

Sites with Ogg in HTML5 video tag

Yesterday, somebody mentioned that the HTML5 video tag with Ogg Theora/Vorbis can be played back in Safari if you have XiphQT installed (btw: the 0.1.9 release of XiphQT is upcoming). So, today I thought I should give it a quick test. It indeed works straight through the QuickTime framework, so the player looks like a QuickTime player. So, by now, Firefox 3.5, Chrome, Safari with XiphQT, and experimental builds of Opera support Ogg Theora/Vorbis inside the HTML5 video tag. Now we just need somebody to write some ActiveX controls for the Xiph DirectShow Filters and it might even work in IE.

While doing my testing, I needed to go to some sites that actually use Ogg Theora/Vorbis in HTML5 video tags. Here is a list that I came up with in no particular order:

I’m sure there’s a lot more out there – feel free to post links in the comments.

June 09, 2009 10:44 PM

Robert Thomson

Directly implementing Zope 3's IAuthentication

Zope 3's Pluggable Authentication Utility doesn't automatically store a cookie saying that you're logged in if you've been authenticated once. Instead, it uses credentials and authentication plugins. For each credentials plugin, it passes the credential's output to each of the authentication plugins, and if any succeed, then it returns a Principal. It sounds logical enough, except that it does that every time, instead of storing a variable in my session stating that I'm already authenticated. Since I'll be authenticating against an external system, I didn't like the idea of checking the password on every request.. It wasn't immediately obvious to me how I could simply achieve this within the Pluggable Authentication framework, and I wasn't sure I needed the power of it anyway, so I decided to create my own IAuthentication implementation, and forget about the PAU altogether.

What it does

This implementation stores all the IPrincipal information (id, name, and description) as a signed cookie in the user's browser. By default, the session will expire after 6 hours of non-use, and the cookie's timestamp will be updated every 5 minutes with a new timestamp.

The Code

The signed string code is located in securestring.py, and the authentication code in auth.py. You also need to implement the authentication in your login form, and add it as a local utility to your application/site.

securestring.py

# coding: utf-8
import md5, random

SECRET='SomeRandomStringThatYouShouldNotShare' # CHANGE THIS

def make_sstring(question, string, r = None):
if r is None:
r = ''.join([random.choice('1234567890abcdef') for x in '12345678'])
m = md5.md5(SECRET + question + ":" + string + r)
return "%s|%s|%s" % (string, r, m.hexdigest())

def get_sstring(question, securestring):
string, r, md5 = securestring.split('|',2)
if make_sstring(question, string, r) == securestring:
return string
return False

auth.py

# coding: utf-8
from zope.app.security.interfaces import IAuthentication, IUnauthenticatedPrincipal, PrincipalLookupError, IPrincipal, ILogout
from zope import interface, schema, security
from securestring import make_sstring, get_sstring
from zope.app.component import hooks
from zope.traversing.browser.absoluteurl import absoluteURL
import time
from urllib import urlencode

class Principal(object):
    interface.implements(IPrincipal)

    def __init__(self, id, title, description):
        self.id = id
        self.title = title
        self.description = description

    def __str__(self):
        return "<Principal: %s>" % self.title

def make_authenticated(request, principal):
    id = principal.id
    title = (principal.title or '').replace("::","..")
    description = (principal.description or '').replace("::","..")
    tm = int(time.time())
    sstring = "%d::%s::%s::%s" % (tm, id, title, description)
    sstring = make_sstring('z3c_sstring_login', sstring)
    request.response.setCookie('z3c_sstring_login', sstring, path="/")
    return principal

class SStringAuthenticator(object):
    interface.implements(IAuthentication, ILogout)
    loginpagename = 'login'
    timeout_in_seconds = 60*60*6 # 6 hours
    update_timeout = 60*5 # how often to update the cookie

    def logout(self, request):
        request.response.expireCookie('z3c_sstring_login', path="/")

    def authenticate(self, request):
        sstring = request.cookies.get('z3c_sstring_login', None)
        if sstring is None:
            return None
        sstring = get_sstring('z3c_sstring_login', sstring)
        if not sstring:
            return None
        try:
            tm, id, title, description = sstring.split('::',3)
            tm = int(tm)
            now = int(time.time())
            if (now - tm) < self.timeout_in_seconds:
                principal = Principal(id, title, description)
                if (now-tm) > self.update_timeout:
                    make_authenticated(request, principal)
                return principal
        except:
            pass

    def unauthenticatedPrincipal(self):
        # not really sure what to do here, but it doesnt seem to hurt
        return None

    def unauthorized(self, id, request):
        site = hooks.getSite()
        stack = request.getTraversalStack()
        stack.reverse()
        query = request.get('QUERY_STRING')
        camefrom = '/'.join([request.getURL(path_only=True)] + stack)
        if query:
            camefrom = camefrom + '?' + query
        url = '%s/@@%s?%s' % (absoluteURL(site, request),
            self.loginpagename,
            urlencode({'camefrom': camefrom}))
        request.response.redirect(url)

    def getPrincipal(self, id):
        principal = Principal(id, id, id)
        interface.direc