A painting table upgrade

I’ve posted previously about my mobile painting table setup (one, two) but one downside it’s always had is the table light I was using. It was nice and bright, but fairly harsh — at certain angles it’s very easy to be working in your own shadow — and because it was a halogen bulb it would get really hot, which in summer is decidedly unpleasant, even when inside with the air conditioning going.

I’d wanted to take advantage of LED strip lights for a while now to construct some sort of lighting system over the top of the table, and I decided that the Christmas break would be a good time to do it. We went to Bunnings today, and a bit of wood-cutting, drilling, screwing, and attaching later, I’m very pleased with the result!

The lights are Arlec attachable LEDs, they come in a 3-metre-long strip with adhesive tape on the back of them, and you can even cut them at specific points and use the included joiner cable to join the two pieces together. Unfortunately the connection is very finicky, and I wasn’t able to properly attach the ends of the joiner cable to the wood as I’d wanted because at the angle I need the other half of the light strip cuts out. 🙁 Hence the dodgy cable tie that you can just see at the left of the photo above. As long as I don’t jostle or move it it works fine though.

It casts a really nice even light, and while I think it might actually be a little bit dimmer than the old light, the lack of harsh shadows more than makes up for it — and if I decide in future that it’s too dim, I can just get some more LED lights and hook them up!

Coding my own personal version of Facebook’s Memories feature

I deleted my Facebook account way back somewhere around 2009, but the one thing that Kristina shows me that I think is a neat idea is the “memories” feature, where it shows posts from previous years on that day in particular. I realised I could very much code something up myself to accomplish the same thing, given I have Media posts going back to 2009.

And so I did! By default it’ll show all posts that were made on this exact same date in each previous year (if any), excluding today’s, and you can also pick an arbitrary date and view all posts on that date for each previous year as well.

I was originally going to have it send me an email each day, but I quickly realised I couldn’t be bothered dealing with HTML emails and so it ended up in its current state. It’s not perfect, I’m still wrestling with timezones — if you view the main Memories page before 11am Sydney time, you’ll get yesterday’s date because 11am Sydney time is currently when the day switches over to the new day when it’s UTC time. If I do specify a Sydney time in my code, the automated tests fail on Bitbucket Cloud because they’re all running in UTC. I’m sure it’s fixable, I just haven’t had the brain capacity to sit down and work it out. 😛 Between this and my tag browser, it’s been pretty fun seeing old posts I’d forgotten about.

Update 21st December: I found these two posts about timezones in Postgres, and between them and firing up two Docker containers in UTC time for testing — one for Postgres and one for my code — I managed to get it fully working! 🎉

Another vehicular upgrade!

We bought a new car today! A shiny new 1.5-litre Toyota Yaris in white.

We’d been thinking of selling the old (2000 model!) Corolla and getting a new car for a while, and a friend of a friend of Kristina’s had an urgent need for a replacement car so we actually sold the Corolla a couple of months ago and have been managing with just the Cerato in the meantime.

We decided to go test drive the Yaris, and Kristina immediately loved it. The turning circle is hilariously tiny, and the visibility is fantastic, so we put down a deposit in early November, and went and picked it up today! It has a surprising amount of pep for a 1.5L engine, more than what the old Corolla’s 1.8L had — though granted that was also 19 years old. You definitely feel less like you’re sitting in the car compared to the Cerato… with that, you’re down in the seats whereas the Yaris has a much higher-feeling seating position. We’re getting a carport added to the front of the house so the Yaris isn’t sitting out in the open all the time (we’re still going to be parking at the station), but that won’t be until early January, so hopefully we don’t get any hail before then!

Of coding and a history of iPhone photo filter apps

I had last week off work, mostly due to being in desperate need of a holiday, I didn’t go anywhere but just chilled out at home. I did do a bunch of coding on my website though!

I’d been using Tumblr to post my random snaps from 2009 to about 2016 or so and cross-posting them to Twitter, before I found that Tweetbot had custom image posting functionality where you could post images to a URL that replied with a specific format and Tweetbot would use those image URLs in its tweets. I added functionality for that on my website and had been saving tweets and images directly since 2016.

Last year, it occurred to me that I should import my posts from Tumblr to my website in order to have everything in one place. I obsessively tag my Flickr photos and as a result am able to find almost anything I’ve taken a photo of very quickly, and while I hadn’t quite gone to those same levels of tagging with Tumblr, all my posts there had at least some basic tags on them that I wanted to preserve when bringing them in to my website, so I had coded up a tags system for my Media page and a script to scrape the Tumblr API and suck the posts, images, and tags in. I also wrote a very simple little React app to be able to continue adding tags to new posts I’m making directly to my website.

