Getting an A+

Getting an A+

If I run this domain through Qualsys’s SSL Server test, I get an A+. Which feels like a good score. I followed someone else’s instructions on how to do this, but I can’t remember where that was, so I figure putting the configuration here will be handy for me and, potentially, you.

SSLEngine		on
SSLProtocol		all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite		HIGH:!aNULL:!MD5:!3DES
SSLHonorCipherOrder	on
SSLCompression		off
SSLOptions		+StrictRequire
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"

Ghost

Ghost

Background

I had a reason to see if I could get Ghost running alongside this WordPress install today, and it turns out that once you follow the correct and up-to-date instructions, it’s quite simple. I run Apache rather than nginx, so the default instructions don’t work. The magic happens with the RequestHeader line and the whole https component of the VirtualHost looks like this:

    <VirtualHost *:443>
            ServerAdmin webmaster@localhost

            ServerName ghostblog.domain

            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined

           ProxyPass / http://127.0.0.1:2368/
           ProxyPassReverse / http://127.0.0.1:2368/
           ProxyPreserveHost On
           RequestHeader Set X-Forwarded-Proto "https"


            Include /etc/letsencrypt/options-ssl-apache.conf
            SSLCertificateFile /etc/letsencrypt/live/ghostblog.domain/fullchain.pem
            SSLCertificateKeyFile /etc/letsencrypt/live/ghostblog.domain/privkey.pem
    </VirtualHost>

There’s also the redirect from http to https but I do that in a separate VirtualHost with a permanent redirect. Without the RequestHeader line, you end up with a lot of internal redirects when you try to access the site over https.

Following the official installation works well, and if it detects that nginx isn’t installed, Ghost-CLI will let you skip that part of the configuation and it trusts that you’ll figure it out some other way.

Ghost-CLI also performs the database configuration and stuff for you, assuming you know the/a MySQL username and password on your server.

Thoughts

I only had a cursory look inside Ghost and my first thought is that it’s so quick. Really, really quick. I’m tempted to move this site there. Or maybe I’ll make bitterswede.com a thing in Ghost and slowly migrate across. The main thing that’s getting in the way of moving over is that I’ve used a theme called Divi which I suspect has inserted a lot of garbage into posts made with the Divi Builder.

One day, maybe.

.

.

.

Vietnamese Inspired Chook

Vietnamese Inspired Chook

Throw everything into a blender:

Half a peeled brown onion
A 2.5 x 2.5 x 2.5 (ish!) cm cube of peeled ginger
2 cloves of garlic
2 tsp of sugar (probably optional)
2-3 tbsp of fish sauce and soy sauce
1 tbsp of chinese five-spice mix
1 birds eye chilli or similar
Some oil, and a cup or so of water

I also put some Kecap Manis in, but that’s probably not right. Not that this is authentic anyway.

Blend everything.

Marinate a kilo (or so) of chicken thighs for as long as you can. About an hour is enough, but longer will probably be better.

Cook on the open flame part of the BBQ until cooked (75°C is the safe temperature for chicken, apparently).

.

.

.

.

Building a Family Week Planner

Building a Family Week Planner

“Are you home Thursday night, or do you have yoga?”

“Are the kids going anywhere this weekend?”

“I’m sure I mentioned that!”

I’ve wanted to build a family week planner for ages that puts everyone’s week on a easy to read screen somewhere in the house. Maybe somewhat surprisingly, I’m not a big fan of home automation or a “smart” house, so I don’t want this thing to alert me in the morning that “Today J has five appointments blah blah”. I just want to be able to look at it every now and again and see what’s coming up.

I used to run an Exchange server for all my various email accounts, and that was good, but it started becoming an issue with out-of-date software. The option to move to O365 was there, but it feels expensive, especially since several of the accounts are for the kids and aren’t “serious” mailboxen.

I spun up a cheap (US$10/month) Ubuntu server on Linode and ran the setup script for Mail-in-a-Box, which has worked (touch wood) nearly perfectly since. The issues so far have been pretty minimal. Microsoft was blocking my IP address for all Outlook-themed email services (live.com, hotmail.com, etc), but emailing them asking them to stop worked. When I reboot the server, the Outlook app on an iPhone stops syncing, and the account has to be removed and re-added. I also need to figure out how to make it send calendar invites properly over email.

Considering I have about 10 mailboxen on there, I’m way ahead in terms of cost.

The Mail-in-a-Box script installs NextCloud (an OwnCloud fork), which has a WebDAV implementation for calendar and contacts.

Step 1 for getting a week planner up will be to figure out how to interrogate the CalDAV server with some sort of programming language. I’m comfortable with PHP, so that’s what I’m going to do it with. Specifically, using cURL from PHP and then stuffing the results into an array to display later.

A bit of reading and digging in the WebDAV standards has lead me to being able to grab calendar entries for an account on the serer with the following command:

