Self-hosted Evernote Alternative

Self-hosted Evernote Alternative

I think I installed ownCloud in 2014 when v6 was the latest. It’s not perfect, but considering I have access to a virtual machine host for no cost, it’s pretty good value, and I’m willing to overlook the small issues I have with it.

I used Evernote for a while, and quite liked it, but fell further and further out of like with it as the features of the free version were stripped back, and the cost of the basic paid tier increased. $10 a month is pretty steep. I tried Google Keep for a while, but I didn’t like it at all. And do I trust my thoughts with Google? Yeah, kinda, but not completely.

In comes Joplin. A FOSS (free, open source software) note taking application that works with WebDAV (amongst other platforms/protocols).

ownCloud is fully conversant with WebDAV, which means that you can keep your notes safely stowed away on your ownCloud server, which is handy. I created a folder called Joplin in my ownCloud folder, then configured the software with the following settings, consistent across every platform (Android, Windows, and Ubuntu):

Synchronisation target: WebDAV
WebDAV URL: https://yourdomain.example/remote.php/webdav/Joplin (replace Joplin with the name of the folder your chose)
You also need to set your username and password, but they’re self-explanatory.

Installing Joplin on Ubuntu gave me a nice surprise. I ran “sudo snap install joplin” and it went through the motions of installing the software. But I couldn’t find it in the GUI to launch it. So I typed “joplin” at the terminal and a text-only version of Joplin appeared in terminal. Very good! I ran “sudo snap install joplin-desktop” and that installed the graphical version of the software and I was good to go.

Configuring the text only version of Joplin isn’t quite as easy as the graphical one. It’s a bit vi-y, which means that any commands you want to run are preceeded by a semi-colon. So, if you want to see the current configuration, type :config and press enter.

To configure the text version of Joplin to use WebDAV, first run

:config 6
to set the target to WebDAV, followed by

:config sync.6.path https://yourdomain.example/remote.php/webdav/Joplin
:config sync.6.username yourusername
:config sync.6.password yourpassword

The .6. in the config commands refers to target id of 6, which is what was set in the first command.

Run :sync to manually sync this instance to your server.

Bonus: in the ownCloud desktop application, untick the Joplin folder. This will remove it from your ownCloud folder on your local machine, but it will still exist on the server, which is where the Joplin applications will read it from directly. It will stop you from accidentally making a mess of the folder structure.

Switching Software

Switching Software

Microsoft Word. Adobe Photoshop. Whatsapp. Some software is so ubiquitous that you don’t even think that an alternative might be a good idea, or even exist. But often they do exist, and you should consider switching.

Why do I think you should switch? The two biggest reasons, are Google and Adobe. Adobe removed the ability to purchase software outright, forcing users into a monthly subscription. Google are just…well…Google. They sell your soul to the highest bidder.

I stopped using Google Analytics a few months ago on here, opting instead for a locally hosted Matomo analytics plugin, which does everything I want it to (and more). What it doesn’t do, which is the real drawcard, is send the analytics on to anyone else. The analytics are for me, and for me only.