The one thing that was missing was the ability to see all of the current tags, and to search by tag, so this past week I’ve been doing exactly that! I have a page that shows all the tags that exist with links to view just the posts tagged with a given tag, and on the front page the tags that a post has are clickable as well.

I realised I had mucked up the tagging on a few posts so was going through and re-tagging and updating them, and it struck me just how much I used to rely on those camera filter apps to hide how shit photos from old iPhones used to be. One of the ways I’d tagged my photos on Tumblr, and I’ve continued this even now with the new direct-posting-via-a-custom-iOS-shortcut that I’ve got set up on my iPhone, is with the name of app I used to edit the photo. Going roughly chronologically as I started using each app:

Instagram was only a very brief foray, and VSCOCam was by far my most-used app. Unfortunately it went downhill a couple of years ago and they Androidified it and now all of the icons are utterly inscrutable and you also can’t get RAW files taken from within the app back out again in anything but JPEG. Apparently there’s a thing called a VSCO Girl which I suspect is part of what happened there.

My most recent editing app prior to getting the iPhone 11 Pro has been Darkroom, it’s extremely slick and integrates directly with the regular photo library on your phone and offers a similar style of film-esque presets to VSCOCam, though fewer in number.

With the iPhone 11 Pro, however, the image quality is good enough that I don’t even feel the need to add obviously-film-looking presets to the images. I take the photo, hit the “Auto” button in Photos.app to add a bit of contrast, and usually use the “Vivid” preset to bring the colours up a bit, but otherwise they’re pretty natural-looking.

That said, I’ll probably end up heading back to Darkroom at some point as I do like my film aesthetic!

iPhone 11 Pro

I upgraded to the iPhone 7 nearly three years ago and was very impressed with the camera, and here I am again being impressed by the camera in a new iPhone! Or more specifically, three cameras, since the iPhone 11 Pro comes with 13mm full frame-equivalent, 26mm-equivalent, and 52mm-equivalent lenses.

I absolutely love the look of the iPhone 11 Pro, especially in Midnight Green as Apple has been using for a lot of its promo shots. Someone on Ars Technica described it thus and I think they really nailed it:

It’s a touch retro, a touch cyberpunk, with a hint of bounty hunter droid (somewhere between 4-LOM and IG-88)

The cameras themselves are extremely impressive as well. Sadly there’s (currently) no way to get RAW images out of the ultrawide 13mm-equivalent lens, so you’re stuck with JPEGs, but the images direct out of the phone are still quite impressive. I’ve gone for three walks on my lunch break so far, two with the ultrawide (1, 2) and one with the regular 26mm-equivalent shooting in RAW with Halide.

That last shot was taken with the telephone lens on the way home from the train station.

I’ve also found myself sharing way more photos on Mastodon lately thanks to the combination of image quality, ease of taking photos even in dim lighting (Night Mode is extremely good), combined with our 40Mbps upstream NBN HFC connection and the custom iOS shortcut I have to post things to my website before sending them to Mastodon. It’s all very frictionless.

Another fantastic part of this whole setup is using Lightroom and my Apple Pencil on my iPad Pro to fully edit photos I’ve taken with the iPhone and then send them on to Flickr. My standard for images to go on Flickr is ones that are Proper Photography, if you will, rather than just snapping an image of something that’s happening or something that’s cute, and of good quality. The iPhone 11 Pro delivers that in spades, and not having to use a computer for Proper Photography is an absolute delight. There’s still some kinks — I obsessively tag my photos on Flickr and Lightroom Classic on my computer has a big hierarchical list of tags that all get uploaded along with the image, and sadly there’s no hierarchical tagging available at all in Lightroom Mobile or CC, so I have to manually add them all after the fact — but it’s incredibly freeing nonetheless.

The iPhone 11 Pro is just effortlessly fast, whatever I want to do just happens immediately without any sort of needing to think about it. It was an extremely worthy upgrade from my trusty old iPhone 7!

Cardiovascular health and a new shiny: Apple Watch Series 5

We bought a treadmill back at the start of 2014 and it came with a heart rate monitor that you wear around your chest, which is pretty cool. I gave the treadmill a pretty good going and was doing one of those Couch to 5K programs, but I keep having issues with my knees where running messes one of them up. We bought an elliptical in May last year and I’ve been thoroughly enjoying using it. The one we have has a tablet holder right at eye level so I’ve been watching TV shows on Netflix while using it, and it really helps pass the time.

