Begin main content

Race day

Well there was a little too much of this:

Traffic Jam

But in the end a good day was had by all*, especially the spectators:

On Track

* Except: Kimi Raikkonen, Robert Kubica, Timo Glock, Takuma Sato, Nelsinho Piquet, Felipe Massa, David Coulthard, Jarno Trulli, Adrian Sutil, Mark Webber, Jenson Button, Anthony Davidson, Sebastian Vettel, Giancarlo Fisichella, Rubens Barrichello

Kimi ended up salvaging a point thanks to Barrichello's disqualification for exiting the pit lane against a red light. This also shifted Champ car champ Sebastien Bourdais to 7th rank (even though he didn't quite finish) and 2 points - not bad for your first f1 in a third tier car (which is why I included him in the list of people who *did* have a good day!

12:28 PM, 16 Mar 2008 by Mark Aufflick Permalink | Comments (0)

RAAF Roulettes

The RAAF Roulettes performed their excellent brand of aeorbatics today at day 3 of the Grand Prix.

RAAF Roulettes

There was an even more awe inspiring FA/18 demonstration but I didn't get any still footage of that. I'll see if my phone-cam video is worth posting later.

05:44 AM, 15 Mar 2008 by Mark Aufflick Permalink | Comments (0)

Obligatory Kimi Photos

Of course it's only practice, but notably current world champion Kimmi didn't show good pace. A final blast on a sticky track yielded only 6th fastest lap of the day.

Kimi

Kimi

10:55 AM, 14 Mar 2008 by Mark Aufflick Permalink | Comments (0)

Webber looking fast

To the delight of fans (and, I'm sure, the ticket sellers), Australian F1 driver Mark Webber led the pace for nearly all of practice session two - being bested only by Lewis Hamilton at the end of the 90 minutes.

Webber

10:52 AM, 14 Mar 2008 by Mark Aufflick Permalink | Comments (0)

F111 flyby

It wasn't all land-based power at the F1 today - four RAAF F111s did a flyby (no dump and burn unfortunately) and the Navy "Squirrel" helecopters put on a great acrobatic display.

F111 flyby

10:49 AM, 14 Mar 2008 by Mark Aufflick Permalink | Comments (0)

Trulli's Toyota on a Truck

Many people had minor offs in their newly traction-control-free cars, but Jarno Trulli's Toyota got beached and had to be hauled off on a truck after practice session 2.

Trulli's Toyota on a truck

10:45 AM, 14 Mar 2008 by Mark Aufflick Permalink | Comments (0)

Nakajima coming to grief

There was some excitement at today's F1 practice sessions. I managed to snap this sequence of Williams #2 driver Nakajima spinning right in front of me.

Nakajima spin Update: Oops, my brain slipped back in time! This post previously (and incorrectly) attributed this spin to Alex Wurz who no longer has an F1 driving seat.

10:42 AM, 14 Mar 2008 by Mark Aufflick Permalink | Comments (0)

Convert XML to SQL

I thought it might be worth crossposting my reply to a recent perlmonks question asking for a generalised XML to SQL conversion.

You can transform your xml into sql using xslt. Stealing some bits of code from elsewhere on the net, I can use the following xslt to convert my del.icio.us bookmarks into a set of insert statements:

<?xmlversion="1.0"?>
<!DOCTYPE rdf:RDF [
    <!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
    <!ENTITY rss 'http://purl.org/rss/1.0/'>
]>
<xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"xmlns:rdf="&rdf;"xmlns:rss="&rss;">
  <xsl:outputmethod="text"/>

  <!-- main template -->

  <xsl:templatematch="/rdf:RDF">
      <xsl:apply-templatesselect="rss:item" />
  </xsl:template>

  <xsl:templatematch="rss:item">
    insert into links (url, title)
    values (
    '<xsl:call-templatename="sql-escape"><xsl:with-paramname="text"select="rss:title"/></xsl:call-template>',
    '<xsl:call-templatename="sql-escape"><xsl:with-paramname="text"select="rss:link"/></xsl:call-template>'
    );
  </xsl:template>

  <!-- utility functions -->

  <xsl:templatename="sql-escape">
    <xsl:paramname="text"/>
    <xsl:variablename="tmp">
      <xsl:call-templatename="replace-substring">
        <xsl:with-paramname="from">'</xsl:with-param>
        <xsl:with-paramname="to">''</xsl:with-param>
        <xsl:with-paramname="value"select="$text"/>
      </xsl:call-template>
    </xsl:variable>
    <xsl:value-ofselect="$tmp"/>
  </xsl:template>

  <xsl:templatename="replace-substring">
    <xsl:paramname="value" />
    <xsl:paramname="from" />
    <xsl:paramname="to" />
    <xsl:choose>
      <xsl:whentest="contains($value,$from)">
        <xsl:value-ofselect="substring-before($value,$from)" />
        <xsl:value-ofselect="$to" />
        <xsl:call-templatename="replace-substring">
          <xsl:with-paramname="value"select="substring-after($value,$from)" />
          <xsl:with-paramname="from"select="$from" />
          <xsl:with-paramname="to"select="$to" />
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-ofselect="$value" />
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  
</xsl:stylesheet>
If I save that to a file called del2sql.xsl I can insert the links in the rss response like so:

wget -O - http://feeds.delicious.com/rss/aufflick | xsltproc del2sql.xsl - | psql links_db
Pretty neat huh! Unfortunately xslt is even less decipherable than golf perl, but thems the breaks.

The command pipeline above uses the postgres psql command, but you can just as easily use this approach with mysql, oracle, sybase, sql server or whatever. Most database vendors/projects these days have some sort of xml functionality built in, but this puts all the processing load on the part of your system that is most difficult to scale. Better, I think, to do as much processing as possible on your application server which you can more easily scale.

You might also be better using xslt to convert to CSV and then using some simple script to slurp the csv into your database - you could then handle insert/update errors gracefully in your script.

The utility sql-escape and replace-substring templates can be placed in a common file and included into your xsl stylesheets via an xsl:import statement. If you have an xsl 2 compatible xslt engine you can use the x:replace() function directly instead of the recursive replace-substring template.

07:41 AM, 03 Mar 2008 by Mark Aufflick Permalink | Comments (0)

XML

Blog Categories

software (41)
..cocoa (23)
  ..heads up 'tunes (5)
..ruby (6)
..lisp (4)
..perl (4)
..openacs (1)
mac (21)
embedded (2)
..microprocessor (2)
  ..avr (1)
electronics (3)
design (1)
photography (26)
..black and white (6)
..A day in Sydney (18)
..The Daily Shoot (6)
food (2)
Book Review (2)

Notifications

Icon of envelope Request notifications

Syndication Feed

XML

Recent Comments

  1. Mark Aufflick: Re: the go/Inbox go/Sent buttons
  2. Unregistered Visitor: How do make a button to jump to folder
  3. Unregistered Visitor: Note I've updated the gist
  4. Unregistered Visitor: umbrello is now an available port on macPorts
  5. Unregistered Visitor: Updated version on Github
  6. Unregistered Visitor: Modification request.
  7. Unregistered Visitor: Accents and labels with spaces
  8. Unregistered Visitor: Mel Kaye - additional info
  9. Unregistered Visitor: mmh
  10. Mark Aufflick: Thank you