Harviestoun Old Engine Oil Porter

This beer heralds from a craft brewery in Scotland. At 6% and with good strong flavours, it’s strong all around. A good solid porter with (again, as the bottle says) notes of chocolate and coffee (both in smell and taste) and a bittersweet aftertaste that is just perfect on a cold evening like this.

image

Murray’s Punch and Judy’s Ale

On the back it describes itself as a “New World Bitter” and the word bitter is certainly true – it’s not a floral hoppy flavour but rather a bitter that tastes like a bitter should. I could drink a few of these, although more than that could get overwhelming. Bottle conditioned, only 3.9% and quite pleasant.

image

Waiting…

If you’ve ever had the misfortune of breaking something that is part of yourself, you’ve probably spent a bunch of times in waiting rooms. Even though the waiting is annoying, when something isn’t going to immediately kill you, you can’t really get too frustrated at having to wait. Well, at least that’s my theory.

I’ve learned the lesson of bringing a tablet or laptop along for the up to an hour wait after the scheduled start of an appointment, although actually waiting in the consult room itself is a new one.

The exposed USB Ports to a computer that can access my medical records does raise a concern. I feel it sad that I now just assume that anybody who does want to read them could. I’ve started to think of possible ways to get anonymous health care. The doctor-patient confidentiality is something that is indispensable to a good health care system.

But here I am, waiting. Nothing interesting to note in this room with no windows (except that window into my medical records)

image

More photos

I’ve decided to try and take more photos and publish more of them. This means I have to look around for opportunities, including capturing some daily life.

This morning I’m off for hopefully my last appointment at the Alfred after a bike accident about six or seven weeks ago (injury photos posted previously). So, it means taking the train as driving with a brace on my arm doesn’t excite me.

The train is late, the 9:08 in the other direction is even later (twenty minutes). I just missed the previous one, so there I am looking at the mind the gap paint.

image

recovering okay

I’m Currently recovering from bike accident. One arm in a sling, the other in a sling. Managing pain now only with codeine (lots) rather than oxycodone. I can tap on a tablet okay, typing on laptop for short period only. Best way to contact is google talk.

MythRemote – a MythTV frontend remote

So, neither being someone who has remotely recently written any bit of software involving a desktop GUI and really not being much of a Python hacker, the obvious solution to being annoyed by having to reach for the remote for MythTV when hacking in front of the TV was to grab Quickly, Python, Gtk and go for it.

So, here it is:

Maybe useful to (edit: the word “you” should go here, which I amazingly forgot to write before hitting publish).

Cold Brew Coffee Experiment #3

So, I did what I said I’d do – 1/3rd cup ground coffee + 2 cups water, overnight (about 18-20hrs) in fridge. Tasted really nice.

I think I’ve found the combination that works when I’m just making one.

Filtering out the grounds is certainly annoying… I guess this is what the Toddy is meant to solve…. because what I most certainly need is yet another way to make coffee.

Cold Brew Coffee Experiment #2

Two things varied from my previous attempt:

  1. I kept it in the fridge instead of on the bench (it’s been really hot in Melbourne and the fridge is closer to “normal” temperature than outside)
  2. doubled the amount of water

The difference? It’s certainly cooler, and a weaker flavour. That being said,  I think you get more of the subtleties of the flavour rather than being a bit thwacked with it. I found my last experiment nice, but perhaps a bit sharp. This batch tastes very smooth and refreshing.

This batch also seemed to be less gritty, with me seeing fewer grounds in the filter. I wonder if that’s due to fridge, variance of grind or water quantity.

I think for my next go I’m going to try same amount of coffee, in the fridge, but 2 cups of water.

Cold Brew Coffee Experiment #1

1/3rd cup ground coffee (ground approximately for what I’d use in a plunger) to 1.5cups water. Sit in airtight container on the bench overnight (about 18hrs actually) and then filtered through coffee filter paper into a mug.

It certainly is different, but still distinctly coffee. I’m not sure if I want to add more water too it or not… quite possibly – and this mixture would probably be total killer for iced coffee.

Basically, I’ve heard a million and one “one true ways” to make cold brew coffee, and this was my first go at it. Now just to try different variations until I find the one I like the most.

Puppet snippet for setting up a machine to build Drizzle

You could use this in a Vagrant setup if you like (I’ve done so for testing).

Step 1) Set the following in your Vagrantfile:

Vagrant::Config.run do |config|
  config.vm.box = "lucid32"
  config.vm.box_url = "http://files.vagrantup.com/lucid32.box"
  config.vm.provision :puppet
