Photographical style

I never really thought of myself as having a particular “style” to my photos, but I was looking back at my old photos — originally specifically from Christmas and then just more generally all of them — and I’ve realised in the last year or two I’ve very much moved towards a lighter “high-key” style where I bring the shadows up and even bump the exposure of the whole photo by ⅓ to ⅔ of a stop or even more, to get a nice light airy feel to them.

Have a look just at my Christmas albums to see what I mean.

It’s even more obvious when going back and looking at all my photos as a whole! My photos from our trip to Boston in 2012 are a good example, they’re all super-saturated and high-contrast, with really dark shadows. I still have all the original RAW files from that trip, but I don’t want to go back and start re-editing photos lest I go down the path of George Lucas and just totally ruin everything with my meddling. 😛

A holiday in Perth

We went to Perth for a week last week, and it was damned lovely! A friend of mine, Mat, who I’ve known for over fifteen years and originally met through the now-mostly-defunct Everything2, lives over there and was able to offer some advice on places to eat at and suburbs to stay in.

We arrived on Saturday and stayed in a house in Highgate, which is about a 10-15 minute walk from the city itself. Less than a block away is Hyde Park, which is lovely, and so green (Perth has had like a month or two straight of rain, versus the next-to-none that Sydney’s had).

Path

Gazeebo

Departing

There’s a bunch of street art all around the place as well, and lots of interesting buildings to take photos of (full album is here).

Untitled

Untitled

Untitled

Five

High Grounds Coffee

On Sunday we visited Fremantle, to check out the markets there and hopefully get a view of a sunset over the ocean (something we’ve never seen given both Kristina and I grew up on the east coasts of our respective countries). It was indeed getting very nice, but sadly the clouds moved in right as the sun was getting low to the horizon.

Down the street

Ferris wheel

Untitled

Playing

Lighthouse

Untitled

Untitled

Fremantle is the main cargo port for Perth, so there were the giant cargo cranes there and also a massive submarine in dry-dock (have a look to the right of the second photo)!

Untitled

Cranes

Monday was spent first at the Western Australian Botanic Garden and then wandering Northbridge and the CBD itself.

The Garden is massive although there’s a lot of just regular bushland as well as flower beds.

Untitled

Untitled

Untitled

The Swan Brewery Co. Ltd.

Northbridge was neat, there’s a lot of laneways and little alleys, and most of them have art on the walls, often on a very large scale.

Untitled

Small steps

Dragon

Sugar glider

Goat

Untitled

Untitled

Those last two would have been probably four stories high!

We wandered through the CBD itself as well, had dinner at Durty Nelly’s Irish pub (highly recommended, the food was incredible), then continued wandering after night had fallen.

Spring

Untitled

Gothic windows

Untitled

Stairs

Untitled

On Tuesday we visited Rottnest Island! We made the mistake of taking a bus tour, which was filled with loud, obnoxious, racist boomers, and we only stopped to actually get off the bus twice. Otherwise we were driving past all this wonderful terrain and the occasional quokka, and everyone was snapping shitty photos out of the bus windows.

Thankfully that only lasted an hour and a half, and we were able to go visit a colony of quokkas that were all of about ten minutes from the main buildings on the island, and OH MY GOD they are adorable! They have no natural predators on the island so they were pretty well unafraid of people and we were able get up super-close to them.

Smiling

Round

Mine!

Gnarled

The water around the island is crystal clear.

Untitled

Untitled

Tuesday night, we had dinner in Northbridge at a Mexican restaurant called La Cholita, and holy crap if you’re in Perth you need to visit it. The food is amazing.

Chopping

Kristina and Mat

Taco and sangria

Afterwards we went for another wander around the area and snapped some photos.

Mat's ridiculous icecream

Waiting

Meat Candy

Wednesday was spent briefly at the Araluen Botanic Park (briefly, because Kristina’s legs were massively hurting from crouching down and getting up constantly on Tuesday while we were visiting the quokkas and the Botanic Park was filled with lots of hills), and then a leisurely wander through East Perth.

The weather starting turning a bit crap on Thursday, so we visited Mat’s sister and her boyfriend on their rural property and just hung out there with their horse Archie and hilariously uncoordinated Maremma sheep dog Iorek, then went back and played some Diablo III.

Untitled

Iorek the Maremma sheep dog

I can’t believe how well-timed the trip was, we booked it back in July and the week before the trip was almost non-stop rain and it’s now back to raining again for the next week! There would have been so much we wouldn’t have been able to see if the weather had been awful.

A vehicular upgrade

We bought a brand-new car today! \o/ It’s an extremely handsome-looking Kia Cerato hatchback in dark metallic grey.

Our brand-new MY18 Kia Cerato

We’d been toying with the idea for a little bit, then Kristina came across some videos of crash tests comparing somewhat older (from ~2000-ish, which is exactly what our current Corolla is) cars impacting with newer ones. They’re nothing like the utter crumpling of the cars from the 1970s, but still somewhat alarming. She did a bunch of research and found that the current Kias are extremely well-regarded and reliable, and it turns out there’s basically nothing else in the same price range that offer as much power and features; the equivalent cars like the Corolla and Civic and such were all several thousand dollars more, with less power and fewer included features. The Cerato has a 7-year warranty as well, which seemed to be more than most other cars.