curl --request REPORT --header "Depth: 1" --header "Content-Type: text/xml" --data "<c:calendar-query xmlns:d='DAV:' xmlns:c='urn:ietf:params:xml:ns:caldav'><d:prop><d:getetag /><c:calendar-data /></d:prop><c:filter><c:comp-filter name='VCALENDAR'><c:comp-filter name='VEVENT'><c:time-range start='20210218T000000' end='20210225T000000'/></c:comp-filter></c:comp-filter></c:filter></c:calendar-query>" --user nextclouduser:nextcloudpass https://box.example.com/cloud/remote.php/dav/calendars/nextclouduser/personal/

The time-range field will limit the calendar entries that will be grabbed based on the starting-time.

This spits forth a large blob of data that will be interrogated later.

There will be tricky things to over-come like multi-day events and the like, but based on some work I’ve done previously with a calendar and loading events, I think I have a plan.

That’s step 1 done.

Step 2 to come.

Medium Format Scanning

Medium Format Scanning

Finished Product

I’ve been meaning to building a medium format scanner for a while now. I had a dodgily cobbled together one that was difficult to use, and because things didn’t quite line up, the backlighting was quite uneven. I woke up with the solution just the other day, went to my local hardware store to pick up the few things (60, I think) that I’d need. Here’s what I bought, enough to build a ~290 mm x ~290 mm scanner (which has a useable area, depending on your lens (I’ll get to that later), big enough for a 4″ x 5″ negative (but probably an 8″ x 10″, too):

1 x sheet of 600 mm x 1,200 mm 12 mm plywood
4 x 1,200 mm long M10 threaded rods
40 x M10 flanged nuts (or normal nuts and washers, doesn’t matter)
Some wood-screws (I ended up needing 9 – just get a box)
White plastic chopping board, at least 260 mm x 260 mm
2 x 5/16″ coarse threaded bolts (you’ll probably need to cut them to get the right length)
A pane of glass (go to an op-shop and buy some old frames for a couple of bucks each)
Wood glue

The tools I used:

Tablesaw
Jigsaw
Drill-press
Drill
Various drill-bits
90° square
Angle-grinder (optional – I used it to fix an issue I created for myself)
Measuring tape
Spirit-level

Using the tablesaw, cut the plywood sheets into squares as big as you can/want/need. You need 3 at the very least, depending on a few things. I ended up using 5, but I will, down the track, replace one of them with a larger piece of chopping-board without a plywood frame.

Drilling the corner holes
A square hole cut

Drill a 10mm hole in each corner of the squares. Exactly where you choose in the corner doesn’t matter too much, but make sure you’re consistent. I used a 90° angle clamped to my drill-press to act as a jig.

Measure roughly the distance between edge and centre of the drill-hole and double it and draw a square here, to cut out with the jigsaw. Drill corner holes and cut in a straight-ish line between them.

Measure the distance from the bottom of the remote flash-shoe to the centre of the flash head. Measure the distance from the centre of the lens on the camera to the bottom of the camera body. My flash was taller than half of the rectangle, so it had to be mounted on a 45° angle.

Place your flash in roughly the right spot on one of the square boards and trace around it with a pencil. Cut this section out, leaving a gap so you can get to the underside of the flash and pop the flash off to easily adjust settings and the like. Glue and screw a small piece of plywood the right distance from the centre of the board. Drill a 6mm hole in it, and mount the remote flash shoe here with a 5/16″ screw cut to the right length.

Flash Shoe in place
Camera in place

Mark the centre of another square board and mark the distance from the centre of the lens to underside of camera. Cut a hole large enough for the lens to easily fit through. With some off-cuts of ply glue and clamp a decent chunk of them together to give the camera a strong platform to be screwed to. Once the glue has dried, drill a hole in a suitable location and attach to board lining it up with the base-of-camera line. (I’ve just noticed my camera isn’t quite square…will have to fix that).

Cut a hole a bit smaller than the size of your chopping board/diffuser for the and screw the diffuser to it. My next step will to find a chopping board large enough to not need a wooden frame around it.

There’s going to be a lot of turning of nuts coming up. If you have a soft wheel you can attach to a drill, this will make life a lot easier. See my method here: https://www.instagram.com/p/CDXoiYVjuhv/

Now it’s just a matter of assembling the tower.

Drive the screws onto the threaded bar to the right level, and use a spirit-level (or measuring tape) to make sure each level is…er….level.

From the bottom up it goes:

Flash -> Diffuser -> Empty Square -> Second Empty Square (Optional – explanation below) -> Camera at the very top.

The reason you might want a second empty square, is if you’re doing a lot of 4″ x 5″ negatives, and a lot of 6 cm x 7 cm negatives, you can have them at the right distance from the camera to maximise how much of the negative there is in the frame.

You’re done! Clamp the negative between the sheets of glass and snap a photo. It will need cropping and inverting, but there are hundreds of ways of skinning that cat, so to the Google Machine for that.

Result – Negative from sometime in 1960.