The downside was that I had no heart rate monitor, as the one that came with the treadmill only works with the treadmill (it shows your current heart rate right alongside the distance and estimated calories burned and such). I’d been going pretty hard on it but had noticed that I was getting some heart palpitations, and had a couple of feeling-dizzy moments a while after I’d finished exercising. I went to the doctor and she suggested cutting down on caffeine to start with — I was on four admittedly only instant coffees a day — and see if that improves things to start with, and if not we could get an EKG done.

Quite conveniently timed, the Apple Watch Series 5 was announced on the 10th of September this year, and it comes with an always-on display. Prior models had their display totally black and would only light up when you’d either raise your wrist or tap on the screen. I’d been eyeing the Apple Watch off for a couple of years, and finally decided I’d jump on board because it’d be usable as a regular watch even if the screen doesn’t fully light up. I got the 40m stainless steel with black leather Modern Buckle band and it looks classy as hell.

(I also realised after my first workout that I needed to get one of the cheaper non-leather bands as well because man do I get sweaty wrists when I’m exercising 😛).

Apple has been leaning pretty hard into the health thing with the Apple Watch in recent years, and as well as the heart rate monitor — which is constantly taking your heart rate periodically throughout the day as well as constantly when you start a workout — it comes with an app called “Activity” on the iPhone to help motivate you to keep moving. The way it works is that there’s three “rings” you should try to close each day, called Move, Exercise, and Stand. Move is just generally getting up and about and not sitting on your arse, and is set to 1422kJ for me based on my height and weight. Exercise is 30 minutes of brisk movement — I walk fast enough that I get a few minutes counted towards it each time I’m walking to or from the station or taking the stairs at work. The stand goal is standing up and moving for at least a minute during a one hour period for 12 separate hours during the day, and if you’ve been sitting around for 50 minutes in a given hour you get a little buzz on your wrist at ten minutes to the next hour that reminds you to stand up and move around a bit.

Apple must have done a whole lot of psychological research into what’s most satisfying in terms of motivation because god damn closing those rings feels good. You get a little round fireworks animation of the given colour of ring when you fully complete one for the day, and the one with all three when you’ve finished all of them. I bought the Watch on the 23rd of September and every single day since then I’ve closed all three rings! You get little badges called “Awards” when you complete certain goals, like getting a full week of closing all three rings, which has meant that when I’ve been working from home I’ve been jumping on the treadmill or elliptical for just a quick half hour to get my exercise goal done. I also downloaded an app for the Watch called HeartWatch that gives you a little speedometer of heart rate when you’re exercising and ensures you keep it in the correct zone — not too fast and not too slow — for what you’re trying to do, in my case just generally be fitter.

I completed October with every single day’s rings fully closed, which I’m pretty chuffed about!

A screenshot of the Activity app for Apple Watch showing every single day in October having all three rings closed

We’d also bought a set of smart scales last year that sync with the Health app on iOS, I’ve been weighing myself each morning and as a result of all of this fitness I’m hovering around 70.2kg, which is a weight I don’t recall being for many years now; I was at 82kg a few years back. The heart palpitations have definitely decreased as well and I haven’t had any dizziness since I’ve been monitoring what my heart rate has been while exercising.

I don’t do much by way of outdoor exercising, but the Apple Watches all come with GPS as well so you can keep maps of the routes you’ve taken and see the speed you did during each section. Overall I’m wildly impressed with this bit of technology! I hadn’t worn a watch since about 2001 when I got a job and bought my first mobile phone, but now I feel naked without it, haha.

A new hobby: Making bread!

A new hobby: Making bread!

Back in July and August, Kristina had been on a bit of a bread-making spree. We have an old bread machine that Kristina bought from Vinnies back in 2009 when she first moved over here from the US, and she’d been using that with varying amounts of success. I was talking to some of my co-workers and one of them recommended a book called Flour Water Salt Yeast and said you absolutely cannot go past it. I bought that for Kristina’s birthday, as well as the thing it says to bake the bread in, a Dutch oven.

It’s a really interesting book, even the most basic recipes only use a tiny amount of yeast (2 grams/½ a teaspoon), you don’t knead them, and the shortest recipe has the dough rising for five hours and proofing for another hour. You can get a good idea of how it all goes from the man himself, Ken Forkish.

As it turns out Kristina doesn’t really have the patience for it, so the bread-making has become my thing, and OH MY GOD THE BREAD FROM THIS BOOK. It is absolutely epic, nice and chewy like sourdough and the Dutch oven is the magic around how the crust comes out so good.