Speaking of power (112kW and 192Nm to be exact), we took one for a test drive on Sunday… I put my foot down and was accidentally doing 70km/h almost immediately! There’s a hell of a lot of room as well, it’s only marginally larger on the outside compared to our Corolla, but it’s so spacious inside. I’m excited about having a hatchback again too, there’s been a few situations where we were trying to put something into the boot and it just wouldn’t fit. Now we can go to town and put the back seats down and put EVERYTHING in it! *maniacal laughter*

We’re going to keep the old Corolla for a while just to go to and from the station in, because parking there means the car is permanently covered in dust thanks to all the construction going on, and when it rains everything turns to mud and the trucks going along the road just splash mud across everything.

A photographical upgrade

Last Wednesday, we upgraded from our trusty Canon EOS 7D to a brand-new Canon EOS 5D Mark IV! It’s a hell of an upgrade in terms of basically every single aspect… the 7D originally came out in 2009 and the 5D4 was only last year and is full-frame to boot, 18 megapixels versus 30, and the 5D4 also has the insanely awesome autofocus system from Canon’s flagship ~$8k-for-the-body-alone EOS 1DX.

I fairly obsessively tag my photos on Flickr so it’s easy to find things, and the final tally for photos taken with the 7D is 2641!

The very first photo taken was of this flower at my parents’ place, when I got our original 35mm f/2 lens for my birthday in 2010 (the camera and lens are not mine alone, both Kristina and I share it equally, but getting the lens for my birthday was a handy way to not have pay the entire cost of it ourselves :P).

Untitled

It’s difficult to pull only a handful of favourite photos out of twenty-six hundred, but these would definitely be amongst them, in many cases more for the memory than any particular quality of the photograph…

Kristina being nibbled by a horse on our first wedding anniversary—
Horsey Nibbles

Meerkats warming themselves at Taronga Zoo—
Warming glowing warming glow

Dan looking right at a well-placed “Look right” sign—
Dan is waiting for a bus

Kristina looking stunning with our ring-flash—
My beautiful wife

Lily writing her name—
Writing

The train tunnels at Wynyard—
Into the tunnels

Lily feeding the lorikeets—
Feeding the lorikeets

A toothy grin—
Toothy grin

Christmas excitement—
Excitement

The first photo taken in our new house—
Tedison's new home

Kristina being extremely nudged by a calf at Featherdale—
Untitled

My very first photo of Beanie when we got him—
Untitled

Nanny at Christmas hugging one of Lily’s presents—
Nanny hugging Lily's pillow pet

Beanie in the office—
In the office

One of the several actresses we got in at work one Halloween, who were done up as zombies and CREEPY AS FUCK—
Zombiegirl #3

Kristina cracking up at how ridiculous Beanie is—
Cracking up

Lily and Scarlett’s matching bears at Christmas—
New bears

Family photo—
Family photo!

The fantastically creepy decorations and lighting for the latest Halloween at work—
Untitled

Playing around with coloured gels on our flashes with Adam and Stacey—
Untitled

Beanie playing with his best friend Leo—
Untitled

The extraordinarily epic storm aftermath we had—
Untitled

A photo walk we did at work one lunch where we had some volunteers to do a pseudo-modelling shoot—
Marlene

Leo and Beanie zooming down the hall—
Untitled

Wandering around Barangaroo before going to the Maritime Museum—
Untitled

We sold the 7D to friends, so it’s definitely going to continue on in a good home. It was an absolute workhorse, I didn’t think to check the shutter count before we sold it but it never once gave any sort of trouble whatsoever. Meanwhile, we’ve already started taking new memories with the 5D Mark IV and I’d say we ought to get at least 10 years out of it if not more.

Bandcamp is brilliant

For those unaware, Bandcamp is essentially a more indie iTunes Music Store—they don’t have any of the huge music labels there—but with a twist… you can stream entire albums before buying them (as opposed to the 90-second previews you get in iTunes), and a significantly larger percentage of the money you pay to them goes directly to the artist (Bandcamp says around 75-80%).

I found out about it around the start of this year, and it has me discovering and buying way more new music than I had previously. From 2013 to 2016, I’d added 30 albums to iTunes from various sources… this year so far I’ve bought 34 on Bandcamp! They have an iOS app that lets you browse artists by tag (usually genre, like “black metal” for instance, but there’s things like “female-fronted metal” that spans different genres, and really whatever else users have tagged the artist with), so I’ll spend an hour here and there just going through listening to new artists and adding albums to my wishlist, then once or twice a month will go back and buy a few of them.

One of the best bits is that the artists themselves set the prices and you can pay more if you’d like, and some don’t even have a minimum price. The highest I’ve come across so far us US$9.99 (currently about AU$12.50), which is a good bit cheaper than the standard AU$16.99 price you see on iTunes, and a lot have been closer to US$5.

They’ve also done some fantastic things like donating all their proceeds for a day when Trump tried his so-called “Muslim ban” back in January, and more recently doing a similar thing with the proposed ban on transgender service members in the US military.

So basically, if you like music and supporting artists, stop buying music anywhere else and start buying it on Bandcamp!