end

Step 2) Get puppet-apt helper.

I used https://github.com/evolvingweb/puppet-apt and put it in a manifests/ directory like so:

$ mkdir manifests
$ cd manifests
$ git clone git://github.com/evolvingweb/puppet-apt.git

Step 3) Write your puppet manifest:

import "puppet-apt/manifests/init.pp"
import "puppet-apt/manifests/ppa.pp"
class drizzlebuild {
        apt::ppa { "ppa:drizzle-developers/ppa": }
        package { "drizzle-dev":
                  ensure => latest,
        }
}
include drizzlebuild

Step 4) “vagrant  up” and you’re done! Feel free to build Drizzle inside this VM.

I’m sure there may be some more proper way to do it all, but that was a pretty neat first intro to me to Puppet and friends :)

Puppet + Vagrant + jenkins = automated bliss

I’m currently teaching myself how to do Puppet. Why? Well, at Percona we support a bunch of platforms for our software. This means we have to maintain a bunch of Jenkins slaves to build the software on. We want to add new machines and have (up until now) maintained a magic “apt-get install” command line in the Jenkins EC2 configuration. This isn’t an ideal situation and there’s been talk of getting Puppet to do the heavy lifting for a while.

So I sat down to do it.

Step 1: take the “apt-get install” line and convert it into puppet speak.

This was pretty easy. I started off with Vagrant starting a Ubuntu Lucid 32 VM (just like in the Vagrant getting started guide) and enabled the provision using puppet bit.

Step 2: find out you need to run “apt-get update”

Since the base VM I’m using was made there had been updates, so I needed to make any package installation depend on running “apt-get update” to ensure I was both installing the latest version and that the repositories would have the files I was looking for.

This was pretty easy (once I knew how):

exec {"apt-update":
       command => "/usr/bin/apt-get update",
}
Exec["apt-update"] -> Package <| |>

This simply does two things: specify to run “apt-get update” and then specify that any package install depends on having run “apt-update” first.

I’ve also needed things such as:

case $operatingsystem {
     debian, ubuntu: { $libaiodev = "libaio-dev" }
     centos, redhat: { $libaiodev = "aio-devel" }
     default: { fail("Unrecognised OS for libaio-dev") }
}
package { "libaio-dev":
          name => $libaiodev,
          ensure => latest,
}

The idea being that when I go and test all this stuff running on CentOS, it should mostly “just work” there too.

The next step? Setting up and running the Jenkins slave.

Without notmuch, I would simply delete your email