I subscribe to a daily email called The Sizzle (, and today it alerted me to the website called Switching Software ( It’s super simple: look for the program you use, click on it, and it will tell you what the open source/free/non-evil/ethical alternatives that are available.

I’ve written about Signal before here: Why do I use Signal?, and it is one of the alternatives to WhatsApp – the one that I recommend. It has an edge over WhatsApp in that it will take over (if you want it to) as the default SMS app and allow you to keep SMS and Signal messages in the same encrypted database on your phone.

Switching Software mentions Matomo as the replacement for Google Analytics, along with another few options – a switch I already made.

I dumped Adobe for the Affinity software suite – which isn’t free, but all three applications cost $150 all up when they were on special, for a permanent licence.

I use OwnCloud instead of Dropbox. This is a faff, and not for everyone, because you have to host your own server. But if you have access to a machine that’s always online, it’s a good option.

I host my own mail server using Mail In A Box ( rather than relying on Gmail. Also a faff, because spam restrictions are so tight these days that if you aren’t one of the big players (Microsoft/Google) you’re very much a second class netizen. With patience and some polite emails to whatever spam filter is blocking you and it’s possible to get unblocked and then it works a treat.

It’s worth while investigating these. I’ve just downloaded kdenlive, a non-linear video editing application to replace Adobe Premiere Pro. I’ll see how it is and maybe post a review down the track.

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"




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 /
           ProxyPassReverse /
           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

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.


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 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.




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 (,, 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

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.

My Photography Workflow

My Photography Workflow

I found lots of posts about developing film at home, but it felt like they left out some details. I’ll, inevitably, also leave things out, but I’m going to have a crack at writing a comprehensive guide to getting as far as having a dry, clean, developed film, and throwing it into a scanner.

Step 1 was gathering all the equipment I needed. It seemed daunting initially, but it turns out that I didn’t actually need that much stuff. Links to products are just as examples, and are close (or exactly) what I’m using.

There’ll also be a short section on what I plan on doing next to make life a bit easier.

I have:

There are four (three) chemicals: Developer, Stop Bath, Fixer, and a wetting agent (this is optional, but it really helps). I use:

A Paterson Tank needs around 300ml of each chemical per film. The DD-X and Rapid Fixer both need to be diluted 1+4 (1 part concentrate, to 4 parts water). Doing some maths, you get 60ml of concentrate, and 240ml of water, to get to 300ml in total of developer.

The IlfoStop is 1+19, so to make 300ml you need 15ml IlfoStop and 285ml water.

The Photo-Flo is 1+199, so to make 300ml I need a splash of Photo-Flo and the rest in water – this is really not critical. It does, however, get a bit bubbly if you use too much, so I try to go easy on it.

Step 2 – I’ve been out and taken some photographs, and I’m back.

I get water to the right-ish temperature (a bit over 20°C is good) and mix my chemicals with that water and pour from the measuring cylinder into clearly labelled bottles. I then dry my work-space and get ready for the trickiest bit.

When I rewind your film from the camera, I listen closely to hear when the film has rewound to the point where it’s disconnected from the winder, but hasn’t gone so far that it’s gone all the way back into the cassette. This makes life easier, because I can start it on the spool in daylight.

I cut the end bit off the film to square it off, and feed it onto the spool until it’s gone past the ball bearings that are in the reels.

…and wind on a bit.

This spool goes into the changing bag together with the centre post, the tank, the tank lid, and your scissors. I’m sure it’s not necessary, but I always have both spools in the tank when I develop, even if it’s just one film in the tank.

Now’s the tricky bit. I stuff my hands into the zipped up changing bag, and find all the bits. I unspool the film from the cassette and onto the spool by turning one side of the spool back and forth, while also unwinding the film from the cassette. When I’ve reached the end, I snip it off with the scissors, wind on the rest of the film so it’s all the way on, and assemble the tank and make sure I lock the lid on properly. I say this, because one time I didn’t, and the lid came off during the developing process and it wasn’t ideal.

Everything comes out of the bag, and it’s time to measure the temperatures of the chemicals. The most important one is the developer – the others are less important.

I’ve been pretty lucky and have managed to hit 19 or 20°C each time, so haven’t needed to compensate too much with the timings. Referring to the developing time chart for the film, I get the time required for developing at 20°C, then use the compensation chart to calculate the actual time required at the actual temperature. Today I did an Ilford HP5+ 400 film, which, at 20°C with Ilford DD-X needs 9 minutes. My DD-X was at at 19°C, so needed 10 minutes with temperature compensation.

The next bit, when I did it the first time, felt quite stressful. It feels like there are a lot of things to do in a short amount of time. I ran the steps through in my head a few times, as practise, and it worked out fine. The hardest part was definitely unspooling the film and getting that done neatly.

I start the timer as I pour the last bit of developer in to the tank. I then put the second lid on the tank and invert the tank 4 times, then gently tap it on the desk once or twice to make sure that any bubbles trapped in the spool come out. Every minute I invert the tank four times, tap the bench with the tank, and spend the next 50 seconds preparing the next step.

Filling the tank
Inverting every minute

I start pouring the developer out in the last 10 seconds of the count-down, and once it’s all out, I pour in the Stop Bath. This only needs to be in for about 30 seconds, but I do make sure I swish it around thoroughly. Then I pour in the fixer which needs to be in for 3-5 minutes. I don’t know how important it is to invert this, but I make sure I do, just to make sure I get nice even coverage with the fixer.

When the time is up with the fixer, I start rinsing the film. I pour water, from the tap, into the top of the tank and let it pour for 5 to 10 minutes. It doesn’t need to flow fast, but I make sure I do a few tank-fulls of clean water first, and then leave the tap running for the 5 to 10 minutes. Then I pour in the Photo-Flo solution, give it a swish about, and pour it out.

NOW! It’s time! I can open the tank up and inspect the film. I open the spool up to remove the film, and carefully hang the film up to dry, taking care not to touch it until it’s completely dry.

One developed film, hanging up to dry

I would really like to get an immersion heater to keep the chemicals at the right temperature – I think that’s going to be my next investment. And maybe a more sensibly sized measuring cylinder.

Once the film is dry, I slice it into groups of 6 frames, and scan them with my Epson Perfection V330 Photo scanner. Making sure the glass is nice and clean. Removing every piece of lint is not easy, and I tell myself that the odd bit of lint adds character. Or something.