Adventures with Docker

For a few years now, the new hotness in the software world has been Docker. It’s essentially a very-stripped-down virtual machine, where instead of each virtual machine needing to run an entire operating system as well as whatever application you’re running inside it, you have just your application and its direct dependencies and the underlying operating system handles everything else. This means you can package up your application along with whatever other crazy setup or specific versions of software is required, and as long as they have Docker installed, anyone in the world can run it on pretty much anything.

The process of converting something to run in Docker is called “Dockerising”, and I’d tried probably two or so years ago to Dockerise my website (which was at the time still in its Perl incarnation), but without success. Most of it was not properly understanding Docker but also Docker’s terminology not being hugely clear and information on Dockering Perl applications being a bit thin on the ground at the time.

My new job involves quite a lot of Docker so I figured I should probably have another crack at it, so I sat down in June and managed to get my website running in a Docker container! The two-or-so-years between when I tried it last and now definitely helped, as did having had a little bit of experience with it in the new job.

I think the terminology was one of the bits that I struggled with most, so maybe this explanation will help someone… you have a Docker image, that’s basically a blueprint for a piece of software and all its associated dependencies. From that image (blueprint), you start up one or more containers which are the actual running form of the image. If one container dies (the application inside crashes or whatever), you don’t care and just start up another one and it’s identical each time. To build your own image, you start with a Dockerfile that tells Docker exactly how to construct your application and all the different parts that are required to support it (see my Lessn Archive’s Dockerfile for an example). There really wasn’t any substitute for actually going in and doing it; by struggling and failing I eventually got there in the end.

Since my initial success with my website, I’ve gone on to put both my old site archive and my URL shortener in Docker containers as well! Next stop is Kristina’s website, but that’s still using Perl and Mojolicious and my initial attempts have not been successful. 😛

Internet history

On Twitter recently, Mark had downloaded the whole archive of his Twitter account’s history and had been poking through it and randomly retweeting amusing old tweets. I downloaded my own Twitter history and quickly realised that a lot of the old things I’d linked to weren’t accessible because I’d been using my own custom URL shortener (this was before the days of Twitter doing their own URL shortening) and it wasn’t running anymore. Fortunately I’d had the foresight to take a full copy of all of my data and databases from Dreamhost before I shut down my account, and one of those databases was the one that had been backing my URL shortener. A quick import to PostgreSQL and a hacky Node.js application later, it’s all up and running! I’m under no illusions that it’s almost ever going to be accessed by anyone except me, but it’s nice to have another part of my internet history working. I’ve been hosting my own website and images and whatnot (things like pictures I’ve posted on my blog née LiveJournal, or in threads on Ars Technica) in one form or another since about 2002, and the vast majority of those links and images still work!

Speaking of my website, about four years ago now I went and tried to collect all my old websites into a single archive so I could look back and see the progression. The majority of them I actually still had the original source code to, though my very first one or two have been totally lost. The earliest I still have is from March of 1998 when I was not quite fifteen years old! I started out with just HTML, then discovered CSS and Javascript rollover images, and then around 2001 I started using PHP. I had to go in and hack up some of the PHP-based sites in order to get them to work, and oh dear god 18-year-old me was a FUCKING AWFUL coder. One of the sites consisted of a bit over three thousand lines in a single file, with all sorts of duplication and terribleness, and every single one of the sites that was hooked into MySQL had SQL injection vulnerabilities. I’m very proud of just how much my code has improved over the years.

I went back this weekend and managed to recover another handful of sites, and also included exports of the Photoshop files where the original site source wasn’t available. I’ve packed them all up into a Docker container (I’ll write another post about my experiences with Docker at some point soon) and chucked them up on archive.virtualwolf.org for the entire Internet to marvel at how terrible they all were! There’s a little bit more background there, but it’s a lot of fun just looking back at what I did.

Better Raspberry Pi audio: the JustBoom DAC HAT

I decided that the sound output from the Pi’s built-in headphone jack wasn’t sufficient after all and so went searching for better options (a DAC—digital-to-analog converter).

The Raspberry Pi foundation created a specification called “HAT” (Hardware Attached on Top) a few years ago which specifies a standard way for devices to automatically identify and configure a device and drivers that’s attached to the Pi via its GPIO (General Purpose Input/Output) pins. There’s a number of DACs now that conform to this standard, and the one I settled on is the JustBoom DAC HAT. It’s a UK company but you can buy them locally from Logicware (with $5 overnight shipping no less).

The setup is incredibly simple: connect the plastic mounting plugs, attach the DAC to the Pi, then edit /boot/config.txt to comment out the default audio settings and add three new lines in, then reboot.

To say that I’m impressed would be an understatement! I didn’t realise just how crappy the audio from the Pi’s built-in headphone jack was until I’d hooked up the new DAC and blasted some music out. I’m not an audiophile and it’s hard to articulate, but I’d compare it most closely to listening to really low-quality MP3s on cheap earbuds versus high-quality MP3s on a proper set of headphones.

If you’re going to be hooking your Pi into a good stereo system, I can’t recommend JustBoom’s DAC HAT enough!

Raspberry Pi project: AirPlay receiver