I’ve been doing a batch of bread almost every weekend now, and there’s something really enjoyable about the whole process. I’ve been tooting my efforts, get a load of all of this damn bread! The first two photos were the “Saturday White Bread” recipe where it’s done in one day, the third was the Overnight 40% (actually 35% and rye) Wholemeal Bread, and the last was the Overnight White Bread (which I screwed the timing up for because I didn’t read the recipe of when to start it and so had to put it into the fridge overnight so it didn’t rise too much, but it came out delicious anyway).

A magnificent-looking round brown crusty bread loaf.
A dark brown round loaf of bread covered in flour.
A brown absolutely delicious-looking round loaf of bread sitting on a cooling rack, with a light dusting of flour on it.
Two round loaves of bread on a cooling rack, the left one being noticeably browner than the right one.

An artistic update

An artistic update

I posted back in February about some of the stuff I’d been doing in Procreate on my iPad, and I’m overdue for another post! I haven’t been doing as much in the intervening months, as there’s been lots of other things taking up my time and I haven’t felt as inspired but I still managed to do a few.

I’ve quite enjoy using Procreate’s Acrylic brush, you can get some really nice layer and lighting effects with it, and I used only that brush for this one:

A painting of a window at night, from inside a room. There's sheer curtains over the window, a candle is on a small table at the right casting light, and there's a tall cupboard at the left in the shadows.
The Window

I don’t actually remember the brush I used for this next one, but I definitely took full advantage of Procreate’s symmetry guides so I could get it properly even:

A painting of a cybernetic woman, her eyes look like blue glass and she has green and very shiny "skin". She has a purple hood over the back of her head.
Cybernetic Woman

This next one is interesting, I was intending on the main structures that take up the top two-thirds of the image to look like a big craggy mountain range, but I showed it to Kristina and she can’t see it as anything but a tornado coming down!

A painting of a craggy grey mountain range in the top two-thirds of the image, with a river of fire making its way the whole way across the image, and a bunch of conifers at the bottom.
The River

I quite enjoy doing epic-looking landscapes, and this one ended up starting out in a very different place than it finished. It was much more brown, the feature in the middle was a river, and the sky was a sunset which I didn’t manage to get looking how I wanted. In the end it became very much inspired by the aesthetic of the Hive from Destiny!

A painting looking down a desolate grey rocky valley. A deep black rift runs down the middle with a sickly green glow at the bottom, at the left is a crystal embedded in the ground with the same green glow coming from it. At the right is a cave entrance in the valley wall with another glowing crystal. The sky is awash with stars, and the moon peeks from behind the valley peak at the far left.
The Emergence

The paintings above were all done from about March to half-way through May, then there was a bit of a break until July.

I decided to take advantage of Procreate’s drawing guide again, this time with the perspective guide. I was aiming for buildings in a futuristic city but the thing that I always struggle with is details and a sense of scale, so it didn’t turn out to be anything but big blocks. ? Still pleased with the shadows and sense of lighting though.

A very clean geometric painting of grey and blue city buildings. The sky is purple and the light is coming from the very right, the buildings casting shadows to the left.
City Buildings

This next one I did as “speed-painting”, and did it in about 45 minutes! It was a combination of the acrylic brush and a palette knife brush from a big third-party brush pack I bought.

A painting of a volcano erupting atop a hill, the hill is surrounded by taller mountains all around, and the sky above is filled with striated dark orange clouds.
Volcano

Then lastly, this one was done in August, again with Procreate’s symmetry guide on! I was going to give her a witch’s hat but couldn’t get it looking right.

A head and shoulders portrait painting of a white woman with piercing green eyes, long red hair, and dark green lipstick. She’s wearing a dark purple top, and there’s a bright light shining behind her that’s lighting up her shoulders and the very edges of her hair.
The Witch

I also had a burst of inspiration and got some more miniature painting done! I’m still working my way through the Dark Imperium box set I got nearly two years ago, but the main impetus here was Games Workshop releasing their “Contrast” line of paints. They’re essentially a base coat plus wash combined into one single coat, and they’re seriously incredible. Dark Imperium comes with twenty poxwalkers which I was dreading having to paint, but the Contrast paints made them far quicker to deal with! There’s twenty models (but only ten unique ones), and I’ve done half of them so far.

As part of doing this, I also discovered how much better the miniatures look when you apply a varnish to them! The Contrast paint specifically comes off a lot more easily than regular paint, so varnish is a necessity, but it also really makes the colours pop, they’re a lot more vibrant than without it.

Poxwalker 1
Poxwalker 2
Poxwalker 3
Poxwalker 4
Poxwalker 5

I also finally finished off the Plague Marine champion that’d been sitting there mostly-finished for months, and I’m really happy with the base I did. I had a bunch of really old Space Marines from a starter painting box that a friend had given me, so I sacrificed one of them and cut him up to adorn the base, and it looks absolutely fantastic.