I have been using notmuch (http://notmuchmail.org/) as my email client for quite a while now. It’s fast. I don’t mean that everything happens instantly (some actions do take a bit longer than ideally they would), but with the quantity of mail I (and others) throw at it? Beats everything else I’ve ever tried.

I keep seeing people complain about not being able to keep up with various email loads and I am convinced it is because their mail client sucks.

I hear people go on about mutt…. well, I stopped using mutt when it would take two minutes to open some of my mail folders.

I hear some people talk about Evolution…. well, I stopped using Evolution when I realized that when it was rebuilding its index, I couldn’t use my mail client for at least twenty minutes.

Gmail…. well, maybe. Except that I don’t want all my mail to be sitting on google servers, I want to be able to work disconnected and the amount of time it would take to upload my existing mail makes it a non-starter (especially from the arse end of the internet – Australia). I also do not want email on my phone.

My current problem with notmuch? It just uses Maildir…. and this isn’t the most efficient for mail that never changes, some kind of archive format that is compressed would be great. Indeed, I started looking into this ages ago, but just haven’t had the spare cycles to complete it (and getting SSDs everywhere has not helped with the motivation).

Coming back from vacation, my mailbox had about 4,700 messages sitting in it. I’ve been able to get through just about all of them without blindly deleting mail. This is largely due to the great UI of notmuch for being able to quickly look at threads and then mark as read, quickly progressing to the next message. I can tag mail for action, I can very quickly search for email on an urgent topic (and find it) and generally get on with the business of getting things done rather than using an email program.

Friendly exploits

If you happen to be friends with me on Facebook you will have seen a bunch of rather strange updates from me last night. This all started with a tweet (that was also sent to Facebook) by a friend who joked about doing something with the <MARQUEE> tag (see http://www.angelfire.com/super/badwebs/ for an example of it and similar things). I saw the joke, as I was reading it through Gwibber or the Facebook website. However…. Leah saw text scrolling over the screen… just like the <MARQUEE> tag actually did.

She was looking at it on her iPad using an app called Friendly.

So I immediately posted a status update: “<script lang=”javascript”>alert(“pwned”);</script>”. This is a nice standard little test to see if you’ve managed to inject code into a web site. If this pops up a dialog box, you’ve made it.

It didn’t work. It didn’t display anything… as if it was just not running the script tag. Disappointing. I soooo wanted it to break here.

I did manage to do all sorts of other things in the Live Feed view though. I could use just about any other HTML tag… including forms. I couldn’t get a HTTP request to my server out of a HTML form in the Live Feed view… but once we did manage to crash Friendly (enough that it had to be force quit on the iPad).

I posted a photo of me holding up the iPad to my laptop web cam to show off the basics:

And then one of what happened when I tried a HTML form (this wasn’t reproducible though… so kind of disappointing):

What we did notice however was that HTML tags were parsed in comments on images too…. which made me wonder… It’s pretty easy to make a HTML form button that will do something… so I posted the same image again with a button that would say “Next” but would take you to a web page on one of my servers instead. It worked! I got a HTTP request! Neat! I could then present a HTML page that looked legit and do the standard things that one does to steal off you.

But I wonder if scripts would work…. so I posted:

Photos are proving more exploitable.... <script lang="javascript">alert("pwned");</script>

and then clicked on the image on the iPad……

Gotcha!

I could from here do anything I wanted.

Next… I should probably report this to the developers…. or steal from my friends and make them post things to facebook implying improper relationships and general things that would get you fired.

I went with the former… but the latter would have been fairly easy as the Facebook page for the app nicely tells me which of my friends use it. I could even target my attack!

So I sent a warning message to friends (the 18 of them who use the Friendly app), sent a “contact the developer” message to the developers, sent out a warning on Twitter and went to bed.

Got an email overnight back from the developer: “We just pushed a server update that solves this issue.”

Now… in my tcpdump while trying some of the earlier things I was just seeing https requests to facebook API servers from the iPad, but I don’t thing I looked too closely at images. I have no idea if they’ve actually fixed the holes and I don’t have an iPad to test it on. If you do, go try it.

innodb and memcached

I had a quick look at the source tree (I haven’t compiled it, just read the source – that’s what I do. I challenge any C/C++ compiler to keep up with my brain!) that’s got a tarball up on labs.mysql.com for the memcached interface to innodb. A few quick thoughts:

  • Where’s the Bazaar tree on launchpad? I hate pulling tarballs, following the dev tree is much more interesting from a tech perspective (especially for early development releases). I note that the NDB memcached stuff is up on launchpad now, so yay there. I would love it if the InnoDB team in general was much more open with development, especially with having source trees up on launchpad.
  • It embeds a copy of the memcached server engines branch into the MySQL tree. This is probably the correct way to go. There is no real sense in re-implementing the protocol and network stack (this is about half what memcached is anyway).
  • The copy of the memcached engine branch seems to be a few months old.
  • The current documentation appears to be the source code.
  • The innodb_memcached plugin embeds a memcached server using an API to InnoDB inside the MySQL server process (basically so it can access the same instance of InnoDB as a running MySQL server).
  • There’s a bit of something that kind-of looks similar to the Embedded InnoDB (now HailDB) API being used to link InnoDB and memcached together. I can understand why they didn’t go through the MySQL handler interface… this would be bracing to say the least to get correct. InnoDB APIs, much more likely to have fewer bugs.
  • If this accepted JSON and spat it back out… how fast would MongoDB die? weeks? months?
  • The above dot point would be a lot more likely if adding a column to an InnoDB table didn’t involve epic amounts of IO.
  • I’ve been wanting a good memcached protocol inside Drizzle, we have ,of course, focused on stability of what we do have first. That being said…. upgrade my flight home so I can open a laptop… probably be done well before I land….. (assuming I don’t get to it in the 15 other awesome things I want to hack on this week)

They took my Kodachrome away

It’s done. It’s gone. You can still find rolls on eBay and the like, but you’re not going to get them developed as colour slides. Dwayne’s Photo stopped accepting Kodachrome on December 30th 2010. I have a set on flickr of my Kodachrome shots. The scans do not do them justice. They look way better projected. I will also talk about the demise of Kodachrome without mentioning the Paul Simon song. oh, wait. fuck.

I’ve now gotten all my Kodachrome back. The last package arrived while I was away at linux.conf.au 2011 in Brisbane.

It is certainly the end of an era, and the last of my shots will go up on flickr.