I bought a Raspberry Pi almost exactly a year ago, intending on eventually replacing my Ninja Block and its sometimes-unreliable wireless sensors with hardwired ones (apart from the batteries needing occasional changing, there’s something that interferes with the signal on occasion and I just stop receiving updates from the sensor outside for several hours at a time, and then suddenly it starts working again). To do that, I need to physically run a cable from outside under the pergola to inside where the Raspberry Pi will live and I don’t really want to go drilling holes through the house willy-nilly. I want to eventually get the electrician in to do some recabling so I’m going to get him to do that as well, but until then the Pi was just sitting there collecting dust. I figured I should find something useful to do it with, but having a Linode meant that any sort of generic “Have a Linux box handy to run some sort of server on” itch was already well-scratched.

I did a bit of Googling, and discovered Shairport Sync! It lets you use the Raspberry Pi as an AirPlay receiver to stream music to from iTunes or iOS devices, a la an Apple TV or AirPort Express. We already have an Apple TV but it’s plugged into the HDMI port on the Xbox One which means that to simply stream audio to the stereo we have to have the Xbox One, TV, and Apple TV all turned on (the Apple TV is plugged into the Xbox’s HDMI input so we can say “Xbox, on” and the Xbox turns itself on as well as the TV and amplifier, then “Xbox, watch TV” and it goes to the Apple TV; it works very nicely but is a bit of overkill when all you want to do is listen to music in the lounge room).

Installing Shairport Sync was quite straightforward, I pretty much just followed the instructions in the readme there then connected a 3.5mm to RCA cable from the headphone jack on the Raspberry Pi to the RCA input on the stereo. It’s mentioned in the readme, but this issue contains details on how to use a newer audio driver for the Pi that significantly improves the audio output quality.

The only stumbling block I ran into was the audio output being extremely quiet. Configuring audio in Linux is still an awful mess, but after a whole lot of googling I discovered the “aslamixer” tool (thanks to this blog post), which gives a “graphical” interface for setting the sound volume, and it turned out the output volume was only at 40%! I cranked it up to 100% and while it’s still a bit quieter than what the Apple TV outputs, it doesn’t need a large bump on the volume dial to fix—there’s apparently no amplifier or anything on the Raspberry Pi, it’s straight line-level output. The quality isn’t quite as good as going via the Apple TV, but it gets the job done! I might eventually get a USB DAC or amplifier but this works fine for the time being.

On macOS it’s possible to set the system audio output to an AirPlay device, so you can be watching a video but outputting the audio to AirPlay, and the system keeps the video and audio properly in sync. It works extremely well, but the problem we found with having the Apple TV hooked up to the Xbox One’s HDMI input is that there’s a small amount of lag from the connection. When the audio and video are both coming from the Apple TV there’s no problem, but watching video on a laptop while outputting the sound to the Apple TV meant that the audio was just slightly out of sync from the video. Having the Raspberry Pi as the AirPlay receiver solves that problem too!

UPDATE: Two further additions to this post. Firstly, and most importantly, make sure you have a 5-volt, 2.5-amp power supply for the Raspberry Pi. I’ve been running it off a spare iPhone charger which is 5V but only 1A, and the Pi will randomly reboot under load because it can’t draw enough power from the power supply.

Secondly, the volume changes done with the “alsamixer” tool are not saved between reboots. Once you’ve set the volume to your preferred level, you need to run “sudo alsactl store” to persist it (this was actually mentioned in the blog post I linked to above, but I managed to miss it).

New job!

No, I haven’t left Atlassian, but come Monday I’m starting in a new role!

We have the concept of a role called a “Shield” that’s essentially support but for helping our own internal developers and users (as opposed to external customers), and the idea is that it’s the first point of contact for developers who need help or have questions about the particular service/platform/whatever that the Shield is supporting, as well as being able to step back and look at the bigger picture in terms of pain points that those developers run into and what sort of things could be done to minimise that. The name “shield” comes from the fact that you’re essentially shielding the rest of the developers on the team from the distractions that come from other people constantly contacting them throughout the day, and letting them get on with what they do best (actual coding and improvements to the product). I’ll also have the opportunity to actually do some coding and make improvements too, though. \o/

The team I’m joining runs our internal microservices platform that an increasing number of our applications are being run on, and though the microservices themselves can be pretty much any language you’d like (it’s all Docker-based), the code that the platform itself runs on is Node.js which ties in rather nicely with all my learning over it over the past almost eighteen months.

I’ve been doing external customer-facing support for over thirteen and a half years so this is going to be a lovely change! It’s going to be really weird starting anew where I know next to nothing about the inner workings of the thing I’m supporting though. 😛 I expect my brain is going to be dribbling out my ears come the end of next week.

Back to Tasmania

We went back to Tasmania again last week, and it was pretty great!

Where last time we stayed in Hobart for the whole trip, this time we drove up to Bicheno first, which is about a two and a half hour drive north of Hobart. The accomodation itself (the “Diamond Island Retreat”) was not great, the house was built in probably the 1970s and had clearly had next to nothing done with it since. The kitchen was terrible and the two frying pans were both quite burnt and scratched up, and there was zero internet access (at least in terms of wifi, thankfully there was plenty of 4G reception). It was completely clean and tidy, at least.