Plague Marine Champion

It’s fascinating seeing the evolution of Games Workshop’s plastic miniatures, back when I started (*cough*24 years ago*cough*) plastic was the cheap and crappy option, and the pewter (or lead as they were back then!) miniatures were much more detailed. Nowadays it’s very much the reverse, the plastic is INSANELY detailed — have a look at the full-size poxwalkers on Flickr and zoom all the way in — and the pewter ones are a bit shit by comparison.

There’s also a small-scale Warhammer 40,000 game called Kill Team that I’ve started playing at work with some people, and have bought the new box set that was released in September. It’s similar to Shadespire in that your squads only have a small number of miniatures so it’s much more feasible to get them painted, but it comes with a bunch of absolutely amazing-looking terrain. I put it together and took a couple of photos prior to it being painted, just to get a sense of the scale and what the terrain looks like.

A photo of some Death Guard and Space Wolves miniatures on the new Kill Team starter box terrain. The terrain itself is unpainted grey plastic but is towering over the miniatures and has a very steampunk aesthetic to it.
A photo of some Death Guard and Space Wolves miniatures on the new Kill Team starter box terrain. The terrain itself is unpainted grey plastic but is towering over the miniatures and has a very steampunk aesthetic to it.

I’ve finished painting a couple of pieces of it, but it’s so big that I don’t have a large enough white backdrop that’ll fit the whole terrain piece! Photos will definitely be forthcoming once I do get said backdrop though. ?

More coding adventures: Migrating to TypeScript and Express.js

Three and a half years ago I blogged about learning Javascript and Node.js, and then again at the start of 2018 about my progress and also learning React, and I figured it was about time for another update! This time it’s been moving from Sails.js (which is a web framework based on Express.js) to using raw Express itself and moving the language from Javascript to TypeScript (TypeScript is basically Javascript, except with type-checking).

At work, we migrated the codebase of the server that runs our internal platform-as-a-service from Javascript to TypeScript, and I figured it seemed like a neat thing to learn. TypeScript ultimately gets compiled down to Javascript, and I started by trying to just write my Sails.js modules as TypeScript and have them compiled to Javascript in the locations that Sails expected them to be in, but this proved to be a fair bit of a pain so I figured I’d just go whole-hog and move to raw Express.js while I was at it.

I did a whole heap of reading, and ended up coming across this absolutely excellent series of blog posts that takes you through using Express and TypeScript step by step. It took about a month all up, and you can really see how much code was removed (this excludes Node’s package-lock.json file because it’s massive):

$ git diff --stat a95f378 47f7a56 -- . ':(exclude)package-lock.json'
[...]
 151 files changed, 2183 insertions(+), 4719 deletions(-)

My website looks absolutely no different in any way, shape, or form after all of this, but when writing code it’s quite nice having all of Visual Studio Code‘s smarts (things like complaining when you’ve missed a required parameter when calling a function, auto-completion, and on).

Having moved to raw Express.js from Sails.js means I have a much better understanding of how it all works under the bonnet… Sails is great for getting up and running quickly, but there’s a lot of magic that happens in order to accomplish that, and more than once I’ve run into the boundaries of where the magic ends and have had to try to hack my way around it. Express by itself is a lot more widely-used than Sails too, so if I run into problems I generally have an easier time finding an answer to it!

Twenty years of VirtualWolf

Today twenty years ago marks the earliest point I can find of where I started going by “VirtualWolf” online! That’s over half my life. 😮

I had posted previously back in 2009 (back when this blog was on LiveJournal) about being VirtualWolf online for around ten years at that point but it was pretty vague in terms of dates, and I’ve since consolidated all my old websites and put them up online. Further digging reminded me that I have a whole bunch of other sites that I never actually finished — I should add those to archive.virtualwolf.org too, now I think about it — and there was one called “DevlinSlayer’s Imperium” from February of 1999 so it was clearly after that.

The earliest mention of VirtualWolf I can find is from my Realm of the Wolf site from the 28th of June 1999, and the name of the Myth II map I’d created, “Realm of the VirtualWolf”. Unfortunately that file has been lost and I cannot for the life of me find the original anymore. I was able to recover all but one of my Marathon maps from various places, but I can’t even find the original pre-compiled image files for the Myth II map. The only image related is the overhead map view from the website I created after Realm of the Wolf.

Since that point, it’s been all VirtualWolf, all the time. I’ve owned the domain virtualwolf.org since the start of 2002, and have made a point of ensuring all the old links to images I’ve posted here and on Ars Technica still work even now.

Here’s to me making a post in twenty years saying “Forty years of VirtualWolf!”. 😛