<?xml version="1.0"?>
<!-- name="generator" content="blosxom/2.0.2" -->
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">

<rss version="0.91">
  <channel>
    <title>peteg's blog   </title>
    <link>http://peteg.org/blog</link>
    <description></description>
    <language>en</language>

  <item>
    <title>Another one from the &lt;a href=&quot;http://peteg.org/thesis/src/prolog/glog/glog.html&quot;&gt;GLog&lt;/a&gt; paper.</title>
    <link>http://peteg.org/blog/2008/08/15#2008-08-15-htree</link>
    <category>/hacking</category>
    <description>
&lt;p&gt;

The h-tree example, another infinite image.

&lt;/p&gt;
&lt;object type=&quot;image/svg+xml&quot; data=&quot;http://peteg.org/static/htree.svg&quot;
width=&quot;400&quot; height=&quot;300&quot; style=&quot;display: block; border-style: none;
margin-left: auto;margin-right: auto&quot;&gt;&lt;p&gt;Argh, your browser does not
support SVG! Try &lt;a href=&quot;http://www.mozilla.org/products/firefox/&quot;&gt;FireFox&lt;/a&gt; or &lt;a href=&quot;http://www.opera.com/&quot;&gt;Opera&lt;/a&gt;.&lt;/p&gt;&lt;/object&gt;
&lt;p&gt;

You can download the standalone file &lt;a href=&quot;http://peteg.org/static/htree.svg&quot;&gt;here&lt;/a&gt;. Unfortunately I can't seem to get the &lt;a href=&quot;http://www.gzip.org/&quot;&gt;gzip&lt;/a&gt; compression to work, so that file is a little bit huge for what
it is. Here's the code:

&lt;/p&gt;
&lt;pre&gt;
l :: Picture
l = Canvas 1 1 [Line (0.5, 0.5) (0.5, 1)]
;
h :: Picture
h = Overlay l (Beside 1 1 (Flip s) s)
;
s :: Picture
s = Rotate h
;
htree :: Picture
htree = h
;
main = htree
&lt;/pre&gt;</description>
  </item>
  <item>
    <title>Another old friend.</title>
    <link>http://peteg.org/blog/2008/08/15#2008-08-15-FishLimit</link>
    <category>/hacking</category>
    <description>
&lt;p&gt;

Here is a friend of the &lt;a href=&quot;http://peteg.org/blog/hacking/2008-08-11-FishCycle.autumn&quot;&gt;fish cycle&lt;/a&gt;:
the &quot;fish limit&quot;.

&lt;/p&gt;

&lt;object type=&quot;image/svg+xml&quot; data=&quot;http://peteg.org/static/fishLimit.svg&quot; width=&quot;400&quot; height=&quot;300&quot; style=&quot;display:
block; border-style: none; margin-left: auto;margin-right:
auto&quot;&gt;&lt;p&gt;Argh, your browser does not support SVG!&lt;/p&gt;&lt;/object&gt;

&lt;p&gt;

Again, if you look at the &lt;a href=&quot;http://peteg.org/static/fishLimit.svg&quot;&gt;free standing SVG file&lt;/a&gt;, you should be able
to exercise the scaling feature of your &lt;a href=&quot;http://www.w3.org/TR/SVG/&quot;&gt;SVG&lt;/a&gt; implementation.

&lt;/p&gt;&lt;p&gt;

Although the &lt;a href=&quot;http://www.w3.org/TR/SVG/&quot;&gt;SVG&lt;/a&gt; rendering consists of only a finite set of lines,
the original &lt;code&gt;FLAN&lt;/code&gt; source code describes an infinite set;
the interpreter decides to stop generating that set once the lines get
too small.

&lt;/p&gt;
&lt;pre&gt;
polyline :: [(Num, Num)] -&gt; [Shape]
polyline pts =
  match pts with
      []   -&gt; []
    | p:ps -&gt;
        let mkP :: (Num, Num) -&gt; [(Num, Num)] -&gt; [Shape]
            mkP prev qqs =
              match qqs with
                  []   -&gt; [] -- Don't close the polygon.
                | q:qs -&gt; (Line prev q) : (mkP q qs)
              end ;
         in mkP p ps
  end
;

leftFish :: Picture
leftFish =
    Canvas 1 1
      ((Line (1/8, 3/5) (1, 4/5))
       : (polyline [ (1, 1), (1/8, 3/5), (1, 1/8), (3/4, 0), (1, 0)]))
;

rightFish :: Picture
rightFish = Flip leftFish
;

fish :: Picture
fish = Beside 1 1 leftFish rightFish
;
sideFish :: Picture
sideFish = Rotate fish
;

foodChain :: Picture
foodChain =
  let p :: Picture
      p = Beside 1 1 foodChain sideFish ;
  in Above 1 1 p p
;

main = foodChain
&lt;/pre&gt;</description>
  </item>
  <item>
    <title>An old friend.</title>
    <link>http://peteg.org/blog/2008/08/11#2008-08-11-FishCycle</link>
    <category>/hacking</category>
    <description>
&lt;p&gt;

In a previous life I implemented &lt;a href=&quot;http://peteg.org/thesis/src/prolog/glog/glog.html&quot;&gt;GLog&lt;/a&gt;, a declarative graphics
engine based on some very old ideas. In this one I've been
implementing &lt;a href=&quot;http://users.ecs.soton.ac.uk/ph/&quot;&gt;Peter Henderson&lt;/a&gt;'s even older &lt;a
href=&quot;http://doi.acm.org/10.1145/800068.802148&quot;
class=&quot;title&quot;&gt;Functional Geometry&lt;/a&gt; as part of an assignment for &lt;a href=&quot;http://www.cse.unsw.edu.au/~jas/&quot;&gt;JAS&lt;/a&gt;. If your browser can render &lt;a href=&quot;http://www.w3.org/TR/SVG/&quot;&gt;SVG&lt;/a&gt; and &lt;a href=&quot;http://hcoop.net/&quot;&gt;HCoop&lt;/a&gt;'s webserver is
behaving itself, you should see the dear old &quot;fish cycle&quot; from the
paper &lt;span class=&quot;title&quot;&gt;Logic programming graphics and infinite
terms&lt;/span&gt; by P. R. Eggert and K. P. Chow.

&lt;/p&gt;

&lt;object type=&quot;image/svg+xml&quot; data=&quot;http://peteg.org/static/fishCycle.svg&quot; width=&quot;400&quot; height=&quot;300&quot; style=&quot;display:
block; border-style: none; margin-left: auto;margin-right:
auto&quot;&gt;&lt;p&gt;Argh, your browser does not support SVG!&lt;/p&gt;&lt;/object&gt;

&lt;p&gt;