That being said, the location was amazing. This was the view from the back deck –

Diamond Island

You could walk down the paddock and down to the beach, which had some of the whitest sand I’ve seen. The first sunset was pretty epic as well.

Sunset

Reflections

Walking

More patterns

They do “penguin tours” right near where we were staying, there’s a whole section of land that’s restricted to the public and they get lots of penguins living and breeding there. We went during the decidedly off-season and so only saw a couple of penguins, but one of them waddled its way up the beach and right past us to its burrow! The other penguins we could only see in the distance down on the rocks near the beach. The tours are done after the sun has set and the guides have special torches that emit really yellow light so as not to hurt the penguins’ eyes. During the breeding season you can apparently see upwards of a hundred penguins all coming ashore to feed their chicks.

There’s a few other things to do around Bicheno as well, one is Freycinet National Park which has some epic hiking trails through it (neither Kristina nor I are hikers so we opted to just go by what we could reach by car).

Untitled

Untitled

Cape Tourville Lighthouse

Then right up the road from where we were staying is Douglas-Apsley National Park, which is the same deal as Freycinet with the hiking, and requires a good couple of kilometres of dirt road to get to the carpark.

Untitled

Untitled

Untitled

Untitled

Untitled

(There’s a few more photos from each in the photoset).

The last bit of Bicheno we saw was East Coast Natureworld, a big wildlife sanctuary and conservation area.

Esther the wombat

Emu

Lazing

Ostrich

Don’t ask me why there was an ostrich there, I don’t know. 😛 The baby wombat at the top is named Esther, and she was just sitting there in the keeper’s arms dozing while the keeper was talking. They also do conservation and breeding for Tasmanian devils there, and we got to see one of them being fed which was pretty neat!

Feeding Dennis the Tasmanian Devil

Nom nom nom

After that, we drove back down to Hobart and spent the rest of the trip just wandering around some more.

The side path

190

Up the hill

Mirror selfie

Lit from below

Aurora Australis

Grafitti

Happy doggo grafitti

Under construction

Docked

The huge orange ship is an icebreaker

Aurora Australis is an Australian icebreaker. Built by Carrington Slipways and launched in 1989, the vessel is owned by P&O Maritime Services, but is regularly chartered by the Australian Antarctic Division (AAD) for research cruises in Antarctic waters and to support Australian bases in Antarctica.

And it’s quite an impressive sight in person!

We also went up to Mount Nelson, which is the next-highest mountain in Hobart, but unfortunately they were doing hazard-reduction burns (basically controlled bushfires) so it was really smokey and you mostly couldn’t see anything. 🙁

Despite that, all in all it was an excellent trip.

iPhoneography

Both Kristina and I upgraded to the iPhone 7 last month, I’d heard the camera was good but I took it out for a spin last week when I went on a lunchtime photo walk with some co-workers, and man. I can see why the point-and-shoot market is dying! I processed all these photos in Lightroom on my iMac so it wasn’t solely done on the iPhone, but even so, I’m incredibly impressed.

It’s not going to replace a full DSLR setup in low-light or shallow depth-of-field situations, but where I’d be wandering around during the day taking photos at f/8 anyway…

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

A year of Node.js

Today marks one year exactly since switching my website from Perl to Javascript/Node.js! I posted back in March about having made the switch, but at that point my “production” website was still running on Perl. I switched over full-time to Node.js shortly after that post.

From the very first commit to the latest one:

$ git diff --stat 030430d 6b7c737
[...]
177 files changed, 11313 insertions(+), 2110 deletions(-)

Looking back on it, I’ve learnt a hell of a lot in that one single year! I have—

  • Written a HipChat add-on that hooks into my Ninja Block data (note the temperature in the right-hand column as well as the slash-commands; the button in the right-hand column can be clicked on to view the indoor and outdoor temperatures and the extremes for the day)
  • Refactored almost all of the code into a significantly more functional style, which has the bonus of making it a hell of a lot easier to read
  • Moved from callbacks to Promises, which also massively simplified things (see the progression of part of my Flickr– and HipChat-related code)
  • Completely overhauled my database schema to accomodate the day I eventually replace my Ninja Block with my Raspberry Pi (the Ninja Block is still running though, so I needed to have a “translation layer” to take the data in the format that the Ninja Block sends and converts it to what can be inserted in the new database structure)
  • Added secure, signed, HTTP-only cookies when changing site settings
  • Included functionality to replace my old Twitter image hosting script, and also added a nice front-end to it to browse through old images

Along with all that, I’ve been reading a lot of software engineering books, which have helped a great deal with the refactoring I mentioned above (there was a lot of “Oh god, this code is actually quite awful” after going through with a fresh eye having read some of these books)—Clean Code by Robert C. Martin, Code Complete by Steve McConnell, The Art of Readable Code by Dustin Boswell and Trevor Foucher.

I have a nice backlog in JIRA of new things I want to do in future, so I’m very interested to revisit this in another year and see what’s changed!

Farewell Dreamhost

After 12 years of service, I’m shutting my Dreamhost account down (for those unaware, Dreamhost is a website and email hosting service).

My very first—extremely shitty—websites were hosted on whichever ISP we happened to be using at the time—Spin.net.au, Ozemail, Optus—with an extremely professional-looking URL along the lines of domain.com.au/~username. I registered virtualwolf.org at some point around 2001-2002 and had it hosted for free on a friend’s server for a few years, but in 2005 he shut it down so I had to go find some proper hosting, and that hosting was Dreamhost.

The biggest thing I found useful as I was dabbling in programming was that Dreamhost offered PHP and MySQL, so I was able to create dynamic sites rather than just static HTML. Of course, looking back at the code now is horrifying, especially the amount of SQL injection vulnerabilities I had peppered my sites with.

Around the start of 2011, I started using source control—Subversion initially—and finally had a proper historical record of my code. I used PHP for the first year or so of it, then ended up outgrowing that and switched to a Perl web framework called Mojolicious. The only option to run a long-lived process on Dreamhost is to use Fast-CGI, which I never managed to get working with Mojolicious, but fortunately Mojolicious could also run as a regular CGI script so I was still able to use it with Dreamhost, albeit not at great speed.

At the same time I started using Subversion, I also signed up with Linode who offer an entire Linux virtual machine with which you can do almost anything you’d like as you have full root access. I originally used it mostly to run JIRA so I could keep track of what I wanted to do with my website and have the nifty Subversion/JIRA integration working to see my commits against each JIRA issue. I slowly started using the Linode for more and more things (and switched to Git instead of Subversion as well), until in 2014 I moved my entire website hosting over to the Linode.

At that point the only thing I was using Dreamhost for was hosting Kristina’s website and WordPress blog, and the email for our respective domains. Dreamhost’s email hosting wasn’t always the most reliable and towards the end of 2015 they had more than their usual share of problems, so we started looking for alternatives. Kristina ended up moving to Gmail and I went with FastMail (who I am extremely happy with and would very highly recommend!), I moved her blog and my previously-LiveJournal-but-now-Wordpress-blog over to the Linode, and that was that!

Moving my website hosting to the Linode also allowed me to move over to Node.js and I’ve been going full steam ahead ever since. Since that posted I’ve moved over from callbacks to Promises (so much nicer), I wrote myself a HipChat add-on to keep an eye on the temperature that my Ninja Block is reporting, and I moved my dodgy Twitter image upload Perl script functionality into my site and added a nice front-end to it. Even looking back at my code from 6 months ago to now shows a marked increase in quality and readability.

So in summary, thanks for everything Dreamhost, but I outgrew you. 🙂

Final enkitchening, and concert

We had the tiler out this morning to put the backsplash in, and the kitchen is basically finished now. The bits above the cupboards still need painting, but in terms of every day use, it’s done, and looks brilliant! The plumbing and electrics were all hooked up yesterday, and you have no idea how delightful it is to actually have a dishwasher now after three-and-a-half years of not having one.

We’ve not used the new induction cooktop properly in anger yet, but we made pasta last night, I put the “Boost” mode on, and it took the water from cold to a roiling boil in five minutes flat. I also seasoned the stainless steel frying pans that we bought from IKEA and had written off as being useless because they stick (apparently seasoning is essential) though they’ve not been put to the test yet. The only casualty in the change to induction is the wok, which despite having a fridge magnet stick to the bottom of it, isn’t sensed by the cooktop. Kristina did a bunch of reading and the best type to get is a carbon steel one, so we’ve got one on the way.

Backsplash 1

Backsplash 2


I also saw Lacuna Coil live last night, for the first time in seven years (due to them not having toured here in that long), and they absolutely ruled. They played all the songs I was hoping for. ? I saw them back in 2007 as well, and was a fair bit closer then but with a significantly crappier phone camera (and also a far far higher tolerance for shitty photos, evidently). 😛 Irritatingly, I had to leave half-way through the last song or I was going to miss the last train home due to there being trackwork this weekend. I’m currently running on about five hours of sleep because I didn’t get home until just before 1:30am, and woke up at 6:40am because the tiler was coming. Note to self, don’t schedule things early on a Saturday morning in future.

Lacuna Coil 1

Lacuna Coil 2

Lacuna Coil 3

Lacuna Coil 4

Lacuna Coil 5

The Enkitchening, Part 3

The benchtops were installed today, and the sink and cooktop put into place, though neither were hooked up.

You guys, it’s starting to look like we have a real kitchen now!

Benchtops 1

Benchtops 2

The cooktop was about the same size as our previous one, perhaps slightly narrower due to not needing the control knobs on the side, but it looks hilariously smaller since the benches are so much larger.

Partial enkitchening

The kitchen people were finished with the cabinetry today so we’re back at home!

And OH MY GOD, they have done an unbelievably good job. The kitchen looks amazing and they haven’t even put the benchtops on yet, nor done any of the tiling for the splashback (the blue and purple stripes in the picture are tape that they haven’t taken off yet).

Partial kitchen 2

Partial kitchen 1

It really shows up how shitty the old kitchen was (compare how this unfinished kitchen looks to the old one in my last post), and how utterly wasteful with space it was. There’s a bit less floor space than the old one, but so much more storage!

Kitchen and kitchenless

We’re getting a new kitchen, and today the tradies came around to rip the old one out. Naturally we had to take some before and after photos (well, I suppose more “during” since the “after” will be the finished new kitchen).