If you look at the &lt;a href=&quot;http://peteg.org/static/fishCycle.svg&quot;&gt;free
standing SVG file&lt;/a&gt;, you should be able to exercise the scaling
feature of the &lt;a href=&quot;http://www.w3.org/TR/SVG/&quot;&gt;SVG&lt;/a&gt; implementation in your browser. The
&lt;code&gt;FLAN&lt;/code&gt; source code is this:

&lt;/p&gt;
&lt;pre&gt;
polyline :: [(Num, Num)] -&gt; [Shape]
polyline pts =
  match pts with
      []   -&gt; []
    | p:ps -&gt;
        let mkP :: (Num, Num) -&gt; [(Num, Num)] -&gt; [Shape]
            mkP prev qqs =
              match qqs with
                  []   -&gt; [] -- Don't close the polygon.
                | q:qs -&gt; (Line prev q) : (mkP q qs)
              end ;
         in mkP p ps
  end
;

leftFish :: Picture
leftFish =
    Canvas 1 1
      ((Line (1/8, 3/5) (1, 4/5))
       : (polyline [ (1, 1), (1/8, 3/5), (1, 1/8)
                   , (3/4, 0), (1, 0)]))
;

rightFish :: Picture
rightFish = Flip leftFish
;

fish :: Picture
fish = Beside 1 1 leftFish rightFish
;

sideFish :: Picture
sideFish = Rotate fish
;

matrix :: [[Picture]] -&gt; Picture
matrix = col
;

col :: [[Picture]] -&gt; Picture
col pps =
  let mkP :: [[Picture]] -&gt; (Picture, Num)
      mkP pps = match pps with
                    []   -&gt; (Empty, 0)
                  | p:ps -&gt; match mkP ps with (pic, n) -&gt;
                              (Above 1 n (row p) pic, n + 1)
                            end
                end ;
  in match mkP pps with (p, n) -&gt; p end
;

row :: [Picture] -&gt; Picture
row pps =
  let mkP :: [Picture] -&gt; (Picture, Num)
      mkP pps = match pps with
                    []   -&gt; (Empty, 0)
                  | p:ps -&gt; match mkP ps with (pic, n) -&gt;
                              (Beside 1 n p pic, n + 1)
                            end
                end ;
  in match mkP pps with (p, n) -&gt; p end
;

main =
  let u :: Picture
      u = fish ;
      l :: Picture
      l = sideFish ;
      d :: Picture
      d = Rotate l ;
      r :: Picture
      r = Rotate d ;
  in matrix [[d, l,     l],
             [d, Empty, u],
             [r, r,     u]]
&lt;/pre&gt;
&lt;p&gt;

There is an &lt;a
href=&quot;http://www.frank-buss.de/lisp/functional.html&quot;&gt;implementation
available in LISP&lt;/a&gt;.

&lt;/p&gt;</description>
  </item>
  <item>
    <title>Some of &lt;a href=&quot;http://web.comlab.ox.ac.uk/oucl/people/jeremy.gibbons.html&quot;&gt;Jeremy Gibbons&lt;/a&gt; &amp;amp; &lt;a href=&quot;http://www.cs.nott.ac.uk/~gmh/&quot;&gt;Graham Hutton&lt;/a&gt;'s &lt;span class=&quot;title&quot;&gt;Proof Methods for Corecursive Programs&lt;/span&gt; in &lt;a href=&quot;https://www4.in.tum.de/~nipkow/pubs/jfp99.html&quot;&gt;HOLCF&lt;/a&gt;.</title>
    <link>http://peteg.org/blog/2008/03/03#2008-03-03-ApproxLemma</link>
    <category>/hacking/isabelle</category>
    <description>
&lt;p&gt;

I abandoned this attempt at mechanising a proof of the &quot;approx lemma&quot;
about eighteen months ago, for what now seem like spurious reasons;
what I had was quite close to what was needed. I was initially
interested in the &quot;take lemma&quot; made famous by &lt;a href=&quot;http://web.comlab.ox.ac.uk/oucl/people/richard.bird.html&quot;&gt;Richard Bird&lt;/a&gt; &amp;amp; &lt;a href=&quot;http://homepages.inf.ed.ac.uk/wadler/&quot;&gt;Philip Wadler&lt;/a&gt;, and how it took the magic step from assertions about finite
lists to ones about possibly infinite objects. Well, I definitely feel
some &lt;a
href=&quot;http://en.wikipedia.org/wiki/Monkey_(TV_series)&quot;&gt;awareness of
vacuity&lt;/a&gt; now.

&lt;/p&gt;&lt;p&gt;

You can &lt;a href=&quot;http://peteg.org/isabelle/holcf/approx_lemma.thy&quot;&gt;read
it here&lt;/a&gt;.

&lt;/p&gt;&lt;p&gt;

The magic is how the continuity underpinning the semantics of
functions is reflected into the term language. As such it's
unbelievably cute. The proof of correctness is not particularly
interesting though, except perhaps as an exercise in fiddling with
fixpoints and continuity.

&lt;/p&gt;</description>
  </item>
  <item>
    <title>&lt;a href=&quot;http://www.unsafeperformio.com/&quot;&gt;Andy Gill&lt;/a&gt; &amp;amp; &lt;a href=&quot;http://www.cs.nott.ac.uk/~gmh/&quot;&gt;Graham Hutton&lt;/a&gt;'s Worker/Wrapper in &lt;a href=&quot;https://www4.in.tum.de/~nipkow/pubs/jfp99.html&quot;&gt;HOLCF&lt;/a&gt;, partially.</title>
    <link>http://peteg.org/blog/2008/03/02#2008-03-02-WorkerWrapper</link>
    <category>/hacking/isabelle</category>
    <description>
&lt;p&gt;