The original kitchen seems to have been done as cheaply as possible. Nothing quite fit properly and there were several places where there was just a piece of particle board to fill a gap between a cupboard and the wall. The oven is new because the glass door on the old one (a Bunnings “Homebrand”-equivalent that was here when we bought the place) exploded all over the floor and Kristina last year. The fridge is also staying because there’s absolutely nothing wrong with it. I bought it over eight years ago and it’s never given us the slightest bit of trouble.

Before 1

Before 2

And then there’s now the total lack of kitchen! The space actually feels smaller without the kitchen in it.

No kitchen 1

No kitchen 2

Everything except the benchtops are being put in next week, as the they have to wait on the carpentry to be done so they can be properly measured and ordered.

Photos

On a lark I did a Google search for “virtualwolf”, and once I got past the first handful of pages (links to main things like my Twitter, Flickr, etc.) I was fascinated to discover just how many of my photos were being used in news articles and the like. I’ve always obsessively tagged my photos so they’re pretty easy to search, but a couple of years ago I went and changed the licensing on most of them to the Creative Commons “ShareAlike” license. The thought process was mostly, I’m never going to earn any money from my photography and have no desire to anyway, so why not! Flickr has the ability to search for images with specific licenses, so I suspect that contributed a lot as well.

There’s quite the range of subjects—

It’s pretty gratifying, really.

Beanie’s dog training

We went to a doggy training class today, on the suggestion of the dog trainer we had over a couple of times. She thought that he would do fine whereas we thought he’d just melt down as soon as he saw the other dogs and we’d immediately have to leave.

We’ve never been happier to be wrong! He was initially extremely barky when the first dog arrived but as soon as he got a good butt-sniff in he settled right down. It was quite incredible! I took a few happy-snaps on my iPhone, of course. At the end the next class arrived, which was a puppy class, and Beanie was happily running around and snuffling them as well.

The actual “training” part didn’t go quite so well, mostly because he was more interested in running around with the other dogs than paying attention to us, but still!

beanie1

beanie2

beanie3

beanie4

beanie5

beanie6

Pictionary Against Humanity

We had some friends over for a barbecue and some games last night and invented something awesome*.

We’d recently bought our own set of Pictionary so were playing that with slightly modified rules whereby one person would be drawing and everyone else was guessing what it was (instead of playing in teams, mostly because we initially didn’t have a useful number of people for teams). Someone mentioned Cards Against Humanity, and Kristina and Millsy both simultaneously had the idea of PICTIONARY AGAINST HUMANITY. Instead of playing a black question card as in Cards Against Humanity and everyone putting down the white cards for answers, we’d have our own individual pile of white cards and would choose one and have to draw it and everyone else guessed the card we were drawing.

It’s seriously amazing. Our rules are as follows:

  • Each player gets a pile of 20-30 white cards and checks through them all to weed out the cards they couldn’t draw (the really weird abstract ones, etc.), then shuffles the pile face-down in front of them.
  • Going around the table in turns, each player takes a single white card from the top of their personal deck—without showing anyone—and attempts to draw it, and everyone else tries to guess the card (with the exact wording of that card). If the drawing player decides it’s too difficult to draw, they can put it in the discards pile and take another card from the top of their deck.
  • There’s a two-minute time limit for guesses, and if the time runs out without anyone guessing it, the same player picks up another card from their deck and attempts to draw it.
  • The person who correctly guesses the white card that was being drawn takes that card and puts it face-up in front of them, and at the end of the game whoever has the most face-up cards wins.

Same as in CaH, the “end of the game” is whenever you want it to be. The best tip is to make sure everyone has played enough CaH that they’re quite familiar with all the white cards. We have the base game plus the first through sixth expansions but the fifth and sixth ones were relatively recent additions and so there were a number of cards we’d either not seen before or hadn’t seen enough to remember. Those ones were just put straight into the discard pile.

It’s all the hilarity of Cards Against Humanity but with the added bonus of making really shitty stick figure drawings. Give it a try!

* Ok fine, I’m sure someone has thought of this before, but whatevs.

Seven years

The subject has come up on a few occasions recently of how long people have been married for (three years, two years, two months!), and my mind is blown anew each time when I point out that as of today we’ve been married for seven years!

I picture seven years in my head and I think, “Yeah, that’s a pretty good length of time”, but then I realise that’s how long we’ve been married and it just does not even remotely feel like it’s been that long. It’s witchcraft! Before we got married we always used to joke that we had time-warpy powers because we’d be doing something and a bunch of time would pass and it wouldn’t feel like it’d been several hours. The same powers have clearly continued into marriage!

<3

Hunter Valley farm stay

Kristina and I went up to the Hunter Valley for a long weekend last weekend. We stayed at a place called Hunter Hideaway Farm, and it was mostly nice but… a bit odd.

We arrived at about 2pm on Saturday, and there’s a long dirt road leading to the house that winds through fairly dense trees and bush. The lady that runs the place with her husband does ceramic sculptures and had put some of them on the trees and along the side of the dirt road as you start to get closer to the house. I understand the effect she was going for but it ended up just coming off as really creepy… a distinct “Someone who is insane and is going to kill you lives here” sort of vibe. It was even worse coming home after dinner when it was pitch black.