It's about time I pushed this out the door. Their proofs went through
fine for the most part, except for the need to do some induction when
rewriting the recursive calls. It is unclear to me how to prove the
lemma that justifies this step in general, though for each instance
the induction is quite straightfoward, and the key lemmas for the
inductive steps are given in the paper. In effect we need induction
just to convince &lt;a href=&quot;https://www4.in.tum.de/~nipkow/pubs/jfp99.html&quot;&gt;HOLCF&lt;/a&gt;, not an optimisation phase, but it would be
nice if their fusion rule handled this for me. (My proposed, unproven
variant can be found in &lt;a href=&quot;http://peteg.org//isabelle/worker_wrapper/worker_wrapper/worker_wrapper.thy&quot;&gt;worker_wrapper.thy&lt;/a&gt;.)

&lt;/p&gt;&lt;p&gt;

I believe there was a small strictness bug in their streams /
memoisation example. Score one to &lt;a href=&quot;https://www4.in.tum.de/~nipkow/pubs/jfp99.html&quot;&gt;HOLCF&lt;/a&gt;.

&lt;/p&gt;&lt;p&gt;

I also tried to mechanise &lt;a href=&quot;http://www.unsafeperformio.com/&quot;&gt;Andy Gill&lt;/a&gt;'s &lt;a
href=&quot;http://blog.unsafeperformio.com/?p=15&quot;&gt;nub example&lt;/a&gt;, which
mostly went OK, modulo proving some auxiliary lemmas. Specifically, as
above one needs to use induction to rewrite the recursive call, and
coming out with the right statements is made difficult by &lt;a href=&quot;https://www4.in.tum.de/~nipkow/pubs/jfp99.html&quot;&gt;HOLCF&lt;/a&gt;'s
admissibility requirements. A work in progress. Again, I can feel &lt;a href=&quot;http://www.cl.cam.ac.uk/~lp15/&quot;&gt;Larry Paulson&lt;/a&gt; laughing at me for wasting my time.

&lt;/p&gt;&lt;p&gt;

You can look at it &lt;a href=&quot;http://peteg.org/isabelle/worker_wrapper/&quot;&gt;here&lt;/a&gt;, or utter:

&lt;/p&gt;&lt;p&gt;

&lt;code&gt;darcs get http://peteg.org/isabelle/worker_wrapper/&lt;/code&gt;

&lt;/p&gt;&lt;p&gt;

Note some proofs are quite rough, though most of the important stuff
is as clear as &lt;a href=&quot;http://isabelle.in.tum.de/Isar/&quot;&gt;Isar&lt;/a&gt;. The &lt;code&gt;Nat&lt;/code&gt; theory may end up being
interesting, though with too much more monadic machinery one may as
well use &lt;a href=&quot;http://en.wikipedia.org/wiki/HOL_theorem_prover&quot;&gt;HOL&lt;/a&gt;... and I have begun to realise that proof-reuse for
even something as simple as lists is quite difficult. There are at
least two mainstream types (fully lazy and fully strict), as well as
some in-betweens that might be convenient (e.g. head-strict and
tail-strict). The code here just begins down the mainstream-&lt;a href=&quot;http://haskell.org/&quot;&gt;Haskell&lt;/a&gt; path; I figure the &lt;a href=&quot;http://www.standardml.org/&quot;&gt;Standard ML&lt;/a&gt; people are wise enough to
be using &lt;a href=&quot;http://en.wikipedia.org/wiki/HOL_theorem_prover&quot;&gt;HOL&lt;/a&gt; or &lt;a href=&quot;http://coq.inria.fr/&quot;&gt;Coq&lt;/a&gt; or whatever in the first place.

&lt;/p&gt;</description>
  </item>
  <item>
    <title>&lt;a href=&quot;http://web.comlab.ox.ac.uk/oucl/people/bill.roscoe.html&quot;&gt;Bill Roscoe&lt;/a&gt;'s almost-book on &lt;a href=&quot;http://en.wikipedia.org/wiki/Denotational_semantics&quot;&gt;Denotational Semantics&lt;/a&gt;.</title>
    <link>http://peteg.org/blog/2008/03/02#2008-03-02-Roscoe-Semantics</link>
    <category>/hacking/isabelle</category>
    <description>
&lt;p&gt;

&lt;a href=&quot;http://www.cse.unsw.edu.au/~tbourke/&quot;&gt;Tim&lt;/a&gt; pointed this almost-book out to me. It's sorely
disappointing that whoever-it-was who should've cranked the
operational semantics half did not do so; what is there is top-notch,
especially the chapters on &lt;a href=&quot;&quot;&gt;Information Systems&lt;/a&gt;. Whereas
&lt;a href=&quot;http://www.cl.cam.ac.uk/~gw104/&quot;&gt;Glyn Winskel&lt;/a&gt;'s text does a great job of presenting the mathematics
of these &quot;concretised&quot; domains, this book also delves into the
philosophical concerns and hence makes the mathematics that much
easier to follow.

&lt;/p&gt;&lt;p&gt;

It's linked from near the top of his publications page.

&lt;/p&gt;</description>
  </item>
  <item>
    <title>1 +&lt;sub&gt;#&lt;/sub&gt; 1 = 2&lt;sub&gt;⊥&lt;/sub&gt;, or more mucking about with &lt;a href=&quot;http://isabelle.in.tum.de/&quot;&gt;Isabelle&lt;/a&gt;'s &lt;a href=&quot;https://www4.in.tum.de/~nipkow/pubs/jfp99.html&quot;&gt;HOLCF&lt;/a&gt;.</title>
    <link>http://peteg.org/blog/2008/02/02#2008-02-02-WorkerWrapper</link>
    <category>/hacking/isabelle</category>
    <description>
&lt;p&gt;

It's been a while between drinks with &lt;a href=&quot;https://www4.in.tum.de/~nipkow/pubs/jfp99.html&quot;&gt;HOLCF&lt;/a&gt;, and it didn't take me
long to realise why; it's a massive time-sink and all one gets at the
end is a proof unreadable by the mainstream and an &lt;a
href=&quot;http://en.wikipedia.org/wiki/Monkey_(TV_series)&quot;&gt;awareness of
vacuity&lt;/a&gt;. Here are some random observations that I will try to
expand on later:

&lt;/p&gt;
&lt;ul&gt;

 &lt;li&gt;&lt;a href=&quot;http://web.cecs.pdx.edu/~brianh/&quot;&gt;Brian Huffman&lt;/a&gt; gave me some help with treating unpointed
 domains, so I've begun cranking out a theory of a few ways to think
 about &lt;code&gt;Nat&lt;/code&gt;. We'll see if that ever gets polished.&lt;/li&gt;

 &lt;li&gt;I was mucking about with those while trying to mechanise &lt;a href=&quot;http://www.unsafeperformio.com/&quot;&gt;Andy Gill&lt;/a&gt; and &lt;a href=&quot;http://www.cs.nott.ac.uk/~gmh/&quot;&gt;Graham Hutton&lt;/a&gt;'s worker/wrapper pre-paper. That went
 OK, modulo &lt;a href=&quot;https://www4.in.tum.de/~nipkow/pubs/jfp99.html&quot;&gt;HOLCF&lt;/a&gt;'s general unfriendliness towards numbers. I'll
 post the development when it's a bit more polished.&lt;/li&gt;

 &lt;li&gt;&lt;a href=&quot;http://www.cse.ogi.edu/~jl/&quot;&gt;John Launchbury&lt;/a&gt; and &lt;a href=&quot;http://research.microsoft.com/~simonpj/&quot;&gt;Simon Peyton-Jones&lt;/a&gt;'s &lt;a
 href=&quot;http://research.microsoft.com/~simonpj/Papers/unboxed-values.ps.Z&quot;
 class=&quot;title&quot;&gt;Unboxed values as first class citizens&lt;/a&gt; is the most
 awesome concrete application of domain theory I've seen yet. Perhaps
 I should dig deeper into the abstract interpretation literature.&lt;/li&gt;

 &lt;li&gt; I was curious about &lt;a href=&quot;http://www.cl.cam.ac.uk/~lp15/&quot;&gt;Larry Paulson&lt;/a&gt;'s &lt;a
 href=&quot;http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-50.pdf&quot;&gt;mechanised
 verification of the unification algorithm&lt;/a&gt; in &lt;a href=&quot;http://en.wikipedia.org/wiki/LCF_theorem_prover&quot;&gt;LCF&lt;/a&gt;, from the
 early 80s. Partial predicates? WTF is this? Larry's inimitable way
 of politely grinding his teeth made me realise just how much &lt;a href=&quot;http://en.wikipedia.org/wiki/HOL_theorem_prover&quot;&gt;HOL&lt;/a&gt;
 brought to the table.&lt;/li&gt;

 &lt;li&gt;I managed to crank out a proof in &lt;a href=&quot;https://www4.in.tum.de/~nipkow/pubs/jfp99.html&quot;&gt;HOLCF&lt;/a&gt; that &quot;parallel or&quot;
 and its friend &quot;tell me if this function ever says yes&quot; are
 continuous. So, err, just what is this domain theory modelling
 anyway? Those proofs were much harder yakka than I expected. Next
 step: &lt;a href=&quot;http://homepages.inf.ed.ac.uk/gdp/&quot;&gt;Gordon Plotkin&lt;/a&gt;'s notes on domains lists some cute
 sequentiality definitions that I'd like to understand.&lt;/li&gt;

 &lt;li&gt;In &lt;a href=&quot;https://www4.in.tum.de/~nipkow/pubs/jfp99.html&quot;&gt;HOLCF&lt;/a&gt; we have &lt;code&gt;(λx. ⊥) = ⊥&lt;/code&gt;, and one has to
 wonder just what that entails, coming from &lt;a href=&quot;http://haskell.org/&quot;&gt;Haskell&lt;/a&gt; where it does
 not obtain.&lt;/li&gt;

 &lt;li&gt;Apparently some people are translating &lt;a href=&quot;http://haskell.org/&quot;&gt;Haskell&lt;/a&gt; to &lt;a href=&quot;https://www4.in.tum.de/~nipkow/pubs/jfp99.html&quot;&gt;HOLCF&lt;/a&gt;,
 and I have to wonder what the point is. There's a bit of a semantic
 gap, so many arbitrary modelling decisions to take, not much of a
 standard library, ... so there's lots of tedious stuff to do before you
 can prove your program is incorrect.&lt;/li&gt;

&lt;/ul&gt;
&lt;p&gt;

I guess I'll have to get back to real (economic) work one of these days.

&lt;/p&gt;</description>
  </item>
  <item>
    <title>&lt;a href=&quot;http://en.wikipedia.org/wiki/XSL_Transformations&quot;&gt;XSLT&lt;/a&gt; is &lt;a href=&quot;http://en.wikipedia.org/wiki/Turing_complete&quot;&gt;Turing Complete&lt;/a&gt;. So What?</title>
    <link>http://peteg.org/blog/2007/11/27#2007-11-27-XSLT-Turing-Complete</link>
    <category>/hacking</category>
    <description>
&lt;p&gt;

There are several proofs of this fact, such as &lt;a
href=&quot;http://www.idealliance.org/papers/extreme/proceedings/html/2006/Novatchev01/EML2006Novatchev01.html&quot;&gt;this
one from 2006&lt;/a&gt;. So, why would &lt;a href=&quot;http://www.ibm.com&quot;&gt;IBM&lt;/a&gt;'s &lt;a href=&quot;http://www.ibm.com/developerworks/&quot;&gt;DeveloperWorks&lt;/a&gt; publish
an &lt;a
href=&quot;http://www.ibm.com/developerworks/xml/library/x-matters14.html&quot;&gt;an
article that apparently says otherwise&lt;/a&gt; [*]?

&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;

Finally, XSLT is the familiar technique that, in a sense, best matches
the structure of XML. Perhaps reflecting this match, XSL documents are
themselves XML document instances. XSLT is a special-purpose
functional programming language that allows you to specify
transformations of XML documents into other things (especially, but
not only, into other XML documents). Aside from the somewhat annoying
verboseness of XSLT, it is limited in its expressiveness &amp;mdash; the
things you can say are expressed rather clearly (and functionally, not
procedurally), but you quickly bump up against all the things that you
simply cannot say in XSLT.

&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;

OK, so there is an appeal to a &lt;a href=&quot;http://en.wikipedia.org/wiki/Turing_tarpit&quot;&gt;Turing tarpit&lt;/a&gt; argument, but how
about that last phrase, the worrying &lt;em&gt;... all the things that you
simply cannot say in XSLT&lt;/em&gt;? Let's keep reading:

&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;

The problem comes as soon as you want to filter or compute something
for the output &amp;mdash; something that is not included in the few
comparisons available to XSLT. For example, maybe you want (in a
numerological spirit) to display only the even-numbered hexagrams, or
only the prime ones. With XSLT, you are out of luck for something this
simple.

&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;

So, what we have here is something like &lt;em&gt;control&lt;/em&gt; completeness
&amp;mdash; it has enough in the way of control flow constructs &amp;mdash;
but &lt;em&gt;data-incompleteness&lt;/em&gt; &amp;mdash; you can't munge your data in
all the ways you'd like to. This has always bothered me: how do you
prove that you have provided enough operations for your datatype? I'm
sure there are people studying &lt;a href=&quot;http://en.wikipedia.org/wiki/Algebraic_data_type&quot;&gt;algebraic data types&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Algebraic_specification&quot;&gt;algebraic specification&lt;/a&gt;
who have some answers for that.

&lt;/p&gt;
&lt;p&gt;

[*] As this article should make clear, the claim of &lt;a href=&quot;http://en.wikipedia.org/wiki/Turing_complete&quot;&gt;Turing Complete&lt;/a&gt;ness is weaker and slipperier than most people seem to
think.

&lt;/p&gt;</description>
  </item>
  <item>
    <title>The &lt;a href=&quot;http://www.apple.com/macosx/&quot;&gt;Mac OS X&lt;/a&gt; 10.4.11 Upgrade Killed My &lt;a href=&quot;http://www.apple.com/macbook/&quot;&gt;MacBook&lt;/a&gt;.</title>
    <link>http://peteg.org/blog/2007/11/17#2007-11-17-Leopard</link>
    <category>/hacking/mac</category>
    <description>
&lt;p&gt;

That's a first, a &lt;a href=&quot;http://www.apple.com/macosx/&quot;&gt;Mac OS X&lt;/a&gt; update that screwed things up so badly
the &lt;a href=&quot;http://www.apple.com/macbook/&quot;&gt;MacBook&lt;/a&gt; ceased to function. Oh well, I now know where an &lt;a href=&quot;http://www.apple.com/&quot;&gt;Apple&lt;/a&gt; store is in &lt;a href=&quot;http://www.hochiminhcity.gov.vn/&quot;&gt;Hồ Chí Minh City&lt;/a&gt;; I went to:

&lt;/p&gt;
&lt;pre&gt;
Thuan My Co. Ltd - Apple Authorised Reseller
98 Nguyễn Công Trứ, District 1, &lt;a href=&quot;http://www.hochiminhcity.gov.vn/&quot;&gt;Hồ Chí Minh City&lt;/a&gt;.
Tel: 84 8 8218936, 8218937
Fax: 84 8 8218937
Email: thuanmy-sales@hcm.fpt.vn
&lt;/pre&gt;
&lt;p&gt;

and tried to buy a copy, nay a &lt;em&gt;licence&lt;/em&gt;, of &lt;a href=&quot;http://en.wikipedia.org/wiki/Mac_OS_X_v10.5&quot;&gt;Leopard&lt;/a&gt;. I'll
spare you that story. The &quot;update&quot; function failed to work any magic
(or didn't like the caf&amp;eacute;s I went to), but the &quot;archive and
install&quot; thing did the trick. I get the impression that some database
in my old 10.4 installation got trashed.

&lt;/p&gt;&lt;p&gt;

Here are some fix-ups for &lt;a href=&quot;http://en.wikipedia.org/wiki/Mac_OS_X_v10.5&quot;&gt;Leopard&lt;/a&gt; from around the net (sorry for
the lack of attribution). Let's fix the Dock (make it look more like
Tiger's):

&lt;/p&gt;
&lt;pre&gt;

defaults write com.apple.dock no-glass -boolean YES
killall Dock

&lt;/pre&gt;
&lt;p&gt;

and the transparent menubar (cut and paste this line, then &amp;mdash;
eek! &amp;mdash; reboot):

&lt;/p&gt;
&lt;pre&gt;

sudo defaults write /System/Library/LaunchDaemons/com.apple.WindowServer 'EnvironmentVariables' -dict 'CI_NO_BACKGROUND_IMAGE' 0.63

&lt;/pre&gt;
&lt;p&gt;

Time machine claims to have done something but I haven't tried to use
it yet. Spaces is clunkier than I'd expect; using an app that sprays
windows around like Finder and expecting some kind of mid-90s &quot;raise&quot;
functionality is apparently asking too much. The wifi widget on the
menubar finally works like what every user of open networks wants it
to. Worth the money? Probably not, but heh, anything to get the &lt;a href=&quot;http://www.apple.com/macbook/&quot;&gt;MacBook&lt;/a&gt; back on its feet. That's the last time I travel without a &lt;a href=&quot;http://www.apple.com/macosx/&quot;&gt;Mac OS X&lt;/a&gt; DVD.

&lt;/p&gt;</description>
  </item>
  <item>
    <title>&lt;a href=&quot;http://www.skype.com/&quot;&gt;Skype&lt;/a&gt; and &lt;a href=&quot;http://www.paypal.com/&quot;&gt;PayPal&lt;/a&gt;.</title>
    <link>http://peteg.org/blog/2007/08/02#2007-08-02-Skype</link>
    <category>/hacking</category>
    <description>
&lt;p&gt;

I don't know why people &lt;a href=&quot;http://www.paypalsucks.com/&quot;&gt;hate
PayPal&lt;/a&gt;; perhaps they were evil in the past. (Actually, reading
that website makes me wish &lt;a href=&quot;http://www.visa.com/&quot;&gt;Visa&lt;/a&gt; et al. got properly into this
game.)  Anyway, as Vietnam doesn't seem to use phone cards, I wanted
to put some cash into &lt;a href=&quot;http://www.skype.com/&quot;&gt;Skype&lt;/a&gt; so I could call my parents. The
payment options are specific to the country where they guess your IP
is, and in Vietnam one cannot use &lt;a href=&quot;http://www.paypal.com/&quot;&gt;PayPal&lt;/a&gt; to pay &lt;a href=&quot;http://www.skype.com/&quot;&gt;Skype&lt;/a&gt;, though
&lt;a href=&quot;http://www.paypal.com/&quot;&gt;PayPal&lt;/a&gt; is happy for you to manipulate it from within Vietnam. The
only option usable to me &amp;mdash; Moneybookers &amp;mdash; asks for a
mobile phone number in Australia, which may or may not actually need
to be valid.

&lt;/p&gt;&lt;p&gt;

What to do? Well, fortunately the &lt;a href=&quot;http://www.skype.com/&quot;&gt;Skype&lt;/a&gt; website is accessible, and
the server hosting &lt;a href=&quot;http://peteg.org/&quot;&gt;peteg.org&lt;/a&gt; is in Australia, so I just used &lt;a href=&quot;http://links.sourceforge.net/&quot;&gt;links&lt;/a&gt; to punt some cash over. This setup is so stupid &amp;mdash; how
many ex-pats want to do the same thing? &amp;mdash; though I can
understand that &lt;a href=&quot;http://www.skype.com/&quot;&gt;Skype&lt;/a&gt; figures it's better to be safe than useful.

&lt;/p&gt;&lt;p&gt;

(Thanks &lt;a href=&quot;http://www.algorithm.com.au/&quot;&gt;Andr&amp;eacute;&lt;/a&gt;, thanks Adelaide.)

&lt;/p&gt;</description>
  </item>
  <item>
    <title>Die, &lt;a href=&quot;http://x.org/&quot;&gt;X11&lt;/a&gt;, die...</title>
    <link>http://peteg.org/blog/2007/07/30#2007-07-30-X11</link>
    <category>/hacking/mac</category>
    <description>
&lt;p&gt;

This whole &lt;a href=&quot;http://unicode.org/&quot;&gt;Unicode&lt;/a&gt; fiasco has finally killed &lt;a href=&quot;http://x.org/&quot;&gt;X11&lt;/a&gt; as a viable
option for me. I wouldn't have thought it was so very hard to provide
a complete set of easily-usable &lt;a href=&quot;http://unicode.org/&quot;&gt;Unicode&lt;/a&gt; fonts, but there it is.

&lt;/p&gt;&lt;p&gt;

So, on &lt;a href=&quot;http://www.algorithm.com.au/&quot;&gt;Andr&amp;eacute;&lt;/a&gt;'s advice, I've switched to:

&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;
&lt;p&gt;

&lt;a href=&quot;http://aquamacs.org/&quot;&gt;Aquamacs&lt;/a&gt;, &lt;a href=&quot;http://www.gnu.org/&quot;&gt;GNU&lt;/a&gt; &lt;a href=&quot;http://www.gnu.org/software/emacs/emacs.html&quot;&gt;Emacs&lt;/a&gt; with a shiny-happy &lt;a href=&quot;http://www.apple.com/macosx/&quot;&gt;Mac OS X&lt;/a&gt;
face. Apart from a lot of minor irritations that come with losing
about a decade's worth of &lt;a href=&quot;http://www.xemacs.org/&quot;&gt;XEmacs&lt;/a&gt; configuration, it seems quite
slick. I tried &lt;a href=&quot;http://members.shaw.ca/akochoi-xemacs/Carbon%20XEmacs/Home.html&quot;&gt;Carbon XEmacs&lt;/a&gt; but it doesn't support &lt;a href=&quot;http://unicode.org/&quot;&gt;Unicode&lt;/a&gt; out
of the box, and I refuse to spend (more) hours fiddling with it.

&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;

&lt;a href=&quot;http://software.jessies.org/terminator/&quot;&gt;Terminator&lt;/a&gt;, an &lt;a href=&quot;http://dickey.his.com/xterm/xterm.html&quot;&gt;xterm&lt;/a&gt;-alike written in &lt;a href=&quot;http://java.sun.com/&quot;&gt;Java&lt;/a&gt;, is possibly
the best thing ever to run on the &lt;a href=&quot;http://java.sun.com/docs/books/vmspec/&quot;&gt;JVM&lt;/a&gt;.

&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;

A new &lt;a href=&quot;http://www.gnu.org/software/bash/&quot;&gt;bash&lt;/a&gt; from &lt;a href=&quot;http://www.macports.org/&quot;&gt;MacPorts&lt;/a&gt; that speaks &lt;a href=&quot;http://unicode.org/&quot;&gt;Unicode&lt;/a&gt; better than
the crusty old one that comes with &lt;a href=&quot;http://www.apple.com/macosx/&quot;&gt;Mac OS X&lt;/a&gt; 10.4.x.

&lt;/p&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;

Of course I'll still need &lt;a href=&quot;http://x.org/&quot;&gt;X11&lt;/a&gt; for sundry old-school things like &lt;a href=&quot;http://isabelle.in.tum.de/&quot;&gt;Isabelle&lt;/a&gt;, but there the pain is much less.

&lt;/p&gt;&lt;p&gt;

So, why &lt;a href=&quot;http://aquamacs.org/&quot;&gt;Aquamacs&lt;/a&gt; rather than a fancy closed-source editor? Well,
&lt;a href=&quot;http://macromates.com/&quot;&gt;TextMate&lt;/a&gt; crashed on me after about twenty minutes of use &amp;mdash; I
tried to open a file while saving-as another one, and was madly
switching programs trying to navigate the directory tree &amp;mdash; and
so I recall the cardinal rule of editors: anything less than twenty
years old hasn't been tested enough. Whether the (relatively shallow)
differences that &lt;a href=&quot;http://aquamacs.org/&quot;&gt;Aquamacs&lt;/a&gt; has to &lt;a href=&quot;http://www.gnu.org/&quot;&gt;GNU&lt;/a&gt; &lt;a href=&quot;http://www.gnu.org/software/emacs/emacs.html&quot;&gt;Emacs&lt;/a&gt; matter is
something I will soon discover.

&lt;/p&gt;</description>
  </item>
  <item>
    <title>&lt;a href=&quot;http://www.apple.com/ilife/iphoto/&quot;&gt;iPhoto&lt;/a&gt; &lt;a href=&quot;http://www.n8gray.org/code/scriptexport/&quot;&gt;Script Export&lt;/a&gt;</title>
    <link>http://peteg.org/blog/2007/07/15#2007-07-15-iPhoto</link>
    <category>/hacking/mac</category>
    <description>
&lt;p&gt;

This thing is magic: one can readily write a little script to (in my case)
copy images from &lt;a href=&quot;http://www.apple.com/ilife/iphoto/&quot;&gt;iPhoto&lt;/a&gt; into a &lt;a href=&quot;http://blosxom.ookee.com/blog/&quot;&gt;Blosxom&lt;/a&gt;-friendly location, and output
the requisite tags.

&lt;/p&gt;</description>
  </item>
  <item>
    <title>Accessing the &lt;a href=&quot;http://www.apple.com/macosx/&quot;&gt;Mac OS X&lt;/a&gt; paste buffer from the command line.</title>
    <link>http://peteg.org/blog/2007/06/05#2007-06-05-pbcopy</link>
    <category>/hacking/mac</category>
    <description>
If you have ever wanted to ship data to or from your &lt;a href=&quot;http://x.org/&quot;&gt;X11&lt;/a&gt; environment,
check out &lt;code&gt;pbcopy&lt;/code&gt; and &lt;code&gt;pbpaste&lt;/code&gt;. Now, if only X had a
&lt;a href=&quot;http://www.jwz.org/doc/x-cut-and-paste.html&quot;&gt;sane cut-and-paste
model&lt;/a&gt;, we'd be home...</description>
  </item>
  <item>
    <title>&lt;a href=&quot;http://www.mozilla.org/products/firefox/&quot;&gt;FireFox&lt;/a&gt; 1.5.0.11 &lt;a href=&quot;http://apple.com/&quot;&gt;Mac&lt;/a&gt;-optimised builds.</title>
    <link>http://peteg.org/blog/2007/04/18#2007-04-18-Firefox15</link>
    <category>/hacking/mac</category>
    <description>
I'm not a huge fan of the new &lt;a href=&quot;http://www.mozilla.org/products/firefox/&quot;&gt;FireFox&lt;/a&gt; (v2.x) for reasons that slip my
mind now. Fortunately a kind soul is &lt;a
href=&quot;http://www.furbism.com/firefoxmac/&quot;&gt;still cranking out optimised
builds&lt;/a&gt; for the &lt;a href=&quot;http://apple.com/&quot;&gt;Mac&lt;/a&gt;, sans fancy widgets.

</description>
  </item>
  <item>
    <title>&lt;a href=&quot;http://www.happypenguin.org/show?XKobo&quot;&gt;xkobo&lt;/a&gt; rides again.</title>
    <link>http://peteg.org/blog/2007/04/16#2007-04-16-xkobo</link>
    <category>/hacking</category>
    <description>
A vanilla &lt;a href=&quot;http://www.happypenguin.org/show?XKobo&quot;&gt;xkobo&lt;/a&gt; source tree failed to compile on the &lt;a href=&quot;http://www.apple.com/macbook/&quot;&gt;MacBook&lt;/a&gt;,
apparently due to some changes in &lt;a href=&quot;http://gcc.gnu.org/&quot;&gt;GCC&lt;/a&gt;'s C++ support over the last
fifteen years. Who'd have thunk it. Fortunately the industrious whitehats at
&lt;a href=&quot;http://www.openbsd.org/&quot;&gt;OpenBSD&lt;/a&gt; have produced &lt;a
href=&quot;http://www.openbsd.org/cgi-bin/cvsweb/ports/games/xkobo&quot;&gt;some
g++-placating patches&lt;/a&gt; that one can dredge from their &lt;code&gt;port&lt;/code&gt;
system. Joy.</description>
  </item>
  <item>
    <title>A shiny new &lt;a href=&quot;http://www.apple.com/macbook/&quot;&gt;MacBook&lt;/a&gt;.</title>
    <link>http://peteg.org/blog/2007/04/04#2007-04-04-MacBook</link>
    <category>/hacking</category>
    <description>
&lt;p&gt;

The storm this morning brought two things: &lt;a href=&quot;http://shimweasel.com/&quot;&gt;mrak&lt;/a&gt;'s much-talked-about
postcards, one from Qatar, the other from Vietnam, both posted in the last
week of his travels; and a man from &lt;a href=&quot;http://www.tnt.com/&quot;&gt;TNT Express Worldwide&lt;/a&gt; bearing a &lt;a href=&quot;http://www.apple.com/macbook/&quot;&gt;MacBook&lt;/a&gt;.

&lt;/p&gt;&lt;p&gt;

&lt;a href=&quot;http://www.apple.com/&quot;&gt;Apple&lt;/a&gt; has a strange way of managing expectations; the &lt;a href=&quot;http://store.apple.com/&quot;&gt;Apple Store&lt;/a&gt;
website told me it was late in shipping, but then the shipping itself took
one day instead of two or more. Anyway, they managed to suck me into buying
an &lt;a href=&quot;http://www.apple.com/ipod/&quot;&gt;iPod&lt;/a&gt; with a two hundred dollar discount so I guess they've earnt the
right to laugh at me.

&lt;/p&gt;&lt;p&gt;

I spent most of the day trying to reinstall everything, after I asked
Migration Assistant to ship all the crap in my home directory
over. Surprisingly &lt;a href=&quot;http://isabelle.in.tum.de/&quot;&gt;Isabelle&lt;/a&gt; installed with little hassle, and &lt;a href=&quot;http://www.apple.com/&quot;&gt;Apple&lt;/a&gt;'s new(er) &lt;a href=&quot;http://x.org/&quot;&gt;X11&lt;/a&gt; works pretty well. I was shocked to find how easy
it was to install &lt;a href=&quot;http://www.debian.org/&quot;&gt;Debian&lt;/a&gt; these days, even under (a trial version of) &lt;a href=&quot;http://store.apple.com/&quot;&gt;Parallels&lt;/a&gt;.

&lt;/p&gt;&lt;p&gt;

In short: it's bigger, heavier and much, much faster than the old &lt;a href=&quot;http://www.apple.com/ibook/&quot;&gt;iBook&lt;/a&gt;,
and the fan comes on pretty much as soon as you do anything serious. The
glossy screen seems to be OK; it's all about getting the angle right, like
&lt;a href=&quot;http://myspace.com/&quot;&gt;MySpace&lt;/a&gt;. The keyboard is actually quite fine too, despite
appearances. No regrets so far.

&lt;/p&gt;</description>
  </item>
  <item>
    <title>&lt;a href=&quot;http://www.algorithm.com.au/&quot;&gt;Andr&amp;eacute;&lt;/a&gt; on &lt;a href=&quot;http://www.apple.com/macosx/&quot;&gt;Mac OS X&lt;/a&gt; essentials.</title>
    <link>http://peteg.org/blog/2007/01/07#2007-01-07-Andre</link>
    <category>/hacking/mac</category>
    <description>
&lt;a href=&quot;http://www.algorithm.com.au/&quot;&gt;Andr&amp;eacute;&lt;/a&gt;'s been procrastinating about something, and so we all benefit
from his &lt;a href=&quot;http://www.algorithm.com.au/code/macosx/&quot;&gt;list of
tried-and-true Mac apps&lt;/a&gt;. Hmm... &lt;a href=&quot;http://www.xemacs.org/&quot;&gt;XEmacs&lt;/a&gt;-style Meta-/ for &lt;a href=&quot;http://developer.apple.com/cocoa/&quot;&gt;Cocoa&lt;/a&gt;
apps? It's all my Christmases come at once.</description>
  </item>
  <item>
    <title>Doing battle with &lt;a href=&quot;http://www.adobe.com/products/acrobat/readstep2.html&quot;&gt;Adobe Reader&lt;/a&gt;.</title>
    <link>http://peteg.org/blog/2006/12/19#2006-12-19-Adobe</link>
    <category>/hacking</category>
    <description>
&lt;p&gt;

&lt;a href=&quot;http://www.cs.cmu.edu/~dst/Adobe/Gallery/&quot;&gt;&lt;img src=&quot;http://peteg.org//static/adobe-sicle.gif&quot; height=&quot;48&quot; width=&quot;56&quot; style = &quot;border-style: none;
margin-right: 10px; margin-bottom: 5px; float: left&quot; alt=&quot;Adobe
sicle&quot;/&gt;&lt;/a&gt;This application is just plain broken. It wants to be an
operating system: from the look of &lt;a
href=&quot;http://www.macnn.com/articles/06/12/06/free.acrobat.8.reader/&quot;&gt;Version
8&lt;/a&gt; Adobe has tried to shoehorn most of the &lt;a href=&quot;http://www.apple.com/macosx/&quot;&gt;Mac OS X&lt;/a&gt; desktop into their
proprietary web-browser-of-sorts. Hmm... perhaps this is what the &lt;a href=&quot;http://www.microsoft.com/&quot;&gt;Windows&lt;/a&gt; people have been dealing with all these years. unnecessary,
unwanted feature-creep and integration.

&lt;/p&gt;
&lt;p&gt;

The updater is broken. Just download the latest version. Oh wait, you need
to get the &quot;Download Manager&quot; to download it for you. Grrr. And you sure do
a lot of waiting on all these bloody programs... and then it tries to do the
update thing anyway! Screw it, too much trouble.

&lt;/p&gt;
&lt;p&gt;

Now, down to business: the instant-gratification eBook I rashly bought
yesterday only lets me print 20 pages of it per month, which seems to me to
be a strange compromise between the real world (fair use?) and what's
possible with electronic authoritarianism. I found this mechanism is indeed
easy to defeat.

&lt;/p&gt;
&lt;p&gt;

A moment's reflection tells you that it is common (UNIX) courtesy for an
application to only fiddle with stuff in your home directory, which you (of
course) have free access to. (It could do nasty things if it's SUID or using
OS DRM services, and that's surely in the post.) The hope is that by
swapping some files we can reset the print counter, and that is indeed the
case. On &lt;a href=&quot;http://www.apple.com/macosx/&quot;&gt;Mac OS X&lt;/a&gt;, simply, if inconveniently:

&lt;/p&gt;
&lt;ol&gt;

&lt;li&gt; Kill Adobe Reader. I assume you haven't used any of your print quota.
&lt;/li&gt;
&lt;li&gt; Copy your &lt;code&gt;~/Library/Acrobat User Data&lt;/code&gt; somewhere safe. It
seems to be a bit sensitive to a few things, so I suggest:

&lt;pre&gt;
cd ~/Library
tar cfv ~/AUD.tar Acrobat\ User\ Data/
&lt;/pre&gt;
&lt;/li&gt;

&lt;li&gt; Fire up Adobe reader, print as much as you're allowed to.
&lt;/li&gt;

&lt;li&gt; Kill Adobe Reader, save the new state and extract the old:

&lt;pre&gt;
cd ~/Library
mv Acrobat\ User\ Data/ /tmp/AUD.old
tar xfv ~/AUD.tar
&lt;/pre&gt;
&lt;/li&gt;

&lt;li&gt;Go back to step 3.
&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;

If things screw up you can move your saved state back into place and things
should work as they did before. The standard disclaimer applies to all of
this: it worked for me, I hope it works for you, don't sue me if it doesn't.

&lt;/p&gt;
&lt;p&gt;

&lt;a
href=&quot;http://lists.grok.org.uk/pipermail/full-disclosure/2002-July/000177.html&quot;&gt;I
see I'm not the first to think of this.&lt;/a&gt;

&lt;/p&gt;</description>
  </item>
  <item>
    <title>&lt;a href=&quot;http://www.apple.com/ipodshuffle/&quot;&gt;iPod Shuffle&lt;/a&gt; Gripes</title>
    <link>http://peteg.org/blog/2006/12/18#2006-12-18-iPod-Gripes</link>
    <category>/hacking/mac</category>
    <description>
OK, I've owned the damn thing for about a month, time to put the boot
in. :-)

What I like:

&lt;ul&gt;

 &lt;li&gt;Unplugging the headphones makes it pause. Perhaps all &lt;a href=&quot;http://www.apple.com/ipod/&quot;&gt;iPod&lt;/a&gt;s do
 this, but my &lt;a href=&quot;http://www.iriver.com/&quot;&gt;iRiver&lt;/a&gt; didn't.
 &lt;/li&gt;

 &lt;li&gt;The control is much better designed than my old &lt;a href=&quot;http://www.iriver.com/&quot;&gt;iRiver&lt;/a&gt;.
 &lt;/li&gt;

&lt;/ul&gt;

What I'd like:

&lt;ul&gt;

 &lt;li&gt;Some audible warning that it's out of juice. The little all-purpose LED
 glows red, I think, and that's that.
 &lt;/li&gt;

 &lt;li&gt;A way to delete songs on the player itself, so I can fill it up with
 random crap and on-the-spot nuke the annoying stuff, rather than having to
 tediously go through it afterwards in &lt;a href=&quot;http://www.apple.com/itunes/&quot;&gt;iTunes&lt;/a&gt; at home.
 &lt;/li&gt;

&lt;/ul&gt;

What I don't like:

&lt;ul&gt;

 &lt;li&gt;The dinky dock. My old &lt;a href=&quot;http://www.iriver.com/&quot;&gt;iRiver&lt;/a&gt; had a standard mini-&lt;a href=&quot;http://www.usb.org/&quot;&gt;USB&lt;/a&gt; port,
 which happened to be the same as my &lt;a href=&quot;http://canon.com/&quot;&gt;Canon&lt;/a&gt; &lt;a href=&quot;http://consumer.usa.canon.com/ir/controller?act=ModelDetailAct&amp;amp;fcategoryid=145&amp;amp;modelid=9828&quot;&gt;PowerShot A75&lt;/a&gt;. One cable
 was all I needed. Moreover I have no way to recharge it without having the
 &lt;a href=&quot;http://www.apple.com/ibook/&quot;&gt;iBook&lt;/a&gt; plugged in &lt;em&gt;and running&lt;/em&gt; &amp;mdash; there's no juice on the
 &lt;a href=&quot;http://www.usb.org/&quot;&gt;USB&lt;/a&gt; bus when it's suspended.
 &lt;/li&gt;

&lt;/ul&gt;

&lt;a href=&quot;http://arstechnica.com/reviews/hardware/shuffle.ars&quot;&gt;Ars
Technica&lt;/a&gt; killed theirs by running a car over it. &lt;a
href=&quot;http://shuffle-db.sourceforge.net/&quot;&gt;This program&lt;/a&gt; may yet liberate
me from &lt;a href=&quot;http://www.apple.com/itunes/&quot;&gt;iTunes&lt;/a&gt; inanity.</description>
  </item>
  <item>
    <title>Powering the &lt;a href=&quot;http://www.apple.com/ibook/&quot;&gt;iBook&lt;/a&gt; from the car.</title>
    <link>http://peteg.org/blog/2006/12/16#2006-12-16-PowertechPlusCarPowerAdaptor</link>
    <category>/hacking/mac</category>
    <description>
&lt;p&gt;

I trudged all over Sydney CBD today looking for a new pair of &lt;a href=&quot;http://www.drmartens.com/&quot;&gt;Docs&lt;/a&gt; and
something that would let me recharge the &lt;a href=&quot;http://www.apple.com/ibook/&quot;&gt;iBook&lt;/a&gt; from the car. It seems
the old &lt;a href=&quot;http://www.drmartens.com/&quot;&gt;Docs&lt;/a&gt; shop on Pitt St Mall has folded, and the joint down George
St that for years proudly advertised cut-price &lt;a href=&quot;http://www.drmartens.com/&quot;&gt;Docs&lt;/a&gt; has gone for the
factory- (China-) direct brand instead. I'd forgotten what a hassle it is
shopping on the street.

&lt;/p&gt;
&lt;p&gt;

Anyway, to cut a long ramble short, I ended up buying a &quot;Powertech Plus
Cat. MP-3463 3.5 Amp Universal Step-up DC/DC Converter for Notebook
Computer&quot; from &lt;a href=&quot;http://www.jaycar.com.au/&quot;&gt;Jaycar&lt;/a&gt; on York St for &lt;$40 /&gt;. The sealed-in cardboard says
it was made in China and is distributed by &lt;a
href=&quot;http://electusdistribution.com.au/&quot;&gt;Electus Distribution&lt;/a&gt;, and I
can guarantee you that the cardboard was printed there too. I can't find it
in either of their catalogues. There is also a 6 Amp version for those who
have something hefty.

&lt;/p&gt;
&lt;p&gt;

It works, with one small wrinkle: the &lt;a href=&quot;http://www.apple.com/ibook/&quot;&gt;iBook&lt;/a&gt;-sized plug adaptor is wired
backwards! Fortunately the &lt;a href=&quot;http://www.apple.com/ibook/&quot;&gt;iBook&lt;/a&gt; is up to that game, simply ignoring a
reverse-polarity 24 volts. The solution is to wedge the plug adaptor onto
the cable backwards. For the curious &lt;a
href=&quot;http://www.faqintosh.com/risorse/en/guides/hw/ibook/pjack/&quot;&gt;these
Italians&lt;/a&gt; have the details, or you can try to figure out what &lt;a
href=&quot;http://developer.apple.com/qa/qa2001/qa1266.html&quot;&gt;Apple is on
about&lt;/a&gt;.

&lt;/p&gt;</description>
  </item>
  </channel>
</rss>