After that weirdness, we had just gotten inside when we heard a dog barking. We looked out the front door and there was a fairly sizeable dog barking loudly and in a very unfriendly manner at us. The husband rushed up and grabbed a hold of the dog’s collar, saying that the dog isn’t friendly and they weren’t expecting us yet (despite check-in being at 2, and why on earth would you have an unfriendly dog on a place that constantly has new people in it?!). After that he hauled the dog off into their house, but all of this was a slightly off-putting start to the vacation. The place had a kitchen in it, but it also had a sign saying that you needed to wash and clean and put away everything or there’d be a charge. I can understand not wanting people to leave the place as a complete mess but the sign was worded very passive-aggressively and really rubbed both of us the wrong way.

The view from the second story was pretty nice though.

View from the second floor

The farm itself is an actual working farm, they breed Angus cows and have some horses and a couple of ponies as well. One of the horses was very derpy, which was great, but the ponies were completely uninterested in people and apparently were also prone to biting.

AWW YEAH!

Ponies!

Neither of us drink wine, so we were mostly interested in the food of the area, but the first night’s dinner was underwhelming. It was at the Royal Oak Hotel and was recommended by the farm stay people but mine just wasn’t hugely flavourful and none of the flavours that were in Kristina’s dinner went together. The sheer distance that everything was from everything else was a bit annoying as well, not that that was entirely unexpected.

Saturday night’s weather was totally clear and a new moon as well, so the view of the stars was incredible; standing outside looking up at the Milky Way is always humbling.

The second day was spent doing some more wandering of the property in the morning (during which time that angry dog was out again and came running at us, but we just stood still and the wife came out and apologised and called him back, saying that he’s normally tied up—so maybe keep him tied up then), going out and buying lots of really nice cheese and chocolates, then relaxing and reading books in the afternoon. There was another, much friendlier, dog there that seems to have been a neighbour’s dog, and she was wandering around with us but mostly just running everywhere at full speed. There’s also an extremely picturesque lake that the cows enjoying sitting in and drinking from.

Running

Drinking

Sunset brought some really nice light and some great photos. The switch out of daylight savings was perfectly timed because we could admire the sunset and then go out to dinner, as opposed to all the gloriousness occurring while we were out.

Grasses

Horses running

Sunset

Sunday night’s dinner was amazing. We went to an Italian restaurant called Lillino’s, and it was one of those meals where just everything was perfect and it needed absolutely nothing—no extra salt, no extra parmesan, nothing. If you’re in the Hunter Valley you really need to go eat there.

It was definitely nice to get away from everything and spend some time relaxing and taking photos, but overall we’re not going to bother going back to the Hunter Valley, it’s not really our thing (and the farm stay was weird).

Home improvement: Curtain Edition

Lounge room with new curtains

We put up new curtains—and a new curtain rod—on the door leading out to the patio today, and it looks so much more cozy in here now (previously the window had on it the same horrible blue/grey straight-out-of-an-office vertical blinds that are still on the front window).

Kristina commented that it’s the first place she’s lived in that feels like an adult house, and it’s true… when renting you’re really just temporarily occupying someone else’s place for a period of time, whereas now we’re actually able to put our own mark on things and do what we want and it’s pretty great.

Stubbing services in other services with Sails.js

With all my Javascript learnings going on, I’ve also been learning about testing it. Most of my website consists of pulling in data from other places—Flickr, Tumblr, Last.fm, and my Ninja Block—and doing something with it, and when testing I don’t want to be making actual HTTP calls to each service (for one thing, Last.fm has a rate limit and it’s very easy to run into that when running a bunch of tests in quick succession which then causes your tests to all fail).

When someone looks at a page containing (say) my photos, the flow looks like this:

Request for page → PhotosController → PhotosService → jsonService → pull data from Flickr’s API

PhotosController is just a very thin wrapper that then talks to the PhotoService which is what calls jsonService to actually fetch the data from Flickr and then subsequently formats it all and sends it back to the controller, to go back to the browser. PhotosService is what needs the most tests due to it doing the most, but as mentioned above I don’t want it to actually make HTTP requests via jsonService. I read a bunch of stuff about mocks and stubs and a Javascript module called Sinon, such but didn’t find one single place that clearly explained how to get all this going when using Sails.js. I figured I’d write up what I did here, both for my future reference and for anyone else who runs into the same problem! This uses Mocha for running the tests and Chai for assertions, plus Sinon for stubbing.

Continue reading “Stubbing services in other services with Sails.js”

And now for something completely different: roast potatoes!

Growing up, we’d frequently go over to my grandma’s house on a Sunday evening for a full roast dinner. Roast beef, roast veggies, gravy, the works. Her roast potatoes were always amazing, they were wonderfully crispy on the outside and I never knew how she did it. Whatever my parents’ method is pales in comparison as they never get them at all crispy.

I made roast potatoes tonight following a recipe from Taste.com.au entitled The Best Roast Potatoes, and my god, they’re not joking. They’re almost identical to how my grandma’s used to come out! If you’re a fan of roast potatoes, you should definitely give that recipe a go.